From 03a33d87ff6f3b44b228492e79093420ca228c94 Mon Sep 17 00:00:00 2001 From: DubbleClick Date: Thu, 26 Jun 2025 17:23:37 +0700 Subject: [PATCH] fix frankenphp build --- src/SPC/builder/unix/UnixBuilderBase.php | 23 +++++++++++++++++------ src/SPC/util/GlobalEnvManager.php | 2 +- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/SPC/builder/unix/UnixBuilderBase.php b/src/SPC/builder/unix/UnixBuilderBase.php index 519475d3..71de5609 100644 --- a/src/SPC/builder/unix/UnixBuilderBase.php +++ b/src/SPC/builder/unix/UnixBuilderBase.php @@ -16,7 +16,9 @@ use SPC\store\CurlHook; use SPC\store\Downloader; use SPC\store\FileSystem; use SPC\store\pkg\GoXcaddy; +use SPC\store\pkg\Zig; use SPC\util\DependencyUtil; +use SPC\util\GlobalEnvManager; use SPC\util\SPCConfigUtil; abstract class UnixBuilderBase extends BuilderBase @@ -52,7 +54,7 @@ abstract class UnixBuilderBase extends BuilderBase array_unshift($libFiles, ...$lib->getStaticLibs()); } } - return array_map(fn ($x) => realpath(BUILD_LIB_PATH . "/{$x}"), $libFiles); + return array_map(fn($x) => realpath(BUILD_LIB_PATH . "/{$x}"), $libFiles); } /** @@ -98,7 +100,8 @@ abstract class UnixBuilderBase extends BuilderBase if ($lib instanceof LinuxLibraryBase || $lib instanceof MacOSLibraryBase || $lib instanceof BSDLibraryBase) { logger()->info("{$name} \033[32;1mwith\033[0;1m {$libName} support"); $ret .= "--with-{$libName}=yes " . $lib->makeAutoconfEnv($prefix) . ' '; - } else { + } + else { logger()->info("{$name} \033[31;1mwithout\033[0;1m {$libName} support"); $ret .= ($disableArgs ?? "--with-{$libName}=no") . ' '; } @@ -212,7 +215,8 @@ abstract class UnixBuilderBase extends BuilderBase if (getenv('SPC_CMD_VAR_PHP_EMBED_TYPE') === 'shared') { $ext_path = 'LD_LIBRARY_PATH=' . BUILD_ROOT_PATH . '/lib:$LD_LIBRARY_PATH '; FileSystem::removeFileIfExists(BUILD_ROOT_PATH . '/lib/libphp.a'); - } else { + } + else { $ext_path = ''; FileSystem::removeFileIfExists(BUILD_ROOT_PATH . '/lib/libphp.so'); } @@ -241,7 +245,7 @@ abstract class UnixBuilderBase extends BuilderBase /** * 将编译好的二进制文件发布到 buildroot * - * @param int $type 发布类型 + * @param int $type 发布类型 * @throws RuntimeException * @throws FileSystemException */ @@ -333,7 +337,7 @@ abstract class UnixBuilderBase extends BuilderBase $config = (new SPCConfigUtil($this))->config($this->ext_list, $this->lib_list, with_dependencies: true); - $env = [...GoXcaddy::getEnvironment(), ...[ + $env = [ 'CGO_ENABLED' => '1', 'CGO_CFLAGS' => $config['cflags'], 'CGO_LDFLAGS' => "{$config['ldflags']} {$config['libs']} {$lrt}", @@ -343,7 +347,14 @@ abstract class UnixBuilderBase extends BuilderBase "{$frankenPhpVersion} PHP {$libphpVersion} Caddy'\\\" " . "-tags={$muslTags}nobadger,nomysql,nopgx{$nobrotli}{$nowatcher}", 'LD_LIBRARY_PATH' => BUILD_LIB_PATH, - ]]; + ]; + foreach (GoXcaddy::getEnvironment() as $key => $value) { + if ($key === 'PATH') { + GlobalEnvManager::addPathIfNotExists($value); + } else { + $env[$key] = $value; + } + } shell()->cd(BUILD_BIN_PATH) ->setEnv($env) ->exec("xcaddy build --output frankenphp {$xcaddyModules}"); diff --git a/src/SPC/util/GlobalEnvManager.php b/src/SPC/util/GlobalEnvManager.php index baf38e7a..80f77016 100644 --- a/src/SPC/util/GlobalEnvManager.php +++ b/src/SPC/util/GlobalEnvManager.php @@ -117,7 +117,7 @@ class GlobalEnvManager self::$env_cache[] = $val; } - private static function addPathIfNotExists(string $path): void + public static function addPathIfNotExists(string $path): void { if (is_unix() && !str_contains(getenv('PATH'), $path)) { self::putenv("PATH={$path}:" . getenv('PATH'));