From 2cb1a95132af6d1c9ee96a6f31d65c59be881d33 Mon Sep 17 00:00:00 2001 From: DubbleClick Date: Sat, 26 Jul 2025 11:13:29 +0700 Subject: [PATCH] change dependency tracking --- config/env.ini | 10 ---------- src/SPC/builder/Extension.php | 7 ++++++- src/SPC/builder/linux/LinuxBuilder.php | 14 +++++--------- src/SPC/builder/macos/MacOSBuilder.php | 2 +- 4 files changed, 12 insertions(+), 21 deletions(-) diff --git a/config/env.ini b/config/env.ini index 521d1e91..1565f622 100644 --- a/config/env.ini +++ b/config/env.ini @@ -108,10 +108,6 @@ SPC_CMD_PREFIX_PHP_MAKE="make -j${SPC_CONCURRENCY}" SPC_CMD_VAR_PHP_EMBED_TYPE="static" ; CFLAGS for configuring php SPC_CMD_VAR_PHP_CONFIGURE_CFLAGS="${SPC_DEFAULT_C_FLAGS} -fPIE" -; CPPFLAGS for configuring php -SPC_CMD_VAR_PHP_CONFIGURE_CPPFLAGS="-I${BUILD_INCLUDE_PATH}" -; LDFLAGS for configuring php -SPC_CMD_VAR_PHP_CONFIGURE_LDFLAGS="-L${BUILD_LIB_PATH}" ; EXTRA_CFLAGS for `make` php SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS="-g -fstack-protector-strong -fno-ident -fPIE ${SPC_DEFAULT_C_FLAGS}" ; EXTRA_LDFLAGS for `make` php, can use -release to set a soname for libphp.so @@ -143,14 +139,8 @@ SPC_CMD_PREFIX_PHP_MAKE="make -j${SPC_CONCURRENCY}" SPC_CMD_VAR_PHP_EMBED_TYPE="static" ; CFLAGS for configuring php SPC_CMD_VAR_PHP_CONFIGURE_CFLAGS="${SPC_DEFAULT_C_FLAGS} -Werror=unknown-warning-option" -; CPPFLAGS for configuring php -SPC_CMD_VAR_PHP_CONFIGURE_CPPFLAGS="-I${BUILD_INCLUDE_PATH}" -; LDFLAGS for configuring php -SPC_CMD_VAR_PHP_CONFIGURE_LDFLAGS="-L${BUILD_LIB_PATH}" ; EXTRA_CFLAGS for `make` php SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS="-g -fstack-protector-strong -fpic -fpie ${SPC_DEFAULT_C_FLAGS}" -; embed type for php, static (libphp.a) or shared (libphp.dylib) -SPC_CMD_VAR_PHP_EMBED_TYPE="static" [freebsd] ; compiler environments diff --git a/src/SPC/builder/Extension.php b/src/SPC/builder/Extension.php index 4672ca78..234f80b0 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -407,7 +407,12 @@ class Extension */ public function buildUnixShared(): void { - $config = (new SPCConfigUtil($this->builder))->config([$this->getName()], array_map(fn ($l) => $l->getName(), $this->builder->getLibs())); + $config = (new SPCConfigUtil($this->builder))->config( + [$this->getName()], + array_map(fn ($l) => $l->getName(), $this->getLibraryDependencies(recursive: true)), + $this->builder->getOption('with-suggested-exts'), + $this->builder->getOption('with-suggested-libs'), + ); [$staticLibs, $sharedLibs] = $this->splitLibsIntoStaticAndShared($config['libs']); $env = [ 'CFLAGS' => $config['cflags'], diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index 03158c1e..e185560a 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -88,16 +88,12 @@ class LinuxBuilder extends UnixBuilderBase $enableFrankenphp = ($build_target & BUILD_TARGET_FRANKENPHP) === BUILD_TARGET_FRANKENPHP; // prepare build php envs - $config = (new SPCConfigUtil($this, ['libs_only_deps' => true]))->config($this->ext_list, $this->lib_list, $this->getOption('with-suggested-exts'), $this->getOption('with-suggested-libs')); - if (str_contains($config['libs'], ' -lpgport') && !$this->getExt('pgsql')?->isBuildStatic()) { - // -lpgport defines many glibc functions if they are missing, which leads to feature tests succeeding that aren't meant to succeed - $config['libs'] = str_replace(' -lpgport', '', $config['libs']); - } - $envs_build_php = SystemUtil::makeEnvVarString([ + $mimallocLibs = $this->getLib('mimalloc') !== null ? BUILD_LIB_PATH . '/mimalloc.o ' : ''; + $php_configure_env = SystemUtil::makeEnvVarString([ 'CFLAGS' => getenv('SPC_CMD_VAR_PHP_CONFIGURE_CFLAGS'), - 'CPPFLAGS' => getenv('SPC_CMD_VAR_PHP_CONFIGURE_CPPFLAGS'), + 'CPPFLAGS' => '-I' . BUILD_INCLUDE_PATH, 'LDFLAGS' => '-L' . BUILD_LIB_PATH, - 'LIBS' => $config['libs'], + 'LIBS' => $mimallocLibs . SPCTarget::getRuntimeLibs(), // do not pass static libraries here yet, they may contain polyfills for libc functions! ]); $embed_type = getenv('SPC_CMD_VAR_PHP_EMBED_TYPE') ?: 'static'; @@ -121,7 +117,7 @@ class LinuxBuilder extends UnixBuilderBase $zts . $maxExecutionTimers . $this->makeStaticExtensionArgs() . - ' ' . $envs_build_php . ' ' + ' ' . $php_configure_env . ' ' ); $this->emitPatchPoint('before-php-make'); diff --git a/src/SPC/builder/macos/MacOSBuilder.php b/src/SPC/builder/macos/MacOSBuilder.php index 9b131b9d..b8a8d814 100644 --- a/src/SPC/builder/macos/MacOSBuilder.php +++ b/src/SPC/builder/macos/MacOSBuilder.php @@ -115,7 +115,7 @@ class MacOSBuilder extends UnixBuilderBase $mimallocLibs = $this->getLib('mimalloc') !== null ? BUILD_LIB_PATH . '/mimalloc.o ' : ''; $envs_build_php = SystemUtil::makeEnvVarString([ 'CFLAGS' => getenv('SPC_CMD_VAR_PHP_CONFIGURE_CFLAGS'), - 'CPPFLAGS' => getenv('SPC_CMD_VAR_PHP_CONFIGURE_CPPFLAGS'), + 'CPPFLAGS' => '-I' . BUILD_INCLUDE_PATH, 'LDFLAGS' => '-L' . BUILD_LIB_PATH, 'LIBS' => $mimallocLibs . getenv('SPC_CMD_VAR_PHP_CONFIGURE_LIBS'), ]);