only apply readline fix for CLI compilation on linux

This commit is contained in:
henderkes 2025-10-08 10:05:02 +02:00
parent f0c39c1770
commit 565ac87b65
2 changed files with 9 additions and 17 deletions

View File

@ -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;
}
}

View File

@ -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');