diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index 3525ffb7e..91910f7f3 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -170,12 +170,19 @@ public function testPHP(int $build_target = BUILD_TARGET_NONE) */ protected function buildCli(): void { + if ($this->getExt('readline')) { + SourcePatcher::patchFile('musl_static_readline.patch', SOURCE_PATH . '/php-src'); + } $vars = SystemUtil::makeEnvVarString($this->getMakeExtraVars()); $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"); + if ($this->getExt('readline')) { + SourcePatcher::patchFile('musl_static_readline.patch', SOURCE_PATH . '/php-src', true); + } + if (!$this->getOption('no-strip', false)) { shell()->cd(SOURCE_PATH . '/php-src/sapi/cli')->exec('strip --strip-unneeded php'); } diff --git a/src/SPC/builder/unix/library/ncurses.php b/src/SPC/builder/unix/library/ncurses.php index 3899e5597..27725c3d5 100644 --- a/src/SPC/builder/unix/library/ncurses.php +++ b/src/SPC/builder/unix/library/ncurses.php @@ -38,7 +38,7 @@ protected function build(): void ->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); } diff --git a/src/globals/patch/musl_static_readline.patch b/src/globals/patch/musl_static_readline.patch new file mode 100644 index 000000000..196116217 --- /dev/null +++ b/src/globals/patch/musl_static_readline.patch @@ -0,0 +1,26 @@ +diff --git a/ext/readline/readline_cli.c b/ext/readline/readline_cli.c +index 31212999..d80a21c3 100644 +--- a/ext/readline/readline_cli.c ++++ b/ext/readline/readline_cli.c +@@ -739,8 +739,8 @@ typedef cli_shell_callbacks_t *(__cdecl *get_cli_shell_callbacks)(void); + } while(0) + + #else +-/* + #ifdef COMPILE_DL_READLINE ++/* + This dlsym() is always used as even the CGI SAPI is linked against "CLI"-only + extensions. If that is being changed dlsym() should only be used when building + this extension sharedto offer compatibility. +@@ -754,9 +754,9 @@ this extension sharedto offer compatibility. + (cb) = get_callbacks(); \ + } \ + } while(0) +-/*#else ++#else + #define GET_SHELL_CB(cb) (cb) = php_cli_get_shell_callbacks() +-#endif*/ ++#endif + #endif + + PHP_MINIT_FUNCTION(cli_readline) diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index 764cfc7d3..8358d26fe 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -50,7 +50,7 @@ // 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', };