From 911bc74bf44875f1b37617b9bda7557b3ab0a51d Mon Sep 17 00:00:00 2001 From: DubbleClick Date: Wed, 8 Oct 2025 08:16:54 +0200 Subject: [PATCH 01/12] add libedit --- config/ext.json | 2 +- config/source.json | 10 ++++++++++ src/SPC/builder/extension/readline.php | 7 +------ src/SPC/builder/linux/library/libedit.php | 15 +++++++++++++++ src/SPC/builder/macos/library/libedit.php | 15 +++++++++++++++ src/SPC/builder/unix/library/libedit.php | 20 ++++++++++++++++++++ 6 files changed, 62 insertions(+), 7 deletions(-) create mode 100644 src/SPC/builder/linux/library/libedit.php create mode 100644 src/SPC/builder/macos/library/libedit.php create mode 100644 src/SPC/builder/unix/library/libedit.php diff --git a/config/ext.json b/config/ext.json index 188aea58..9b8e92e8 100644 --- a/config/ext.json +++ b/config/ext.json @@ -687,7 +687,7 @@ "type": "builtin", "arg-type": "with-path", "lib-depends": [ - "readline" + "libedit" ], "target": [ "static" diff --git a/config/source.json b/config/source.json index 4a0e0fdb..a6639862 100644 --- a/config/source.json +++ b/config/source.json @@ -946,6 +946,16 @@ "path": "LICENSE" } }, + "libedit": { + "type": "filelist", + "url": "https://thrysoee.dk/editline/", + "regex": "/href=\"(?editline-(?[^\"]+)\\.tar\\.gz)\"/", + "provide-pre-built": true, + "license": { + "type": "file", + "path": "COPYING" + } + }, "readline": { "type": "filelist", "url": "https://ftp.gnu.org/pub/gnu/readline/", diff --git a/src/SPC/builder/extension/readline.php b/src/SPC/builder/extension/readline.php index a8ee48aa..c0dd3e65 100644 --- a/src/SPC/builder/extension/readline.php +++ b/src/SPC/builder/extension/readline.php @@ -23,12 +23,7 @@ class readline extends Extension public function getUnixConfigureArg(bool $shared = false): string { - $enable = '--without-libedit --with-readline=' . BUILD_ROOT_PATH; - if ($this->builder->getPHPVersionID() < 84000) { - // the check uses `char rl_pending_input()` instead of `extern int rl_pending_input`, which makes LTO fail - $enable .= ' ac_cv_lib_readline_rl_pending_input=yes'; - } - return $enable; + return '--with-libedit=' . BUILD_ROOT_PATH . ' --without-readline'; } public function buildUnixShared(): void diff --git a/src/SPC/builder/linux/library/libedit.php b/src/SPC/builder/linux/library/libedit.php new file mode 100644 index 00000000..eaa159f9 --- /dev/null +++ b/src/SPC/builder/linux/library/libedit.php @@ -0,0 +1,15 @@ +configure( + '--with-curses' + ) + ->make(); + $this->patchPkgconfPrefix(['libedit.pc']); + } +} From ffdc2dc85ace2ea27a13e5041bcaf47048fd6784 Mon Sep 17 00:00:00 2001 From: henderkes Date: Wed, 8 Oct 2025 08:18:43 +0200 Subject: [PATCH 02/12] fix #918 (use COPYING.LIB instead of COPYING for libiconv) --- config/source.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/source.json b/config/source.json index a6639862..fd138bbe 100644 --- a/config/source.json +++ b/config/source.json @@ -537,7 +537,7 @@ "provide-pre-built": true, "license": { "type": "file", - "path": "COPYING" + "path": "COPYING.LIB" } }, "libiconv-win": { From 4e2d4f3f05eae45d0c207f1ccfb38c1c2f04336b Mon Sep 17 00:00:00 2001 From: henderkes Date: Wed, 8 Oct 2025 08:47:48 +0200 Subject: [PATCH 03/12] fix ncurses build error (?: [] in case of false) --- src/SPC/builder/unix/library/ncurses.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/builder/unix/library/ncurses.php b/src/SPC/builder/unix/library/ncurses.php index 3899e559..27725c3d 100644 --- a/src/SPC/builder/unix/library/ncurses.php +++ b/src/SPC/builder/unix/library/ncurses.php @@ -38,7 +38,7 @@ trait ncurses ->make(); $final = FileSystem::scanDirFiles(BUILD_BIN_PATH, relative: true); // Remove the new files - $new_files = array_diff($final, $filelist); + $new_files = array_diff($final, $filelist ?: []); foreach ($new_files as $file) { @unlink(BUILD_BIN_PATH . '/' . $file); } From 31906b36e514f42f9d410de618d3ee805bf3a101 Mon Sep 17 00:00:00 2001 From: henderkes Date: Wed, 8 Oct 2025 08:48:30 +0200 Subject: [PATCH 04/12] reorder stuff for readline --- config/lib.json | 9 +++++++++ config/source.json | 20 ++++++++++---------- src/SPC/builder/extension/readline.php | 2 +- src/SPC/builder/unix/library/libedit.php | 4 +--- 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/config/lib.json b/config/lib.json index 37faca3c..1719914b 100644 --- a/config/lib.json +++ b/config/lib.json @@ -343,6 +343,15 @@ ], "cpp-library": true }, + "libedit": { + "source": "libedit", + "static-libs-unix": [ + "libedit.a" + ], + "lib-depends": [ + "ncurses" + ] + }, "libevent": { "source": "libevent", "static-libs-unix": [ diff --git a/config/source.json b/config/source.json index fd138bbe..c13820df 100644 --- a/config/source.json +++ b/config/source.json @@ -489,6 +489,16 @@ "path": "COPYING" } }, + "libedit": { + "type": "filelist", + "url": "https://thrysoee.dk/editline/", + "regex": "/href=\"(?libedit-(?[^\"]+)\\.tar\\.gz)\"/", + "provide-pre-built": true, + "license": { + "type": "file", + "path": "COPYING" + } + }, "libevent": { "type": "ghrel", "repo": "libevent/libevent", @@ -946,16 +956,6 @@ "path": "LICENSE" } }, - "libedit": { - "type": "filelist", - "url": "https://thrysoee.dk/editline/", - "regex": "/href=\"(?editline-(?[^\"]+)\\.tar\\.gz)\"/", - "provide-pre-built": true, - "license": { - "type": "file", - "path": "COPYING" - } - }, "readline": { "type": "filelist", "url": "https://ftp.gnu.org/pub/gnu/readline/", diff --git a/src/SPC/builder/extension/readline.php b/src/SPC/builder/extension/readline.php index c0dd3e65..ccf489cb 100644 --- a/src/SPC/builder/extension/readline.php +++ b/src/SPC/builder/extension/readline.php @@ -23,7 +23,7 @@ class readline extends Extension public function getUnixConfigureArg(bool $shared = false): string { - return '--with-libedit=' . BUILD_ROOT_PATH . ' --without-readline'; + return '--with-libedit --without-readline'; } public function buildUnixShared(): void diff --git a/src/SPC/builder/unix/library/libedit.php b/src/SPC/builder/unix/library/libedit.php index 8ac178c6..2f4c0dbc 100644 --- a/src/SPC/builder/unix/library/libedit.php +++ b/src/SPC/builder/unix/library/libedit.php @@ -11,9 +11,7 @@ trait libedit protected function build(): void { UnixAutoconfExecutor::create($this) - ->configure( - '--with-curses' - ) + ->configure() ->make(); $this->patchPkgconfPrefix(['libedit.pc']); } From 6b91570054e0f02f9eb1d19f6e2f30c0502725be Mon Sep 17 00:00:00 2001 From: henderkes Date: Wed, 8 Oct 2025 09:26:20 +0200 Subject: [PATCH 05/12] fix clang musl compilation --- src/SPC/builder/unix/library/libedit.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/SPC/builder/unix/library/libedit.php b/src/SPC/builder/unix/library/libedit.php index 2f4c0dbc..e436ee8b 100644 --- a/src/SPC/builder/unix/library/libedit.php +++ b/src/SPC/builder/unix/library/libedit.php @@ -11,6 +11,7 @@ trait libedit protected function build(): void { UnixAutoconfExecutor::create($this) + ->appendEnv(['CFLAGS' => '-D__STDC_ISO_10646__=201103L']) ->configure() ->make(); $this->patchPkgconfPrefix(['libedit.pc']); From 896cf889e4f30a21fea760742186e734b05c137e Mon Sep 17 00:00:00 2001 From: henderkes Date: Wed, 8 Oct 2025 09:27:04 +0200 Subject: [PATCH 06/12] test readline --- src/globals/test-extensions.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index 764cfc7d..2e8bc195 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -23,14 +23,14 @@ $test_php_version = [ // test os (macos-13, macos-14, macos-15, ubuntu-latest, windows-latest are available) $test_os = [ - 'macos-13', // bin/spc for x86_64 + // 'macos-13', // bin/spc for x86_64 // 'macos-14', // bin/spc for arm64 'macos-15', // bin/spc for arm64 'ubuntu-latest', // bin/spc-alpine-docker for x86_64 'ubuntu-22.04', // bin/spc-gnu-docker for x86_64 - // 'ubuntu-24.04', // bin/spc for x86_64 + 'ubuntu-24.04', // bin/spc for x86_64 'ubuntu-22.04-arm', // bin/spc-gnu-docker for arm64 - // 'ubuntu-24.04-arm', // bin/spc for arm64 + 'ubuntu-24.04-arm', // bin/spc for arm64 // 'windows-latest', // .\bin\spc.ps1 ]; @@ -50,7 +50,7 @@ $prefer_pre_built = false; // If you want to test your added extensions and libs, add below (comma separated, example `bcmath,openssl`). $extensions = match (PHP_OS_FAMILY) { - 'Linux', 'Darwin' => 'bcmath', + 'Linux', 'Darwin' => 'readline', 'Windows' => 'bcmath,bz2,calendar,ctype,curl,dom,exif,fileinfo,filter,ftp,iconv,xml,mbstring,mbregex,mysqlnd,openssl,pdo,pdo_mysql,pdo_sqlite,phar,session,simplexml,soap,sockets,sqlite3,tokenizer,xmlwriter,xmlreader,zlib,zip', }; From f0c39c17709ab62ccec6a2fa2b87737346ebe046 Mon Sep 17 00:00:00 2001 From: henderkes Date: Wed, 8 Oct 2025 09:46:20 +0200 Subject: [PATCH 07/12] fix #19871 --- src/SPC/builder/extension/readline.php | 29 ++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/SPC/builder/extension/readline.php b/src/SPC/builder/extension/readline.php index ccf489cb..70829aff 100644 --- a/src/SPC/builder/extension/readline.php +++ b/src/SPC/builder/extension/readline.php @@ -7,6 +7,7 @@ namespace SPC\builder\extension; use SPC\builder\Extension; use SPC\store\FileSystem; use SPC\util\CustomExt; +use SPC\util\SPCTarget; #[CustomExt('readline')] class readline extends Extension @@ -34,4 +35,32 @@ class readline extends Extension } parent::buildUnixShared(); } + + public function patchBeforeMake(): bool + { + if (SPCTarget::getTargetOS() === 'Linux' && SPCTarget::isStatic() && $this->builder->getOption('build-cli')) { + FileSystem::replaceFileStr( + SOURCE_PATH . '/php-src/ext/readline/readline_cli.c', + "/*\n#ifdef COMPILE_DL_READLINE", + "#ifdef COMPILE_DL_READLINE\n/*" + ); + FileSystem::replaceFileRegex( + SOURCE_PATH . '/php-src/ext/readline/readline_cli.c', + '/\/\*#else\s+?#define GET_SHELL_CB\(cb\) \(cb\) = php_cli_get_shell_callbacks\(\)\s+#endif\*\//s', + "#else\n#define GET_SHELL_CB(cb) (cb) = php_cli_get_shell_callbacks()\n#endif" + ); + } else { + FileSystem::replaceFileStr( + SOURCE_PATH . '/php-src/ext/readline/readline_cli.c', + "#ifdef COMPILE_DL_READLINE\n/*", + "/*\n#ifdef COMPILE_DL_READLINE" + ); + FileSystem::replaceFileRegex( + SOURCE_PATH . '/php-src/ext/readline/readline_cli.c', + '/#else\s+?#define GET_SHELL_CB\(cb\) \(cb\) = php_cli_get_shell_callbacks\(\)\s+#endif/s', + "/*#else\n#define GET_SHELL_CB(cb) (cb) = php_cli_get_shell_callbacks()\n#endif*/" + ); + } + return false; + } } From 565ac87b65164504575b358a7d7ba5cce9d2068f Mon Sep 17 00:00:00 2001 From: henderkes Date: Wed, 8 Oct 2025 10:05:02 +0200 Subject: [PATCH 08/12] only apply readline fix for CLI compilation on linux --- src/SPC/builder/extension/readline.php | 23 ++++++----------------- src/SPC/builder/linux/LinuxBuilder.php | 3 +++ 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/src/SPC/builder/extension/readline.php b/src/SPC/builder/extension/readline.php index 70829aff..fdfa87c6 100644 --- a/src/SPC/builder/extension/readline.php +++ b/src/SPC/builder/extension/readline.php @@ -36,31 +36,20 @@ class readline extends Extension parent::buildUnixShared(); } - public function patchBeforeMake(): bool + public static function patchCliLinux(bool $revert = false): void { - if (SPCTarget::getTargetOS() === 'Linux' && SPCTarget::isStatic() && $this->builder->getOption('build-cli')) { + if (SPCTarget::getTargetOS() === 'Linux' && SPCTarget::isStatic() && !$revert) { FileSystem::replaceFileStr( SOURCE_PATH . '/php-src/ext/readline/readline_cli.c', - "/*\n#ifdef COMPILE_DL_READLINE", - "#ifdef COMPILE_DL_READLINE\n/*" - ); - FileSystem::replaceFileRegex( - SOURCE_PATH . '/php-src/ext/readline/readline_cli.c', - '/\/\*#else\s+?#define GET_SHELL_CB\(cb\) \(cb\) = php_cli_get_shell_callbacks\(\)\s+#endif\*\//s', - "#else\n#define GET_SHELL_CB(cb) (cb) = php_cli_get_shell_callbacks()\n#endif" + "/*#else\n#define GET_SHELL_CB(cb) (cb) = php_cli_get_shell_callbacks()", + "#define GET_SHELL_CB(cb) (cb) = php_cli_get_shell_callbacks()\n/*#else", ); } else { FileSystem::replaceFileStr( SOURCE_PATH . '/php-src/ext/readline/readline_cli.c', - "#ifdef COMPILE_DL_READLINE\n/*", - "/*\n#ifdef COMPILE_DL_READLINE" - ); - FileSystem::replaceFileRegex( - SOURCE_PATH . '/php-src/ext/readline/readline_cli.c', - '/#else\s+?#define GET_SHELL_CB\(cb\) \(cb\) = php_cli_get_shell_callbacks\(\)\s+#endif/s', - "/*#else\n#define GET_SHELL_CB(cb) (cb) = php_cli_get_shell_callbacks()\n#endif*/" + "#define GET_SHELL_CB(cb) (cb) = php_cli_get_shell_callbacks()\n/*#else", + "/*#else\n#define GET_SHELL_CB(cb) (cb) = php_cli_get_shell_callbacks()", ); } - return false; } } diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index b1b1ffc5..5620b6ee 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace SPC\builder\linux; +use SPC\builder\extension\readline; use SPC\builder\unix\UnixBuilderBase; use SPC\exception\PatchException; use SPC\exception\WrongUsageException; @@ -170,10 +171,12 @@ class LinuxBuilder extends UnixBuilderBase protected function buildCli(): void { $vars = SystemUtil::makeEnvVarString($this->getMakeExtraVars()); + readline::patchCliLinux(); $SPC_CMD_PREFIX_PHP_MAKE = getenv('SPC_CMD_PREFIX_PHP_MAKE') ?: 'make'; shell()->cd(SOURCE_PATH . '/php-src') ->exec('sed -i "s|//lib|/lib|g" Makefile') ->exec("{$SPC_CMD_PREFIX_PHP_MAKE} {$vars} cli"); + readline::patchCliLinux(true); if (!$this->getOption('no-strip', false)) { shell()->cd(SOURCE_PATH . '/php-src/sapi/cli')->exec('strip --strip-unneeded php'); From b9dfb5afe304862963458a1f6e1e63c26f15132f Mon Sep 17 00:00:00 2001 From: henderkes Date: Wed, 8 Oct 2025 10:17:14 +0200 Subject: [PATCH 09/12] maybe better this way --- src/SPC/builder/extension/readline.php | 4 ++-- src/SPC/builder/linux/LinuxBuilder.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/SPC/builder/extension/readline.php b/src/SPC/builder/extension/readline.php index fdfa87c6..b9afd4f9 100644 --- a/src/SPC/builder/extension/readline.php +++ b/src/SPC/builder/extension/readline.php @@ -36,9 +36,9 @@ class readline extends Extension parent::buildUnixShared(); } - public static function patchCliLinux(bool $revert = false): void + public static function patchCliLinux(bool $patch): void { - if (SPCTarget::getTargetOS() === 'Linux' && SPCTarget::isStatic() && !$revert) { + if (SPCTarget::getTargetOS() === 'Linux' && SPCTarget::isStatic() && $patch) { FileSystem::replaceFileStr( SOURCE_PATH . '/php-src/ext/readline/readline_cli.c', "/*#else\n#define GET_SHELL_CB(cb) (cb) = php_cli_get_shell_callbacks()", diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index 5620b6ee..17bb1c5e 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -171,12 +171,12 @@ class LinuxBuilder extends UnixBuilderBase protected function buildCli(): void { $vars = SystemUtil::makeEnvVarString($this->getMakeExtraVars()); - readline::patchCliLinux(); + readline::patchCliLinux(true); $SPC_CMD_PREFIX_PHP_MAKE = getenv('SPC_CMD_PREFIX_PHP_MAKE') ?: 'make'; shell()->cd(SOURCE_PATH . '/php-src') ->exec('sed -i "s|//lib|/lib|g" Makefile') ->exec("{$SPC_CMD_PREFIX_PHP_MAKE} {$vars} cli"); - readline::patchCliLinux(true); + readline::patchCliLinux(false); if (!$this->getOption('no-strip', false)) { shell()->cd(SOURCE_PATH . '/php-src/sapi/cli')->exec('strip --strip-unneeded php'); From 330c3486af94ef49ffd915a8749bc84a4c11d8f0 Mon Sep 17 00:00:00 2001 From: henderkes Date: Wed, 8 Oct 2025 10:45:23 +0200 Subject: [PATCH 10/12] extra readline check to make sure -a works --- src/SPC/builder/Extension.php | 4 ++-- src/SPC/builder/extension/readline.php | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/SPC/builder/Extension.php b/src/SPC/builder/Extension.php index ac7efd1e..4965e8ac 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -298,7 +298,7 @@ class Extension // Run compile check if build target is cli // If you need to run some check, overwrite this or add your assert in src/globals/ext-tests/{extension_name}.php $sharedExtensions = $this->getSharedExtensionLoadString(); - [$ret, $out] = shell()->execWithResult(BUILD_BIN_PATH . '/php -n' . $sharedExtensions . ' --ri "' . $this->getDistName() . '"'); + [$ret] = shell()->execWithResult(BUILD_BIN_PATH . '/php -n' . $sharedExtensions . ' --ri "' . $this->getDistName() . '"'); if ($ret !== 0) { throw new ValidationException( "extension {$this->getName()} failed compile check: php-cli returned {$ret}", @@ -328,7 +328,7 @@ class Extension { // Run compile check if build target is cli // If you need to run some check, overwrite this or add your assert in src/globals/ext-tests/{extension_name}.php - [$ret] = cmd()->execWithResult(BUILD_ROOT_PATH . '/bin/php.exe -n --ri "' . $this->getDistName() . '"', false); + [$ret] = cmd()->execWithResult(BUILD_BIN_PATH . '/php.exe -n --ri "' . $this->getDistName() . '"', false); if ($ret !== 0) { throw new ValidationException("extension {$this->getName()} failed compile check: php-cli returned {$ret}", validation_module: "Extension {$this->getName()} sanity check"); } diff --git a/src/SPC/builder/extension/readline.php b/src/SPC/builder/extension/readline.php index b9afd4f9..b12e8b89 100644 --- a/src/SPC/builder/extension/readline.php +++ b/src/SPC/builder/extension/readline.php @@ -5,6 +5,7 @@ declare(strict_types=1); namespace SPC\builder\extension; use SPC\builder\Extension; +use SPC\exception\ValidationException; use SPC\store\FileSystem; use SPC\util\CustomExt; use SPC\util\SPCTarget; @@ -36,6 +37,15 @@ class readline extends Extension parent::buildUnixShared(); } + public function runCliCheckUnix(): void + { + parent::runCliCheckUnix(); + [$ret, $out] = shell()->execWithResult('printf "exit\n" | ' . BUILD_BIN_PATH . '/php -a'); + if ($ret !== 0 || !str_contains(implode("\n", $out), 'Interactive shell')) { + throw new ValidationException("readline extension failed sanity check. Code: {$ret}, output: " . implode("\n", $out)); + } + } + public static function patchCliLinux(bool $patch): void { if (SPCTarget::getTargetOS() === 'Linux' && SPCTarget::isStatic() && $patch) { From 65948115363356fb024d63e8b55aa2d202c61e9c Mon Sep 17 00:00:00 2001 From: henderkes Date: Wed, 8 Oct 2025 11:48:40 +0200 Subject: [PATCH 11/12] remove pointless SPC_CMD_PREFIX_PHP_MAKE --- config/env.ini | 4 -- src/SPC/builder/extension/readline.php | 18 --------- src/SPC/builder/linux/LinuxBuilder.php | 52 +++++++++++++------------- src/SPC/builder/macos/MacOSBuilder.php | 18 +++++---- 4 files changed, 35 insertions(+), 57 deletions(-) diff --git a/config/env.ini b/config/env.ini index 4b9f294a..35941f68 100644 --- a/config/env.ini +++ b/config/env.ini @@ -104,8 +104,6 @@ SPC_MICRO_PATCHES=cli_checks,disable_huge_page SPC_CMD_PREFIX_PHP_BUILDCONF="./buildconf --force" ; configure command SPC_CMD_PREFIX_PHP_CONFIGURE="./configure --prefix= --with-valgrind=no --disable-shared --enable-static --disable-all --disable-phpdbg --with-pic" -; make command -SPC_CMD_PREFIX_PHP_MAKE="make -j${SPC_CONCURRENCY}" ; *** default build vars for building php *** ; embed type for php, static (libphp.a) or shared (libphp.so) @@ -138,8 +136,6 @@ SPC_MICRO_PATCHES=cli_checks,macos_iconv SPC_CMD_PREFIX_PHP_BUILDCONF="./buildconf --force" ; configure command SPC_CMD_PREFIX_PHP_CONFIGURE="./configure --prefix= --with-valgrind=no --enable-shared=no --enable-static=yes --disable-all --disable-phpdbg" -; make command -SPC_CMD_PREFIX_PHP_MAKE="make -j${SPC_CONCURRENCY}" ; *** default build vars for building php *** ; embed type for php, static (libphp.a) or shared (libphp.dylib) diff --git a/src/SPC/builder/extension/readline.php b/src/SPC/builder/extension/readline.php index b12e8b89..035d7b43 100644 --- a/src/SPC/builder/extension/readline.php +++ b/src/SPC/builder/extension/readline.php @@ -8,7 +8,6 @@ use SPC\builder\Extension; use SPC\exception\ValidationException; use SPC\store\FileSystem; use SPC\util\CustomExt; -use SPC\util\SPCTarget; #[CustomExt('readline')] class readline extends Extension @@ -45,21 +44,4 @@ class readline extends Extension throw new ValidationException("readline extension failed sanity check. Code: {$ret}, output: " . implode("\n", $out)); } } - - public static function patchCliLinux(bool $patch): void - { - if (SPCTarget::getTargetOS() === 'Linux' && SPCTarget::isStatic() && $patch) { - FileSystem::replaceFileStr( - SOURCE_PATH . '/php-src/ext/readline/readline_cli.c', - "/*#else\n#define GET_SHELL_CB(cb) (cb) = php_cli_get_shell_callbacks()", - "#define GET_SHELL_CB(cb) (cb) = php_cli_get_shell_callbacks()\n/*#else", - ); - } else { - FileSystem::replaceFileStr( - SOURCE_PATH . '/php-src/ext/readline/readline_cli.c', - "#define GET_SHELL_CB(cb) (cb) = php_cli_get_shell_callbacks()\n/*#else", - "/*#else\n#define GET_SHELL_CB(cb) (cb) = php_cli_get_shell_callbacks()", - ); - } - } } diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index daa0f93b..b2e515eb 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -4,7 +4,6 @@ declare(strict_types=1); namespace SPC\builder\linux; -use SPC\builder\extension\readline; use SPC\builder\unix\UnixBuilderBase; use SPC\exception\PatchException; use SPC\exception\WrongUsageException; @@ -106,18 +105,18 @@ class LinuxBuilder extends UnixBuilderBase $this->seekPhpSrcLogFileOnException(fn () => shell()->cd(SOURCE_PATH . '/php-src')->exec( $php_configure_env . ' ' . - getenv('SPC_CMD_PREFIX_PHP_CONFIGURE') . ' ' . - ($enableCli ? '--enable-cli ' : '--disable-cli ') . - ($enableFpm ? '--enable-fpm ' . ($this->getLib('libacl') !== null ? '--with-fpm-acl ' : '') : '--disable-fpm ') . - ($enableEmbed ? "--enable-embed={$embed_type} " : '--disable-embed ') . - ($enableMicro ? '--enable-micro=all-static ' : '--disable-micro ') . - ($enableCgi ? '--enable-cgi ' : '--disable-cgi ') . - $config_file_path . - $config_file_scan_dir . - $json_74 . - $zts . - $maxExecutionTimers . - $this->makeStaticExtensionArgs() . ' ' + getenv('SPC_CMD_PREFIX_PHP_CONFIGURE') . ' ' . + ($enableCli ? '--enable-cli ' : '--disable-cli ') . + ($enableFpm ? '--enable-fpm ' . ($this->getLib('libacl') !== null ? '--with-fpm-acl ' : '') : '--disable-fpm ') . + ($enableEmbed ? "--enable-embed={$embed_type} " : '--disable-embed ') . + ($enableMicro ? '--enable-micro=all-static ' : '--disable-micro ') . + ($enableCgi ? '--enable-cgi ' : '--disable-cgi ') . + $config_file_path . + $config_file_scan_dir . + $json_74 . + $zts . + $maxExecutionTimers . + $this->makeStaticExtensionArgs() . ' ' )); $this->emitPatchPoint('before-php-make'); @@ -170,18 +169,17 @@ class LinuxBuilder extends UnixBuilderBase */ protected function buildCli(): void { - if ($this->getExt('readline')) { + if ($this->getExt('readline') && SPCTarget::isStatic()) { SourcePatcher::patchFile('musl_static_readline.patch', SOURCE_PATH . '/php-src'); } + $vars = SystemUtil::makeEnvVarString($this->getMakeExtraVars()); - readline::patchCliLinux(true); - $SPC_CMD_PREFIX_PHP_MAKE = getenv('SPC_CMD_PREFIX_PHP_MAKE') ?: 'make'; + $concurrency = getenv('SPC_CONCURRENCY') ? '-j' . getenv('SPC_CONCURRENCY') : ''; shell()->cd(SOURCE_PATH . '/php-src') ->exec('sed -i "s|//lib|/lib|g" Makefile') - ->exec("{$SPC_CMD_PREFIX_PHP_MAKE} {$vars} cli"); - readline::patchCliLinux(false); + ->exec("make {$concurrency} {$vars} cli"); - if ($this->getExt('readline')) { + if ($this->getExt('readline') && SPCTarget::isStatic()) { SourcePatcher::patchFile('musl_static_readline.patch', SOURCE_PATH . '/php-src', true); } @@ -199,10 +197,10 @@ class LinuxBuilder extends UnixBuilderBase protected function buildCgi(): void { $vars = SystemUtil::makeEnvVarString($this->getMakeExtraVars()); - $SPC_CMD_PREFIX_PHP_MAKE = getenv('SPC_CMD_PREFIX_PHP_MAKE') ?: 'make'; + $concurrency = getenv('SPC_CONCURRENCY') ? '-j' . getenv('SPC_CONCURRENCY') : ''; shell()->cd(SOURCE_PATH . '/php-src') ->exec('sed -i "s|//lib|/lib|g" Makefile') - ->exec("{$SPC_CMD_PREFIX_PHP_MAKE} {$vars} cgi"); + ->exec("make {$concurrency} {$vars} cgi"); if (!$this->getOption('no-strip', false)) { shell()->cd(SOURCE_PATH . '/php-src/sapi/cgi')->exec('strip --strip-unneeded php-cgi'); @@ -234,11 +232,11 @@ class LinuxBuilder extends UnixBuilderBase // patch fake cli for micro $vars['EXTRA_CFLAGS'] .= $enable_fake_cli; $vars = SystemUtil::makeEnvVarString($vars); - $SPC_CMD_PREFIX_PHP_MAKE = getenv('SPC_CMD_PREFIX_PHP_MAKE') ?: 'make'; + $concurrency = getenv('SPC_CONCURRENCY') ? '-j' . getenv('SPC_CONCURRENCY') : ''; shell()->cd(SOURCE_PATH . '/php-src') ->exec('sed -i "s|//lib|/lib|g" Makefile') - ->exec("{$SPC_CMD_PREFIX_PHP_MAKE} {$vars} micro"); + ->exec("make {$concurrency} {$vars} micro"); $this->processMicroUPX(); @@ -255,10 +253,10 @@ class LinuxBuilder extends UnixBuilderBase protected function buildFpm(): void { $vars = SystemUtil::makeEnvVarString($this->getMakeExtraVars()); - $SPC_CMD_PREFIX_PHP_MAKE = getenv('SPC_CMD_PREFIX_PHP_MAKE') ?: 'make'; + $concurrency = getenv('SPC_CONCURRENCY') ? '-j' . getenv('SPC_CONCURRENCY') : ''; shell()->cd(SOURCE_PATH . '/php-src') ->exec('sed -i "s|//lib|/lib|g" Makefile') - ->exec("{$SPC_CMD_PREFIX_PHP_MAKE} {$vars} fpm"); + ->exec("make {$concurrency} {$vars} fpm"); if (!$this->getOption('no-strip', false)) { shell()->cd(SOURCE_PATH . '/php-src/sapi/fpm')->exec('strip --strip-unneeded php-fpm'); @@ -276,11 +274,11 @@ class LinuxBuilder extends UnixBuilderBase protected function buildEmbed(): void { $vars = SystemUtil::makeEnvVarString($this->getMakeExtraVars()); - + $concurrency = getenv('SPC_CONCURRENCY') ? '-j' . getenv('SPC_CONCURRENCY') : ''; shell()->cd(SOURCE_PATH . '/php-src') ->exec('sed -i "s|//lib|/lib|g" Makefile') ->exec('sed -i "s|^EXTENSION_DIR = .*|EXTENSION_DIR = /' . basename(BUILD_MODULES_PATH) . '|" Makefile') - ->exec(getenv('SPC_CMD_PREFIX_PHP_MAKE') . ' INSTALL_ROOT=' . BUILD_ROOT_PATH . " {$vars} install"); + ->exec("make {$concurrency} INSTALL_ROOT=" . BUILD_ROOT_PATH . " {$vars} install"); $ldflags = getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_LDFLAGS') ?: ''; $libDir = BUILD_LIB_PATH; diff --git a/src/SPC/builder/macos/MacOSBuilder.php b/src/SPC/builder/macos/MacOSBuilder.php index ef7b303b..39f91e38 100644 --- a/src/SPC/builder/macos/MacOSBuilder.php +++ b/src/SPC/builder/macos/MacOSBuilder.php @@ -186,8 +186,8 @@ class MacOSBuilder extends UnixBuilderBase $vars = SystemUtil::makeEnvVarString($this->getMakeExtraVars()); $shell = shell()->cd(SOURCE_PATH . '/php-src'); - $SPC_CMD_PREFIX_PHP_MAKE = getenv('SPC_CMD_PREFIX_PHP_MAKE') ?: 'make'; - $shell->exec("{$SPC_CMD_PREFIX_PHP_MAKE} {$vars} cli"); + $concurrency = getenv('SPC_CONCURRENCY') ? '-j' . getenv('SPC_CONCURRENCY') : ''; + $shell->exec("make {$concurrency} {$vars} cli"); if (!$this->getOption('no-strip', false)) { $shell->exec('dsymutil -f sapi/cli/php')->exec('strip -S sapi/cli/php'); } @@ -199,8 +199,8 @@ class MacOSBuilder extends UnixBuilderBase $vars = SystemUtil::makeEnvVarString($this->getMakeExtraVars()); $shell = shell()->cd(SOURCE_PATH . '/php-src'); - $SPC_CMD_PREFIX_PHP_MAKE = getenv('SPC_CMD_PREFIX_PHP_MAKE') ?: 'make'; - $shell->exec("{$SPC_CMD_PREFIX_PHP_MAKE} {$vars} cgi"); + $concurrency = getenv('SPC_CONCURRENCY') ? '-j' . getenv('SPC_CONCURRENCY') : ''; + $shell->exec("make {$concurrency} {$vars} cgi"); if (!$this->getOption('no-strip', false)) { $shell->exec('dsymutil -f sapi/cgi/php-cgi')->exec('strip -S sapi/cgi/php-cgi'); } @@ -229,7 +229,8 @@ class MacOSBuilder extends UnixBuilderBase $shell = shell()->cd(SOURCE_PATH . '/php-src'); // build - $shell->exec(getenv('SPC_CMD_PREFIX_PHP_MAKE') . " {$vars} micro"); + $concurrency = getenv('SPC_CONCURRENCY') ? '-j' . getenv('SPC_CONCURRENCY') : ''; + $shell->exec("make {$concurrency} {$vars} micro"); // strip if (!$this->getOption('no-strip', false)) { $shell->exec('dsymutil -f sapi/micro/micro.sfx')->exec('strip -S sapi/micro/micro.sfx'); @@ -250,7 +251,8 @@ class MacOSBuilder extends UnixBuilderBase $vars = SystemUtil::makeEnvVarString($this->getMakeExtraVars()); $shell = shell()->cd(SOURCE_PATH . '/php-src'); - $shell->exec(getenv('SPC_CMD_PREFIX_PHP_MAKE') . " {$vars} fpm"); + $concurrency = getenv('SPC_CONCURRENCY') ? '-j' . getenv('SPC_CONCURRENCY') : ''; + $shell->exec("make {$concurrency} {$vars} fpm"); if (!$this->getOption('no-strip', false)) { $shell->exec('dsymutil -f sapi/fpm/php-fpm')->exec('strip -S sapi/fpm/php-fpm'); } @@ -263,9 +265,9 @@ class MacOSBuilder extends UnixBuilderBase protected function buildEmbed(): void { $vars = SystemUtil::makeEnvVarString($this->getMakeExtraVars()); - + $concurrency = getenv('SPC_CONCURRENCY') ? '-j' . getenv('SPC_CONCURRENCY') : ''; shell()->cd(SOURCE_PATH . '/php-src') - ->exec(getenv('SPC_CMD_PREFIX_PHP_MAKE') . ' INSTALL_ROOT=' . BUILD_ROOT_PATH . " {$vars} install"); + ->exec("make {$concurrency} INSTALL_ROOT=" . BUILD_ROOT_PATH . " {$vars} install"); if (getenv('SPC_CMD_VAR_PHP_EMBED_TYPE') === 'static') { $AR = getenv('AR') ?: 'ar'; From f8d77b9b504c61eb1bc7fb0901d2b9bd37780bb8 Mon Sep 17 00:00:00 2001 From: henderkes Date: Wed, 8 Oct 2025 11:55:21 +0200 Subject: [PATCH 12/12] remove pointless comments --- src/SPC/builder/linux/library/libedit.php | 3 --- src/SPC/builder/linux/library/readline.php | 3 --- src/SPC/builder/macos/library/libedit.php | 3 --- src/SPC/builder/macos/library/readline.php | 3 --- 4 files changed, 12 deletions(-) diff --git a/src/SPC/builder/linux/library/libedit.php b/src/SPC/builder/linux/library/libedit.php index eaa159f9..ef869212 100644 --- a/src/SPC/builder/linux/library/libedit.php +++ b/src/SPC/builder/linux/library/libedit.php @@ -4,9 +4,6 @@ declare(strict_types=1); namespace SPC\builder\linux\library; -/** - * libedit library class for linux - */ class libedit extends LinuxLibraryBase { use \SPC\builder\unix\library\libedit; diff --git a/src/SPC/builder/linux/library/readline.php b/src/SPC/builder/linux/library/readline.php index bd32d22e..339e655a 100644 --- a/src/SPC/builder/linux/library/readline.php +++ b/src/SPC/builder/linux/library/readline.php @@ -4,9 +4,6 @@ declare(strict_types=1); namespace SPC\builder\linux\library; -/** - * gmp is a template library class for unix - */ class readline extends LinuxLibraryBase { use \SPC\builder\unix\library\readline; diff --git a/src/SPC/builder/macos/library/libedit.php b/src/SPC/builder/macos/library/libedit.php index 07e9c22f..18d2c3d1 100644 --- a/src/SPC/builder/macos/library/libedit.php +++ b/src/SPC/builder/macos/library/libedit.php @@ -4,9 +4,6 @@ declare(strict_types=1); namespace SPC\builder\macos\library; -/** - * libedit library class for macOS - */ class libedit extends MacOSLibraryBase { use \SPC\builder\unix\library\libedit; diff --git a/src/SPC/builder/macos/library/readline.php b/src/SPC/builder/macos/library/readline.php index bdd38c08..baf9747d 100644 --- a/src/SPC/builder/macos/library/readline.php +++ b/src/SPC/builder/macos/library/readline.php @@ -4,9 +4,6 @@ declare(strict_types=1); namespace SPC\builder\macos\library; -/** - * gmp is a template library class for unix - */ class readline extends MacOSLibraryBase { use \SPC\builder\unix\library\readline;