diff --git a/src/SPC/builder/unix/library/gettext.php b/src/SPC/builder/unix/library/gettext.php index e20dd4f6a..281207f72 100644 --- a/src/SPC/builder/unix/library/gettext.php +++ b/src/SPC/builder/unix/library/gettext.php @@ -10,14 +10,21 @@ protected function build(): void { $extra = $this->builder->getLib('ncurses') ? ('--with-libncurses-prefix=' . BUILD_ROOT_PATH . ' ') : ''; $extra .= $this->builder->getLib('libxml2') ? ('--with-libxml2-prefix=' . BUILD_ROOT_PATH . ' ') : ''; + + $zts = $this->builder->getOption('enable-zts') ? '--enable-threads=isoc+posix ' : '--disable-threads '; + + $cflags = $this->builder->getOption('enable-zts') ? '-lpthread -D_REENTRANT' : ''; + $ldflags = $this->builder->getOption('enable-zts') ? '-lpthread' : ''; + shell()->cd($this->source_dir) - ->setEnv(['CFLAGS' => $this->getLibExtraCFlags(), 'LDFLAGS' => $this->getLibExtraLdFlags(), 'LIBS' => $this->getLibExtraLibs()]) + ->setEnv(['CFLAGS' => $this->getLibExtraCFlags() ?: $cflags, 'LDFLAGS' => $this->getLibExtraLdFlags() ?: $ldflags, 'LIBS' => $this->getLibExtraLibs()]) ->execWithEnv( './configure ' . '--enable-static ' . '--disable-shared ' . '--disable-java ' . '--disable-c+ ' . + $zts . $extra . '--with-included-gettext ' . '--with-libiconv-prefix=' . BUILD_ROOT_PATH . ' ' . diff --git a/src/SPC/command/BuildCliCommand.php b/src/SPC/command/BuildCliCommand.php index bc2147609..38184a79c 100644 --- a/src/SPC/command/BuildCliCommand.php +++ b/src/SPC/command/BuildCliCommand.php @@ -32,7 +32,6 @@ public function configure(): void $this->addOption('build-embed', null, null, 'Build embed SAPI'); $this->addOption('build-all', null, null, 'Build all SAPI'); $this->addOption('no-strip', null, null, 'build without strip, in order to debug and load external extensions'); - $this->addOption('enable-zts', null, null, 'enable ZTS support'); $this->addOption('disable-opcache-jit', null, null, 'disable opcache jit'); $this->addOption('with-config-file-path', null, InputOption::VALUE_REQUIRED, 'Set the path in which to look for php.ini', $isWindows ? null : '/usr/local/etc/php'); $this->addOption('with-config-file-scan-dir', null, InputOption::VALUE_REQUIRED, 'Set the directory to scan for .ini files after reading php.ini', $isWindows ? null : '/usr/local/etc/php/conf.d'); diff --git a/src/SPC/command/BuildCommand.php b/src/SPC/command/BuildCommand.php index bea9c119f..ef7a0197e 100644 --- a/src/SPC/command/BuildCommand.php +++ b/src/SPC/command/BuildCommand.php @@ -31,5 +31,6 @@ public function __construct(?string $name = null) $this->addOption('with-clean', null, null, 'fresh build, remove `source` dir before `make`'); $this->addOption('bloat', null, null, 'add all libraries into binary'); $this->addOption('rebuild', 'r', null, 'Delete old build and rebuild'); + $this->addOption('enable-zts', null, null, 'enable ZTS support'); } } diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index 64cda46d7..5c6ea7e0b 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -22,9 +22,9 @@ // test os (macos-13, macos-14, ubuntu-latest, windows-latest are available) $test_os = [ // 'macos-13', - // 'macos-14', - // 'ubuntu-latest', - 'windows-latest', + 'macos-14', + 'ubuntu-latest', + // 'windows-latest', ]; // whether enable thread safe @@ -40,8 +40,8 @@ // If you want to test your added extensions and libs, add below (comma separated, example `bcmath,openssl`). $extensions = match (PHP_OS_FAMILY) { - 'Linux', 'Darwin' => 'curl', - 'Windows' => 'curl', + 'Linux', 'Darwin' => 'gettext', + 'Windows' => 'gettext', }; // If you want to test lib-suggests feature with extension, add them below (comma separated, example `libwebp,libavif`).