From 4d3501118e0a062767dcc625157754524971b9be Mon Sep 17 00:00:00 2001 From: DubbleClick Date: Fri, 5 Sep 2025 21:36:25 +0700 Subject: [PATCH 001/207] add --with-frankenphp-app option to embed an app --- config/env.ini | 2 +- config/lib.json | 7 ++- config/source.json | 10 ++++ src/SPC/builder/unix/UnixBuilderBase.php | 63 +++++++++++++++++++++--- src/SPC/command/BuildPHPCommand.php | 1 + 5 files changed, 74 insertions(+), 9 deletions(-) diff --git a/config/env.ini b/config/env.ini index 4b9f294ad..8b5a58d41 100644 --- a/config/env.ini +++ b/config/env.ini @@ -43,7 +43,7 @@ SPC_SKIP_PHP_VERSION_CHECK="no" ; Ignore some check item for bin/spc doctor command, comma separated (e.g. SPC_SKIP_DOCTOR_CHECK_ITEMS="if homebrew has installed") SPC_SKIP_DOCTOR_CHECK_ITEMS="" ; extra modules that xcaddy will include in the FrankenPHP build -SPC_CMD_VAR_FRANKENPHP_XCADDY_MODULES="--with github.com/dunglas/frankenphp/caddy --with github.com/dunglas/mercure/caddy --with github.com/dunglas/vulcain/caddy --with github.com/dunglas/caddy-cbrotli" +SPC_CMD_VAR_FRANKENPHP_XCADDY_MODULES="--with github.com/dunglas/mercure/caddy --with github.com/dunglas/vulcain/caddy --with github.com/dunglas/caddy-cbrotli" ; The display message for php version output (PHP >= 8.4 available) PHP_BUILD_PROVIDER="static-php-cli ${SPC_VERSION}" diff --git a/config/lib.json b/config/lib.json index bda0baad2..eccda3043 100644 --- a/config/lib.json +++ b/config/lib.json @@ -7,7 +7,8 @@ "source": "php-src", "lib-depends": [ "lib-base", - "micro" + "micro", + "frankenphp" ], "lib-suggests-linux": [ "libacl", @@ -940,5 +941,9 @@ "liburing/", "liburing.h" ] + }, + "frankenphp": { + "source": "frankenphp", + "type": "target" } } diff --git a/config/source.json b/config/source.json index 4a0e0fdb5..f020ae06e 100644 --- a/config/source.json +++ b/config/source.json @@ -343,6 +343,16 @@ "path": "LICENSE" } }, + "frankenphp": { + "type": "ghtar", + "repo": "php/frankenphp", + "prefer-stable": true, + "provide-pre-build": false, + "license": { + "type": "file", + "path": "LICENSE" + } + }, "icu-static-win": { "type": "url", "url": "https://dl.static-php.dev/static-php-cli/deps/icu-static-windows-x64/icu-static-windows-x64.zip", diff --git a/src/SPC/builder/unix/UnixBuilderBase.php b/src/SPC/builder/unix/UnixBuilderBase.php index 5309636fc..341a15bc1 100644 --- a/src/SPC/builder/unix/UnixBuilderBase.php +++ b/src/SPC/builder/unix/UnixBuilderBase.php @@ -12,6 +12,7 @@ use SPC\store\Config; use SPC\store\FileSystem; use SPC\store\pkg\GoXcaddy; +use SPC\store\SourceManager; use SPC\toolchain\GccNativeToolchain; use SPC\toolchain\ToolchainManager; use SPC\util\DependencyUtil; @@ -264,22 +265,70 @@ protected function patchPhpScripts(): void } } + /** + * Process the --with-frankenphp-app option + * Creates app.tar and app.checksum in source/frankenphp directory + */ + protected function processFrankenphpApp(): void + { + $frankenphpSourceDir = SOURCE_PATH . '/frankenphp'; + SourceManager::initSource(['frankenphp'], ['frankenphp']); + $frankenphpAppPath = $this->getOption('with-frankenphp-app'); + + if ($frankenphpAppPath) { + if (!is_dir($frankenphpAppPath)) { + throw new WrongUsageException("The path provided to --with-frankenphp-app is not a valid directory: {$frankenphpAppPath}"); + } + $appTarPath = $frankenphpSourceDir . '/app.tar'; + logger()->info("Creating app.tar from {$frankenphpAppPath}"); + + shell()->exec('tar -cf ' . escapeshellarg($appTarPath) . ' -C ' . escapeshellarg($frankenphpAppPath) . ' .'); + + $checksum = hash_file('md5', $appTarPath); + file_put_contents($frankenphpSourceDir . '/app_checksum.txt', $checksum); + } else { + FileSystem::removeFileIfExists($frankenphpSourceDir . '/app.tar'); + FileSystem::removeFileIfExists($frankenphpSourceDir . '/app_checksum.txt'); + file_put_contents($frankenphpSourceDir . '/app.tar', ''); + file_put_contents($frankenphpSourceDir . '/app_checksum.txt', ''); + } + } + + protected function getFrankenPHPVersion(): string + { + $goModPath = SOURCE_PATH . '/frankenphp/caddy/go.mod'; + + if (!file_exists($goModPath)) { + throw new SPCInternalException("FrankenPHP caddy/go.mod file not found at {$goModPath}, why did we not download FrankenPHP?"); + } + + $content = file_get_contents($goModPath); + if (preg_match('/github\.com\/dunglas\/frankenphp\s+v?(\d+\.\d+\.\d+)/', $content, $matches)) { + return $matches[1]; + } + + throw new SPCInternalException('Could not find FrankenPHP version in caddy/go.mod'); + } + protected function buildFrankenphp(): void { GlobalEnvManager::addPathIfNotExists(GoXcaddy::getEnvironment()['PATH']); + $this->processFrankenphpApp(); $nobrotli = $this->getLib('brotli') === null ? ',nobrotli' : ''; $nowatcher = $this->getLib('watcher') === null ? ',nowatcher' : ''; $xcaddyModules = getenv('SPC_CMD_VAR_FRANKENPHP_XCADDY_MODULES'); - // make it possible to build from a different frankenphp directory! - if (!str_contains($xcaddyModules, '--with github.com/dunglas/frankenphp')) { - $xcaddyModules = '--with github.com/dunglas/frankenphp ' . $xcaddyModules; - } + $frankenphpSourceDir = SOURCE_PATH . '/frankenphp'; + + $xcaddyModules = preg_replace('#--with github.com/dunglas/frankenphp(=\S+)?#', '', $xcaddyModules); + $xcaddyModules = preg_replace('#--with github.com/dunglas/frankenphp/caddy(=\S+)?#', '', $xcaddyModules); + $xcaddyModules = "--with github.com/dunglas/frankenphp={$frankenphpSourceDir} " . + "--with github.com/dunglas/frankenphp/caddy={$frankenphpSourceDir}/caddy {$xcaddyModules}"; if ($this->getLib('brotli') === null && str_contains($xcaddyModules, '--with github.com/dunglas/caddy-cbrotli')) { logger()->warning('caddy-cbrotli module is enabled, but brotli library is not built. Disabling caddy-cbrotli.'); $xcaddyModules = str_replace('--with github.com/dunglas/caddy-cbrotli', '', $xcaddyModules); } - [, $out] = shell()->execWithResult('go list -m github.com/dunglas/frankenphp@latest'); - $frankenPhpVersion = str_replace('github.com/dunglas/frankenphp v', '', $out[0]); + + $frankenPhpVersion = $this->getFrankenPHPVersion(); $libphpVersion = $this->getPHPVersion(); $dynamic_exports = ''; if (getenv('SPC_CMD_VAR_PHP_EMBED_TYPE') === 'shared') { @@ -317,7 +366,7 @@ protected function buildFrankenphp(): void 'XCADDY_GO_BUILD_FLAGS' => '-buildmode=pie ' . '-ldflags \"-linkmode=external ' . $extLdFlags . ' ' . $debugFlags . '-X \'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP ' . - "{$frankenPhpVersion} PHP {$libphpVersion} Caddy'\\\" " . + "v{$frankenPhpVersion} PHP {$libphpVersion} Caddy'\\\" " . "-tags={$muslTags}nobadger,nomysql,nopgx{$nobrotli}{$nowatcher}", 'LD_LIBRARY_PATH' => BUILD_LIB_PATH, ]; diff --git a/src/SPC/command/BuildPHPCommand.php b/src/SPC/command/BuildPHPCommand.php index 3ffc54cef..f8ab384b0 100644 --- a/src/SPC/command/BuildPHPCommand.php +++ b/src/SPC/command/BuildPHPCommand.php @@ -48,6 +48,7 @@ public function configure(): void $this->addOption('with-upx-pack', null, null, 'Compress / pack binary using UPX tool (linux/windows only)'); $this->addOption('with-micro-logo', null, InputOption::VALUE_REQUIRED, 'Use custom .ico for micro.sfx (windows only)'); $this->addOption('enable-micro-win32', null, null, 'Enable win32 mode for phpmicro (Windows only)'); + $this->addOption('with-frankenphp-app', null, InputOption::VALUE_REQUIRED, 'Path to a folder to be embedded in FrankenPHP'); } public function handle(): int From d3ba04fc5b18851ff2846d7dfdb4eb3982dbc98a Mon Sep 17 00:00:00 2001 From: henderkes Date: Thu, 18 Sep 2025 18:16:03 +0200 Subject: [PATCH 002/207] fix grpc shared build (ignores CXXFLAGS, needs CPPFLAGS) --- config/lib.json | 1 + src/SPC/builder/Extension.php | 39 +++++++++++++++++------------- src/SPC/builder/extension/grpc.php | 6 +++++ 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/config/lib.json b/config/lib.json index 37faca3c4..096e7a429 100644 --- a/config/lib.json +++ b/config/lib.json @@ -202,6 +202,7 @@ "openssl", "libcares" ], + "cpp-library": true, "provide-pre-built": true, "frameworks": [ "CoreFoundation" diff --git a/src/SPC/builder/Extension.php b/src/SPC/builder/Extension.php index ac7efd1ec..41c4ae6b5 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -405,22 +405,7 @@ public function buildShared(array $visited = []): void */ public function buildUnixShared(): void { - $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']); - $preStatic = PHP_OS_FAMILY === 'Darwin' ? '' : '-Wl,--start-group '; - $postStatic = PHP_OS_FAMILY === 'Darwin' ? '' : ' -Wl,--end-group '; - $env = [ - 'CFLAGS' => $config['cflags'], - 'CXXFLAGS' => $config['cflags'], - 'LDFLAGS' => $config['ldflags'], - 'LIBS' => clean_spaces("{$preStatic} {$staticLibs} {$postStatic} {$sharedLibs}"), - 'LD_LIBRARY_PATH' => BUILD_LIB_PATH, - ]; + $env = $this->getSharedExtensionEnv(); if (str_contains($env['LIBS'], '-lstdc++') && SPCTarget::getTargetOS() === 'Linux') { if (ToolchainManager::getToolchainClass() === ZigToolchain::class) { $env['SPC_COMPILER_EXTRA'] = '-lstdc++'; @@ -512,6 +497,26 @@ public function isBuildStatic(): bool return $this->build_static; } + protected function getSharedExtensionEnv(): array + { + $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']); + $preStatic = PHP_OS_FAMILY === 'Darwin' ? '' : '-Wl,--start-group '; + $postStatic = PHP_OS_FAMILY === 'Darwin' ? '' : ' -Wl,--end-group '; + return [ + 'CFLAGS' => $config['cflags'], + 'CXXFLAGS' => $config['cflags'], + 'LDFLAGS' => $config['ldflags'], + 'LIBS' => clean_spaces("{$preStatic} {$staticLibs} {$postStatic} {$sharedLibs}"), + 'LD_LIBRARY_PATH' => BUILD_LIB_PATH, + ]; + } + protected function addLibraryDependency(string $name, bool $optional = false): void { $depLib = $this->builder->getLib($name); @@ -570,7 +575,7 @@ protected function splitLibsIntoStaticAndShared(string $allLibs): array return [trim($staticLibString), trim($sharedLibString)]; } - private function getLibraryDependencies(bool $recursive = false): array + protected function getLibraryDependencies(bool $recursive = false): array { $ret = array_filter($this->dependencies, fn ($x) => $x instanceof LibraryBase); if (!$recursive) { diff --git a/src/SPC/builder/extension/grpc.php b/src/SPC/builder/extension/grpc.php index 61af6c04d..fe13a76ad 100644 --- a/src/SPC/builder/extension/grpc.php +++ b/src/SPC/builder/extension/grpc.php @@ -56,4 +56,10 @@ public function patchBeforeMake(): bool GlobalEnvManager::putenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS=' . getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS') . ' -Wno-strict-prototypes'); return true; } + + protected function getSharedExtensionEnv(): array + { + $env = parent::getSharedExtensionEnv(); + $env['CPPFLAGS'] = $env['CXXFLAGS']; + } } From 2e6329bb867b53018a82e93620fa518b2107c278 Mon Sep 17 00:00:00 2001 From: henderkes Date: Thu, 18 Sep 2025 18:16:23 +0200 Subject: [PATCH 003/207] add cpp-library for imagemagick too --- config/lib.json | 1 + 1 file changed, 1 insertion(+) diff --git a/config/lib.json b/config/lib.json index 096e7a429..392786b2a 100644 --- a/config/lib.json +++ b/config/lib.json @@ -231,6 +231,7 @@ }, "imagemagick": { "source": "imagemagick", + "cpp-library": true, "pkg-configs": [ "Magick++-7.Q16HDRI", "MagickCore-7.Q16HDRI", From d0a9a3a5943b8ea9e2df34f87e2fb4ab81d18664 Mon Sep 17 00:00:00 2001 From: henderkes Date: Thu, 18 Sep 2025 18:17:48 +0200 Subject: [PATCH 004/207] fix return of array --- src/SPC/builder/extension/grpc.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/SPC/builder/extension/grpc.php b/src/SPC/builder/extension/grpc.php index fe13a76ad..f2f36c164 100644 --- a/src/SPC/builder/extension/grpc.php +++ b/src/SPC/builder/extension/grpc.php @@ -61,5 +61,6 @@ protected function getSharedExtensionEnv(): array { $env = parent::getSharedExtensionEnv(); $env['CPPFLAGS'] = $env['CXXFLAGS']; + return $env; } } From b5c7185374dec2109e98941b55c25f974e36fae3 Mon Sep 17 00:00:00 2001 From: henderkes Date: Thu, 18 Sep 2025 18:20:26 +0200 Subject: [PATCH 005/207] add comment for new method --- src/SPC/builder/Extension.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/SPC/builder/Extension.php b/src/SPC/builder/Extension.php index 41c4ae6b5..a22f6b7aa 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -497,6 +497,10 @@ public function isBuildStatic(): bool return $this->build_static; } + /** + * Returns the environment variables a shared extension needs to be built. + * CFLAGS, CXXFLAGS, LDFLAGS and so on. + */ protected function getSharedExtensionEnv(): array { $config = (new SPCConfigUtil($this->builder))->config( From fa2e041cc954accab4027ed662cca09fd2e78e7a Mon Sep 17 00:00:00 2001 From: henderkes Date: Thu, 18 Sep 2025 19:00:38 +0200 Subject: [PATCH 006/207] test shared grpc, imagick --- src/globals/test-extensions.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index 764cfc7d3..749ed3b47 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -26,7 +26,7 @@ '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-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-22.04-arm', // bin/spc-gnu-docker for arm64 @@ -56,7 +56,7 @@ // If you want to test shared extensions, add them below (comma separated, example `bcmath,openssl`). $shared_extensions = match (PHP_OS_FAMILY) { - 'Linux' => 'zip', + 'Linux' => 'grpc,imagick', 'Darwin' => '', 'Windows' => '', }; From 40f89d1dcab6bae73c4a7520fa6d61a1166da88a Mon Sep 17 00:00:00 2001 From: henderkes Date: Thu, 18 Sep 2025 19:44:48 +0200 Subject: [PATCH 007/207] is shared_libadd enough? --- src/SPC/builder/Extension.php | 33 ++++----------------------------- 1 file changed, 4 insertions(+), 29 deletions(-) diff --git a/src/SPC/builder/Extension.php b/src/SPC/builder/Extension.php index a22f6b7aa..3f8d54b80 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -5,16 +5,11 @@ namespace SPC\builder; use SPC\exception\EnvironmentException; -use SPC\exception\FileSystemException; use SPC\exception\SPCException; use SPC\exception\ValidationException; use SPC\exception\WrongUsageException; use SPC\store\Config; use SPC\store\FileSystem; -use SPC\toolchain\ClangNativeToolchain; -use SPC\toolchain\GccNativeToolchain; -use SPC\toolchain\ToolchainManager; -use SPC\toolchain\ZigToolchain; use SPC\util\SPCConfigUtil; use SPC\util\SPCTarget; @@ -226,11 +221,11 @@ public function patchBeforeSharedConfigure(): bool public function patchBeforeSharedMake(): bool { $config = (new SPCConfigUtil($this->builder))->config([$this->getName()], array_map(fn ($l) => $l->getName(), $this->builder->getLibs())); - [$staticLibs] = $this->splitLibsIntoStaticAndShared($config['libs']); + [$staticLibs, $sharedLibs] = $this->splitLibsIntoStaticAndShared($config['libs']); FileSystem::replaceFileRegex( $this->source_dir . '/Makefile', '/^(.*_SHARED_LIBADD\s*=.*)$/m', - '$1 ' . trim($staticLibs) + clean_spaces("$1 {$staticLibs} {$sharedLibs}") ); if ($objs = getenv('SPC_EXTRA_RUNTIME_OBJECTS')) { FileSystem::replaceFileRegex( @@ -406,26 +401,6 @@ public function buildShared(array $visited = []): void public function buildUnixShared(): void { $env = $this->getSharedExtensionEnv(); - if (str_contains($env['LIBS'], '-lstdc++') && SPCTarget::getTargetOS() === 'Linux') { - if (ToolchainManager::getToolchainClass() === ZigToolchain::class) { - $env['SPC_COMPILER_EXTRA'] = '-lstdc++'; - } elseif (ToolchainManager::getToolchainClass() === GccNativeToolchain::class || ToolchainManager::getToolchainClass() === ClangNativeToolchain::class) { - try { - $content = FileSystem::readFile($this->source_dir . '/config.m4'); - if ($content && !str_contains($content, 'PHP_ADD_LIBRARY(stdc++')) { - $pattern = '/(PHP_NEW_EXTENSION\(' . $this->name . ',.*\))/m'; - $replacement = "$1\nPHP_ADD_LIBRARY(stdc++, 1, " . strtoupper($this->name) . '_SHARED_LIBADD)'; - FileSystem::replaceFileRegex( - $this->source_dir . '/config.m4', - $pattern, - $replacement - ); - } - } catch (FileSystemException) { - } - } - } - if ($this->patchBeforeSharedPhpize()) { logger()->info("Extension [{$this->getName()}] patched before shared phpize"); } @@ -593,12 +568,12 @@ protected function getLibraryDependencies(bool $recursive = false): array $added = 0; foreach ($ret as $depName => $dep) { foreach ($dep->getDependencies(true) as $depdepName => $depdep) { - if (!in_array($depdepName, array_keys($deps), true)) { + if (!array_key_exists($depdepName, $deps)) { $deps[$depdepName] = $depdep; ++$added; } } - if (!in_array($depName, array_keys($deps), true)) { + if (!array_key_exists($depName, $deps)) { $deps[$depName] = $dep; } } From b0538c09bf4ed384c3eea3ce033ea12537dbb1bd Mon Sep 17 00:00:00 2001 From: henderkes Date: Thu, 18 Sep 2025 20:09:17 +0200 Subject: [PATCH 008/207] deduplicate those to make it more readable --- src/SPC/builder/Extension.php | 22 +++++++++++++++++----- src/globals/functions.php | 10 ++++++++++ 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/SPC/builder/Extension.php b/src/SPC/builder/Extension.php index 3f8d54b80..410f04d8a 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -222,11 +222,23 @@ public function patchBeforeSharedMake(): bool { $config = (new SPCConfigUtil($this->builder))->config([$this->getName()], array_map(fn ($l) => $l->getName(), $this->builder->getLibs())); [$staticLibs, $sharedLibs] = $this->splitLibsIntoStaticAndShared($config['libs']); - FileSystem::replaceFileRegex( - $this->source_dir . '/Makefile', - '/^(.*_SHARED_LIBADD\s*=.*)$/m', - clean_spaces("$1 {$staticLibs} {$sharedLibs}") - ); + $lstdcpp = str_contains($sharedLibs, '-lstdc++') ? '-lstdc++' : ''; + + $makefileContent = file_get_contents($this->source_dir . '/Makefile'); + + if (preg_match('/^(.*_SHARED_LIBADD\s*=\s*)(.*)$/m', $makefileContent, $matches)) { + $prefix = $matches[1]; + $currentLibs = trim($matches[2]); + $newLibs = trim("{$currentLibs} {$staticLibs} {$lstdcpp}"); + $deduplicatedLibs = deduplicate_flags($newLibs); + + FileSystem::replaceFileRegex( + $this->source_dir . '/Makefile', + '/^(.*_SHARED_LIBADD\s*=.*)$/m', + $prefix . $deduplicatedLibs + ); + } + if ($objs = getenv('SPC_EXTRA_RUNTIME_OBJECTS')) { FileSystem::replaceFileRegex( $this->source_dir . '/Makefile', diff --git a/src/globals/functions.php b/src/globals/functions.php index 711279600..c8c40b68c 100644 --- a/src/globals/functions.php +++ b/src/globals/functions.php @@ -245,6 +245,16 @@ function clean_spaces(string $string): string return trim(preg_replace('/\s+/', ' ', $string)); } +function deduplicate_flags(string $flags): string +{ + $tokens = preg_split('/\s+/', trim($flags)); + + // Reverse, unique, reverse back - keeps last occurrence of duplicates + $deduplicated = array_reverse(array_unique(array_reverse($tokens))); + + return implode(' ', $deduplicated); +} + /** * Register a callback function to handle keyboard interrupts (Ctrl+C). * From 83696e92b757837f8c5dc91f861d48a63488d755 Mon Sep 17 00:00:00 2001 From: henderkes Date: Thu, 18 Sep 2025 20:12:41 +0200 Subject: [PATCH 009/207] remove whitespace --- src/SPC/builder/Extension.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/SPC/builder/Extension.php b/src/SPC/builder/Extension.php index 410f04d8a..6b518b061 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -225,7 +225,6 @@ public function patchBeforeSharedMake(): bool $lstdcpp = str_contains($sharedLibs, '-lstdc++') ? '-lstdc++' : ''; $makefileContent = file_get_contents($this->source_dir . '/Makefile'); - if (preg_match('/^(.*_SHARED_LIBADD\s*=\s*)(.*)$/m', $makefileContent, $matches)) { $prefix = $matches[1]; $currentLibs = trim($matches[2]); From 81430e685377d47d7662194e58c8ec12e38d7f8a Mon Sep 17 00:00:00 2001 From: henderkes Date: Thu, 18 Sep 2025 21:29:46 +0200 Subject: [PATCH 010/207] also use libstdc++.a for grpc? --- src/SPC/builder/Extension.php | 3 ++- src/SPC/builder/extension/grpc.php | 12 +++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/SPC/builder/Extension.php b/src/SPC/builder/Extension.php index 6b518b061..2b8263de1 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -222,7 +222,8 @@ public function patchBeforeSharedMake(): bool { $config = (new SPCConfigUtil($this->builder))->config([$this->getName()], array_map(fn ($l) => $l->getName(), $this->builder->getLibs())); [$staticLibs, $sharedLibs] = $this->splitLibsIntoStaticAndShared($config['libs']); - $lstdcpp = str_contains($sharedLibs, '-lstdc++') ? '-lstdc++' : ''; + $lstdcpp = str_contains($sharedLibs, '-l:libstdc++.a') ? '-l:libstdc++.a' : null; + $lstdcpp ??= str_contains($sharedLibs, '-lstdc++') ? '-lstdc++' : ''; $makefileContent = file_get_contents($this->source_dir . '/Makefile'); if (preg_match('/^(.*_SHARED_LIBADD\s*=\s*)(.*)$/m', $makefileContent, $matches)) { diff --git a/src/SPC/builder/extension/grpc.php b/src/SPC/builder/extension/grpc.php index f2f36c164..3833030e2 100644 --- a/src/SPC/builder/extension/grpc.php +++ b/src/SPC/builder/extension/grpc.php @@ -60,7 +60,17 @@ public function patchBeforeMake(): bool protected function getSharedExtensionEnv(): array { $env = parent::getSharedExtensionEnv(); - $env['CPPFLAGS'] = $env['CXXFLAGS']; + $env['CPPFLAGS'] = $env['CXXFLAGS'] . ' -Wno-attributes'; return $env; } + + protected function splitLibsIntoStaticAndShared(string $allLibs): array + { + [$static, $shared] = parent::splitLibsIntoStaticAndShared($allLibs); + if (str_contains(getenv('PATH'), 'rh/devtoolset') || str_contains(getenv('PATH'), 'rh/gcc-toolset')) { + $static .= ' -l:libstdc++.a'; + $shared = str_replace('-lstdc++', '', $shared); + } + return [clean_spaces($static), clean_spaces($shared)]; + } } From d0b253c3469dcc9021038bbcfe0edc7b546c3b29 Mon Sep 17 00:00:00 2001 From: henderkes Date: Thu, 18 Sep 2025 21:36:38 +0200 Subject: [PATCH 011/207] not required --- src/SPC/builder/extension/grpc.php | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/SPC/builder/extension/grpc.php b/src/SPC/builder/extension/grpc.php index 3833030e2..7388eaffd 100644 --- a/src/SPC/builder/extension/grpc.php +++ b/src/SPC/builder/extension/grpc.php @@ -63,14 +63,4 @@ protected function getSharedExtensionEnv(): array $env['CPPFLAGS'] = $env['CXXFLAGS'] . ' -Wno-attributes'; return $env; } - - protected function splitLibsIntoStaticAndShared(string $allLibs): array - { - [$static, $shared] = parent::splitLibsIntoStaticAndShared($allLibs); - if (str_contains(getenv('PATH'), 'rh/devtoolset') || str_contains(getenv('PATH'), 'rh/gcc-toolset')) { - $static .= ' -l:libstdc++.a'; - $shared = str_replace('-lstdc++', '', $shared); - } - return [clean_spaces($static), clean_spaces($shared)]; - } } From e323d7b155cbf3689328f83b9a471ce8b571944a Mon Sep 17 00:00:00 2001 From: henderkes Date: Thu, 18 Sep 2025 21:41:35 +0200 Subject: [PATCH 012/207] revert to private --- src/SPC/builder/Extension.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/builder/Extension.php b/src/SPC/builder/Extension.php index 2b8263de1..1ee0e4b94 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -566,7 +566,7 @@ protected function splitLibsIntoStaticAndShared(string $allLibs): array return [trim($staticLibString), trim($sharedLibString)]; } - protected function getLibraryDependencies(bool $recursive = false): array + private function getLibraryDependencies(bool $recursive = false): array { $ret = array_filter($this->dependencies, fn ($x) => $x instanceof LibraryBase); if (!$recursive) { From 927d7f55bac1b3218bc1b1e569d72731aa861b13 Mon Sep 17 00:00:00 2001 From: henderkes Date: Thu, 18 Sep 2025 22:47:01 +0200 Subject: [PATCH 013/207] make sure -ldl is not taken as needed, problem on EL8 --- src/SPC/builder/unix/library/imagemagick.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/SPC/builder/unix/library/imagemagick.php b/src/SPC/builder/unix/library/imagemagick.php index 2d3125498..2e795a0dd 100644 --- a/src/SPC/builder/unix/library/imagemagick.php +++ b/src/SPC/builder/unix/library/imagemagick.php @@ -32,7 +32,10 @@ protected function build(): void ); // special: linux-static target needs `-static` - $ldflags = SPCTarget::isStatic() ? ('-static -ldl') : '-ldl'; + $ldflags = SPCTarget::isStatic() ? '-static -ldl' : '-ldl'; + if (str_contains($this->builder->arch_ld_flags, '-Wl,--as-needed')) { + $ldflags = str_replace('-ldl', '-Wl,--no-as-needed -ldl -Wl,--as-needed', $ldflags); + } // special: macOS needs -iconv $libs = SPCTarget::getTargetOS() === 'Darwin' ? '-liconv' : ''; From 44399cd185c5b418c1fd6ff43832204382b974a4 Mon Sep 17 00:00:00 2001 From: henderkes Date: Fri, 19 Sep 2025 09:21:17 +0200 Subject: [PATCH 014/207] remove -Wl,--as-needed for imagemagick build --- src/SPC/builder/unix/library/imagemagick.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/SPC/builder/unix/library/imagemagick.php b/src/SPC/builder/unix/library/imagemagick.php index 2e795a0dd..42064e2d8 100644 --- a/src/SPC/builder/unix/library/imagemagick.php +++ b/src/SPC/builder/unix/library/imagemagick.php @@ -12,6 +12,11 @@ trait imagemagick { protected function build(): void { + $original_ldflags = $this->builder->arch_ld_flags; + if (str_contains($this->builder->arch_ld_flags, '-Wl,--as-needed')) { + $this->builder->arch_ld_flags = str_replace('-Wl,--as-needed', '', $original_ldflags); + } + $ac = UnixAutoconfExecutor::create($this) ->optionalLib('libzip', ...ac_with_args('zip')) ->optionalLib('libjpeg', ...ac_with_args('jpeg')) @@ -33,9 +38,6 @@ protected function build(): void // special: linux-static target needs `-static` $ldflags = SPCTarget::isStatic() ? '-static -ldl' : '-ldl'; - if (str_contains($this->builder->arch_ld_flags, '-Wl,--as-needed')) { - $ldflags = str_replace('-ldl', '-Wl,--no-as-needed -ldl -Wl,--as-needed', $ldflags); - } // special: macOS needs -iconv $libs = SPCTarget::getTargetOS() === 'Darwin' ? '-liconv' : ''; @@ -48,6 +50,8 @@ protected function build(): void $ac->configure()->make(); + $this->builder->arch_ld_flags = $original_ldflags; + $filelist = [ 'ImageMagick.pc', 'ImageMagick-7.Q16HDRI.pc', From dcbfe1e0abe9728af1119c7aa226c87c864a2f34 Mon Sep 17 00:00:00 2001 From: henderkes Date: Fri, 19 Sep 2025 15:29:49 +0200 Subject: [PATCH 015/207] e-dant/watcher is a c++ library too --- config/lib.json | 1 + src/SPC/builder/unix/UnixBuilderBase.php | 5 ++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config/lib.json b/config/lib.json index 392786b2a..5db911460 100644 --- a/config/lib.json +++ b/config/lib.json @@ -869,6 +869,7 @@ }, "watcher": { "source": "watcher", + "cpp-library": true, "static-libs-unix": [ "libwatcher-c.a" ], diff --git a/src/SPC/builder/unix/UnixBuilderBase.php b/src/SPC/builder/unix/UnixBuilderBase.php index 5942f90c2..0d123d1f0 100644 --- a/src/SPC/builder/unix/UnixBuilderBase.php +++ b/src/SPC/builder/unix/UnixBuilderBase.php @@ -291,11 +291,11 @@ protected function buildFrankenphp(): void } } $debugFlags = $this->getOption('no-strip') ? '-w -s ' : ''; - $extLdFlags = "-extldflags '-pie{$dynamic_exports}'"; + $extLdFlags = "-extldflags '-pie{$dynamic_exports} {$this->arch_ld_flags}'"; $muslTags = ''; $staticFlags = ''; if (SPCTarget::isStatic()) { - $extLdFlags = "-extldflags '-static-pie -Wl,-z,stack-size=0x80000{$dynamic_exports}'"; + $extLdFlags = "-extldflags '-static-pie -Wl,-z,stack-size=0x80000{$dynamic_exports} {$this->arch_ld_flags}'"; $muslTags = 'static_build,'; $staticFlags = '-static-pie'; } @@ -303,7 +303,6 @@ protected function buildFrankenphp(): void $config = (new SPCConfigUtil($this))->config($this->ext_list, $this->lib_list); $cflags = "{$this->arch_c_flags} {$config['cflags']} " . getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS'); $libs = $config['libs']; - $libs .= PHP_OS_FAMILY === 'Linux' ? ' -lrt' : ''; // Go's gcc driver doesn't automatically link against -lgcov or -lrt. Ugly, but necessary fix. if ((str_contains((string) getenv('SPC_DEFAULT_C_FLAGS'), '-fprofile') || str_contains((string) getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS'), '-fprofile')) && From fa87149631be7f1110114ded36f402de0bca7be9 Mon Sep 17 00:00:00 2001 From: henderkes Date: Sun, 21 Sep 2025 19:59:11 +0200 Subject: [PATCH 016/207] shallow submodules as well (grpc download goes from 2.9 gb to 900mb) --- src/SPC/command/DownloadCommand.php | 4 ++-- src/SPC/store/Downloader.php | 22 ++++++++++++---------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/SPC/command/DownloadCommand.php b/src/SPC/command/DownloadCommand.php index b9bae6a57..00bcc1948 100644 --- a/src/SPC/command/DownloadCommand.php +++ b/src/SPC/command/DownloadCommand.php @@ -106,7 +106,7 @@ public function handle(): int } // retry - $retry = intval($this->getOption('retry')); + $retry = (int) $this->getOption('retry'); f_putenv('SPC_DOWNLOAD_RETRIES=' . $retry); // Use shallow-clone can reduce git resource download @@ -265,7 +265,7 @@ private function downloadFromZip(string $path): int f_passthru((PHP_OS_FAMILY === 'Windows' ? 'rmdir /s /q ' : 'rm -rf ') . DOWNLOAD_PATH); } // unzip command check - if (PHP_OS_FAMILY !== 'Windows' && !$this->findCommand('unzip')) { + if (PHP_OS_FAMILY !== 'Windows' && !self::findCommand('unzip')) { $this->output->writeln('Missing unzip command, you need to install it first !'); $this->output->writeln('You can use "bin/spc doctor" command to check and install required tools'); return static::FAILURE; diff --git a/src/SPC/store/Downloader.php b/src/SPC/store/Downloader.php index d659253e9..3e50c93d2 100644 --- a/src/SPC/store/Downloader.php +++ b/src/SPC/store/Downloader.php @@ -65,19 +65,19 @@ public static function getLatestGithubTarball(string $name, array $source, strin url: "https://api.github.com/repos/{$source['repo']}/{$type}", hooks: [[CurlHook::class, 'setupGithubToken']], retries: self::getRetryAttempts() - ), true); + ), true, 512, JSON_THROW_ON_ERROR); $url = null; - for ($i = 0; $i < count($data); ++$i) { - if (($data[$i]['prerelease'] ?? false) === true && ($source['prefer-stable'] ?? false)) { + foreach ($data as $rel) { + if (($rel['prerelease'] ?? false) === true && ($source['prefer-stable'] ?? false)) { continue; } if (!($source['match'] ?? null)) { - $url = $data[$i]['tarball_url'] ?? null; + $url = $rel['tarball_url'] ?? null; break; } - if (preg_match('|' . $source['match'] . '|', $data[$i]['tarball_url'])) { - $url = $data[$i]['tarball_url']; + if (preg_match('|' . $source['match'] . '|', $rel['tarball_url'])) { + $url = $rel['tarball_url']; break; } } @@ -232,7 +232,8 @@ public static function downloadGit(string $name, string $url, string $branch, ?a $quiet = !defined('DEBUG_MODE') ? '-q --quiet' : ''; $git = SPC_GIT_EXEC; $shallow = defined('GIT_SHALLOW_CLONE') ? '--depth 1 --single-branch' : ''; - $recursive = ($submodules === null) ? '--recursive' : ''; + $recursive = ($submodules === null && defined('GIT_SHALLOW_CLONE')) ? '--recursive --shallow-submodules' : null; + $recursive ??= $submodules === null ? '--recursive' : ''; try { self::registerCancelEvent(function () use ($download_path) { @@ -243,8 +244,9 @@ public static function downloadGit(string $name, string $url, string $branch, ?a }); f_passthru("{$git} clone {$quiet} --config core.autocrlf=false --branch \"{$branch}\" {$shallow} {$recursive} \"{$url}\" \"{$download_path}\""); if ($submodules !== null) { + $depth_flag = defined('GIT_SHALLOW_CLONE') ? '--depth 1' : ''; foreach ($submodules as $submodule) { - f_passthru("cd \"{$download_path}\" && {$git} submodule update --init " . escapeshellarg($submodule)); + f_passthru("cd \"{$download_path}\" && {$git} submodule update --init {$depth_flag} " . escapeshellarg($submodule)); } } } catch (SPCException $e) { @@ -399,7 +401,7 @@ public static function downloadPackage(string $name, ?array $pkg = null, bool $f * Download source * * @param string $name source name - * @param null|array{ + * @param null|array{ * type: string, * repo: ?string, * url: ?string, @@ -414,7 +416,7 @@ public static function downloadPackage(string $name, ?array $pkg = null, bool $f * path: ?string, * text: ?string * } - * } $source source meta info: [type, path, rev, url, filename, regex, license] + * } $source source meta info: [type, path, rev, url, filename, regex, license] * @param bool $force Whether to force download (default: false) * @param int $download_as Lock source type (default: SPC_LOCK_SOURCE) */ From 35a90f27693226108547a118809f2e7648264f48 Mon Sep 17 00:00:00 2001 From: henderkes Date: Sun, 21 Sep 2025 20:32:47 +0200 Subject: [PATCH 017/207] skip -mcpu or -march=armv8-... flags because zig doesn't support them (stupid grpc build thirdparty hardcode) --- src/SPC/store/scripts/zig-cc.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/SPC/store/scripts/zig-cc.sh b/src/SPC/store/scripts/zig-cc.sh index d4090a0f3..6b340bc1d 100644 --- a/src/SPC/store/scripts/zig-cc.sh +++ b/src/SPC/store/scripts/zig-cc.sh @@ -19,9 +19,15 @@ while [[ $# -gt 0 ]]; do ARG_ABS="$(realpath "$ARG" 2>/dev/null || true)" [[ "$ARG_ABS" == "$BUILDROOT_ABS" ]] && PARSED_ARGS+=("-I$ARG") || PARSED_ARGS+=("-isystem$ARG") ;; - -march=*|-mcpu=*) # replace -march=x86-64 with -march=x86_64 + -march=*|-mcpu=*) OPT_NAME="${1%%=*}" OPT_VALUE="${1#*=}" + # Skip armv8- flags entirely as Zig doesn't support them + if [[ "$OPT_VALUE" == armv8-* ]]; then + shift + continue + fi + # replace -march=x86-64 with -march=x86_64 OPT_VALUE="${OPT_VALUE//-/_}" PARSED_ARGS+=("${OPT_NAME}=${OPT_VALUE}") shift From e02be69e403f7ffca11797fb1a06c818a4485910 Mon Sep 17 00:00:00 2001 From: henderkes Date: Sun, 21 Sep 2025 21:01:07 +0200 Subject: [PATCH 018/207] update grpc from 1.68.x to 1.75.x --- config/source.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/source.json b/config/source.json index 4a0e0fdb5..cab584604 100644 --- a/config/source.json +++ b/config/source.json @@ -324,7 +324,7 @@ }, "grpc": { "type": "git", - "rev": "v1.68.x", + "rev": "v1.75.x", "url": "https://github.com/grpc/grpc.git", "provide-pre-built": true, "license": { From fc90b4ae23dcec71382c17f108bd18af0d90077c Mon Sep 17 00:00:00 2001 From: henderkes Date: Mon, 22 Sep 2025 13:10:48 +0200 Subject: [PATCH 019/207] allow appending pkg_config_path #910 --- src/SPC/util/GlobalEnvManager.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/SPC/util/GlobalEnvManager.php b/src/SPC/util/GlobalEnvManager.php index 9f74d2df7..4ce3384dd 100644 --- a/src/SPC/util/GlobalEnvManager.php +++ b/src/SPC/util/GlobalEnvManager.php @@ -40,7 +40,12 @@ public static function init(): void if (is_unix()) { self::addPathIfNotExists(BUILD_BIN_PATH); self::addPathIfNotExists(PKG_ROOT_PATH . '/bin'); - self::putenv('PKG_CONFIG_PATH=' . BUILD_LIB_PATH . '/pkgconfig'); + $pkgConfigPath = getenv('PKG_CONFIG_PATH'); + if ($pkgConfigPath !== false) { + self::putenv('PKG_CONFIG_PATH=' . BUILD_LIB_PATH . "/pkgconfig:{$pkgConfigPath}"); + } else { + self::putenv('PKG_CONFIG_PATH=' . BUILD_LIB_PATH . '/pkgconfig'); + } } $ini = self::readIniFile(); From 8039ea49f9563e0d7fdf82508e09ceb38d004ab1 Mon Sep 17 00:00:00 2001 From: henderkes Date: Tue, 23 Sep 2025 11:56:12 +0200 Subject: [PATCH 020/207] soap requires libxml and session --- config/ext.json | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/config/ext.json b/config/ext.json index 188aea581..68612fe8a 100644 --- a/config/ext.json +++ b/config/ext.json @@ -759,11 +759,9 @@ }, "type": "builtin", "arg-type": "custom", - "lib-depends": [ - "libxml2" - ], - "ext-depends-windows": [ - "xml" + "ext-depends": [ + "libxml", + "session" ] }, "sockets": { From 8bda4fd31efb70f1ab01c1a005feb9e808c71f32 Mon Sep 17 00:00:00 2001 From: henderkes Date: Tue, 23 Sep 2025 11:59:30 +0200 Subject: [PATCH 021/207] simdjson requires +evex512 --- src/SPC/builder/extension/simdjson.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/SPC/builder/extension/simdjson.php b/src/SPC/builder/extension/simdjson.php index 71796ebee..29bf54bab 100644 --- a/src/SPC/builder/extension/simdjson.php +++ b/src/SPC/builder/extension/simdjson.php @@ -17,7 +17,7 @@ public function patchBeforeBuildconf(): bool FileSystem::replaceFileRegex( SOURCE_PATH . '/php-src/ext/simdjson/config.m4', '/php_version=(`.*`)$/m', - 'php_version=' . strval($php_ver) + 'php_version=' . $php_ver ); FileSystem::replaceFileStr( SOURCE_PATH . '/php-src/ext/simdjson/config.m4', @@ -31,4 +31,11 @@ public function patchBeforeBuildconf(): bool ); return true; } + + public function getSharedExtensionEnv(): array + { + $env = parent::getSharedExtensionEnv(); + $env['CFLAGS'] = $env['CXXFLAGS'] = $env['CFLAGS'] . ' -Xclang -target-feature -Xclang +evex512'; + return $env; + } } From 59dedbea2cb19e4704762b10f1e5e792e66344aa Mon Sep 17 00:00:00 2001 From: henderkes Date: Tue, 23 Sep 2025 12:00:15 +0200 Subject: [PATCH 022/207] simdjson requires +evex512 (for zig-cc) --- src/SPC/builder/extension/simdjson.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/SPC/builder/extension/simdjson.php b/src/SPC/builder/extension/simdjson.php index 29bf54bab..939c7b5e9 100644 --- a/src/SPC/builder/extension/simdjson.php +++ b/src/SPC/builder/extension/simdjson.php @@ -6,6 +6,8 @@ use SPC\builder\Extension; use SPC\store\FileSystem; +use SPC\toolchain\ToolchainManager; +use SPC\toolchain\ZigToolchain; use SPC\util\CustomExt; #[CustomExt('simdjson')] @@ -35,7 +37,9 @@ public function patchBeforeBuildconf(): bool public function getSharedExtensionEnv(): array { $env = parent::getSharedExtensionEnv(); - $env['CFLAGS'] = $env['CXXFLAGS'] = $env['CFLAGS'] . ' -Xclang -target-feature -Xclang +evex512'; + if (ToolchainManager::getToolchainClass() === ZigToolchain::class) { + $env['CFLAGS'] = $env['CXXFLAGS'] = $env['CFLAGS'] . ' -Xclang -target-feature -Xclang +evex512'; + } return $env; } } From 93e6dcab1d1a957b1521c13a13a708ff3b170877 Mon Sep 17 00:00:00 2001 From: henderkes Date: Tue, 23 Sep 2025 12:01:09 +0200 Subject: [PATCH 023/207] cflags and cxxflags separately --- src/SPC/builder/extension/simdjson.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/SPC/builder/extension/simdjson.php b/src/SPC/builder/extension/simdjson.php index 939c7b5e9..19afd0f9d 100644 --- a/src/SPC/builder/extension/simdjson.php +++ b/src/SPC/builder/extension/simdjson.php @@ -38,7 +38,8 @@ public function getSharedExtensionEnv(): array { $env = parent::getSharedExtensionEnv(); if (ToolchainManager::getToolchainClass() === ZigToolchain::class) { - $env['CFLAGS'] = $env['CXXFLAGS'] = $env['CFLAGS'] . ' -Xclang -target-feature -Xclang +evex512'; + $env['CFLAGS'] .= ' -Xclang -target-feature -Xclang +evex512'; + $env['CXXFLAGS'] .= ' -Xclang -target-feature -Xclang +evex512'; } return $env; } From 21149f6807c6f8ea924ab3dbe4b2d27b76ba512c Mon Sep 17 00:00:00 2001 From: henderkes Date: Tue, 23 Sep 2025 12:42:29 +0200 Subject: [PATCH 024/207] simdjson needs patch --- src/SPC/builder/extension/simdjson.php | 4 ++++ src/SPC/util/SPCConfigUtil.php | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/SPC/builder/extension/simdjson.php b/src/SPC/builder/extension/simdjson.php index 19afd0f9d..914fd674f 100644 --- a/src/SPC/builder/extension/simdjson.php +++ b/src/SPC/builder/extension/simdjson.php @@ -38,6 +38,10 @@ public function getSharedExtensionEnv(): array { $env = parent::getSharedExtensionEnv(); if (ToolchainManager::getToolchainClass() === ZigToolchain::class) { + $extra = getenv('SPC_COMPILER_EXTRA'); + if (!str_contains((string) $extra, '-lstdc++')) { + f_putenv('SPC_COMPILER_EXTRA=' . clean_spaces($extra . ' -lstdc++')); + } $env['CFLAGS'] .= ' -Xclang -target-feature -Xclang +evex512'; $env['CXXFLAGS'] .= ' -Xclang -target-feature -Xclang +evex512'; } diff --git a/src/SPC/util/SPCConfigUtil.php b/src/SPC/util/SPCConfigUtil.php index d19cc8583..49561c5bd 100644 --- a/src/SPC/util/SPCConfigUtil.php +++ b/src/SPC/util/SPCConfigUtil.php @@ -87,7 +87,7 @@ public function config(array $extensions = [], array $libraries = [], bool $incl if (SPCTarget::getTargetOS() === 'Darwin') { $libs .= " {$this->getFrameworksString($extensions)}"; } - if ($this->builder->hasCpp()) { + if ($this->builder->hasCpp() || collect($extensions)->contains(static fn (string $ext) => Config::getExt($ext)['cpp-extension'] ?? false)) { $libcpp = SPCTarget::getTargetOS() === 'Darwin' ? '-lc++' : '-lstdc++'; $libs = str_replace($libcpp, '', $libs) . " {$libcpp}"; } From cac57dbf7985d0efd8b586ee185c1afdf149ec7f Mon Sep 17 00:00:00 2001 From: henderkes Date: Mon, 29 Sep 2025 21:15:18 +0200 Subject: [PATCH 025/207] php 8.5 has beta 3 --- src/SPC/store/source/PhpSource.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SPC/store/source/PhpSource.php b/src/SPC/store/source/PhpSource.php index c33e172f3..2a73368e5 100644 --- a/src/SPC/store/source/PhpSource.php +++ b/src/SPC/store/source/PhpSource.php @@ -16,11 +16,11 @@ public function fetch(bool $force = false, ?array $config = null, int $lock_as = { $major = defined('SPC_BUILD_PHP_VERSION') ? SPC_BUILD_PHP_VERSION : '8.4'; if ($major === '8.5') { - Downloader::downloadSource('php-src', ['type' => 'url', 'url' => 'https://downloads.php.net/~edorian/php-8.5.0beta1.tar.xz'], $force); + Downloader::downloadSource('php-src', ['type' => 'url', 'url' => 'https://downloads.php.net/~edorian/php-8.5.0beta3.tar.xz'], $force); } elseif ($major === 'git') { Downloader::downloadSource('php-src', ['type' => 'git', 'url' => 'https://github.com/php/php-src.git', 'rev' => 'master'], $force); } else { - Downloader::downloadSource('php-src', self::getLatestPHPInfo($major), $force); + Downloader::downloadSource('php-src', $this->getLatestPHPInfo($major), $force); } } From e862bacc8ab7ad2348fe2884efa7901bf30c1536 Mon Sep 17 00:00:00 2001 From: henderkes Date: Mon, 29 Sep 2025 21:15:56 +0200 Subject: [PATCH 026/207] php 8.5 has beta 3 --- src/SPC/store/source/PhpSource.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/store/source/PhpSource.php b/src/SPC/store/source/PhpSource.php index 2a73368e5..377a8e1da 100644 --- a/src/SPC/store/source/PhpSource.php +++ b/src/SPC/store/source/PhpSource.php @@ -33,7 +33,7 @@ public function getLatestPHPInfo(string $major_version): array // 查找最新的小版本号 $info = json_decode(Downloader::curlExec( url: "https://www.php.net/releases/index.php?json&version={$major_version}", - retries: intval(getenv('SPC_DOWNLOAD_RETRIES') ?: 0) + retries: (int) getenv('SPC_DOWNLOAD_RETRIES') ?: 0 ), true); if (!isset($info['version'])) { throw new DownloaderException("Version {$major_version} not found."); From c2813d5736dafa02aebde204ba39725b5abb203b Mon Sep 17 00:00:00 2001 From: henderkes Date: Tue, 30 Sep 2025 00:12:59 +0200 Subject: [PATCH 027/207] move hasCpp to SPCConfigUtil --- src/SPC/builder/BuilderBase.php | 21 --------------------- src/SPC/util/SPCConfigUtil.php | 27 ++++++++++++++++++++++++++- tests/SPC/builder/BuilderTest.php | 6 ------ 3 files changed, 26 insertions(+), 28 deletions(-) diff --git a/src/SPC/builder/BuilderBase.php b/src/SPC/builder/BuilderBase.php index e6e27cda9..fdba936d7 100644 --- a/src/SPC/builder/BuilderBase.php +++ b/src/SPC/builder/BuilderBase.php @@ -128,27 +128,6 @@ public function getExts(bool $including_shared = true): array return array_filter($this->exts, fn ($ext) => $ext->isBuildStatic()); } - /** - * Check if there is a cpp extensions or libraries. - */ - public function hasCpp(): bool - { - // judge cpp-extension - $exts = array_keys($this->getExts(false)); - foreach ($exts as $ext) { - if (Config::getExt($ext, 'cpp-extension', false) === true) { - return true; - } - } - $libs = array_keys($this->getLibs()); - foreach ($libs as $lib) { - if (Config::getLib($lib, 'cpp-library', false) === true) { - return true; - } - } - return false; - } - /** * Set libs only mode. * diff --git a/src/SPC/util/SPCConfigUtil.php b/src/SPC/util/SPCConfigUtil.php index 49561c5bd..edbb9926f 100644 --- a/src/SPC/util/SPCConfigUtil.php +++ b/src/SPC/util/SPCConfigUtil.php @@ -6,6 +6,8 @@ use SPC\builder\BuilderBase; use SPC\builder\BuilderProvider; +use SPC\builder\Extension; +use SPC\builder\LibraryBase; use SPC\exception\WrongUsageException; use SPC\store\Config; use Symfony\Component\Console\Input\ArgvInput; @@ -87,7 +89,7 @@ public function config(array $extensions = [], array $libraries = [], bool $incl if (SPCTarget::getTargetOS() === 'Darwin') { $libs .= " {$this->getFrameworksString($extensions)}"; } - if ($this->builder->hasCpp() || collect($extensions)->contains(static fn (string $ext) => Config::getExt($ext)['cpp-extension'] ?? false)) { + if ($this->hasCpp($extensions, $libraries)) { $libcpp = SPCTarget::getTargetOS() === 'Darwin' ? '-lc++' : '-lstdc++'; $libs = str_replace($libcpp, '', $libs) . " {$libcpp}"; } @@ -123,6 +125,29 @@ public function config(array $extensions = [], array $libraries = [], bool $incl ]; } + private function hasCpp(array $extensions, array $libraries): bool + { + // judge cpp-extension + $builderExtNames = array_keys($this->builder->getExts(false)); + $extNames = array_map(fn (Extension $x) => $x->getName(), $extensions); + $exts = array_unique([...$builderExtNames, ...$extNames]); + + foreach ($exts as $ext) { + if (Config::getExt($ext, 'cpp-extension', false) === true) { + return true; + } + } + $builderLibNames = array_keys($this->builder->getLibs()); + $libNames = array_map(fn (LibraryBase $x) => $x->getName(), $libraries); + $libs = array_unique([...$builderLibNames, ...$libNames]); + foreach ($libs as $lib) { + if (Config::getLib($lib, 'cpp-library', false) === true) { + return true; + } + } + return false; + } + private function getIncludesString(array $libraries): string { $base = BUILD_INCLUDE_PATH; diff --git a/tests/SPC/builder/BuilderTest.php b/tests/SPC/builder/BuilderTest.php index d28bd4d33..b4b6258fd 100644 --- a/tests/SPC/builder/BuilderTest.php +++ b/tests/SPC/builder/BuilderTest.php @@ -62,12 +62,6 @@ public function testGetExtAndGetExts() $this->assertInstanceOf(Extension::class, $this->builder->getExt('mbregex')); } - public function testHasCpp() - { - // mbregex doesn't have cpp - $this->assertFalse($this->builder->hasCpp()); - } - public function testMakeExtensionArgs() { $this->assertStringContainsString('--enable-mbstring', $this->builder->makeStaticExtensionArgs()); From fe09d8c03ec8d895dd8eaa1bbdad52875996b1aa Mon Sep 17 00:00:00 2001 From: henderkes Date: Tue, 30 Sep 2025 00:17:17 +0200 Subject: [PATCH 028/207] add docstring --- src/globals/functions.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/globals/functions.php b/src/globals/functions.php index c8c40b68c..8127548b8 100644 --- a/src/globals/functions.php +++ b/src/globals/functions.php @@ -245,6 +245,13 @@ function clean_spaces(string $string): string return trim(preg_replace('/\s+/', ' ', $string)); } +/** + * Deduplicate flags in a string. + * + * @param string $flags The string containing flags to deduplicate. Only the last occurence of each flag will be kept. + * E.g. `-lintl -lstdc++ -lphp -lstdc++` becomes `-lintl -lphp -lstdc++` + * @return string the deduplicated string with no duplicate flags + */ function deduplicate_flags(string $flags): string { $tokens = preg_split('/\s+/', trim($flags)); From b0b031afb26147449870fc7cef219870e574eaf7 Mon Sep 17 00:00:00 2001 From: henderkes Date: Tue, 30 Sep 2025 00:17:17 +0200 Subject: [PATCH 029/207] add docstring --- src/globals/functions.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/globals/functions.php b/src/globals/functions.php index 8127548b8..da2d177f5 100644 --- a/src/globals/functions.php +++ b/src/globals/functions.php @@ -246,10 +246,10 @@ function clean_spaces(string $string): string } /** - * Deduplicate flags in a string. + * Deduplicate flags in a string. Only the last occurence of each flag will be kept. + * E.g. `-lintl -lstdc++ -lphp -lstdc++` becomes `-lintl -lphp -lstdc++` * - * @param string $flags The string containing flags to deduplicate. Only the last occurence of each flag will be kept. - * E.g. `-lintl -lstdc++ -lphp -lstdc++` becomes `-lintl -lphp -lstdc++` + * @param string $flags the string containing flags to deduplicate * @return string the deduplicated string with no duplicate flags */ function deduplicate_flags(string $flags): string From 5b6c923eefca3db68bb2bbe8e7d4ee375373002f Mon Sep 17 00:00:00 2001 From: henderkes Date: Tue, 30 Sep 2025 00:31:20 +0200 Subject: [PATCH 030/207] snappy is a c++ lib --- config/lib.json | 1 + 1 file changed, 1 insertion(+) diff --git a/config/lib.json b/config/lib.json index 5db911460..ac2c5705e 100644 --- a/config/lib.json +++ b/config/lib.json @@ -824,6 +824,7 @@ }, "snappy": { "source": "snappy", + "cpp-library": true, "static-libs-unix": [ "libsnappy.a" ], From f7744188f4d021b9d36dab840f6d499023221357 Mon Sep 17 00:00:00 2001 From: henderkes Date: Tue, 30 Sep 2025 00:34:30 +0200 Subject: [PATCH 031/207] fix configutil --- src/SPC/util/SPCConfigUtil.php | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/SPC/util/SPCConfigUtil.php b/src/SPC/util/SPCConfigUtil.php index edbb9926f..f321ca102 100644 --- a/src/SPC/util/SPCConfigUtil.php +++ b/src/SPC/util/SPCConfigUtil.php @@ -7,7 +7,6 @@ use SPC\builder\BuilderBase; use SPC\builder\BuilderProvider; use SPC\builder\Extension; -use SPC\builder\LibraryBase; use SPC\exception\WrongUsageException; use SPC\store\Config; use Symfony\Component\Console\Input\ArgvInput; @@ -129,8 +128,7 @@ private function hasCpp(array $extensions, array $libraries): bool { // judge cpp-extension $builderExtNames = array_keys($this->builder->getExts(false)); - $extNames = array_map(fn (Extension $x) => $x->getName(), $extensions); - $exts = array_unique([...$builderExtNames, ...$extNames]); + $exts = array_unique([...$builderExtNames, ...$extensions]); foreach ($exts as $ext) { if (Config::getExt($ext, 'cpp-extension', false) === true) { @@ -138,8 +136,7 @@ private function hasCpp(array $extensions, array $libraries): bool } } $builderLibNames = array_keys($this->builder->getLibs()); - $libNames = array_map(fn (LibraryBase $x) => $x->getName(), $libraries); - $libs = array_unique([...$builderLibNames, ...$libNames]); + $libs = array_unique([...$builderLibNames, ...$libraries]); foreach ($libs as $lib) { if (Config::getLib($lib, 'cpp-library', false) === true) { return true; From 2d1a61d18439d73a3d8961a3b98d2a8660caed29 Mon Sep 17 00:00:00 2001 From: henderkes Date: Tue, 30 Sep 2025 14:00:13 +0200 Subject: [PATCH 032/207] explicitly disable avx512 if zig and march not high enough --- src/SPC/builder/Extension.php | 9 ++++++++- src/SPC/builder/extension/simdjson.php | 16 ---------------- src/SPC/builder/linux/LinuxBuilder.php | 8 ++++++++ 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/src/SPC/builder/Extension.php b/src/SPC/builder/Extension.php index 1ee0e4b94..cb5901673 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -10,6 +10,8 @@ use SPC\exception\WrongUsageException; use SPC\store\Config; use SPC\store\FileSystem; +use SPC\toolchain\ToolchainManager; +use SPC\toolchain\ZigToolchain; use SPC\util\SPCConfigUtil; use SPC\util\SPCTarget; @@ -427,13 +429,18 @@ public function buildUnixShared(): void logger()->info("Extension [{$this->getName()}] patched before shared configure"); } + $has_avx512 = str_contains($this->builder->arch_c_flags ?? '', '-mavx512') || + str_contains($this->builder->arch_c_flags ?? '', '-march=x86-64-v3') || + str_contains($this->arch_c_flags ?? '', '-march=x86-64-v4') || + ToolchainManager::getToolchainClass() !== ZigToolchain::class; + shell()->cd($this->source_dir) ->setEnv($env) ->appendEnv($this->getExtraEnv()) ->exec( './configure ' . $this->getUnixConfigureArg(true) . ' --with-php-config=' . BUILD_BIN_PATH . '/php-config ' . - '--enable-shared --disable-static' + '--enable-shared --disable-static' . (!$has_avx512 ? ' php_cv_have_avx512=no ' : '') ); if ($this->patchBeforeSharedMake()) { diff --git a/src/SPC/builder/extension/simdjson.php b/src/SPC/builder/extension/simdjson.php index 914fd674f..1be99eb94 100644 --- a/src/SPC/builder/extension/simdjson.php +++ b/src/SPC/builder/extension/simdjson.php @@ -6,8 +6,6 @@ use SPC\builder\Extension; use SPC\store\FileSystem; -use SPC\toolchain\ToolchainManager; -use SPC\toolchain\ZigToolchain; use SPC\util\CustomExt; #[CustomExt('simdjson')] @@ -33,18 +31,4 @@ public function patchBeforeBuildconf(): bool ); return true; } - - public function getSharedExtensionEnv(): array - { - $env = parent::getSharedExtensionEnv(); - if (ToolchainManager::getToolchainClass() === ZigToolchain::class) { - $extra = getenv('SPC_COMPILER_EXTRA'); - if (!str_contains((string) $extra, '-lstdc++')) { - f_putenv('SPC_COMPILER_EXTRA=' . clean_spaces($extra . ' -lstdc++')); - } - $env['CFLAGS'] .= ' -Xclang -target-feature -Xclang +evex512'; - $env['CXXFLAGS'] .= ' -Xclang -target-feature -Xclang +evex512'; - } - return $env; - } } diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index b1b1ffc57..0eaf86a94 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -9,6 +9,8 @@ use SPC\exception\WrongUsageException; use SPC\store\FileSystem; use SPC\store\SourcePatcher; +use SPC\toolchain\ToolchainManager; +use SPC\toolchain\ZigToolchain; use SPC\util\GlobalEnvManager; use SPC\util\SPCConfigUtil; use SPC\util\SPCTarget; @@ -103,6 +105,11 @@ public function buildPHP(int $build_target = BUILD_TARGET_NONE): void ); } + $has_avx512 = str_contains($this->arch_c_flags, '-mavx512') || + str_contains($this->arch_c_flags, '-march=x86-64-v3') || + str_contains($this->arch_c_flags, '-march=x86-64-v4') || + ToolchainManager::getToolchainClass() !== ZigToolchain::class; + $this->seekPhpSrcLogFileOnException(fn () => shell()->cd(SOURCE_PATH . '/php-src')->exec( $php_configure_env . ' ' . getenv('SPC_CMD_PREFIX_PHP_CONFIGURE') . ' ' . @@ -116,6 +123,7 @@ public function buildPHP(int $build_target = BUILD_TARGET_NONE): void $json_74 . $zts . $maxExecutionTimers . + (!$has_avx512 ? 'php_cv_have_avx512=no ' : '') . $this->makeStaticExtensionArgs() . ' ' )); From c5316f92315e8a9a6e521b22c3c6d2f8d6b6efb2 Mon Sep 17 00:00:00 2001 From: henderkes Date: Tue, 30 Sep 2025 14:21:31 +0200 Subject: [PATCH 033/207] -v3 doesn't have avx512 yet --- src/SPC/builder/Extension.php | 3 +-- src/SPC/builder/linux/LinuxBuilder.php | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/SPC/builder/Extension.php b/src/SPC/builder/Extension.php index cb5901673..0570159fc 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -430,7 +430,6 @@ public function buildUnixShared(): void } $has_avx512 = str_contains($this->builder->arch_c_flags ?? '', '-mavx512') || - str_contains($this->builder->arch_c_flags ?? '', '-march=x86-64-v3') || str_contains($this->arch_c_flags ?? '', '-march=x86-64-v4') || ToolchainManager::getToolchainClass() !== ZigToolchain::class; @@ -440,7 +439,7 @@ public function buildUnixShared(): void ->exec( './configure ' . $this->getUnixConfigureArg(true) . ' --with-php-config=' . BUILD_BIN_PATH . '/php-config ' . - '--enable-shared --disable-static' . (!$has_avx512 ? ' php_cv_have_avx512=no ' : '') + '--enable-shared --disable-static' . (!$has_avx512 ? ' php_cv_have_avx512=no php_cv_have_avx512vbmi=no' : '') ); if ($this->patchBeforeSharedMake()) { diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index 0eaf86a94..d9e0b8051 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -106,7 +106,6 @@ public function buildPHP(int $build_target = BUILD_TARGET_NONE): void } $has_avx512 = str_contains($this->arch_c_flags, '-mavx512') || - str_contains($this->arch_c_flags, '-march=x86-64-v3') || str_contains($this->arch_c_flags, '-march=x86-64-v4') || ToolchainManager::getToolchainClass() !== ZigToolchain::class; @@ -123,7 +122,7 @@ public function buildPHP(int $build_target = BUILD_TARGET_NONE): void $json_74 . $zts . $maxExecutionTimers . - (!$has_avx512 ? 'php_cv_have_avx512=no ' : '') . + (!$has_avx512 ? 'php_cv_have_avx512=no php_cv_have_avx512vbmi ' : '') . $this->makeStaticExtensionArgs() . ' ' )); From 044275d90927479c82f670bb7e54d27fcfbf8457 Mon Sep 17 00:00:00 2001 From: henderkes Date: Tue, 30 Sep 2025 14:22:38 +0200 Subject: [PATCH 034/207] typo --- src/SPC/builder/linux/LinuxBuilder.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index d9e0b8051..6a543ec14 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -122,7 +122,7 @@ public function buildPHP(int $build_target = BUILD_TARGET_NONE): void $json_74 . $zts . $maxExecutionTimers . - (!$has_avx512 ? 'php_cv_have_avx512=no php_cv_have_avx512vbmi ' : '') . + (!$has_avx512 ? 'php_cv_have_avx512=no php_cv_have_avx512vbmi=no ' : '') . $this->makeStaticExtensionArgs() . ' ' )); From 31a4498056434aec4db07bed635adb00c876f031 Mon Sep 17 00:00:00 2001 From: henderkes Date: Tue, 30 Sep 2025 15:07:22 +0200 Subject: [PATCH 035/207] bring back simdjson tests, extension headers do not properly guard for avx512 symbols --- src/SPC/builder/extension/simdjson.php | 16 ++++++++++++++++ src/globals/test-extensions.php | 4 ++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/SPC/builder/extension/simdjson.php b/src/SPC/builder/extension/simdjson.php index 1be99eb94..914fd674f 100644 --- a/src/SPC/builder/extension/simdjson.php +++ b/src/SPC/builder/extension/simdjson.php @@ -6,6 +6,8 @@ use SPC\builder\Extension; use SPC\store\FileSystem; +use SPC\toolchain\ToolchainManager; +use SPC\toolchain\ZigToolchain; use SPC\util\CustomExt; #[CustomExt('simdjson')] @@ -31,4 +33,18 @@ public function patchBeforeBuildconf(): bool ); return true; } + + public function getSharedExtensionEnv(): array + { + $env = parent::getSharedExtensionEnv(); + if (ToolchainManager::getToolchainClass() === ZigToolchain::class) { + $extra = getenv('SPC_COMPILER_EXTRA'); + if (!str_contains((string) $extra, '-lstdc++')) { + f_putenv('SPC_COMPILER_EXTRA=' . clean_spaces($extra . ' -lstdc++')); + } + $env['CFLAGS'] .= ' -Xclang -target-feature -Xclang +evex512'; + $env['CXXFLAGS'] .= ' -Xclang -target-feature -Xclang +evex512'; + } + return $env; + } } diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index 749ed3b47..954cb4743 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -23,8 +23,8 @@ // test os (macos-13, macos-14, macos-15, ubuntu-latest, windows-latest are available) $test_os = [ - 'macos-13', // bin/spc for x86_64 - // 'macos-14', // bin/spc for arm64 + // '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 From 3966bd5f0ae90119335c4ea23a773dbe14136e2e Mon Sep 17 00:00:00 2001 From: henderkes Date: Mon, 6 Oct 2025 20:06:37 +0200 Subject: [PATCH 036/207] update pgsql version to 18.0 --- config/source.json | 2 +- src/SPC/builder/unix/library/postgresql.php | 39 +++++++-------------- 2 files changed, 13 insertions(+), 28 deletions(-) diff --git a/config/source.json b/config/source.json index 4a0e0fdb5..450b7b3c6 100644 --- a/config/source.json +++ b/config/source.json @@ -880,7 +880,7 @@ "postgresql": { "type": "ghtagtar", "repo": "postgres/postgres", - "match": "REL_16_\\d+", + "match": "REL_18_\\d+", "license": { "type": "file", "path": "COPYRIGHT" diff --git a/src/SPC/builder/unix/library/postgresql.php b/src/SPC/builder/unix/library/postgresql.php index 3bc6835dd..0a3489a13 100644 --- a/src/SPC/builder/unix/library/postgresql.php +++ b/src/SPC/builder/unix/library/postgresql.php @@ -6,7 +6,6 @@ use SPC\builder\linux\library\LinuxLibraryBase; use SPC\exception\BuildFailureException; -use SPC\exception\FileSystemException; use SPC\store\FileSystem; use SPC\util\SPCTarget; @@ -65,17 +64,18 @@ protected function build(): void FileSystem::resetDir($this->source_dir . '/build'); - $version = $this->getVersion(); - // 16.1 workaround - if (version_compare($version, '16.1') >= 0) { - # 有静态链接配置 参考文件: src/interfaces/libpq/Makefile - shell()->cd($this->source_dir . '/build') - ->exec('sed -i.backup "s/invokes exit\'; exit 1;/invokes exit\';/" ../src/interfaces/libpq/Makefile') - ->exec('sed -i.backup "278 s/^/# /" ../src/Makefile.shlib') - ->exec('sed -i.backup "402 s/^/# /" ../src/Makefile.shlib'); - } else { - throw new BuildFailureException('Unsupported version for postgresql: ' . $version . ' !'); - } + # 有静态链接配置 参考文件: src/interfaces/libpq/Makefile + shell()->cd($this->source_dir . '/build') + ->exec('sed -i.backup "s/invokes exit\'; exit 1;/invokes exit\';/" ../src/interfaces/libpq/Makefile') + ->exec('sed -i.backup "278 s/^/# /" ../src/Makefile.shlib') + ->exec('sed -i.backup "402 s/^/# /" ../src/Makefile.shlib'); + + // php source relies on the non-private encoding functions in libpgcommon.a + FileSystem::replaceFileStr( + $this->source_dir . '/src/common/Makefile', + '$(OBJS_FRONTEND): CPPFLAGS += -DUSE_PRIVATE_ENCODING_FUNCS', + '$(OBJS_FRONTEND): CPPFLAGS += -UUSE_PRIVATE_ENCODING_FUNCS', + ); // configure shell()->cd($this->source_dir . '/build')->initializeEnv($this) @@ -83,14 +83,12 @@ protected function build(): void ->exec( "{$envs} ../configure " . "--prefix={$builddir} " . - ($this->builder->getOption('enable-zts') ? '--enable-thread-safety ' : '--disable-thread-safety ') . '--enable-coverage=no ' . '--with-ssl=openssl ' . '--with-readline ' . '--with-libxml ' . ($this->builder->getLib('icu') ? '--with-icu ' : '--without-icu ') . ($this->builder->getLib('ldap') ? '--with-ldap ' : '--without-ldap ') . - // '--without-ldap ' . ($this->builder->getLib('libxslt') ? '--with-libxslt ' : '--without-libxslt ') . ($this->builder->getLib('zstd') ? '--with-zstd ' : '--without-zstd ') . '--without-lz4 ' . @@ -114,17 +112,4 @@ protected function build(): void FileSystem::replaceFileStr(BUILD_LIB_PATH . '/pkgconfig/libpq.pc', '-lldap', '-lldap -llber'); } - - private function getVersion(): string - { - try { - $file = FileSystem::readFile($this->source_dir . '/meson.build'); - if (preg_match("/^\\s+version:\\s?'(.*)'/m", $file, $match)) { - return $match[1]; - } - return 'unknown'; - } catch (FileSystemException) { - return 'unknown'; - } - } } From 8ae2755dbe8badcbb37b48bfea067060a97ed205 Mon Sep 17 00:00:00 2001 From: henderkes Date: Mon, 6 Oct 2025 20:14:52 +0200 Subject: [PATCH 037/207] update php 8.5 to rc1 --- src/SPC/store/source/PhpSource.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/store/source/PhpSource.php b/src/SPC/store/source/PhpSource.php index c33e172f3..4df1d8884 100644 --- a/src/SPC/store/source/PhpSource.php +++ b/src/SPC/store/source/PhpSource.php @@ -16,7 +16,7 @@ public function fetch(bool $force = false, ?array $config = null, int $lock_as = { $major = defined('SPC_BUILD_PHP_VERSION') ? SPC_BUILD_PHP_VERSION : '8.4'; if ($major === '8.5') { - Downloader::downloadSource('php-src', ['type' => 'url', 'url' => 'https://downloads.php.net/~edorian/php-8.5.0beta1.tar.xz'], $force); + Downloader::downloadSource('php-src', ['type' => 'url', 'url' => 'https://github.com/php/php-src/archive/refs/tags/php-8.5.0RC1.tar.gz'], $force); } elseif ($major === 'git') { Downloader::downloadSource('php-src', ['type' => 'git', 'url' => 'https://github.com/php/php-src.git', 'rev' => 'master'], $force); } else { From a49ae055998f8138b7247709c3f0db3213e511c4 Mon Sep 17 00:00:00 2001 From: henderkes Date: Mon, 6 Oct 2025 21:00:45 +0200 Subject: [PATCH 038/207] use latest zip version for building shared --- config/ext.json | 5 +++-- config/source.json | 10 ++++++++++ src/SPC/builder/extension/zip.php | 17 +++++++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 src/SPC/builder/extension/zip.php diff --git a/config/ext.json b/config/ext.json index 188aea581..6d84dc3a1 100644 --- a/config/ext.json +++ b/config/ext.json @@ -1154,8 +1154,9 @@ "support": { "BSD": "wip" }, - "type": "builtin", - "arg-type": "with-path", + "type": "external", + "source": "ext-zip", + "arg-type": "custom", "arg-type-windows": "enable", "lib-depends-unix": [ "libzip" diff --git a/config/source.json b/config/source.json index 4a0e0fdb5..93668df7f 100644 --- a/config/source.json +++ b/config/source.json @@ -263,6 +263,16 @@ "path": "LICENSE" } }, + "ext-zip": { + "type": "url", + "url": "https://pecl.php.net/get/zip", + "path": "php-src/ext/zip/latest", + "filename": "ext-zip.tgz", + "license": { + "type": "file", + "path": "LICENSE" + } + }, "ext-zstd": { "type": "git", "path": "php-src/ext/zstd", diff --git a/src/SPC/builder/extension/zip.php b/src/SPC/builder/extension/zip.php new file mode 100644 index 000000000..eab5e40ae --- /dev/null +++ b/src/SPC/builder/extension/zip.php @@ -0,0 +1,17 @@ + Date: Mon, 6 Oct 2025 21:03:57 +0200 Subject: [PATCH 039/207] test pgsql without macos 13 --- src/globals/test-extensions.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index 764cfc7d3..9a8924ee2 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -23,14 +23,14 @@ // 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,13 +50,13 @@ // 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' => 'pgsql', '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', }; // If you want to test shared extensions, add them below (comma separated, example `bcmath,openssl`). $shared_extensions = match (PHP_OS_FAMILY) { - 'Linux' => 'zip', + 'Linux' => '', 'Darwin' => '', 'Windows' => '', }; From e437bf2ffe775b0e3e4f1dd71c91456401cd4e62 Mon Sep 17 00:00:00 2001 From: henderkes Date: Mon, 6 Oct 2025 21:05:05 +0200 Subject: [PATCH 040/207] don't test macos 13 --- src/globals/test-extensions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index 764cfc7d3..d0c459d2a 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -23,7 +23,7 @@ // 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 From c4440668bbc5786b3ed36a87953f40140c382b9e Mon Sep 17 00:00:00 2001 From: henderkes Date: Mon, 6 Oct 2025 21:28:57 +0200 Subject: [PATCH 041/207] make sure -DFRONTEND is used --- src/SPC/builder/unix/library/postgresql.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SPC/builder/unix/library/postgresql.php b/src/SPC/builder/unix/library/postgresql.php index 0a3489a13..ae5e35f30 100644 --- a/src/SPC/builder/unix/library/postgresql.php +++ b/src/SPC/builder/unix/library/postgresql.php @@ -56,7 +56,7 @@ protected function build(): void if ($this->builder->getLib('icu')) { $libcpp = $this instanceof LinuxLibraryBase ? ' -lstdc++' : ' -lc++'; } - $envs .= " LIBS=\"{$libs}{$libcpp}\" "; + $envs .= " LIBS=\"{$libs} {$libs}{$libcpp}\" "; // macOS doesn't understand how to link properly } if ($error_exec_cnt > 0) { throw new BuildFailureException('Failed to get pkg-config information!'); @@ -74,7 +74,7 @@ protected function build(): void FileSystem::replaceFileStr( $this->source_dir . '/src/common/Makefile', '$(OBJS_FRONTEND): CPPFLAGS += -DUSE_PRIVATE_ENCODING_FUNCS', - '$(OBJS_FRONTEND): CPPFLAGS += -UUSE_PRIVATE_ENCODING_FUNCS', + '$(OBJS_FRONTEND): CPPFLAGS += -UUSE_PRIVATE_ENCODING_FUNCS -DFRONTEND', ); // configure From 6c43fa55b10948b34dd50024c0f19c8d13af9eee Mon Sep 17 00:00:00 2001 From: henderkes Date: Mon, 6 Oct 2025 21:37:36 +0200 Subject: [PATCH 042/207] don't use -static, shared libraries cannot link against static musl libc and linking isn't done for static libraries yet --- src/SPC/builder/unix/library/postgresql.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/SPC/builder/unix/library/postgresql.php b/src/SPC/builder/unix/library/postgresql.php index ae5e35f30..6d4cf804d 100644 --- a/src/SPC/builder/unix/library/postgresql.php +++ b/src/SPC/builder/unix/library/postgresql.php @@ -7,7 +7,6 @@ use SPC\builder\linux\library\LinuxLibraryBase; use SPC\exception\BuildFailureException; use SPC\store\FileSystem; -use SPC\util\SPCTarget; trait postgresql { @@ -46,7 +45,7 @@ protected function build(): void $error_exec_cnt += $output[0] === 0 ? 0 : 1; if (!empty($output[1][0])) { $ldflags = $output[1][0]; - $envs .= SPCTarget::isStatic() ? " LDFLAGS=\"{$ldflags} -static\" " : " LDFLAGS=\"{$ldflags}\" "; + $envs .= " LDFLAGS=\"{$ldflags}\" "; } $output = shell()->execWithResult("pkg-config --libs-only-l --static {$packages}"); $error_exec_cnt += $output[0] === 0 ? 0 : 1; From 781260f3fce28c82e6ff2cfe6963d867250e1972 Mon Sep 17 00:00:00 2001 From: henderkes Date: Mon, 6 Oct 2025 22:10:28 +0200 Subject: [PATCH 043/207] attempt fix for aarch64 --- src/SPC/builder/unix/library/postgresql.php | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/SPC/builder/unix/library/postgresql.php b/src/SPC/builder/unix/library/postgresql.php index 6d4cf804d..1c492665e 100644 --- a/src/SPC/builder/unix/library/postgresql.php +++ b/src/SPC/builder/unix/library/postgresql.php @@ -7,9 +7,23 @@ use SPC\builder\linux\library\LinuxLibraryBase; use SPC\exception\BuildFailureException; use SPC\store\FileSystem; +use SPC\util\SPCTarget; trait postgresql { + public function patchBeforeBuild(): bool + { + if (SPCTarget::getLibcVersion() === '2.17' && GNU_ARCH === 'aarch64') { + FileSystem::replaceFileStr( + $this->source_dir . '/src/port/pg_crc32c_armv8_choose.c', + '#if defined(__linux__) && !defined(__aarch64__) && !defined(HWCAP2_CRC32)', + '#if defined(__linux__) && !defined(HWCAP_CRC32)', + ); + return true; + } + return false; + } + protected function build(): void { $builddir = BUILD_ROOT_PATH; @@ -55,7 +69,7 @@ protected function build(): void if ($this->builder->getLib('icu')) { $libcpp = $this instanceof LinuxLibraryBase ? ' -lstdc++' : ' -lc++'; } - $envs .= " LIBS=\"{$libs} {$libs}{$libcpp}\" "; // macOS doesn't understand how to link properly + $envs .= " LIBS=\"{$libs}{$libcpp}\" "; } if ($error_exec_cnt > 0) { throw new BuildFailureException('Failed to get pkg-config information!'); From 17a25b44e280def78a2a5b23dfecf5c35754510f Mon Sep 17 00:00:00 2001 From: henderkes Date: Mon, 6 Oct 2025 22:26:00 +0200 Subject: [PATCH 044/207] attempt fix for aarch64 #2 --- src/SPC/builder/unix/library/postgresql.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/SPC/builder/unix/library/postgresql.php b/src/SPC/builder/unix/library/postgresql.php index 1c492665e..476c055d2 100644 --- a/src/SPC/builder/unix/library/postgresql.php +++ b/src/SPC/builder/unix/library/postgresql.php @@ -14,6 +14,11 @@ trait postgresql public function patchBeforeBuild(): bool { if (SPCTarget::getLibcVersion() === '2.17' && GNU_ARCH === 'aarch64') { + FileSystem::replaceFileStr( + $this->source_dir . '/src/port/pg_popcount_aarch64.c', + 'value & HWCAP_SVE', + 'value & 0', + ); FileSystem::replaceFileStr( $this->source_dir . '/src/port/pg_crc32c_armv8_choose.c', '#if defined(__linux__) && !defined(__aarch64__) && !defined(HWCAP2_CRC32)', From d789b1a472b7f62473eb24bc79930fc0897ef71a Mon Sep 17 00:00:00 2001 From: henderkes Date: Mon, 6 Oct 2025 22:31:23 +0200 Subject: [PATCH 045/207] fix musl toolchain (needs LD_LIBRARY_PATH) --- src/SPC/builder/unix/library/postgresql.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/SPC/builder/unix/library/postgresql.php b/src/SPC/builder/unix/library/postgresql.php index 476c055d2..adf047731 100644 --- a/src/SPC/builder/unix/library/postgresql.php +++ b/src/SPC/builder/unix/library/postgresql.php @@ -95,9 +95,16 @@ protected function build(): void '$(OBJS_FRONTEND): CPPFLAGS += -UUSE_PRIVATE_ENCODING_FUNCS -DFRONTEND', ); + $env = [ + 'CFLAGS' => $cflags, + ]; + if ($ldLibraryPath = getenv('SPC_LD_LIBRARY_PATH')) { + $env['LD_LIBRARY_PATH'] = $ldLibraryPath; + } + // configure shell()->cd($this->source_dir . '/build')->initializeEnv($this) - ->appendEnv(['CFLAGS' => $cflags]) + ->appendEnv($env) ->exec( "{$envs} ../configure " . "--prefix={$builddir} " . From 9ee623112d3baf9dccc992bc625c157d6b79714e Mon Sep 17 00:00:00 2001 From: henderkes Date: Mon, 6 Oct 2025 22:43:03 +0200 Subject: [PATCH 046/207] attempt to fix macOS? --- src/SPC/builder/unix/library/postgresql.php | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/SPC/builder/unix/library/postgresql.php b/src/SPC/builder/unix/library/postgresql.php index adf047731..46973ef58 100644 --- a/src/SPC/builder/unix/library/postgresql.php +++ b/src/SPC/builder/unix/library/postgresql.php @@ -103,7 +103,7 @@ protected function build(): void } // configure - shell()->cd($this->source_dir . '/build')->initializeEnv($this) + $shell = shell()->cd($this->source_dir . '/build')->initializeEnv($this) ->appendEnv($env) ->exec( "{$envs} ../configure " . @@ -122,7 +122,13 @@ protected function build(): void '--without-pam ' . '--without-bonjour ' . '--without-tcl ' - ) + ); + + if (SPCTarget::getTargetOS() === 'Darwin') { + FileSystem::replaceFileStr($this->source_dir . '/build/src/Makefile.global', '-lldap', '-lldap -llber'); + } + + $shell ->exec($envs . ' make -C src/bin/pg_config install') ->exec($envs . ' make -C src/include install') ->exec($envs . ' make -C src/common install') From 864db0ebc5ee543640afda7d48fe373f2a3a99ff Mon Sep 17 00:00:00 2001 From: henderkes Date: Mon, 6 Oct 2025 22:48:14 +0200 Subject: [PATCH 047/207] fix macos finally I hope --- src/SPC/builder/unix/library/postgresql.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/SPC/builder/unix/library/postgresql.php b/src/SPC/builder/unix/library/postgresql.php index 46973ef58..25d74cf0b 100644 --- a/src/SPC/builder/unix/library/postgresql.php +++ b/src/SPC/builder/unix/library/postgresql.php @@ -7,6 +7,7 @@ use SPC\builder\linux\library\LinuxLibraryBase; use SPC\exception\BuildFailureException; use SPC\store\FileSystem; +use SPC\util\PkgConfigUtil; use SPC\util\SPCTarget; trait postgresql @@ -124,9 +125,10 @@ protected function build(): void '--without-tcl ' ); - if (SPCTarget::getTargetOS() === 'Darwin') { - FileSystem::replaceFileStr($this->source_dir . '/build/src/Makefile.global', '-lldap', '-lldap -llber'); - } + $libs = PkgConfigUtil::getLibsArray('ldap'); + $libs = clean_spaces(implode(' ', $libs)); + FileSystem::replaceFileStr($this->source_dir . '/build/src/Makefile.global', '-lldap', $libs); + FileSystem::replaceFileStr($this->source_dir . '/build/Makefile.status', '-lldap', $libs); $shell ->exec($envs . ' make -C src/bin/pg_config install') From 15cd8543f154e30530d5ccb2dda9778751bfafa2 Mon Sep 17 00:00:00 2001 From: henderkes Date: Mon, 6 Oct 2025 22:50:37 +0200 Subject: [PATCH 048/207] arm64 fix --- src/SPC/builder/unix/library/postgresql.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SPC/builder/unix/library/postgresql.php b/src/SPC/builder/unix/library/postgresql.php index 25d74cf0b..4e3c4f7b0 100644 --- a/src/SPC/builder/unix/library/postgresql.php +++ b/src/SPC/builder/unix/library/postgresql.php @@ -17,8 +17,8 @@ public function patchBeforeBuild(): bool if (SPCTarget::getLibcVersion() === '2.17' && GNU_ARCH === 'aarch64') { FileSystem::replaceFileStr( $this->source_dir . '/src/port/pg_popcount_aarch64.c', - 'value & HWCAP_SVE', - 'value & 0', + 'HWCAP_SVE', + '0', ); FileSystem::replaceFileStr( $this->source_dir . '/src/port/pg_crc32c_armv8_choose.c', From 3467c9d2911991d3db4a714d03e2028ad606aa82 Mon Sep 17 00:00:00 2001 From: henderkes Date: Mon, 6 Oct 2025 22:53:41 +0200 Subject: [PATCH 049/207] patch correct file --- src/SPC/builder/unix/library/postgresql.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/builder/unix/library/postgresql.php b/src/SPC/builder/unix/library/postgresql.php index 4e3c4f7b0..3b7754663 100644 --- a/src/SPC/builder/unix/library/postgresql.php +++ b/src/SPC/builder/unix/library/postgresql.php @@ -127,8 +127,8 @@ protected function build(): void $libs = PkgConfigUtil::getLibsArray('ldap'); $libs = clean_spaces(implode(' ', $libs)); + FileSystem::replaceFileStr($this->source_dir . '/build/config.status', '-lldap', $libs); FileSystem::replaceFileStr($this->source_dir . '/build/src/Makefile.global', '-lldap', $libs); - FileSystem::replaceFileStr($this->source_dir . '/build/Makefile.status', '-lldap', $libs); $shell ->exec($envs . ' make -C src/bin/pg_config install') From 911bc74bf44875f1b37617b9bda7557b3ab0a51d Mon Sep 17 00:00:00 2001 From: DubbleClick Date: Wed, 8 Oct 2025 08:16:54 +0200 Subject: [PATCH 050/207] 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 188aea581..9b8e92e84 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 4a0e0fdb5..a66398623 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 a8ee48aa0..c0dd3e65c 100644 --- a/src/SPC/builder/extension/readline.php +++ b/src/SPC/builder/extension/readline.php @@ -23,12 +23,7 @@ public function patchBeforeConfigure(): bool 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 000000000..eaa159f91 --- /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 051/207] 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 a66398623..fd138bbec 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 052/207] 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 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); } From 31906b36e514f42f9d410de618d3ee805bf3a101 Mon Sep 17 00:00:00 2001 From: henderkes Date: Wed, 8 Oct 2025 08:48:30 +0200 Subject: [PATCH 053/207] 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 37faca3c4..1719914b7 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 fd138bbec..c13820df0 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 c0dd3e65c..ccf489cb5 100644 --- a/src/SPC/builder/extension/readline.php +++ b/src/SPC/builder/extension/readline.php @@ -23,7 +23,7 @@ public function patchBeforeConfigure(): bool 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 8ac178c66..2f4c0dbce 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 054/207] 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 2f4c0dbce..e436ee8b2 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 055/207] 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 764cfc7d3..2e8bc1958 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -23,14 +23,14 @@ // 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 @@ // 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 056/207] 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 ccf489cb5..70829aff8 100644 --- a/src/SPC/builder/extension/readline.php +++ b/src/SPC/builder/extension/readline.php @@ -7,6 +7,7 @@ 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 @@ public function buildUnixShared(): void } 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 057/207] 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 70829aff8..fdfa87c66 100644 --- a/src/SPC/builder/extension/readline.php +++ b/src/SPC/builder/extension/readline.php @@ -36,31 +36,20 @@ public function buildUnixShared(): void 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 b1b1ffc57..5620b6ee2 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -4,6 +4,7 @@ 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 @@ public function testPHP(int $build_target = BUILD_TARGET_NONE) 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 058/207] 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 fdfa87c66..b9afd4f96 100644 --- a/src/SPC/builder/extension/readline.php +++ b/src/SPC/builder/extension/readline.php @@ -36,9 +36,9 @@ public function buildUnixShared(): void 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 5620b6ee2..17bb1c5ed 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -171,12 +171,12 @@ public function testPHP(int $build_target = BUILD_TARGET_NONE) 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 059/207] 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 ac7efd1ec..4965e8acd 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -298,7 +298,7 @@ public function runCliCheckUnix(): void // 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 @@ public function runCliCheckWindows(): void { // 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 b9afd4f96..b12e8b89e 100644 --- a/src/SPC/builder/extension/readline.php +++ b/src/SPC/builder/extension/readline.php @@ -5,6 +5,7 @@ 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 @@ public function buildUnixShared(): void 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 060/207] 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 4b9f294ad..35941f683 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 b12e8b89e..035d7b438 100644 --- a/src/SPC/builder/extension/readline.php +++ b/src/SPC/builder/extension/readline.php @@ -8,7 +8,6 @@ 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 @@ public function runCliCheckUnix(): void 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 daa0f93ba..b2e515ebc 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -4,7 +4,6 @@ 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 @@ public function buildPHP(int $build_target = BUILD_TARGET_NONE): void $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 @@ public function testPHP(int $build_target = BUILD_TARGET_NONE) */ 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 @@ protected function buildCli(): void 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 @@ protected function buildMicro(): void // 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 @@ protected function buildMicro(): void 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 @@ protected function buildFpm(): void 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 ef7b303b7..39f91e385 100644 --- a/src/SPC/builder/macos/MacOSBuilder.php +++ b/src/SPC/builder/macos/MacOSBuilder.php @@ -186,8 +186,8 @@ protected function buildCli(): void $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 @@ protected function buildCgi(): void $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 @@ protected function buildMicro(): void $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 @@ protected function buildFpm(): void $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 @@ protected function buildFpm(): void 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 061/207] 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 eaa159f91..ef8692126 100644 --- a/src/SPC/builder/linux/library/libedit.php +++ b/src/SPC/builder/linux/library/libedit.php @@ -4,9 +4,6 @@ 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 bd32d22ea..339e655ab 100644 --- a/src/SPC/builder/linux/library/readline.php +++ b/src/SPC/builder/linux/library/readline.php @@ -4,9 +4,6 @@ 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 07e9c22fb..18d2c3d11 100644 --- a/src/SPC/builder/macos/library/libedit.php +++ b/src/SPC/builder/macos/library/libedit.php @@ -4,9 +4,6 @@ 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 bdd38c081..baf9747d0 100644 --- a/src/SPC/builder/macos/library/readline.php +++ b/src/SPC/builder/macos/library/readline.php @@ -4,9 +4,6 @@ namespace SPC\builder\macos\library; -/** - * gmp is a template library class for unix - */ class readline extends MacOSLibraryBase { use \SPC\builder\unix\library\readline; From fa4d33671dc5f0e14e18f0d3fafb7a3a9f1bfa7f Mon Sep 17 00:00:00 2001 From: henderkes Date: Fri, 10 Oct 2025 18:35:15 +0200 Subject: [PATCH 062/207] update to RC2 --- src/SPC/store/source/PhpSource.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/store/source/PhpSource.php b/src/SPC/store/source/PhpSource.php index 4df1d8884..38861427a 100644 --- a/src/SPC/store/source/PhpSource.php +++ b/src/SPC/store/source/PhpSource.php @@ -16,7 +16,7 @@ public function fetch(bool $force = false, ?array $config = null, int $lock_as = { $major = defined('SPC_BUILD_PHP_VERSION') ? SPC_BUILD_PHP_VERSION : '8.4'; if ($major === '8.5') { - Downloader::downloadSource('php-src', ['type' => 'url', 'url' => 'https://github.com/php/php-src/archive/refs/tags/php-8.5.0RC1.tar.gz'], $force); + Downloader::downloadSource('php-src', ['type' => 'url', 'url' => 'https://github.com/php/php-src/archive/refs/tags/php-8.5.0RC2.tar.gz'], $force); } elseif ($major === 'git') { Downloader::downloadSource('php-src', ['type' => 'git', 'url' => 'https://github.com/php/php-src.git', 'rev' => 'master'], $force); } else { From 018dfae15e16d691ed22bf418d0d18d9c0dd196e Mon Sep 17 00:00:00 2001 From: henderkes Date: Sat, 11 Oct 2025 10:38:51 +0200 Subject: [PATCH 063/207] suggestions --- src/SPC/builder/Extension.php | 8 +------- src/SPC/builder/linux/LinuxBuilder.php | 8 +------- src/SPC/toolchain/ZigToolchain.php | 5 +++++ 3 files changed, 7 insertions(+), 14 deletions(-) diff --git a/src/SPC/builder/Extension.php b/src/SPC/builder/Extension.php index 0570159fc..9e36aeff5 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -10,8 +10,6 @@ use SPC\exception\WrongUsageException; use SPC\store\Config; use SPC\store\FileSystem; -use SPC\toolchain\ToolchainManager; -use SPC\toolchain\ZigToolchain; use SPC\util\SPCConfigUtil; use SPC\util\SPCTarget; @@ -429,17 +427,13 @@ public function buildUnixShared(): void logger()->info("Extension [{$this->getName()}] patched before shared configure"); } - $has_avx512 = str_contains($this->builder->arch_c_flags ?? '', '-mavx512') || - str_contains($this->arch_c_flags ?? '', '-march=x86-64-v4') || - ToolchainManager::getToolchainClass() !== ZigToolchain::class; - shell()->cd($this->source_dir) ->setEnv($env) ->appendEnv($this->getExtraEnv()) ->exec( './configure ' . $this->getUnixConfigureArg(true) . ' --with-php-config=' . BUILD_BIN_PATH . '/php-config ' . - '--enable-shared --disable-static' . (!$has_avx512 ? ' php_cv_have_avx512=no php_cv_have_avx512vbmi=no' : '') + '--enable-shared --disable-static ' . getenv('SPC_EXTRA_PHP_VARS') ); if ($this->patchBeforeSharedMake()) { diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index 6a543ec14..2a3c89123 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -9,8 +9,6 @@ use SPC\exception\WrongUsageException; use SPC\store\FileSystem; use SPC\store\SourcePatcher; -use SPC\toolchain\ToolchainManager; -use SPC\toolchain\ZigToolchain; use SPC\util\GlobalEnvManager; use SPC\util\SPCConfigUtil; use SPC\util\SPCTarget; @@ -105,10 +103,6 @@ public function buildPHP(int $build_target = BUILD_TARGET_NONE): void ); } - $has_avx512 = str_contains($this->arch_c_flags, '-mavx512') || - str_contains($this->arch_c_flags, '-march=x86-64-v4') || - ToolchainManager::getToolchainClass() !== ZigToolchain::class; - $this->seekPhpSrcLogFileOnException(fn () => shell()->cd(SOURCE_PATH . '/php-src')->exec( $php_configure_env . ' ' . getenv('SPC_CMD_PREFIX_PHP_CONFIGURE') . ' ' . @@ -122,7 +116,7 @@ public function buildPHP(int $build_target = BUILD_TARGET_NONE): void $json_74 . $zts . $maxExecutionTimers . - (!$has_avx512 ? 'php_cv_have_avx512=no php_cv_have_avx512vbmi=no ' : '') . + getenv('SPC_EXTRA_PHP_VARS') . ' ' . $this->makeStaticExtensionArgs() . ' ' )); diff --git a/src/SPC/toolchain/ZigToolchain.php b/src/SPC/toolchain/ZigToolchain.php index 8f2e261e9..c3da766d8 100644 --- a/src/SPC/toolchain/ZigToolchain.php +++ b/src/SPC/toolchain/ZigToolchain.php @@ -64,6 +64,11 @@ public function afterInit(): void $extra_libs = trim($extra_libs . ' -lunwind'); GlobalEnvManager::putenv("SPC_EXTRA_LIBS={$extra_libs}"); } + $cflags = getenv('SPC_DEFAULT_C_FLAGS') ?: getenv('CFLAGS') ?: ''; + $has_avx512 = str_contains($cflags, '-mavx512') || str_contains($cflags, '-march=x86-64-v4'); + if (!$has_avx512) { + f_putenv('SPC_EXTRA_PHP_VARS=php_cv_have_avx512=no php_cv_have_avx512vbmi=no'); + } } public function getCompilerInfo(): ?string From 8a1689b79d4eded2e6b0c30f7ef1aa07a966ecf7 Mon Sep 17 00:00:00 2001 From: henderkes Date: Sat, 11 Oct 2025 13:20:08 +0200 Subject: [PATCH 064/207] don't fail build without ldap --- src/SPC/builder/unix/library/postgresql.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/SPC/builder/unix/library/postgresql.php b/src/SPC/builder/unix/library/postgresql.php index 3b7754663..543963006 100644 --- a/src/SPC/builder/unix/library/postgresql.php +++ b/src/SPC/builder/unix/library/postgresql.php @@ -44,7 +44,7 @@ protected function build(): void $error_exec_cnt = 0; foreach ($optional_packages as $lib => $pkg) { - if ($this->getBuilder()->getLib($lib)) { + if ($this->builder->getLib($lib)) { $packages .= ' ' . $pkg; $output = shell()->execWithResult("pkg-config --static {$pkg}"); $error_exec_cnt += $output[0] === 0 ? 0 : 1; @@ -125,10 +125,12 @@ protected function build(): void '--without-tcl ' ); - $libs = PkgConfigUtil::getLibsArray('ldap'); - $libs = clean_spaces(implode(' ', $libs)); - FileSystem::replaceFileStr($this->source_dir . '/build/config.status', '-lldap', $libs); - FileSystem::replaceFileStr($this->source_dir . '/build/src/Makefile.global', '-lldap', $libs); + if ($this->builder->getLib('ldap')) { + $libs = PkgConfigUtil::getLibsArray('ldap'); + $libs = clean_spaces(implode(' ', $libs)); + FileSystem::replaceFileStr($this->source_dir . '/build/config.status', '-lldap', $libs); + FileSystem::replaceFileStr($this->source_dir . '/build/src/Makefile.global', '-lldap', $libs); + } $shell ->exec($envs . ' make -C src/bin/pg_config install') From 897cb003511880c7d05c444e8d369f50dd0684be Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Sun, 12 Oct 2025 16:42:38 +0800 Subject: [PATCH 065/207] Use failsafe for SPC_EXTRA_PHP_VARS --- config/env.ini | 1 + src/SPC/builder/Extension.php | 4 +++- src/SPC/builder/linux/LinuxBuilder.php | 4 +++- src/SPC/toolchain/ZigToolchain.php | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/config/env.ini b/config/env.ini index 4b9f294ad..0fbcd6934 100644 --- a/config/env.ini +++ b/config/env.ini @@ -34,6 +34,7 @@ ; SPC_LINUX_DEFAULT_CC: the default compiler for linux. (For alpine linux: `gcc`, default: `$GNU_ARCH-linux-musl-gcc`) ; SPC_LINUX_DEFAULT_CXX: the default c++ compiler for linux. (For alpine linux: `g++`, default: `$GNU_ARCH-linux-musl-g++`) ; SPC_LINUX_DEFAULT_AR: the default archiver for linux. (For alpine linux: `ar`, default: `$GNU_ARCH-linux-musl-ar`) +; SPC_EXTRA_PHP_VARS: the extra vars for building php, used in `configure` and `make` command. [global] ; Build concurrency for make -jN, default is CPU_COUNT, this value are used in every libs. diff --git a/src/SPC/builder/Extension.php b/src/SPC/builder/Extension.php index 9e36aeff5..a8e875191 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -427,13 +427,15 @@ public function buildUnixShared(): void logger()->info("Extension [{$this->getName()}] patched before shared configure"); } + $phpvars = getenv('SPC_EXTRA_PHP_VARS') ?: ''; + shell()->cd($this->source_dir) ->setEnv($env) ->appendEnv($this->getExtraEnv()) ->exec( './configure ' . $this->getUnixConfigureArg(true) . ' --with-php-config=' . BUILD_BIN_PATH . '/php-config ' . - '--enable-shared --disable-static ' . getenv('SPC_EXTRA_PHP_VARS') + "--enable-shared --disable-static {$phpvars}" ); if ($this->patchBeforeSharedMake()) { diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index 2a3c89123..d62e97bd4 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -95,6 +95,8 @@ public function buildPHP(int $build_target = BUILD_TARGET_NONE): void // 'LIBS' => SPCTarget::getRuntimeLibs(), // do not pass static libraries here yet, they may contain polyfills for libc functions! ]); + $phpvars = getenv('SPC_EXTRA_PHP_VARS') ?: ''; + $embed_type = getenv('SPC_CMD_VAR_PHP_EMBED_TYPE') ?: 'static'; if ($embed_type !== 'static' && SPCTarget::isStatic()) { throw new WrongUsageException( @@ -116,7 +118,7 @@ public function buildPHP(int $build_target = BUILD_TARGET_NONE): void $json_74 . $zts . $maxExecutionTimers . - getenv('SPC_EXTRA_PHP_VARS') . ' ' . + "{$phpvars} " . $this->makeStaticExtensionArgs() . ' ' )); diff --git a/src/SPC/toolchain/ZigToolchain.php b/src/SPC/toolchain/ZigToolchain.php index c3da766d8..bb423db20 100644 --- a/src/SPC/toolchain/ZigToolchain.php +++ b/src/SPC/toolchain/ZigToolchain.php @@ -67,7 +67,7 @@ public function afterInit(): void $cflags = getenv('SPC_DEFAULT_C_FLAGS') ?: getenv('CFLAGS') ?: ''; $has_avx512 = str_contains($cflags, '-mavx512') || str_contains($cflags, '-march=x86-64-v4'); if (!$has_avx512) { - f_putenv('SPC_EXTRA_PHP_VARS=php_cv_have_avx512=no php_cv_have_avx512vbmi=no'); + GlobalEnvManager::putenv('SPC_EXTRA_PHP_VARS=php_cv_have_avx512=no php_cv_have_avx512vbmi=no'); } } From f28a3cf5a3cfc751aead9ee7738c49b74811a996 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Sun, 12 Oct 2025 22:33:22 +0800 Subject: [PATCH 066/207] Drop macos-13 from actions runner --- .github/workflows/build-unix.yml | 4 ++-- .github/workflows/ext-matrix-tests.yml | 8 +++---- .github/workflows/release-build.yml | 6 +++--- src/globals/test-extensions.php | 30 +++++++++++--------------- 4 files changed, 22 insertions(+), 26 deletions(-) diff --git a/.github/workflows/build-unix.yml b/.github/workflows/build-unix.yml index 16ad76e06..0166bfa00 100644 --- a/.github/workflows/build-unix.yml +++ b/.github/workflows/build-unix.yml @@ -136,12 +136,12 @@ jobs: macos-x86_64) DOWN_CMD="composer update --no-dev --classmap-authoritative && ./bin/spc doctor --auto-fix && ./bin/spc download" BUILD_CMD="./bin/spc build" - RUNS_ON="macos-13" + RUNS_ON="macos-15-intel" ;; macos-aarch64) DOWN_CMD="composer update --no-dev --classmap-authoritative && ./bin/spc doctor --auto-fix && ./bin/spc download" BUILD_CMD="./bin/spc build" - RUNS_ON="macos-14" + RUNS_ON="macos-15" ;; esac DOWN_CMD="$DOWN_CMD --with-php=${{ inputs.php-version }} --for-extensions=${{ inputs.extensions }} --ignore-cache-sources=php-src" diff --git a/.github/workflows/ext-matrix-tests.yml b/.github/workflows/ext-matrix-tests.yml index 84d3b518f..e93e91459 100644 --- a/.github/workflows/ext-matrix-tests.yml +++ b/.github/workflows/ext-matrix-tests.yml @@ -85,9 +85,9 @@ jobs: - "8.4" operating-system: - "ubuntu-latest" - #- "macos-13" + #- "macos-15-intel" #- "debian-arm64-self-hosted" - - "macos-14" + - "macos-15" steps: - name: "Checkout" @@ -99,11 +99,11 @@ jobs: OS="" if [ "${{ matrix.operating-system }}" = "ubuntu-latest" ]; then OS="linux-x86_64" - elif [ "${{ matrix.operating-system }}" = "macos-13" ]; then + elif [ "${{ matrix.operating-system }}" = "macos-15-intel" ]; then OS="macos-x86_64" elif [ "${{ matrix.operating-system }}" = "debian-arm64-self-hosted" ]; then OS="linux-aarch64" - elif [ "${{ matrix.operating-system }}" = "macos-14" ]; then + elif [ "${{ matrix.operating-system }}" = "macos-15" ]; then OS="macos-aarch64" fi echo "OS=$OS" >> $GITHUB_ENV diff --git a/.github/workflows/release-build.yml b/.github/workflows/release-build.yml index 61004bd34..aaeee1ffc 100644 --- a/.github/workflows/release-build.yml +++ b/.github/workflows/release-build.yml @@ -27,7 +27,7 @@ jobs: os: "ubuntu-latest" filename: "spc-linux-x86_64.tar.gz" - name: "macos-x86_64" - os: "macos-13" + os: "macos-15-intel" filename: "spc-macos-x86_64.tar.gz" - name: "linux-aarch64" os: "ubuntu-latest" @@ -147,11 +147,11 @@ jobs: - name: "linux-x86_64" os: "ubuntu-latest" - name: "macos-x86_64" - os: "macos-13" + os: "macos-15-intel" - name: "linux-aarch64" os: "ubuntu-24.04-arm" - name: "macos-aarch64" - os: "macos-latest" + os: "macos-15" - name: "windows-x64" os: "windows-latest" steps: diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index 2bc79f0a8..b0fa9807f 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -13,29 +13,28 @@ // test php version (8.1 ~ 8.4 available, multiple for matrix) $test_php_version = [ - // '8.1', - // '8.2', - // '8.3', + '8.1', + '8.2', + '8.3', '8.4', // '8.5', // 'git', ]; -// test os (macos-13, macos-14, macos-15, ubuntu-latest, windows-latest are available) +// test os (macos-15-intel, macos-15, ubuntu-latest, windows-latest are available) $test_os = [ - // 'macos-13', // bin/spc for x86_64 - 'macos-14', // bin/spc for arm64 + 'macos-15-intel', // bin/spc for x86_64 '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-22.04', // bin/spc-gnu-docker for x86_64 // 'ubuntu-24.04', // bin/spc for x86_64 - 'ubuntu-22.04-arm', // bin/spc-gnu-docker for arm64 + // 'ubuntu-22.04-arm', // bin/spc-gnu-docker for arm64 // 'ubuntu-24.04-arm', // bin/spc for arm64 // 'windows-latest', // .\bin\spc.ps1 ]; // whether enable thread safe -$zts = true; +$zts = false; $no_strip = false; @@ -56,7 +55,7 @@ // If you want to test shared extensions, add them below (comma separated, example `bcmath,openssl`). $shared_extensions = match (PHP_OS_FAMILY) { - 'Linux' => 'grpc,imagick', + 'Linux' => '', 'Darwin' => '', 'Windows' => '', }; @@ -74,7 +73,7 @@ // You can use `common`, `bulk`, `minimal` or `none`. // note: combination is only available for *nix platform. Windows must use `none` combination $base_combination = match (PHP_OS_FAMILY) { - 'Linux', 'Darwin' => 'none', + 'Linux', 'Darwin' => 'common', 'Windows' => 'none', }; @@ -156,17 +155,14 @@ function quote2(string $param): string switch ($argv[2] ?? null) { case 'ubuntu-22.04': case 'ubuntu-22.04-arm': + case 'macos-14': + case 'macos-15': + case 'macos-15-intel': $shared_cmd = ' --build-shared=' . quote2($shared_extensions) . ' '; break; case 'ubuntu-24.04': case 'ubuntu-24.04-arm': break; - case 'macos-13': - case 'macos-14': - case 'macos-15': - $shared_cmd = ' --build-shared=' . quote2($shared_extensions) . ' '; - $no_strip = true; - break; default: $shared_cmd = ''; break; From 6bd3eea0fe5418ad2527548ea81dc6461128da1b Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Sun, 12 Oct 2025 23:54:59 +0800 Subject: [PATCH 067/207] Use SPCConfigUtil for postgresql build, refactor patches --- src/SPC/builder/unix/library/postgresql.php | 119 +++++++------------- 1 file changed, 43 insertions(+), 76 deletions(-) diff --git a/src/SPC/builder/unix/library/postgresql.php b/src/SPC/builder/unix/library/postgresql.php index 543963006..dfb990068 100644 --- a/src/SPC/builder/unix/library/postgresql.php +++ b/src/SPC/builder/unix/library/postgresql.php @@ -4,10 +4,9 @@ namespace SPC\builder\unix\library; -use SPC\builder\linux\library\LinuxLibraryBase; -use SPC\exception\BuildFailureException; use SPC\store\FileSystem; use SPC\util\PkgConfigUtil; +use SPC\util\SPCConfigUtil; use SPC\util\SPCTarget; trait postgresql @@ -25,90 +24,57 @@ public function patchBeforeBuild(): bool '#if defined(__linux__) && !defined(__aarch64__) && !defined(HWCAP2_CRC32)', '#if defined(__linux__) && !defined(HWCAP_CRC32)', ); - return true; } - return false; + // skip the test on platforms where libpq infrastructure may be provided by statically-linked libraries + FileSystem::replaceFileStr("{$this->source_dir}/src/interfaces/libpq/Makefile", 'invokes exit\'; exit 1;', 'invokes exit\';'); + // disable shared libs build + FileSystem::replaceFileStr( + "{$this->source_dir}/src/Makefile.shlib", + [ + '$(LINK.shared) -o $@ $(OBJS) $(LDFLAGS) $(LDFLAGS_SL) $(SHLIB_LINK)', + '$(INSTALL_SHLIB) $< \'$(DESTDIR)$(pkglibdir)/$(shlib)\'', + '$(INSTALL_SHLIB) $< \'$(DESTDIR)$(libdir)/$(shlib)\'', + '$(INSTALL_SHLIB) $< \'$(DESTDIR)$(bindir)/$(shlib)\'', + ], + '' + ); + return true; } protected function build(): void { - $builddir = BUILD_ROOT_PATH; - $envs = ''; - $packages = 'zlib openssl readline libxml-2.0'; - $optional_packages = [ - 'zstd' => 'libzstd', - 'ldap' => 'ldap', - 'libxslt' => 'libxslt', - 'icu' => 'icu-i18n', - ]; - $error_exec_cnt = 0; - - foreach ($optional_packages as $lib => $pkg) { - if ($this->builder->getLib($lib)) { - $packages .= ' ' . $pkg; - $output = shell()->execWithResult("pkg-config --static {$pkg}"); - $error_exec_cnt += $output[0] === 0 ? 0 : 1; - logger()->info(var_export($output[1], true)); - } - } + $libs = array_map(fn ($x) => $x->getName(), $this->getDependencies()); + $spc = new SPCConfigUtil($this->getBuilder(), ['no_php' => true, 'libs_only_deps' => true]); + $config = $spc->config(libraries: $libs); - $output = shell()->execWithResult("pkg-config --cflags-only-I --static {$packages}"); - $error_exec_cnt += $output[0] === 0 ? 0 : 1; $macos_15_bug_cflags = PHP_OS_FAMILY === 'Darwin' ? ' -Wno-unguarded-availability-new' : ''; - $cflags = ''; - if (!empty($output[1][0])) { - $cflags = $output[1][0]; - $envs .= ' CPPFLAGS="-DPIC"'; - $cflags = "{$cflags} -fno-ident{$macos_15_bug_cflags}"; - } - $output = shell()->execWithResult("pkg-config --libs-only-L --static {$packages}"); - $error_exec_cnt += $output[0] === 0 ? 0 : 1; - if (!empty($output[1][0])) { - $ldflags = $output[1][0]; - $envs .= " LDFLAGS=\"{$ldflags}\" "; - } - $output = shell()->execWithResult("pkg-config --libs-only-l --static {$packages}"); - $error_exec_cnt += $output[0] === 0 ? 0 : 1; - if (!empty($output[1][0])) { - $libs = $output[1][0]; - $libcpp = ''; - if ($this->builder->getLib('icu')) { - $libcpp = $this instanceof LinuxLibraryBase ? ' -lstdc++' : ' -lc++'; - } - $envs .= " LIBS=\"{$libs}{$libcpp}\" "; - } - if ($error_exec_cnt > 0) { - throw new BuildFailureException('Failed to get pkg-config information!'); + + $env_vars = [ + 'CFLAGS' => "{$config['cflags']} -fno-ident{$macos_15_bug_cflags}", + 'CPPFLAGS' => '-DPIC', + 'LDFLAGS' => $config['ldflags'], + 'LIBS' => $config['libs'], + ]; + + if ($ldLibraryPath = getenv('SPC_LD_LIBRARY_PATH')) { + $env_vars['LD_LIBRARY_PATH'] = $ldLibraryPath; } FileSystem::resetDir($this->source_dir . '/build'); - # 有静态链接配置 参考文件: src/interfaces/libpq/Makefile - shell()->cd($this->source_dir . '/build') - ->exec('sed -i.backup "s/invokes exit\'; exit 1;/invokes exit\';/" ../src/interfaces/libpq/Makefile') - ->exec('sed -i.backup "278 s/^/# /" ../src/Makefile.shlib') - ->exec('sed -i.backup "402 s/^/# /" ../src/Makefile.shlib'); - // php source relies on the non-private encoding functions in libpgcommon.a FileSystem::replaceFileStr( - $this->source_dir . '/src/common/Makefile', + "{$this->source_dir}/src/common/Makefile", '$(OBJS_FRONTEND): CPPFLAGS += -DUSE_PRIVATE_ENCODING_FUNCS', '$(OBJS_FRONTEND): CPPFLAGS += -UUSE_PRIVATE_ENCODING_FUNCS -DFRONTEND', ); - $env = [ - 'CFLAGS' => $cflags, - ]; - if ($ldLibraryPath = getenv('SPC_LD_LIBRARY_PATH')) { - $env['LD_LIBRARY_PATH'] = $ldLibraryPath; - } - // configure - $shell = shell()->cd($this->source_dir . '/build')->initializeEnv($this) - ->appendEnv($env) + $shell = shell()->cd("{$this->source_dir}/build")->initializeEnv($this) + ->appendEnv($env_vars) ->exec( - "{$envs} ../configure " . - "--prefix={$builddir} " . + '../configure ' . + "--prefix={$this->getBuildRootPath()} " . '--enable-coverage=no ' . '--with-ssl=openssl ' . '--with-readline ' . @@ -125,6 +91,7 @@ protected function build(): void '--without-tcl ' ); + // patch ldap lib if ($this->builder->getLib('ldap')) { $libs = PkgConfigUtil::getLibsArray('ldap'); $libs = clean_spaces(implode(' ', $libs)); @@ -133,18 +100,18 @@ protected function build(): void } $shell - ->exec($envs . ' make -C src/bin/pg_config install') - ->exec($envs . ' make -C src/include install') - ->exec($envs . ' make -C src/common install') - ->exec($envs . ' make -C src/port install') - ->exec($envs . ' make -C src/interfaces/libpq install'); + ->exec('make -C src/bin/pg_config install') + ->exec('make -C src/include install') + ->exec('make -C src/common install') + ->exec('make -C src/port install') + ->exec('make -C src/interfaces/libpq install'); // remove dynamic libs shell()->cd($this->source_dir . '/build') - ->exec("rm -rf {$builddir}/lib/*.so.*") - ->exec("rm -rf {$builddir}/lib/*.so") - ->exec("rm -rf {$builddir}/lib/*.dylib"); + ->exec("rm -rf {$this->getBuildRootPath()}/lib/*.so.*") + ->exec("rm -rf {$this->getBuildRootPath()}/lib/*.so") + ->exec("rm -rf {$this->getBuildRootPath()}/lib/*.dylib"); - FileSystem::replaceFileStr(BUILD_LIB_PATH . '/pkgconfig/libpq.pc', '-lldap', '-lldap -llber'); + FileSystem::replaceFileStr("{$this->getLibDir()}/pkgconfig/libpq.pc", '-lldap', '-lldap -llber'); } } From 903036f1c0138fc5afe14ac753c496e9b4b0b80c Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Mon, 13 Oct 2025 00:00:31 +0800 Subject: [PATCH 068/207] Bump version --- src/SPC/ConsoleApplication.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/ConsoleApplication.php b/src/SPC/ConsoleApplication.php index 023b541e6..ba2d38e0b 100644 --- a/src/SPC/ConsoleApplication.php +++ b/src/SPC/ConsoleApplication.php @@ -34,7 +34,7 @@ */ final class ConsoleApplication extends Application { - public const string VERSION = '2.7.4'; + public const string VERSION = '2.7.5'; public function __construct() { From 6e79401ab5c8668eea7d1056640bab0bfe9659f8 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Mon, 13 Oct 2025 00:21:13 +0800 Subject: [PATCH 069/207] Add missing libs for suggested option defined --- src/SPC/builder/unix/library/postgresql.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/builder/unix/library/postgresql.php b/src/SPC/builder/unix/library/postgresql.php index dfb990068..f7781be06 100644 --- a/src/SPC/builder/unix/library/postgresql.php +++ b/src/SPC/builder/unix/library/postgresql.php @@ -45,7 +45,7 @@ protected function build(): void { $libs = array_map(fn ($x) => $x->getName(), $this->getDependencies()); $spc = new SPCConfigUtil($this->getBuilder(), ['no_php' => true, 'libs_only_deps' => true]); - $config = $spc->config(libraries: $libs); + $config = $spc->config(libraries: $libs, include_suggest_lib: $this->builder->getOption('with-suggested-libs')); $macos_15_bug_cflags = PHP_OS_FAMILY === 'Darwin' ? ' -Wno-unguarded-availability-new' : ''; From 19be5263b5f848fb76b2010b01aa386ed641e4d9 Mon Sep 17 00:00:00 2001 From: henderkes Date: Sun, 12 Oct 2025 22:26:06 +0200 Subject: [PATCH 070/207] add error --- src/SPC/builder/linux/LinuxBuilder.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index 1abda58da..93c28b324 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -156,6 +156,9 @@ public function buildPHP(int $build_target = BUILD_TARGET_NONE): void } $shared_extensions = array_map('trim', array_filter(explode(',', $this->getOption('build-shared')))); if (!empty($shared_extensions)) { + if (SPCTarget::isStatic()) { + throw new WrongUsageException("You're building against musl libc statically, but you're trying to build shared extensions. Musl libc does not implement `dlopen`, so your php binary is not able to load shared extensions."); + } logger()->info('Building shared extensions ...'); $this->buildSharedExts(); } From 5333a04e1ccf2813a3e32e536df2ae093e248b71 Mon Sep 17 00:00:00 2001 From: henderkes Date: Sun, 12 Oct 2025 22:27:38 +0200 Subject: [PATCH 071/207] clarification --- src/SPC/builder/linux/LinuxBuilder.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index 93c28b324..0ddb20818 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -157,9 +157,9 @@ public function buildPHP(int $build_target = BUILD_TARGET_NONE): void $shared_extensions = array_map('trim', array_filter(explode(',', $this->getOption('build-shared')))); if (!empty($shared_extensions)) { if (SPCTarget::isStatic()) { - throw new WrongUsageException("You're building against musl libc statically, but you're trying to build shared extensions. Musl libc does not implement `dlopen`, so your php binary is not able to load shared extensions."); + throw new WrongUsageException("You're building against musl libc statically, but you're trying to build shared extensions. Static musl libc does not implement `dlopen`, so your php binary is not able to load shared extensions."); } - logger()->info('Building shared extensions ...'); + logger()->info('Building shared extensions...'); $this->buildSharedExts(); } } From 995187d258edf48e573a5462cdcfe6430a109f6e Mon Sep 17 00:00:00 2001 From: henderkes Date: Sun, 12 Oct 2025 22:32:27 +0200 Subject: [PATCH 072/207] extra information for steps --- src/SPC/builder/linux/LinuxBuilder.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index 0ddb20818..299cdb644 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -157,7 +157,11 @@ public function buildPHP(int $build_target = BUILD_TARGET_NONE): void $shared_extensions = array_map('trim', array_filter(explode(',', $this->getOption('build-shared')))); if (!empty($shared_extensions)) { if (SPCTarget::isStatic()) { - throw new WrongUsageException("You're building against musl libc statically, but you're trying to build shared extensions. Static musl libc does not implement `dlopen`, so your php binary is not able to load shared extensions."); + throw new WrongUsageException( + "You're building against musl libc statically (the default on Linux), but you're trying to build shared extensions.\n" . + 'Static musl libc does not implement `dlopen`, so your php binary is not able to load shared extensions.' . "\n" . + 'Either use SPC_LIBC=glibc to link against glibc on a glibc OS, or use SPC_TARGET="native-native-musl -dynamic" to link against musl libc dynamically using `zig cc`.' + ); } logger()->info('Building shared extensions...'); $this->buildSharedExts(); From 1bac06fe3c2f8889a8f3536a4e5fa2e7dd48fd41 Mon Sep 17 00:00:00 2001 From: Jerry Ma Date: Mon, 13 Oct 2025 08:27:40 +0800 Subject: [PATCH 073/207] Remove more macOS 14 case from shared extensions switch Yeah. Copied by tab. --- src/globals/test-extensions.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index b0fa9807f..385bca278 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -155,7 +155,6 @@ function quote2(string $param): string switch ($argv[2] ?? null) { case 'ubuntu-22.04': case 'ubuntu-22.04-arm': - case 'macos-14': case 'macos-15': case 'macos-15-intel': $shared_cmd = ' --build-shared=' . quote2($shared_extensions) . ' '; From a3acad4ef306a7ff639e95af9fcd3e9133ad3cfe Mon Sep 17 00:00:00 2001 From: Marc Date: Mon, 13 Oct 2025 10:59:31 +0200 Subject: [PATCH 074/207] Update config/source.json --- config/source.json | 1 - 1 file changed, 1 deletion(-) diff --git a/config/source.json b/config/source.json index 8b556ca8f..7b5b6c25f 100644 --- a/config/source.json +++ b/config/source.json @@ -266,7 +266,6 @@ "ext-zip": { "type": "url", "url": "https://pecl.php.net/get/zip", - "path": "php-src/ext/zip/latest", "filename": "ext-zip.tgz", "license": { "type": "file", From 0114700dad08747b2d6a8efcf15c11d3a2e62e85 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Mon, 13 Oct 2025 17:34:35 +0800 Subject: [PATCH 075/207] Fix PostgreSQL build compatibility for aarch64 on glibc 2.17 and update test configurations --- src/SPC/builder/unix/library/postgresql.php | 24 +++++++++++---------- src/globals/test-extensions.php | 10 ++++----- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/SPC/builder/unix/library/postgresql.php b/src/SPC/builder/unix/library/postgresql.php index f7781be06..250b86914 100644 --- a/src/SPC/builder/unix/library/postgresql.php +++ b/src/SPC/builder/unix/library/postgresql.php @@ -4,6 +4,7 @@ namespace SPC\builder\unix\library; +use SPC\exception\FileSystemException; use SPC\store\FileSystem; use SPC\util\PkgConfigUtil; use SPC\util\SPCConfigUtil; @@ -13,17 +14,18 @@ trait postgresql { public function patchBeforeBuild(): bool { + // fix aarch64 build on glibc 2.17 (e.g. CentOS 7) if (SPCTarget::getLibcVersion() === '2.17' && GNU_ARCH === 'aarch64') { - FileSystem::replaceFileStr( - $this->source_dir . '/src/port/pg_popcount_aarch64.c', - 'HWCAP_SVE', - '0', - ); - FileSystem::replaceFileStr( - $this->source_dir . '/src/port/pg_crc32c_armv8_choose.c', - '#if defined(__linux__) && !defined(__aarch64__) && !defined(HWCAP2_CRC32)', - '#if defined(__linux__) && !defined(HWCAP_CRC32)', - ); + try { + FileSystem::replaceFileStr("{$this->source_dir}/src/port/pg_popcount_aarch64.c", 'HWCAP_SVE', '0'); + FileSystem::replaceFileStr( + "{$this->source_dir}/src/port/pg_crc32c_armv8_choose.c", + '#if defined(__linux__) && !defined(__aarch64__) && !defined(HWCAP2_CRC32)', + '#if defined(__linux__) && !defined(HWCAP_CRC32)' + ); + } catch (FileSystemException) { + // allow file not-existence to make it compatible with old and new version + } } // skip the test on platforms where libpq infrastructure may be provided by statically-linked libraries FileSystem::replaceFileStr("{$this->source_dir}/src/interfaces/libpq/Makefile", 'invokes exit\'; exit 1;', 'invokes exit\';'); @@ -47,7 +49,7 @@ protected function build(): void $spc = new SPCConfigUtil($this->getBuilder(), ['no_php' => true, 'libs_only_deps' => true]); $config = $spc->config(libraries: $libs, include_suggest_lib: $this->builder->getOption('with-suggested-libs')); - $macos_15_bug_cflags = PHP_OS_FAMILY === 'Darwin' ? ' -Wno-unguarded-availability-new' : ''; + $macos_15_bug_cflags = PHP_OS_FAMILY === 'Darwin' ? '' : ''; $env_vars = [ 'CFLAGS' => "{$config['cflags']} -fno-ident{$macos_15_bug_cflags}", diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index 9f3b87daa..05b617d2d 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -13,9 +13,9 @@ // test php version (8.1 ~ 8.4 available, multiple for matrix) $test_php_version = [ - '8.1', - '8.2', - '8.3', + // '8.1', + // '8.2', + // '8.3', '8.4', // '8.5', // 'git', @@ -49,7 +49,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' => 'pgsql', + 'Linux', 'Darwin' => 'pdo_pgsql', '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', }; @@ -73,7 +73,7 @@ // You can use `common`, `bulk`, `minimal` or `none`. // note: combination is only available for *nix platform. Windows must use `none` combination $base_combination = match (PHP_OS_FAMILY) { - 'Linux', 'Darwin' => 'common', + 'Linux', 'Darwin' => 'none', 'Windows' => 'none', }; From 7b6e707e24453a666dbc06f6f0fb5ed425d16bd8 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Mon, 13 Oct 2025 19:58:07 +0800 Subject: [PATCH 076/207] Remove unnecessary macOS 15 bug CFLAGS from PostgreSQL build configuration --- src/SPC/builder/unix/library/postgresql.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/SPC/builder/unix/library/postgresql.php b/src/SPC/builder/unix/library/postgresql.php index 250b86914..6c42cf754 100644 --- a/src/SPC/builder/unix/library/postgresql.php +++ b/src/SPC/builder/unix/library/postgresql.php @@ -49,10 +49,8 @@ protected function build(): void $spc = new SPCConfigUtil($this->getBuilder(), ['no_php' => true, 'libs_only_deps' => true]); $config = $spc->config(libraries: $libs, include_suggest_lib: $this->builder->getOption('with-suggested-libs')); - $macos_15_bug_cflags = PHP_OS_FAMILY === 'Darwin' ? '' : ''; - $env_vars = [ - 'CFLAGS' => "{$config['cflags']} -fno-ident{$macos_15_bug_cflags}", + 'CFLAGS' => "{$config['cflags']} -fno-ident", 'CPPFLAGS' => '-DPIC', 'LDFLAGS' => $config['ldflags'], 'LIBS' => $config['libs'], From c5ae719b9c7bdb811d8f94eff42b3827e5cde1fc Mon Sep 17 00:00:00 2001 From: Jerry Ma Date: Mon, 13 Oct 2025 22:40:56 +0800 Subject: [PATCH 077/207] Update src/SPC/builder/unix/library/postgresql.php Co-authored-by: Marc --- src/SPC/builder/unix/library/postgresql.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/builder/unix/library/postgresql.php b/src/SPC/builder/unix/library/postgresql.php index 6c42cf754..67935d14c 100644 --- a/src/SPC/builder/unix/library/postgresql.php +++ b/src/SPC/builder/unix/library/postgresql.php @@ -50,7 +50,7 @@ protected function build(): void $config = $spc->config(libraries: $libs, include_suggest_lib: $this->builder->getOption('with-suggested-libs')); $env_vars = [ - 'CFLAGS' => "{$config['cflags']} -fno-ident", + 'CFLAGS' => $config['cflags'], 'CPPFLAGS' => '-DPIC', 'LDFLAGS' => $config['ldflags'], 'LIBS' => $config['libs'], From c711a3666ead345ce8f9875bbf1ebd8cf0c0745e Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Thu, 16 Oct 2025 00:55:21 +0800 Subject: [PATCH 078/207] Add Windows CGI SAPI build support --- src/SPC/ConsoleApplication.php | 2 +- src/SPC/builder/windows/WindowsBuilder.php | 35 ++++++++++++++++++++++ src/SPC/command/BuildPHPCommand.php | 2 +- src/SPC/store/SourcePatcher.php | 25 ++++++++++++++++ src/globals/test-extensions.php | 24 +++++++-------- 5 files changed, 74 insertions(+), 14 deletions(-) diff --git a/src/SPC/ConsoleApplication.php b/src/SPC/ConsoleApplication.php index ba2d38e0b..da143de1a 100644 --- a/src/SPC/ConsoleApplication.php +++ b/src/SPC/ConsoleApplication.php @@ -34,7 +34,7 @@ */ final class ConsoleApplication extends Application { - public const string VERSION = '2.7.5'; + public const string VERSION = '2.7.6'; public function __construct() { diff --git a/src/SPC/builder/windows/WindowsBuilder.php b/src/SPC/builder/windows/WindowsBuilder.php index 3f21f639b..cb215f1a0 100644 --- a/src/SPC/builder/windows/WindowsBuilder.php +++ b/src/SPC/builder/windows/WindowsBuilder.php @@ -57,6 +57,7 @@ public function buildPHP(int $build_target = BUILD_TARGET_NONE): void $enableFpm = ($build_target & BUILD_TARGET_FPM) === BUILD_TARGET_FPM; $enableMicro = ($build_target & BUILD_TARGET_MICRO) === BUILD_TARGET_MICRO; $enableEmbed = ($build_target & BUILD_TARGET_EMBED) === BUILD_TARGET_EMBED; + $enableCgi = ($build_target & BUILD_TARGET_CGI) === BUILD_TARGET_CGI; SourcePatcher::patchBeforeBuildconf($this); @@ -109,6 +110,7 @@ public function buildPHP(int $build_target = BUILD_TARGET_NONE): void ($enableCli ? '--enable-cli=yes ' : '--enable-cli=no ') . ($enableMicro ? ('--enable-micro=yes ' . $micro_logo . $micro_w32) : '--enable-micro=no ') . ($enableEmbed ? '--enable-embed=yes ' : '--enable-embed=no ') . + ($enableCgi ? '--enable-cgi=yes ' : '--enable-cgi=no ') . $config_file_scan_dir . $opcache_jit_arg . "{$this->makeStaticExtensionArgs()} " . @@ -127,6 +129,10 @@ public function buildPHP(int $build_target = BUILD_TARGET_NONE): void if ($enableFpm) { logger()->warning('Windows does not support fpm SAPI, I will skip it.'); } + if ($enableCgi) { + logger()->info('building cgi'); + $this->buildCgi(); + } if ($enableMicro) { logger()->info('building micro'); $this->buildMicro(); @@ -159,6 +165,24 @@ public function buildCli(): void $this->deployBinary(BUILD_TARGET_CLI); } + public function buildCgi(): void + { + SourcePatcher::patchWindowsCGITarget(); + + $extra_libs = getenv('SPC_EXTRA_LIBS') ?: ''; + + // add nmake wrapper + FileSystem::writeFile(SOURCE_PATH . '\php-src\nmake_cgi_wrapper.bat', "nmake /nologo LIBS_CGI=\"ws2_32.lib shell32.lib {$extra_libs}\" EXTRA_LD_FLAGS_PROGRAM= %*"); + + cmd()->cd(SOURCE_PATH . '\php-src')->exec("{$this->sdk_prefix} nmake_cgi_wrapper.bat --task-args php-cgi.exe"); + + // deploy cgi binary + logger()->info('Deploying cgi file'); + FileSystem::createDir(BUILD_ROOT_PATH . '\bin'); + + cmd()->exec('copy ' . escapeshellarg(SOURCE_PATH . "\\php-src\\x64\\Release" . ($this->zts ? '_TS' : '') . "\\php-cgi.exe") . ' ' . escapeshellarg(BUILD_ROOT_PATH . '\bin\\php-cgi.exe')); + } + public function buildEmbed(): void { // TODO: add embed support for windows @@ -298,6 +322,17 @@ public function sanityCheck(mixed $build_target): void } } } + + // sanity check for php-cgi + if (($build_target & BUILD_TARGET_CGI) === BUILD_TARGET_CGI) { + logger()->info('running cgi sanity check'); + FileSystem::writeFile(SOURCE_PATH . '\\php-cgi-test.php', 'Hello, World!"; ?>'); + [$ret, $output] = cmd()->execWithResult(BUILD_BIN_PATH . '\\php-cgi.exe -n -f ' . SOURCE_PATH . '\\php-cgi-test.php'); + $raw_output = implode("\n", $output); + if ($ret !== 0 || !str_contains($raw_output, 'Hello, World!')) { + throw new ValidationException("cgi failed sanity check. code: {$ret}, output: {$raw_output}", validation_module: 'php-cgi sanity check'); + } + } } /** diff --git a/src/SPC/command/BuildPHPCommand.php b/src/SPC/command/BuildPHPCommand.php index 3ffc54cef..b57a91997 100644 --- a/src/SPC/command/BuildPHPCommand.php +++ b/src/SPC/command/BuildPHPCommand.php @@ -33,7 +33,7 @@ public function configure(): void $this->addOption('build-fpm', null, null, 'Build fpm SAPI (not available on Windows)'); $this->addOption('build-embed', null, null, 'Build embed SAPI (not available on Windows)'); $this->addOption('build-frankenphp', null, null, 'Build FrankenPHP SAPI (not available on Windows)'); - $this->addOption('build-cgi', null, null, 'Build cgi SAPI (not available on Windows)'); + $this->addOption('build-cgi', null, null, 'Build cgi SAPI'); $this->addOption('build-all', null, null, 'Build all SAPI'); $this->addOption('no-strip', null, null, 'build without strip, keep symbols to debug'); $this->addOption('disable-opcache-jit', null, null, 'disable opcache jit'); diff --git a/src/SPC/store/SourcePatcher.php b/src/SPC/store/SourcePatcher.php index c08204f5d..541c04be7 100644 --- a/src/SPC/store/SourcePatcher.php +++ b/src/SPC/store/SourcePatcher.php @@ -549,6 +549,31 @@ public static function patchWindowsCLITarget(): void FileSystem::writeFile(SOURCE_PATH . '/php-src/Makefile', implode("\r\n", $lines)); } + /** + * Patch cgi SAPI Makefile for Windows. + */ + public static function patchWindowsCGITarget(): void + { + // search Makefile code line contains "$(BUILD_DIR)\php.exe:" + $content = FileSystem::readFile(SOURCE_PATH . '/php-src/Makefile'); + $lines = explode("\r\n", $content); + $line_num = 0; + $found = false; + foreach ($lines as $v) { + if (str_contains($v, '$(BUILD_DIR)\php-cgi.exe:')) { + $found = $line_num; + break; + } + ++$line_num; + } + if ($found === false) { + throw new PatchException('Windows Makefile patching for php-cgi.exe target', 'Cannot patch windows CGI Makefile, Makefile does not contain "$(BUILD_DIR)\php-cgi.exe:" line'); + } + $lines[$line_num] = '$(BUILD_DIR)\php-cgi.exe: generated_files $(DEPS_CGI) $(CGI_GLOBAL_OBJS) $(PHP_GLOBAL_OBJS) $(STATIC_EXT_OBJS) $(ASM_OBJS) $(BUILD_DIR)\$(PHPLIB) $(BUILD_DIR)\php-cgi.exe.res $(BUILD_DIR)\php-cgi.exe.manifest'; + $lines[$line_num + 1] = "\t" . '@"$(LINK)" /nologo $(PHP_GLOBAL_OBJS_RESP) $(CGI_GLOBAL_OBJS_RESP) $(STATIC_EXT_OBJS_RESP) $(STATIC_EXT_LIBS) $(ASM_OBJS) $(LIBS) $(LIBS_CGI) $(BUILD_DIR)\php-cgi.exe.res /out:$(BUILD_DIR)\php-cgi.exe $(LDFLAGS) $(LDFLAGS_CGI) /ltcg /nodefaultlib:msvcrt /nodefaultlib:msvcrtd /ignore:4286'; + FileSystem::writeFile(SOURCE_PATH . '/php-src/Makefile', implode("\r\n", $lines)); + } + public static function patchPhpLibxml212(): bool { $file = file_get_contents(SOURCE_PATH . '/php-src/main/php_version.h'); diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index 99e4e31ba..7f3131d56 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -13,9 +13,9 @@ // test php version (8.1 ~ 8.4 available, multiple for matrix) $test_php_version = [ - // '8.1', - // '8.2', - // '8.3', + '8.1', + '8.2', + '8.3', '8.4', // '8.5', // 'git', @@ -23,18 +23,18 @@ // test os (macos-15-intel, macos-15, ubuntu-latest, windows-latest are available) $test_os = [ - 'macos-15-intel', // bin/spc for x86_64 - 'macos-15', // bin/spc for arm64 + // 'macos-15-intel', // bin/spc for x86_64 + // '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-22.04-arm', // bin/spc-gnu-docker for arm64 - 'ubuntu-24.04-arm', // bin/spc for arm64 - // 'windows-latest', // .\bin\spc.ps1 + // 'ubuntu-22.04', // bin/spc-gnu-docker 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 + 'windows-latest', // .\bin\spc.ps1 ]; // whether enable thread safe -$zts = false; +$zts = true; $no_strip = false; @@ -208,7 +208,7 @@ function quote2(string $param): string passthru($prefix . $down_cmd, $retcode); break; case 'build_cmd': - passthru($prefix . $build_cmd . ' --build-cli --build-micro', $retcode); + passthru($prefix . $build_cmd . ' --build-cli --build-micro --build-cgi', $retcode); break; case 'build_embed_cmd': if ($frankenphp) { From b62f029da72c04f87920f1b9492bbce71bab2a78 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Thu, 16 Oct 2025 00:56:28 +0800 Subject: [PATCH 079/207] cs fix --- src/SPC/builder/windows/WindowsBuilder.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/SPC/builder/windows/WindowsBuilder.php b/src/SPC/builder/windows/WindowsBuilder.php index cb215f1a0..8ab746489 100644 --- a/src/SPC/builder/windows/WindowsBuilder.php +++ b/src/SPC/builder/windows/WindowsBuilder.php @@ -180,7 +180,7 @@ public function buildCgi(): void logger()->info('Deploying cgi file'); FileSystem::createDir(BUILD_ROOT_PATH . '\bin'); - cmd()->exec('copy ' . escapeshellarg(SOURCE_PATH . "\\php-src\\x64\\Release" . ($this->zts ? '_TS' : '') . "\\php-cgi.exe") . ' ' . escapeshellarg(BUILD_ROOT_PATH . '\bin\\php-cgi.exe')); + cmd()->exec('copy ' . escapeshellarg(SOURCE_PATH . '\\php-src\\x64\\Release' . ($this->zts ? '_TS' : '') . '\\php-cgi.exe') . ' ' . escapeshellarg(BUILD_ROOT_PATH . '\bin\php-cgi.exe')); } public function buildEmbed(): void @@ -326,8 +326,8 @@ public function sanityCheck(mixed $build_target): void // sanity check for php-cgi if (($build_target & BUILD_TARGET_CGI) === BUILD_TARGET_CGI) { logger()->info('running cgi sanity check'); - FileSystem::writeFile(SOURCE_PATH . '\\php-cgi-test.php', 'Hello, World!"; ?>'); - [$ret, $output] = cmd()->execWithResult(BUILD_BIN_PATH . '\\php-cgi.exe -n -f ' . SOURCE_PATH . '\\php-cgi-test.php'); + FileSystem::writeFile(SOURCE_PATH . '\php-cgi-test.php', 'Hello, World!"; ?>'); + [$ret, $output] = cmd()->execWithResult(BUILD_BIN_PATH . '\php-cgi.exe -n -f ' . SOURCE_PATH . '\php-cgi-test.php'); $raw_output = implode("\n", $output); if ($ret !== 0 || !str_contains($raw_output, 'Hello, World!')) { throw new ValidationException("cgi failed sanity check. code: {$ret}, output: {$raw_output}", validation_module: 'php-cgi sanity check'); From 9c8fd4d45de4ce2bb0c9b05e3c7ecbc69490c288 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Thu, 16 Oct 2025 00:59:33 +0800 Subject: [PATCH 080/207] cs fix --- src/SPC/builder/windows/WindowsBuilder.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/builder/windows/WindowsBuilder.php b/src/SPC/builder/windows/WindowsBuilder.php index 8ab746489..df0357b13 100644 --- a/src/SPC/builder/windows/WindowsBuilder.php +++ b/src/SPC/builder/windows/WindowsBuilder.php @@ -180,7 +180,7 @@ public function buildCgi(): void logger()->info('Deploying cgi file'); FileSystem::createDir(BUILD_ROOT_PATH . '\bin'); - cmd()->exec('copy ' . escapeshellarg(SOURCE_PATH . '\\php-src\\x64\\Release' . ($this->zts ? '_TS' : '') . '\\php-cgi.exe') . ' ' . escapeshellarg(BUILD_ROOT_PATH . '\bin\php-cgi.exe')); + cmd()->exec('copy ' . escapeshellarg(SOURCE_PATH . '\php-src\x64\Release' . ($this->zts ? '_TS' : '') . '\php-cgi.exe') . ' ' . escapeshellarg(BUILD_ROOT_PATH . '\bin\php-cgi.exe')); } public function buildEmbed(): void From 4b28d1c2dfda3c874cb9ab0807ed26d131c032f6 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Thu, 16 Oct 2025 01:04:42 +0800 Subject: [PATCH 081/207] test --- src/globals/test-extensions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index 7f3131d56..fd3f5dfff 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -30,7 +30,7 @@ // '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 - 'windows-latest', // .\bin\spc.ps1 + 'windows-2022', // .\bin\spc.ps1 ]; // whether enable thread safe From 1d960a9084fd38d115e6dbff505a4b9ee9ec9bb2 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Thu, 16 Oct 2025 01:05:06 +0800 Subject: [PATCH 082/207] test --- src/globals/test-extensions.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index fd3f5dfff..037a99926 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -27,10 +27,11 @@ // '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 'windows-2022', // .\bin\spc.ps1 + 'windows-2025', ]; // whether enable thread safe From 572bf919aac555f7157c8c3b4cff5f0026733694 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Thu, 16 Oct 2025 01:13:26 +0800 Subject: [PATCH 083/207] test --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 8accd62fb..811079d75 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -179,7 +179,7 @@ jobs: key: php-dependencies-${{ matrix.os }} - name: "Install Dependencies" - run: composer update -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist + run: composer update -vvv --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist - name: "Run Build Tests (doctor)" run: php src/globals/test-extensions.php doctor_cmd ${{ matrix.os }} ${{ matrix.php }} From 5b319b0df199b9b08c07e9ce9093841a7fb1e4d2 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Thu, 16 Oct 2025 01:16:22 +0800 Subject: [PATCH 084/207] test --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 811079d75..a94bd64f6 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -179,7 +179,7 @@ jobs: key: php-dependencies-${{ matrix.os }} - name: "Install Dependencies" - run: composer update -vvv --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist + run: composer update -vvv --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist --no-plugins - name: "Run Build Tests (doctor)" run: php src/globals/test-extensions.php doctor_cmd ${{ matrix.os }} ${{ matrix.php }} From 9b53133ba49dbdbdf16e9747adb1b051bc687a3e Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Thu, 16 Oct 2025 01:19:10 +0800 Subject: [PATCH 085/207] test --- src/globals/test-extensions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index 037a99926..c17aa2507 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -62,7 +62,7 @@ }; // If you want to test lib-suggests for all extensions and libraries, set it to true. -$with_suggested_libs = true; +$with_suggested_libs = false; // If you want to test extra libs for extensions, add them below (comma separated, example `libwebp,libavif`). Unnecessary, when $with_suggested_libs is true. $with_libs = match (PHP_OS_FAMILY) { From 6a98a6bf5e7f392063cbf70aab7669d2615e9625 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Thu, 16 Oct 2025 01:32:56 +0800 Subject: [PATCH 086/207] Use BUILD_BIN_PATH instead --- src/SPC/builder/windows/WindowsBuilder.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/SPC/builder/windows/WindowsBuilder.php b/src/SPC/builder/windows/WindowsBuilder.php index df0357b13..9633b2e91 100644 --- a/src/SPC/builder/windows/WindowsBuilder.php +++ b/src/SPC/builder/windows/WindowsBuilder.php @@ -178,9 +178,9 @@ public function buildCgi(): void // deploy cgi binary logger()->info('Deploying cgi file'); - FileSystem::createDir(BUILD_ROOT_PATH . '\bin'); + FileSystem::createDir(BUILD_BIN_PATH); - cmd()->exec('copy ' . escapeshellarg(SOURCE_PATH . '\php-src\x64\Release' . ($this->zts ? '_TS' : '') . '\php-cgi.exe') . ' ' . escapeshellarg(BUILD_ROOT_PATH . '\bin\php-cgi.exe')); + cmd()->exec('copy ' . escapeshellarg(SOURCE_PATH . '\php-src\x64\Release' . ($this->zts ? '_TS' : '') . '\php-cgi.exe') . ' ' . escapeshellarg(BUILD_BIN_PATH . '\php-cgi.exe')); } public function buildEmbed(): void @@ -289,7 +289,7 @@ public function sanityCheck(mixed $build_target): void // sanity check for php-cli if (($build_target & BUILD_TARGET_CLI) === BUILD_TARGET_CLI) { logger()->info('running cli sanity check'); - [$ret, $output] = cmd()->execWithResult(BUILD_ROOT_PATH . '\bin\php.exe -n -r "echo \"hello\";"'); + [$ret, $output] = cmd()->execWithResult(BUILD_BIN_PATH . '\php.exe -n -r "echo \"hello\";"'); if ($ret !== 0 || trim(implode('', $output)) !== 'hello') { throw new ValidationException('cli failed sanity check', validation_module: 'php-cli function check'); } @@ -308,7 +308,7 @@ public function sanityCheck(mixed $build_target): void if (file_exists($test_file)) { @unlink($test_file); } - file_put_contents($test_file, file_get_contents(BUILD_ROOT_PATH . '\bin\micro.sfx') . $task['content']); + file_put_contents($test_file, file_get_contents(BUILD_BIN_PATH . '\micro.sfx') . $task['content']); chmod($test_file, 0755); [$ret, $out] = cmd()->execWithResult($test_file); foreach ($task['conditions'] as $condition => $closure) { @@ -357,9 +357,9 @@ public function deployBinary(int $type): bool } logger()->info('Deploying ' . $this->getBuildTypeName($type) . ' file'); - FileSystem::createDir(BUILD_ROOT_PATH . '\bin'); + FileSystem::createDir(BUILD_BIN_PATH); - cmd()->exec('copy ' . escapeshellarg($src) . ' ' . escapeshellarg(BUILD_ROOT_PATH . '\bin\\')); + cmd()->exec('copy ' . escapeshellarg($src) . ' ' . escapeshellarg(BUILD_BIN_PATH . '\\')); return true; } From e559dce9d5a042f637702bffd7dd7a20db753690 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Thu, 16 Oct 2025 01:35:30 +0800 Subject: [PATCH 087/207] Reduce tests --- src/globals/test-extensions.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index c17aa2507..a73adde20 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -27,10 +27,10 @@ // '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 - 'windows-2022', // .\bin\spc.ps1 + // 'windows-2022', // .\bin\spc.ps1 'windows-2025', ]; @@ -51,7 +51,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' => 'pdo_pgsql', - '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', + 'Windows' => 'bcmath,bz2,calendar,ctype,mbstring,mbregex', }; // If you want to test shared extensions, add them below (comma separated, example `bcmath,openssl`). From 70bda268e5815d24fe1979d250c845987dfdb09c Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Thu, 16 Oct 2025 01:51:22 +0800 Subject: [PATCH 088/207] Fix patches, add more debug comments --- src/SPC/store/SourcePatcher.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/SPC/store/SourcePatcher.php b/src/SPC/store/SourcePatcher.php index 541c04be7..8deeeeeef 100644 --- a/src/SPC/store/SourcePatcher.php +++ b/src/SPC/store/SourcePatcher.php @@ -569,8 +569,13 @@ public static function patchWindowsCGITarget(): void if ($found === false) { throw new PatchException('Windows Makefile patching for php-cgi.exe target', 'Cannot patch windows CGI Makefile, Makefile does not contain "$(BUILD_DIR)\php-cgi.exe:" line'); } + // cli: $(BUILD_DIR)\php.exe: $(DEPS_CLI) $(CLI_GLOBAL_OBJS) $(BUILD_DIR)\$(PHPLIB) $(BUILD_DIR)\php.exe.res $(BUILD_DIR)\php.exe.manifest + // $lines[$line_num] = '$(BUILD_DIR)\php.exe: generated_files $(DEPS_CLI) $(CLI_GLOBAL_OBJS) $(PHP_GLOBAL_OBJS) $(STATIC_EXT_OBJS) $(ASM_OBJS) $(BUILD_DIR)\php.exe.res $(BUILD_DIR)\php.exe.manifest'; + // cgi: $(BUILD_DIR)\php-cgi.exe: $(DEPS_CGI) $(CGI_GLOBAL_OBJS) $(BUILD_DIR)\$(PHPLIB) $(BUILD_DIR)\php-cgi.exe.res $(BUILD_DIR)\php-cgi.exe.manifest $lines[$line_num] = '$(BUILD_DIR)\php-cgi.exe: generated_files $(DEPS_CGI) $(CGI_GLOBAL_OBJS) $(PHP_GLOBAL_OBJS) $(STATIC_EXT_OBJS) $(ASM_OBJS) $(BUILD_DIR)\$(PHPLIB) $(BUILD_DIR)\php-cgi.exe.res $(BUILD_DIR)\php-cgi.exe.manifest'; - $lines[$line_num + 1] = "\t" . '@"$(LINK)" /nologo $(PHP_GLOBAL_OBJS_RESP) $(CGI_GLOBAL_OBJS_RESP) $(STATIC_EXT_OBJS_RESP) $(STATIC_EXT_LIBS) $(ASM_OBJS) $(LIBS) $(LIBS_CGI) $(BUILD_DIR)\php-cgi.exe.res /out:$(BUILD_DIR)\php-cgi.exe $(LDFLAGS) $(LDFLAGS_CGI) /ltcg /nodefaultlib:msvcrt /nodefaultlib:msvcrtd /ignore:4286'; + + // cli: @"$(LINK)" /nologo $(CGI_GLOBAL_OBJS_RESP) $(BUILD_DIR)\$(PHPLIB) $(LIBS_CGI) $(BUILD_DIR)\php-cgi.exe.res /out:$(BUILD_DIR)\php-cgi.exe $(LDFLAGS) $(LDFLAGS_CGI) + $lines[$line_num + 1] = "\t" . '@"$(LINK)" /nologo $(PHP_GLOBAL_OBJS_RESP) $(CGI_GLOBAL_OBJS_RESP) $(BUILD_DIR)\$(PHPLIB) $(STATIC_EXT_OBJS_RESP) $(STATIC_EXT_LIBS) $(ASM_OBJS) $(LIBS) $(LIBS_CGI) $(BUILD_DIR)\php-cgi.exe.res /out:$(BUILD_DIR)\php-cgi.exe $(LDFLAGS) $(LDFLAGS_CGI) /ltcg /nodefaultlib:msvcrt /nodefaultlib:msvcrtd /ignore:4286'; FileSystem::writeFile(SOURCE_PATH . '/php-src/Makefile', implode("\r\n", $lines)); } From 4f8b9d0f818d3906d98ff03fac767bf340b6f448 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Thu, 16 Oct 2025 02:18:24 +0800 Subject: [PATCH 089/207] Fix patches --- src/SPC/builder/windows/WindowsBuilder.php | 2 +- src/SPC/store/SourcePatcher.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/SPC/builder/windows/WindowsBuilder.php b/src/SPC/builder/windows/WindowsBuilder.php index 9633b2e91..bd218fb5c 100644 --- a/src/SPC/builder/windows/WindowsBuilder.php +++ b/src/SPC/builder/windows/WindowsBuilder.php @@ -172,7 +172,7 @@ public function buildCgi(): void $extra_libs = getenv('SPC_EXTRA_LIBS') ?: ''; // add nmake wrapper - FileSystem::writeFile(SOURCE_PATH . '\php-src\nmake_cgi_wrapper.bat', "nmake /nologo LIBS_CGI=\"ws2_32.lib shell32.lib {$extra_libs}\" EXTRA_LD_FLAGS_PROGRAM= %*"); + FileSystem::writeFile(SOURCE_PATH . '\php-src\nmake_cgi_wrapper.bat', "nmake /nologo LIBS_CGI=\"ws2_32.lib kernel32.lib advapi32.lib {$extra_libs}\" EXTRA_LD_FLAGS_PROGRAM= %*"); cmd()->cd(SOURCE_PATH . '\php-src')->exec("{$this->sdk_prefix} nmake_cgi_wrapper.bat --task-args php-cgi.exe"); diff --git a/src/SPC/store/SourcePatcher.php b/src/SPC/store/SourcePatcher.php index 8deeeeeef..b9dcf1a09 100644 --- a/src/SPC/store/SourcePatcher.php +++ b/src/SPC/store/SourcePatcher.php @@ -572,10 +572,10 @@ public static function patchWindowsCGITarget(): void // cli: $(BUILD_DIR)\php.exe: $(DEPS_CLI) $(CLI_GLOBAL_OBJS) $(BUILD_DIR)\$(PHPLIB) $(BUILD_DIR)\php.exe.res $(BUILD_DIR)\php.exe.manifest // $lines[$line_num] = '$(BUILD_DIR)\php.exe: generated_files $(DEPS_CLI) $(CLI_GLOBAL_OBJS) $(PHP_GLOBAL_OBJS) $(STATIC_EXT_OBJS) $(ASM_OBJS) $(BUILD_DIR)\php.exe.res $(BUILD_DIR)\php.exe.manifest'; // cgi: $(BUILD_DIR)\php-cgi.exe: $(DEPS_CGI) $(CGI_GLOBAL_OBJS) $(BUILD_DIR)\$(PHPLIB) $(BUILD_DIR)\php-cgi.exe.res $(BUILD_DIR)\php-cgi.exe.manifest - $lines[$line_num] = '$(BUILD_DIR)\php-cgi.exe: generated_files $(DEPS_CGI) $(CGI_GLOBAL_OBJS) $(PHP_GLOBAL_OBJS) $(STATIC_EXT_OBJS) $(ASM_OBJS) $(BUILD_DIR)\$(PHPLIB) $(BUILD_DIR)\php-cgi.exe.res $(BUILD_DIR)\php-cgi.exe.manifest'; + $lines[$line_num] = '$(BUILD_DIR)\php-cgi.exe: $(DEPS_CGI) $(CGI_GLOBAL_OBJS) $(PHP_GLOBAL_OBJS) $(STATIC_EXT_OBJS) $(ASM_OBJS) $(BUILD_DIR)\php-cgi.exe.res $(BUILD_DIR)\php-cgi.exe.manifest'; // cli: @"$(LINK)" /nologo $(CGI_GLOBAL_OBJS_RESP) $(BUILD_DIR)\$(PHPLIB) $(LIBS_CGI) $(BUILD_DIR)\php-cgi.exe.res /out:$(BUILD_DIR)\php-cgi.exe $(LDFLAGS) $(LDFLAGS_CGI) - $lines[$line_num + 1] = "\t" . '@"$(LINK)" /nologo $(PHP_GLOBAL_OBJS_RESP) $(CGI_GLOBAL_OBJS_RESP) $(BUILD_DIR)\$(PHPLIB) $(STATIC_EXT_OBJS_RESP) $(STATIC_EXT_LIBS) $(ASM_OBJS) $(LIBS) $(LIBS_CGI) $(BUILD_DIR)\php-cgi.exe.res /out:$(BUILD_DIR)\php-cgi.exe $(LDFLAGS) $(LDFLAGS_CGI) /ltcg /nodefaultlib:msvcrt /nodefaultlib:msvcrtd /ignore:4286'; + $lines[$line_num + 1] = "\t" . '@"$(LINK)" /nologo $(PHP_GLOBAL_OBJS_RESP) $(CGI_GLOBAL_OBJS_RESP) $(STATIC_EXT_OBJS_RESP) $(STATIC_EXT_LIBS) $(ASM_OBJS) $(LIBS) $(LIBS_CGI) $(BUILD_DIR)\php-cgi.exe.res /out:$(BUILD_DIR)\php-cgi.exe $(LDFLAGS) $(LDFLAGS_CGI) /ltcg /nodefaultlib:msvcrt /nodefaultlib:msvcrtd /ignore:4286'; FileSystem::writeFile(SOURCE_PATH . '/php-src/Makefile', implode("\r\n", $lines)); } From bf7913440568634ec83e3ad043ff3270fcd3bbfb Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Thu, 16 Oct 2025 20:42:26 +0800 Subject: [PATCH 090/207] Fix tsrmls cache define patches --- src/SPC/store/SourcePatcher.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/SPC/store/SourcePatcher.php b/src/SPC/store/SourcePatcher.php index b9dcf1a09..694d87ef1 100644 --- a/src/SPC/store/SourcePatcher.php +++ b/src/SPC/store/SourcePatcher.php @@ -577,6 +577,9 @@ public static function patchWindowsCGITarget(): void // cli: @"$(LINK)" /nologo $(CGI_GLOBAL_OBJS_RESP) $(BUILD_DIR)\$(PHPLIB) $(LIBS_CGI) $(BUILD_DIR)\php-cgi.exe.res /out:$(BUILD_DIR)\php-cgi.exe $(LDFLAGS) $(LDFLAGS_CGI) $lines[$line_num + 1] = "\t" . '@"$(LINK)" /nologo $(PHP_GLOBAL_OBJS_RESP) $(CGI_GLOBAL_OBJS_RESP) $(STATIC_EXT_OBJS_RESP) $(STATIC_EXT_LIBS) $(ASM_OBJS) $(LIBS) $(LIBS_CGI) $(BUILD_DIR)\php-cgi.exe.res /out:$(BUILD_DIR)\php-cgi.exe $(LDFLAGS) $(LDFLAGS_CGI) /ltcg /nodefaultlib:msvcrt /nodefaultlib:msvcrtd /ignore:4286'; FileSystem::writeFile(SOURCE_PATH . '/php-src/Makefile', implode("\r\n", $lines)); + + // Patch cgi-static, comment ZEND_TSRMLS_CACHE_DEFINE() + FileSystem::replaceFileRegex(SOURCE_PATH . '\php-src\sapi\cgi\cgi_main.c', '/^ZEND_TSRMLS_CACHE_DEFINE\(\)/m', '// ZEND_TSRMLS_CACHE_DEFINE()'); } public static function patchPhpLibxml212(): bool From dc4dd6ffa47eb80a6b2c846dbb9513c8c2832751 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Thu, 16 Oct 2025 20:52:20 +0800 Subject: [PATCH 091/207] Full test --- src/globals/test-extensions.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index a73adde20..bea497beb 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -17,7 +17,7 @@ '8.2', '8.3', '8.4', - // '8.5', + '8.5', // 'git', ]; @@ -51,7 +51,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' => 'pdo_pgsql', - 'Windows' => 'bcmath,bz2,calendar,ctype,mbstring,mbregex', + 'Windows' => 'bcmath,bz2,calendar,ctype,curl,dba,dom,ds,exif,ffi,fileinfo,filter,ftp,gd,iconv,igbinary,libxml,mbregex,mbstring,mysqli,mysqlnd,opcache,openssl,pdo,pdo_mysql,pdo_sqlite,pdo_sqlsrv,phar,session,shmop,simdjson,simplexml,soap,sockets,sqlite3,sqlsrv,ssh2,sysvshm,tokenizer,xml,xmlreader,xmlwriter,yaml,zip,zlib', }; // If you want to test shared extensions, add them below (comma separated, example `bcmath,openssl`). From 25d7c72b6efb58d527b5bd6163a95bf2c5b3048c Mon Sep 17 00:00:00 2001 From: henderkes Date: Thu, 16 Oct 2025 23:19:24 +0700 Subject: [PATCH 092/207] use the upstream version --- config/source.json | 2 +- src/SPC/builder/extension/spx.php | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/config/source.json b/config/source.json index 40a44f2d4..1546b23b3 100644 --- a/config/source.json +++ b/config/source.json @@ -1001,7 +1001,7 @@ "spx": { "type": "git", "rev": "master", - "url": "https://github.com/static-php/php-spx.git", + "url": "https://github.com/NoiseByNorthwest/php-spx.git", "path": "php-src/ext/spx", "license": { "type": "file", diff --git a/src/SPC/builder/extension/spx.php b/src/SPC/builder/extension/spx.php index f5e736d58..a5a8ad71a 100644 --- a/src/SPC/builder/extension/spx.php +++ b/src/SPC/builder/extension/spx.php @@ -13,7 +13,7 @@ class spx extends Extension { public function getUnixConfigureArg(bool $shared = false): string { - $arg = '--enable-spx' . ($shared ? '=shared' : ''); + $arg = '--enable-SPX' . ($shared ? '=shared' : ''); if ($this->builder->getLib('zlib') !== null) { $arg .= ' --with-zlib-dir=' . BUILD_ROOT_PATH; } @@ -29,4 +29,20 @@ public function patchBeforeConfigure(): bool ); return true; } + + public function patchBeforeBuildconf(): bool + { + FileSystem::replaceFileStr( + $this->source_dir . '/config.m4', + 'CFLAGS="$CFLAGS -Werror -Wall -O3 -pthread -std=gnu90"', + 'CFLAGS="$CFLAGS -pthread"' + ); + FileSystem::replaceFileStr( + $this->source_dir . '/src/php_spx.h', + "extern zend_module_entry spx_module_entry;\n", + "extern zend_module_entry spx_module_entry;;\n#define phpext_spx_ptr &spx_module_entry\n" + ); + FileSystem::copy($this->source_dir . '/src/php_spx.h', $this->source_dir . '/php_spx.h'); + return true; + } } From 6440863ce416c16f414ecabd819008f399483124 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Fri, 17 Oct 2025 09:25:44 +0800 Subject: [PATCH 093/207] Remove igbinary --- src/globals/test-extensions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index bea497beb..99dbb78e6 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -51,7 +51,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' => 'pdo_pgsql', - 'Windows' => 'bcmath,bz2,calendar,ctype,curl,dba,dom,ds,exif,ffi,fileinfo,filter,ftp,gd,iconv,igbinary,libxml,mbregex,mbstring,mysqli,mysqlnd,opcache,openssl,pdo,pdo_mysql,pdo_sqlite,pdo_sqlsrv,phar,session,shmop,simdjson,simplexml,soap,sockets,sqlite3,sqlsrv,ssh2,sysvshm,tokenizer,xml,xmlreader,xmlwriter,yaml,zip,zlib', + 'Windows' => 'bcmath,bz2,calendar,ctype,curl,dba,dom,ds,exif,ffi,fileinfo,filter,ftp,gd,iconv,libxml,mbregex,mbstring,mysqli,mysqlnd,opcache,openssl,pdo,pdo_mysql,pdo_sqlite,pdo_sqlsrv,phar,session,shmop,simdjson,simplexml,soap,sockets,sqlite3,sqlsrv,ssh2,sysvshm,tokenizer,xml,xmlreader,xmlwriter,yaml,zip,zlib', }; // If you want to test shared extensions, add them below (comma separated, example `bcmath,openssl`). From 4be894bc1099f2bb0e30066e36e9cfd73d5000da Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Fri, 17 Oct 2025 10:15:05 +0800 Subject: [PATCH 094/207] Remove ds and gd test --- src/globals/test-extensions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index 99dbb78e6..f5855dc8d 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -51,7 +51,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' => 'pdo_pgsql', - 'Windows' => 'bcmath,bz2,calendar,ctype,curl,dba,dom,ds,exif,ffi,fileinfo,filter,ftp,gd,iconv,libxml,mbregex,mbstring,mysqli,mysqlnd,opcache,openssl,pdo,pdo_mysql,pdo_sqlite,pdo_sqlsrv,phar,session,shmop,simdjson,simplexml,soap,sockets,sqlite3,sqlsrv,ssh2,sysvshm,tokenizer,xml,xmlreader,xmlwriter,yaml,zip,zlib', + 'Windows' => 'bcmath,bz2,calendar,ctype,curl,dba,dom,exif,ffi,fileinfo,filter,ftp,iconv,libxml,mbregex,mbstring,mysqli,mysqlnd,opcache,openssl,pdo,pdo_mysql,pdo_sqlite,pdo_sqlsrv,phar,session,shmop,simdjson,simplexml,soap,sockets,sqlite3,sqlsrv,ssh2,sysvshm,tokenizer,xml,xmlreader,xmlwriter,yaml,zip,zlib', }; // If you want to test shared extensions, add them below (comma separated, example `bcmath,openssl`). From ccf262d2028ef8137685480f20d397463e608007 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Mon, 13 Oct 2025 19:38:44 +0800 Subject: [PATCH 095/207] Update test workflow to trigger on pull request events only --- .github/workflows/tests.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 8accd62fb..fa9e646fa 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -1,13 +1,9 @@ name: Tests on: - push: - branches: - - main - paths: - - 'src/globals/test-extensions.php' pull_request: branches: [ "main" ] + types: [ opened, synchronize, reopened ] paths: - 'src/**' - 'config/**' From 15638cea4cede9330291a190ea55c218cc33353f Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Fri, 17 Oct 2025 10:13:10 +0800 Subject: [PATCH 096/207] Add log dir expose, unify SPC_FIX_DEPLOY_ROOT parsing --- bin/spc-alpine-docker | 1 + bin/spc-gnu-docker | 1 + src/SPC/command/BuildPHPCommand.php | 4 +--- src/SPC/exception/ExceptionHandler.php | 11 ++++++++--- src/globals/functions.php | 17 +++++++++++++++++ 5 files changed, 28 insertions(+), 6 deletions(-) diff --git a/bin/spc-alpine-docker b/bin/spc-alpine-docker index 3a58547fe..6365233c5 100755 --- a/bin/spc-alpine-docker +++ b/bin/spc-alpine-docker @@ -150,6 +150,7 @@ MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/source:/app/source" MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/dist:/app/dist" MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/downloads:/app/downloads" MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/pkgroot:/app/pkgroot" +MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/log:/app/log" if [ -f "$(pwd)/craft.yml" ]; then MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/craft.yml:/app/craft.yml" fi diff --git a/bin/spc-gnu-docker b/bin/spc-gnu-docker index 97c9a089d..7fcf5d410 100755 --- a/bin/spc-gnu-docker +++ b/bin/spc-gnu-docker @@ -158,6 +158,7 @@ MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/source:/app/source" MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/dist:/app/dist" MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/downloads:/app/downloads" MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/pkgroot:/app/pkgroot" +MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/log:/app/log" if [ -f "$(pwd)/craft.yml" ]; then MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/craft.yml:/app/craft.yml" fi diff --git a/src/SPC/command/BuildPHPCommand.php b/src/SPC/command/BuildPHPCommand.php index 3ffc54cef..a33f1e843 100644 --- a/src/SPC/command/BuildPHPCommand.php +++ b/src/SPC/command/BuildPHPCommand.php @@ -222,11 +222,9 @@ public function handle(): int // ---------- When using bin/spc-alpine-docker, the build root path is different from the host system ---------- $build_root_path = BUILD_ROOT_PATH; - $cwd = getcwd(); $fixed = ''; + $build_root_path = get_display_path($build_root_path); if (!empty(getenv('SPC_FIX_DEPLOY_ROOT'))) { - str_replace($cwd, '', $build_root_path); - $build_root_path = getenv('SPC_FIX_DEPLOY_ROOT') . '/' . basename($build_root_path); $fixed = ' (host system)'; } if (($rule & BUILD_TARGET_CLI) === BUILD_TARGET_CLI) { diff --git a/src/SPC/exception/ExceptionHandler.php b/src/SPC/exception/ExceptionHandler.php index 44b82b063..d784be717 100644 --- a/src/SPC/exception/ExceptionHandler.php +++ b/src/SPC/exception/ExceptionHandler.php @@ -137,13 +137,18 @@ public static function handleSPCException(SPCException $e): void self::logError("\n----------------------------------------\n"); - self::logError('⚠ The ' . ConsoleColor::cyan('console output log') . ConsoleColor::red(' is saved in ') . ConsoleColor::none(SPC_OUTPUT_LOG)); + // convert log file path if in docker + $spc_log_convert = get_display_path(SPC_OUTPUT_LOG); + $shell_log_convert = get_display_path(SPC_SHELL_LOG); + $spc_logs_dir_convert = get_display_path(SPC_LOGS_DIR); + + self::logError('⚠ The ' . ConsoleColor::cyan('console output log') . ConsoleColor::red(' is saved in ') . ConsoleColor::none($spc_log_convert)); if (file_exists(SPC_SHELL_LOG)) { - self::logError('⚠ The ' . ConsoleColor::cyan('shell output log') . ConsoleColor::red(' is saved in ') . ConsoleColor::none(SPC_SHELL_LOG)); + self::logError('⚠ The ' . ConsoleColor::cyan('shell output log') . ConsoleColor::red(' is saved in ') . ConsoleColor::none($shell_log_convert)); } if ($e->getExtraLogFiles() !== []) { foreach ($e->getExtraLogFiles() as $key => $file) { - self::logError("⚠ Log file [{$key}] is saved in: " . ConsoleColor::none(SPC_LOGS_DIR . "/{$file}")); + self::logError("⚠ Log file [{$key}] is saved in: " . ConsoleColor::none("{$spc_logs_dir_convert}/{$file}")); } } if (!defined('DEBUG_MODE')) { diff --git a/src/globals/functions.php b/src/globals/functions.php index da2d177f5..c8c6a8d0f 100644 --- a/src/globals/functions.php +++ b/src/globals/functions.php @@ -300,3 +300,20 @@ function strip_ansi_colors(string $text): string // Including color codes, cursor control, clear screen and other control sequences return preg_replace('/\e\[[0-9;]*[a-zA-Z]/', '', $text); } + +/** + * Convert to a real path for display purposes, used in docker volumes. + */ +function get_display_path(string $path): string +{ + $deploy_root = getenv('SPC_FIX_DEPLOY_ROOT'); + if ($deploy_root === false) { + return $path; + } + $cwd = WORKING_DIR; + // replace build root with deploy root, only if path starts with build root + if (str_starts_with($path, $cwd)) { + return $deploy_root . substr($path, strlen($cwd)); + } + throw new WrongUsageException("Cannot convert path: {$path}"); +} From b1abff61a564d30de26e34cb7e57b80cc42d58b9 Mon Sep 17 00:00:00 2001 From: henderkes Date: Sat, 18 Oct 2025 11:08:55 +0200 Subject: [PATCH 097/207] don't use full install target, don't install-binaries --- src/SPC/builder/linux/LinuxBuilder.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index 97183ba73..bd5469fdb 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -288,7 +288,7 @@ protected function buildEmbed(): void 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("make {$concurrency} INSTALL_ROOT=" . BUILD_ROOT_PATH . " {$vars} install"); + ->exec("make {$concurrency} INSTALL_ROOT=" . BUILD_ROOT_PATH . " {$vars} install-sapi install-build install-headers install-programs"); $ldflags = getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_LDFLAGS') ?: ''; $libDir = BUILD_LIB_PATH; From 8ed68f481aefba874f20d56c7c04b869cd3ae8e6 Mon Sep 17 00:00:00 2001 From: henderkes Date: Sat, 18 Oct 2025 11:31:20 +0200 Subject: [PATCH 098/207] don't pass unused envs --- src/SPC/builder/linux/LinuxBuilder.php | 4 ++-- src/SPC/builder/macos/MacOSBuilder.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index bd5469fdb..41b1545db 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -377,12 +377,12 @@ private function getMakeExtraVars(): array $config = (new SPCConfigUtil($this, ['libs_only_deps' => true, 'absolute_libs' => true]))->config($this->ext_list, $this->lib_list, $this->getOption('with-suggested-exts'), $this->getOption('with-suggested-libs')); $static = SPCTarget::isStatic() ? '-all-static' : ''; $lib = BUILD_LIB_PATH; - return [ + return array_filter([ 'EXTRA_CFLAGS' => getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS'), 'EXTRA_LIBS' => $config['libs'], 'EXTRA_LDFLAGS' => getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_LDFLAGS'), 'EXTRA_LDFLAGS_PROGRAM' => "-L{$lib} {$static} -pie", - ]; + ]); } /** diff --git a/src/SPC/builder/macos/MacOSBuilder.php b/src/SPC/builder/macos/MacOSBuilder.php index 39f91e385..94fa73edf 100644 --- a/src/SPC/builder/macos/MacOSBuilder.php +++ b/src/SPC/builder/macos/MacOSBuilder.php @@ -281,10 +281,10 @@ protected function buildEmbed(): void private function getMakeExtraVars(): array { $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')); - return [ + return array_filter([ 'EXTRA_CFLAGS' => getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS'), 'EXTRA_LDFLAGS_PROGRAM' => '-L' . BUILD_LIB_PATH, 'EXTRA_LIBS' => $config['libs'], - ]; + ]); } } From 29c31d90e57d2f4ad5a654a9576884590553ee68 Mon Sep 17 00:00:00 2001 From: henderkes Date: Sat, 18 Oct 2025 11:35:41 +0200 Subject: [PATCH 099/207] also only do that for macos (saves build time) --- src/SPC/builder/macos/MacOSBuilder.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/builder/macos/MacOSBuilder.php b/src/SPC/builder/macos/MacOSBuilder.php index 94fa73edf..d144457e1 100644 --- a/src/SPC/builder/macos/MacOSBuilder.php +++ b/src/SPC/builder/macos/MacOSBuilder.php @@ -267,7 +267,7 @@ protected function buildEmbed(): void $vars = SystemUtil::makeEnvVarString($this->getMakeExtraVars()); $concurrency = getenv('SPC_CONCURRENCY') ? '-j' . getenv('SPC_CONCURRENCY') : ''; shell()->cd(SOURCE_PATH . '/php-src') - ->exec("make {$concurrency} INSTALL_ROOT=" . BUILD_ROOT_PATH . " {$vars} install"); + ->exec("make {$concurrency} INSTALL_ROOT=" . BUILD_ROOT_PATH . " {$vars} install-sapi install-build install-headers install-programs"); if (getenv('SPC_CMD_VAR_PHP_EMBED_TYPE') === 'static') { $AR = getenv('AR') ?: 'ar'; From 9c8b4d627c14e953796fbed991979051ee138ef0 Mon Sep 17 00:00:00 2001 From: henderkes Date: Sun, 19 Oct 2025 09:08:50 +0200 Subject: [PATCH 100/207] also install-modules of course... --- src/SPC/builder/linux/LinuxBuilder.php | 2 +- src/SPC/builder/macos/MacOSBuilder.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index 41b1545db..bb40125af 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -288,7 +288,7 @@ protected function buildEmbed(): void 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("make {$concurrency} INSTALL_ROOT=" . BUILD_ROOT_PATH . " {$vars} install-sapi install-build install-headers install-programs"); + ->exec("make {$concurrency} INSTALL_ROOT=" . BUILD_ROOT_PATH . " {$vars} install-sapi install-modules install-build install-headers install-programs"); $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 d144457e1..119aa3b7a 100644 --- a/src/SPC/builder/macos/MacOSBuilder.php +++ b/src/SPC/builder/macos/MacOSBuilder.php @@ -267,7 +267,7 @@ protected function buildEmbed(): void $vars = SystemUtil::makeEnvVarString($this->getMakeExtraVars()); $concurrency = getenv('SPC_CONCURRENCY') ? '-j' . getenv('SPC_CONCURRENCY') : ''; shell()->cd(SOURCE_PATH . '/php-src') - ->exec("make {$concurrency} INSTALL_ROOT=" . BUILD_ROOT_PATH . " {$vars} install-sapi install-build install-headers install-programs"); + ->exec("make {$concurrency} INSTALL_ROOT=" . BUILD_ROOT_PATH . " {$vars} install-sapi install-modules install-build install-headers install-programs"); if (getenv('SPC_CMD_VAR_PHP_EMBED_TYPE') === 'static') { $AR = getenv('AR') ?: 'ar'; From 8ab09898f0f5ccb125e9f4810dbd23cdfa671fa8 Mon Sep 17 00:00:00 2001 From: henderkes Date: Sun, 19 Oct 2025 10:41:14 +0200 Subject: [PATCH 101/207] conditional install-modules --- config/ext.json | 5 +++++ src/SPC/builder/linux/LinuxBuilder.php | 8 +++++++- src/SPC/builder/macos/MacOSBuilder.php | 8 +++++++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/config/ext.json b/config/ext.json index 59ff43524..51924abf2 100644 --- a/config/ext.json +++ b/config/ext.json @@ -341,6 +341,7 @@ "ext-depends": [ "xml" ], + "build-with-php": true, "target": [ "static" ] @@ -461,6 +462,7 @@ "mysqli": { "type": "builtin", "arg-type": "with", + "build-with-php": true, "ext-depends": [ "mysqlnd" ] @@ -468,6 +470,7 @@ "mysqlnd": { "type": "builtin", "arg-type-windows": "with", + "build-with-php": true, "lib-depends": [ "zlib" ] @@ -797,6 +800,7 @@ "type": "builtin", "arg-type": "with-path", "arg-type-windows": "with", + "build-with-php": true, "lib-depends": [ "sqlite" ] @@ -1177,6 +1181,7 @@ "lib-depends": [ "zlib" ], + "build-with-php": true, "target": [ "static" ] diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index bb40125af..3995c3a85 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -7,6 +7,7 @@ use SPC\builder\unix\UnixBuilderBase; use SPC\exception\PatchException; use SPC\exception\WrongUsageException; +use SPC\store\Config; use SPC\store\FileSystem; use SPC\store\SourcePatcher; use SPC\util\GlobalEnvManager; @@ -283,12 +284,17 @@ protected function buildFpm(): void */ protected function buildEmbed(): void { + $sharedExts = array_filter($this->exts, static fn ($ext) => $ext->isBuildShared()); + $sharedExts = array_filter($sharedExts, static function ($ext) { + return Config::getExt($ext->getName(), 'build-with-php') === true; + }); + $install_modules = $sharedExts ? 'install-modules' : ''; $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("make {$concurrency} INSTALL_ROOT=" . BUILD_ROOT_PATH . " {$vars} install-sapi install-modules install-build install-headers install-programs"); + ->exec("make {$concurrency} INSTALL_ROOT=" . BUILD_ROOT_PATH . " {$vars} install-sapi {$install_modules} install-build install-headers install-programs"); $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 119aa3b7a..bcfaf6cf0 100644 --- a/src/SPC/builder/macos/MacOSBuilder.php +++ b/src/SPC/builder/macos/MacOSBuilder.php @@ -7,6 +7,7 @@ use SPC\builder\macos\library\MacOSLibraryBase; use SPC\builder\unix\UnixBuilderBase; use SPC\exception\WrongUsageException; +use SPC\store\Config; use SPC\store\FileSystem; use SPC\store\SourcePatcher; use SPC\util\GlobalEnvManager; @@ -264,10 +265,15 @@ protected function buildFpm(): void */ protected function buildEmbed(): void { + $sharedExts = array_filter($this->exts, static fn ($ext) => $ext->isBuildShared()); + $sharedExts = array_filter($sharedExts, static function ($ext) { + return Config::getExt($ext->getName(), 'build-with-php') === true; + }); + $install_modules = $sharedExts ? 'install-modules' : ''; $vars = SystemUtil::makeEnvVarString($this->getMakeExtraVars()); $concurrency = getenv('SPC_CONCURRENCY') ? '-j' . getenv('SPC_CONCURRENCY') : ''; shell()->cd(SOURCE_PATH . '/php-src') - ->exec("make {$concurrency} INSTALL_ROOT=" . BUILD_ROOT_PATH . " {$vars} install-sapi install-modules install-build install-headers install-programs"); + ->exec("make {$concurrency} INSTALL_ROOT=" . BUILD_ROOT_PATH . " {$vars} install-sapi {$install_modules} install-build install-headers install-programs"); if (getenv('SPC_CMD_VAR_PHP_EMBED_TYPE') === 'static') { $AR = getenv('AR') ?: 'ar'; From 4cdefeab81e07c93c5919bcef1532b554acafb96 Mon Sep 17 00:00:00 2001 From: Marc Date: Sun, 19 Oct 2025 11:03:39 +0200 Subject: [PATCH 102/207] test with modules to build linux should use install-modules now, macOS should not (zip is not built with php) --- src/globals/test-extensions.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index 99e4e31ba..03e0c324c 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -55,8 +55,8 @@ // If you want to test shared extensions, add them below (comma separated, example `bcmath,openssl`). $shared_extensions = match (PHP_OS_FAMILY) { - 'Linux' => '', - 'Darwin' => '', + 'Linux' => 'mysqli', + 'Darwin' => 'zip', 'Windows' => '', }; From 605c06f85c809a54725556a074b0779601b93056 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Mon, 20 Oct 2025 13:39:13 +0800 Subject: [PATCH 103/207] Add pie support for downloading sources --- config/source.json | 5 +- src/SPC/store/Downloader.php | 295 +++++++++++++++++------------------ 2 files changed, 145 insertions(+), 155 deletions(-) diff --git a/config/source.json b/config/source.json index 1546b23b3..c6ec4b0d9 100644 --- a/config/source.json +++ b/config/source.json @@ -999,9 +999,8 @@ } }, "spx": { - "type": "git", - "rev": "master", - "url": "https://github.com/NoiseByNorthwest/php-spx.git", + "type": "pie", + "repo": "noisebynorthwest/php-spx", "path": "php-src/ext/spx", "license": { "type": "file", diff --git a/src/SPC/store/Downloader.php b/src/SPC/store/Downloader.php index 3e50c93d2..e94bfedc6 100644 --- a/src/SPC/store/Downloader.php +++ b/src/SPC/store/Downloader.php @@ -16,6 +16,42 @@ */ class Downloader { + /** + * Get latest version from PIE config (Packagist) + * + * @param string $name Source name + * @param array $source Source meta info: [repo] + * @return array [url, filename] + */ + public static function getPIEInfo(string $name, array $source): array + { + $packagist_url = "https://repo.packagist.org/p2/{$source['repo']}.json"; + logger()->debug("Fetching {$name} source from packagist index: {$packagist_url}"); + $data = json_decode(self::curlExec( + url: $packagist_url, + retries: self::getRetryAttempts() + ), true); + if (!isset($data['packages'][$source['repo']]) || !is_array($data['packages'][$source['repo']])) { + throw new DownloaderException("failed to find {$name} repo info from packagist"); + } + // get the first version + $first = $data['packages'][$source['repo']][0] ?? []; + // check 'type' => 'php-ext' or contains 'php-ext' key + if (!isset($first['php-ext'])) { + throw new DownloaderException("failed to find {$name} php-ext info from packagist, maybe not a php extension package"); + } + // get download link from dist + $dist_url = $first['dist']['url'] ?? null; + $dist_type = $first['dist']['type'] ?? null; + if (!$dist_url || !$dist_type) { + throw new DownloaderException("failed to find {$name} dist info from packagist"); + } + $name = str_replace('/', '_', $source['repo']); + $version = $first['version'] ?? 'unknown'; + // file name use: $name-$version.$dist_type + return [$dist_url, "{$name}-{$version}.{$dist_type}"]; + } + /** * Get latest version from BitBucket tag * @@ -317,84 +353,7 @@ public static function downloadPackage(string $name, ?array $pkg = null, bool $f if (self::isAlreadyDownloaded($name, $force, SPC_DOWNLOAD_PACKAGE)) { return; } - - try { - switch ($pkg['type']) { - case 'bitbuckettag': // BitBucket Tag - [$url, $filename] = self::getLatestBitbucketTag($name, $pkg); - self::downloadFile($name, $url, $filename, $pkg['extract'] ?? null, SPC_DOWNLOAD_PACKAGE); - break; - case 'ghtar': // GitHub Release (tar) - [$url, $filename] = self::getLatestGithubTarball($name, $pkg); - self::downloadFile($name, $url, $filename, $pkg['extract'] ?? null, SPC_DOWNLOAD_PACKAGE, hooks: [[CurlHook::class, 'setupGithubToken']]); - break; - case 'ghtagtar': // GitHub Tag (tar) - [$url, $filename] = self::getLatestGithubTarball($name, $pkg, 'tags'); - self::downloadFile($name, $url, $filename, $pkg['extract'] ?? null, SPC_DOWNLOAD_PACKAGE, hooks: [[CurlHook::class, 'setupGithubToken']]); - break; - case 'ghrel': // GitHub Release (uploaded) - [$url, $filename] = self::getLatestGithubRelease($name, $pkg); - self::downloadFile($name, $url, $filename, $pkg['extract'] ?? null, SPC_DOWNLOAD_PACKAGE, ['Accept: application/octet-stream'], [[CurlHook::class, 'setupGithubToken']]); - break; - case 'filelist': // Basic File List (regex based crawler) - [$url, $filename] = self::getFromFileList($name, $pkg); - self::downloadFile($name, $url, $filename, $pkg['extract'] ?? null, SPC_DOWNLOAD_PACKAGE); - break; - case 'url': // Direct download URL - $url = $pkg['url']; - $filename = $pkg['filename'] ?? basename($pkg['url']); - self::downloadFile($name, $url, $filename, $pkg['extract'] ?? null, SPC_DOWNLOAD_PACKAGE); - break; - case 'git': // Git repo - self::downloadGit( - $name, - $pkg['url'], - $pkg['rev'], - $pkg['submodules'] ?? null, - $pkg['extract'] ?? null, - self::getRetryAttempts(), - SPC_DOWNLOAD_PRE_BUILT - ); - break; - case 'local': - // Local directory, do nothing, just lock it - logger()->debug("Locking local source {$name}"); - LockFile::lockSource($name, [ - 'source_type' => SPC_SOURCE_LOCAL, - 'dirname' => $pkg['dirname'], - 'move_path' => $pkg['extract'] ?? null, - 'lock_as' => SPC_DOWNLOAD_PACKAGE, - ]); - break; - case 'custom': // Custom download method, like API-based download or other - $classes = FileSystem::getClassesPsr4(ROOT_DIR . '/src/SPC/store/pkg', 'SPC\store\pkg'); - if (isset($pkg['func']) && is_callable($pkg['func'])) { - $pkg['name'] = $name; - $pkg['func']($force, $pkg, SPC_DOWNLOAD_PACKAGE); - break; - } - foreach ($classes as $class) { - if (is_a($class, CustomPackage::class, true) && $class !== CustomPackage::class) { - $cls = new $class(); - if (in_array($name, $cls->getSupportName())) { - (new $class())->fetch($name, $force, $pkg); - break; - } - } - } - break; - default: - throw new DownloaderException('unknown source type: ' . $pkg['type']); - } - } catch (\Throwable $e) { - // Because sometimes files downloaded through the command line are not automatically deleted after a failure. - // Here we need to manually delete the file if it is detected to exist. - if (isset($filename) && file_exists(DOWNLOAD_PATH . '/' . $filename)) { - logger()->warning('Deleting download file: ' . $filename); - unlink(DOWNLOAD_PATH . '/' . $filename); - } - throw new DownloaderException('Download failed! ' . $e->getMessage()); - } + self::downloadByType($pkg['type'], $name, $pkg, $force, SPC_DOWNLOAD_PACKAGE); } /** @@ -439,80 +398,7 @@ public static function downloadSource(string $name, ?array $source = null, bool return; } - try { - switch ($source['type']) { - case 'bitbuckettag': // BitBucket Tag - [$url, $filename] = self::getLatestBitbucketTag($name, $source); - self::downloadFile($name, $url, $filename, $source['path'] ?? null, $download_as); - break; - case 'ghtar': // GitHub Release (tar) - [$url, $filename] = self::getLatestGithubTarball($name, $source); - self::downloadFile($name, $url, $filename, $source['path'] ?? null, $download_as, hooks: [[CurlHook::class, 'setupGithubToken']]); - break; - case 'ghtagtar': // GitHub Tag (tar) - [$url, $filename] = self::getLatestGithubTarball($name, $source, 'tags'); - self::downloadFile($name, $url, $filename, $source['path'] ?? null, $download_as, hooks: [[CurlHook::class, 'setupGithubToken']]); - break; - case 'ghrel': // GitHub Release (uploaded) - [$url, $filename] = self::getLatestGithubRelease($name, $source); - self::downloadFile($name, $url, $filename, $source['path'] ?? null, $download_as, ['Accept: application/octet-stream'], [[CurlHook::class, 'setupGithubToken']]); - break; - case 'filelist': // Basic File List (regex based crawler) - [$url, $filename] = self::getFromFileList($name, $source); - self::downloadFile($name, $url, $filename, $source['path'] ?? null, $download_as); - break; - case 'url': // Direct download URL - $url = $source['url']; - $filename = $source['filename'] ?? basename($source['url']); - self::downloadFile($name, $url, $filename, $source['path'] ?? null, $download_as); - break; - case 'git': // Git repo - self::downloadGit( - $name, - $source['url'], - $source['rev'], - $source['submodules'] ?? null, - $source['path'] ?? null, - self::getRetryAttempts(), - $download_as - ); - break; - case 'local': - // Local directory, do nothing, just lock it - logger()->debug("Locking local source {$name}"); - LockFile::lockSource($name, [ - 'source_type' => SPC_SOURCE_LOCAL, - 'dirname' => $source['dirname'], - 'move_path' => $source['extract'] ?? null, - 'lock_as' => $download_as, - ]); - break; - case 'custom': // Custom download method, like API-based download or other - if (isset($source['func']) && is_callable($source['func'])) { - $source['name'] = $name; - $source['func']($force, $source, $download_as); - break; - } - $classes = FileSystem::getClassesPsr4(ROOT_DIR . '/src/SPC/store/source', 'SPC\store\source'); - foreach ($classes as $class) { - if (is_a($class, CustomSourceBase::class, true) && $class::NAME === $name) { - (new $class())->fetch($force, $source, $download_as); - break; - } - } - break; - default: - throw new DownloaderException('unknown source type: ' . $source['type']); - } - } catch (\Throwable $e) { - // Because sometimes files downloaded through the command line are not automatically deleted after a failure. - // Here we need to manually delete the file if it is detected to exist. - if (isset($filename) && file_exists(DOWNLOAD_PATH . '/' . $filename)) { - logger()->warning('Deleting download file: ' . $filename); - unlink(DOWNLOAD_PATH . '/' . $filename); - } - throw new DownloaderException('Download failed! ' . $e->getMessage()); - } + self::downloadByType($source['type'], $name, $source, $force, $download_as); } /** @@ -713,4 +599,109 @@ private static function isAlreadyDownloaded(string $name, bool $force, int $down } return false; } + + /** + * Download by type. + * + * @param string $type Types + * @param string $name Download item name + * @param array{ + * url?: string, + * repo?: string, + * rev?: string, + * path?: string, + * filename?: string, + * dirname?: string, + * match?: string, + * prefer-stable?: bool, + * extract?: string, + * submodules?: array, + * provide-pre-built?: bool, + * func?: ?callable, + * license?: array + * } $conf Download item config + * @param bool $force Force download + * @param int $download_as Lock source type + */ + private static function downloadByType(string $type, string $name, array $conf, bool $force, int $download_as): void + { + try { + switch ($type) { + case 'pie': // Packagist + [$url, $filename] = self::getPIEInfo($name, $conf); + self::downloadFile($name, $url, $filename, $conf['path'] ?? $conf['extract'] ?? null, $download_as, hooks: [[CurlHook::class, 'setupGithubToken']]); + break; + case 'bitbuckettag': // BitBucket Tag + [$url, $filename] = self::getLatestBitbucketTag($name, $conf); + self::downloadFile($name, $url, $filename, $conf['path'] ?? $conf['extract'] ?? null, $download_as); + break; + case 'ghtar': // GitHub Release (tar) + [$url, $filename] = self::getLatestGithubTarball($name, $conf); + self::downloadFile($name, $url, $filename, $conf['path'] ?? $conf['extract'] ?? null, $download_as, hooks: [[CurlHook::class, 'setupGithubToken']]); + break; + case 'ghtagtar': // GitHub Tag (tar) + [$url, $filename] = self::getLatestGithubTarball($name, $conf, 'tags'); + self::downloadFile($name, $url, $filename, $conf['path'] ?? $conf['extract'] ?? null, $download_as, hooks: [[CurlHook::class, 'setupGithubToken']]); + break; + case 'ghrel': // GitHub Release (uploaded) + [$url, $filename] = self::getLatestGithubRelease($name, $conf); + self::downloadFile($name, $url, $filename, $conf['path'] ?? $conf['extract'] ?? null, $download_as, ['Accept: application/octet-stream'], [[CurlHook::class, 'setupGithubToken']]); + break; + case 'filelist': // Basic File List (regex based crawler) + [$url, $filename] = self::getFromFileList($name, $conf); + self::downloadFile($name, $url, $filename, $conf['path'] ?? $conf['extract'] ?? null, $download_as); + break; + case 'url': // Direct download URL + $url = $conf['url']; + $filename = $conf['filename'] ?? basename($conf['url']); + self::downloadFile($name, $url, $filename, $conf['path'] ?? $conf['extract'] ?? null, $download_as); + break; + case 'git': // Git repo + self::downloadGit($name, $conf['url'], $conf['rev'], $conf['submodules'] ?? null, $conf['path'] ?? $conf['extract'] ?? null, self::getRetryAttempts(), $download_as); + break; + case 'local': // Local directory, do nothing, just lock it + LockFile::lockSource($name, [ + 'source_type' => SPC_SOURCE_LOCAL, + 'dirname' => $conf['dirname'], + 'move_path' => $conf['path'] ?? $conf['extract'] ?? null, + 'lock_as' => $download_as, + ]); + break; + case 'custom': // Custom download method, like API-based download or other + if (isset($conf['func']) && is_callable($conf['func'])) { + $conf['name'] = $name; + $conf['func']($force, $conf, $download_as); + break; + } + $classes = [ + ...FileSystem::getClassesPsr4(ROOT_DIR . '/src/SPC/store/source', 'SPC\store\source'), + ...FileSystem::getClassesPsr4(ROOT_DIR . '/src/SPC/store/pkg', 'SPC\store\pkg'), + ]; + foreach ($classes as $class) { + if (is_a($class, CustomSourceBase::class, true) && $class::NAME === $name) { + (new $class())->fetch($force, $conf, $download_as); + break; + } + if (is_a($class, CustomPackage::class, true) && $class !== CustomPackage::class) { + $cls = new $class(); + if (in_array($name, $cls->getSupportName())) { + (new $class())->fetch($name, $force, $conf); + break; + } + } + } + break; + default: + throw new DownloaderException("Unknown download type: {$type}"); + } + } catch (\Throwable $e) { + // Because sometimes files downloaded through the command line are not automatically deleted after a failure. + // Here we need to manually delete the file if it is detected to exist. + if (isset($filename) && file_exists(DOWNLOAD_PATH . '/' . $filename)) { + logger()->warning("Deleting download file: {$filename}"); + unlink(DOWNLOAD_PATH . '/' . $filename); + } + throw new DownloaderException("Download failed: {$e->getMessage()}"); + } + } } From e2fd3e18d6dbfaa04ef06f2da90c1c84dd7b9a1e Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Mon, 20 Oct 2025 13:41:02 +0800 Subject: [PATCH 104/207] Refactor ConfigValidator, make it more strict --- config/ext.json | 24 +- config/lib.json | 31 +- config/source.json | 19 +- src/SPC/store/LockFile.php | 4 +- src/SPC/util/ConfigValidator.php | 532 +++++++++++++++++++++---------- 5 files changed, 395 insertions(+), 215 deletions(-) diff --git a/config/ext.json b/config/ext.json index 59ff43524..d5c707930 100644 --- a/config/ext.json +++ b/config/ext.json @@ -453,7 +453,7 @@ "type": "external", "source": "msgpack", "arg-type-unix": "with", - "arg-type-win": "enable", + "arg-type-windows": "enable", "ext-depends": [ "session" ] @@ -885,36 +885,38 @@ "mysqli" ] }, - "swoole-hook-pgsql": { + "swoole-hook-odbc": { "support": { "Windows": "no", - "BSD": "wip", - "Darwin": "partial" + "BSD": "wip" }, "notes": true, "type": "addon", "arg-type": "none", "ext-depends": [ - "pgsql", "pdo", "swoole" + ], + "lib-depends": [ + "unixodbc" ] }, - "swoole-hook-sqlite": { + "swoole-hook-pgsql": { "support": { "Windows": "no", - "BSD": "wip" + "BSD": "wip", + "Darwin": "partial" }, "notes": true, "type": "addon", "arg-type": "none", "ext-depends": [ - "sqlite3", + "pgsql", "pdo", "swoole" ] }, - "swoole-hook-odbc": { + "swoole-hook-sqlite": { "support": { "Windows": "no", "BSD": "wip" @@ -923,11 +925,9 @@ "type": "addon", "arg-type": "none", "ext-depends": [ + "sqlite3", "pdo", "swoole" - ], - "lib-depends": [ - "unixodbc" ] }, "swow": { diff --git a/config/lib.json b/config/lib.json index 81335539b..39e476138 100644 --- a/config/lib.json +++ b/config/lib.json @@ -203,7 +203,6 @@ "libcares" ], "cpp-library": true, - "provide-pre-built": true, "frameworks": [ "CoreFoundation" ] @@ -560,6 +559,21 @@ "zstd" ] }, + "liburing": { + "source": "liburing", + "pkg-configs": [ + "liburing", + "liburing-ffi" + ], + "static-libs-linux": [ + "liburing.a", + "liburing-ffi.a" + ], + "headers-linux": [ + "liburing/", + "liburing.h" + ] + }, "libuuid": { "source": "libuuid", "static-libs-unix": [ @@ -940,20 +954,5 @@ "zstd.h", "zstd_errors.h" ] - }, - "liburing": { - "source": "liburing", - "pkg-configs": [ - "liburing", - "liburing-ffi" - ], - "static-libs-linux": [ - "liburing.a", - "liburing-ffi.a" - ], - "headers-linux": [ - "liburing/", - "liburing.h" - ] } } diff --git a/config/source.json b/config/source.json index c6ec4b0d9..da58158cc 100644 --- a/config/source.json +++ b/config/source.json @@ -669,6 +669,15 @@ "path": "LICENSE.md" } }, + "liburing": { + "type": "ghtar", + "repo": "axboe/liburing", + "prefer-stable": true, + "license": { + "type": "file", + "path": "COPYING" + } + }, "libuuid": { "type": "git", "url": "https://github.com/static-php/libuuid.git", @@ -990,7 +999,6 @@ }, "snappy": { "type": "git", - "repo": "google/snappy", "rev": "main", "url": "https://github.com/google/snappy", "license": { @@ -1154,14 +1162,5 @@ "type": "file", "path": "LICENSE" } - }, - "liburing": { - "type": "ghtar", - "repo": "axboe/liburing", - "prefer-stable": true, - "license": { - "type": "file", - "path": "COPYING" - } } } diff --git a/src/SPC/store/LockFile.php b/src/SPC/store/LockFile.php index cab5b9da8..88ecd6cb0 100644 --- a/src/SPC/store/LockFile.php +++ b/src/SPC/store/LockFile.php @@ -155,8 +155,8 @@ public static function putLockSourceHash(array $lock_options, string $destinatio * @param string $name Source name * @param array{ * source_type: string, - * dirname: ?string, - * filename: ?string, + * dirname?: ?string, + * filename?: ?string, * move_path: ?string, * lock_as: int * } $data Source data diff --git a/src/SPC/util/ConfigValidator.php b/src/SPC/util/ConfigValidator.php index 58dedea6e..3cd828edd 100644 --- a/src/SPC/util/ConfigValidator.php +++ b/src/SPC/util/ConfigValidator.php @@ -11,6 +11,150 @@ class ConfigValidator { + /** + * Global field type definitions + * Maps field names to their expected types and validation rules + * Note: This only includes fields used in config files (source.json, lib.json, ext.json, pkg.json, pre-built.json) + */ + private const array FIELD_TYPES = [ + // String fields + 'url' => 'string', // url + 'regex' => 'string', // regex pattern + 'rev' => 'string', // revision/branch + 'repo' => 'string', // repository name + 'match' => 'string', // match pattern (aaa*bbb) + 'filename' => 'string', // filename + 'path' => 'string', // copy path + 'extract' => 'string', // copy path (alias of path) + 'dirname' => 'string', // directory name for local source + 'source' => 'string', // the source name that this item uses + 'match-pattern-linux' => 'string', // pre-built match pattern for linux + 'match-pattern-macos' => 'string', // pre-built match pattern for macos + 'match-pattern-windows' => 'string', // pre-built match pattern for windows + + // Boolean fields + 'prefer-stable' => 'bool', // prefer stable releases + 'provide-pre-built' => 'bool', // provide pre-built binaries + 'notes' => 'bool', // whether to show notes in docs + 'cpp-library' => 'bool', // whether this is a C++ library + 'cpp-extension' => 'bool', // whether this is a C++ extension + 'build-with-php' => 'bool', // whether if this extension can be built to shared with PHP source together + 'zend-extension' => 'bool', // whether this is a zend extension + 'unix-only' => 'bool', // whether this extension is only for unix-like systems + + // Array fields + 'submodules' => 'array', // git submodules list (for git source type) + 'lib-depends' => 'list', + 'lib-suggests' => 'list', + 'ext-depends' => 'list', + 'ext-suggests' => 'list', + 'static-libs' => 'list', + 'pkg-configs' => 'list', // required pkg-config files without suffix (e.g. [libwebp]) + 'headers' => 'list', // required header files + 'bin' => 'list', // required binary files + 'frameworks' => 'list', // shared library frameworks (macOS) + + // Object/assoc array fields + 'support' => 'object', // extension OS support docs + 'extract-files' => 'object', // pkg.json extract files mapping with match pattern + 'alt' => 'object|bool', // alternative source/package + 'license' => 'object|array', // license information + 'target' => 'array', // extension build targets (default: [static], alternate: [shared] or both) + + // Special/mixed fields + 'func' => 'callable', // custom download function for custom source/package type + 'type' => 'string', // type field (validated separately) + ]; + + /** + * Source/Package download type validation rules + * Maps type names to [required_props, optional_props] + */ + private const array SOURCE_TYPE_FIELDS = [ + 'filelist' => [['url', 'regex'], []], + 'git' => [['url', 'rev'], ['path', 'extract', 'submodules']], + 'ghtagtar' => [['repo'], ['path', 'extract', 'prefer-stable', 'match']], + 'ghtar' => [['repo'], ['path', 'extract', 'prefer-stable', 'match']], + 'ghrel' => [['repo', 'match'], ['path', 'extract', 'prefer-stable']], + 'url' => [['url'], ['filename', 'path', 'extract']], + 'bitbuckettag' => [['repo'], ['path', 'extract']], + 'local' => [['dirname'], ['path', 'extract']], + 'pie' => [['repo'], ['path']], + 'custom' => [[], ['func']], + ]; + + /** + * Source.json specific fields [field_name => required] + * Note: 'type' is validated separately in validateSourceTypeConfig + * Field types are defined in FIELD_TYPES constant + */ + private const array SOURCE_FIELDS = [ + 'type' => true, // source type (must be SOURCE_TYPE_FIELDS key) + 'provide-pre-built' => false, // whether to provide pre-built binaries + 'alt' => false, // alternative source configuration + 'license' => false, // license information for source + // ... other fields are validated based on source type + ]; + + /** + * Lib.json specific fields [field_name => required] + * Field types are defined in FIELD_TYPES constant + */ + private const array LIB_FIELDS = [ + 'type' => false, // lib type (lib/package/target/root) + 'source' => false, // the source name that this lib uses + 'lib-depends' => false, // required libraries + 'lib-suggests' => false, // suggested libraries + 'static-libs' => false, // Generated static libraries + 'pkg-configs' => false, // Generated pkg-config files + 'cpp-library' => false, // whether this is a C++ library + 'headers' => false, // Generated header files + 'bin' => false, // Generated binary files + 'frameworks' => false, // Used shared library frameworks (macOS) + ]; + + /** + * Ext.json specific fields [field_name => required] + * Field types are defined in FIELD_TYPES constant + */ + private const array EXT_FIELDS = [ + 'type' => true, // extension type (builtin/external/addon/wip) + 'source' => false, // the source name that this extension uses + 'support' => false, // extension OS support docs + 'notes' => false, // whether to show notes in docs + 'cpp-extension' => false, // whether this is a C++ extension + 'build-with-php' => false, // whether if this extension can be built to shared with PHP source together + 'target' => false, // extension build targets (default: [static], alternate: [shared] or both) + 'lib-depends' => false, + 'lib-suggests' => false, + 'ext-depends' => false, + 'ext-suggests' => false, + 'frameworks' => false, + 'zend-extension' => false, // whether this is a zend extension + 'unix-only' => false, // whether this extension is only for unix-like systems + ]; + + /** + * Pkg.json specific fields [field_name => required] + * Field types are defined in FIELD_TYPES constant + */ + private const array PKG_FIELDS = [ + 'type' => true, // package type (same as source type) + 'extract-files' => false, // files to extract mapping (source pattern => target path) + ]; + + /** + * Pre-built.json specific fields [field_name => required] + * Field types are defined in FIELD_TYPES constant + */ + private const array PRE_BUILT_FIELDS = [ + 'repo' => true, // repository name for pre-built binaries + 'prefer-stable' => false, // prefer stable releases + 'match-pattern-linux' => false, // pre-built match pattern for linux + 'match-pattern-macos' => false, // pre-built match pattern for macos + 'match-pattern-windows' => false, // pre-built match pattern for windows + ]; + /** * Validate source.json * @@ -22,33 +166,20 @@ public static function validateSource(array $data): void // Validate basic source type configuration self::validateSourceTypeConfig($src, $name, 'source'); - // Check source-specific fields - // check if alt is valid - if (isset($src['alt'])) { - if (!is_assoc_array($src['alt']) && !is_bool($src['alt'])) { - throw new ValidationException("source {$name} alt must be object or boolean"); - } - if (is_assoc_array($src['alt'])) { - // validate alt source recursively - self::validateSource([$name . '_alt' => $src['alt']]); - } - } + // Validate all source-specific fields using unified method + self::validateConfigFields($src, $name, 'source', self::SOURCE_FIELDS); - // check if provide-pre-built is boolean - if (isset($src['provide-pre-built']) && !is_bool($src['provide-pre-built'])) { - throw new ValidationException("source {$name} provide-pre-built must be boolean"); - } + // Check for unknown fields + self::validateAllowedFields($src, $name, 'source', self::SOURCE_FIELDS); - // check if prefer-stable is boolean - if (isset($src['prefer-stable']) && !is_bool($src['prefer-stable'])) { - throw new ValidationException("source {$name} prefer-stable must be boolean"); + // check if alt is valid + if (isset($src['alt']) && is_assoc_array($src['alt'])) { + // validate alt source recursively + self::validateSource([$name . '_alt' => $src['alt']]); } // check if license is valid if (isset($src['license'])) { - if (!is_array($src['license'])) { - throw new ValidationException("source {$name} license must be an object or array"); - } if (is_assoc_array($src['license'])) { self::checkSingleLicense($src['license'], $name); } elseif (is_list_array($src['license'])) { @@ -58,8 +189,6 @@ public static function validateSource(array $data): void } self::checkSingleLicense($license, $name); } - } else { - throw new ValidationException("source {$name} license must be an object or array"); } } } @@ -71,9 +200,8 @@ public static function validateLibs(mixed $data, array $source_data = []): void if (!is_array($data)) { throw new ValidationException('lib.json is broken'); } - // check each lib + foreach ($data as $name => $lib) { - // check if lib is an assoc array if (!is_assoc_array($lib)) { throw new ValidationException("lib {$name} is not an object"); } @@ -89,36 +217,22 @@ public static function validateLibs(mixed $data, array $source_data = []): void if (isset($lib['source']) && !empty($source_data) && !isset($source_data[$lib['source']])) { throw new ValidationException("lib {$name} assigns an invalid source: {$lib['source']}"); } - // check if source is string - if (isset($lib['source']) && !is_string($lib['source'])) { - throw new ValidationException("lib {$name} source must be string"); - } - // check if [lib-depends|lib-suggests|static-libs|headers|bin][-windows|-unix|-macos|-linux] are valid list array + + // Validate basic fields using unified method + self::validateConfigFields($lib, $name, 'lib', self::LIB_FIELDS); + + // Validate list array fields with suffixes $suffixes = ['', '-windows', '-unix', '-macos', '-linux']; - foreach ($suffixes as $suffix) { - if (isset($lib['lib-depends' . $suffix]) && !is_list_array($lib['lib-depends' . $suffix])) { - throw new ValidationException("lib {$name} lib-depends must be a list"); - } - if (isset($lib['lib-suggests' . $suffix]) && !is_list_array($lib['lib-suggests' . $suffix])) { - throw new ValidationException("lib {$name} lib-suggests must be a list"); - } - if (isset($lib['static-libs' . $suffix]) && !is_list_array($lib['static-libs' . $suffix])) { - throw new ValidationException("lib {$name} static-libs must be a list"); - } - if (isset($lib['pkg-configs' . $suffix]) && !is_list_array($lib['pkg-configs' . $suffix])) { - throw new ValidationException("lib {$name} pkg-configs must be a list"); - } - if (isset($lib['headers' . $suffix]) && !is_list_array($lib['headers' . $suffix])) { - throw new ValidationException("lib {$name} headers must be a list"); - } - if (isset($lib['bin' . $suffix]) && !is_list_array($lib['bin' . $suffix])) { - throw new ValidationException("lib {$name} bin must be a list"); - } - } - // check if frameworks is a list array - if (isset($lib['frameworks']) && !is_list_array($lib['frameworks'])) { - throw new ValidationException("lib {$name} frameworks must be a list"); + $fields = ['lib-depends', 'lib-suggests', 'static-libs', 'pkg-configs', 'headers', 'bin']; + self::validateListArrayFields($lib, $name, 'lib', $fields, $suffixes); + + // Validate frameworks (special case without suffix) + if (isset($lib['frameworks'])) { + self::validateFieldType('frameworks', $lib['frameworks'], $name, 'lib'); } + + // Check for unknown fields + self::validateAllowedFields($lib, $name, 'lib', self::LIB_FIELDS); } } @@ -127,61 +241,34 @@ public static function validateExts(mixed $data): void if (!is_array($data)) { throw new ValidationException('ext.json is broken'); } - // check each extension + foreach ($data as $name => $ext) { - // check if ext is an assoc array if (!is_assoc_array($ext)) { throw new ValidationException("ext {$name} is not an object"); } - // check if ext has valid type + if (!in_array($ext['type'] ?? '', ['builtin', 'external', 'addon', 'wip'])) { throw new ValidationException("ext {$name} type is invalid"); } - // check if external ext has source + + // Check source field requirement if (($ext['type'] ?? '') === 'external' && !isset($ext['source'])) { throw new ValidationException("ext {$name} does not assign any source"); } - // check if source is string - if (isset($ext['source']) && !is_string($ext['source'])) { - throw new ValidationException("ext {$name} source must be string"); - } - // check if support is valid - if (isset($ext['support']) && !is_assoc_array($ext['support'])) { - throw new ValidationException("ext {$name} support must be an object"); - } - // check if notes is boolean - if (isset($ext['notes']) && !is_bool($ext['notes'])) { - throw new ValidationException("ext {$name} notes must be boolean"); - } - // check if [lib-depends|lib-suggests|ext-depends][-windows|-unix|-macos|-linux] are valid list array + + // Validate basic fields using unified method + self::validateConfigFields($ext, $name, 'ext', self::EXT_FIELDS); + + // Validate list array fields with suffixes $suffixes = ['', '-windows', '-unix', '-macos', '-linux']; - foreach ($suffixes as $suffix) { - if (isset($ext['lib-depends' . $suffix]) && !is_list_array($ext['lib-depends' . $suffix])) { - throw new ValidationException("ext {$name} lib-depends must be a list"); - } - if (isset($ext['lib-suggests' . $suffix]) && !is_list_array($ext['lib-suggests' . $suffix])) { - throw new ValidationException("ext {$name} lib-suggests must be a list"); - } - if (isset($ext['ext-depends' . $suffix]) && !is_list_array($ext['ext-depends' . $suffix])) { - throw new ValidationException("ext {$name} ext-depends must be a list"); - } - } - // check if arg-type is valid - if (isset($ext['arg-type'])) { - $valid_arg_types = ['enable', 'with', 'with-path', 'custom', 'none', 'enable-path']; - if (!in_array($ext['arg-type'], $valid_arg_types)) { - throw new ValidationException("ext {$name} arg-type is invalid"); - } - } - // check if arg-type with suffix is valid - foreach ($suffixes as $suffix) { - if (isset($ext['arg-type' . $suffix])) { - $valid_arg_types = ['enable', 'with', 'with-path', 'custom', 'none', 'enable-path']; - if (!in_array($ext['arg-type' . $suffix], $valid_arg_types)) { - throw new ValidationException("ext {$name} arg-type{$suffix} is invalid"); - } - } - } + $fields = ['lib-depends', 'lib-suggests', 'ext-depends', 'ext-suggests']; + self::validateListArrayFields($ext, $name, 'ext', $fields, $suffixes); + + // Validate arg-type fields + self::validateArgTypeFields($ext, $name, $suffixes); + + // Check for unknown fields + self::validateAllowedFields($ext, $name, 'ext', self::EXT_FIELDS); } } @@ -200,12 +287,11 @@ public static function validatePkgs(mixed $data): void // Validate basic source type configuration (reuse from source validation) self::validateSourceTypeConfig($pkg, $name, 'pkg'); - // Check pkg-specific fields - // check if extract-files is valid + // Validate all pkg-specific fields using unified method + self::validateConfigFields($pkg, $name, 'pkg', self::PKG_FIELDS); + + // Validate extract-files content (object validation is done by validateFieldType) if (isset($pkg['extract-files'])) { - if (!is_assoc_array($pkg['extract-files'])) { - throw new ValidationException("pkg {$name} extract-files must be an object"); - } // check each extract file mapping foreach ($pkg['extract-files'] as $source => $target) { if (!is_string($source) || !is_string($target)) { @@ -213,6 +299,9 @@ public static function validatePkgs(mixed $data): void } } } + + // Check for unknown fields + self::validateAllowedFields($pkg, $name, 'pkg', self::PKG_FIELDS); } } @@ -227,18 +316,11 @@ public static function validatePreBuilt(mixed $data): void throw new ValidationException('pre-built.json is broken'); } - // Check required fields - if (!isset($data['repo'])) { - throw new ValidationException('pre-built.json must have [repo] field'); - } - if (!is_string($data['repo'])) { - throw new ValidationException('pre-built.json [repo] must be string'); - } + // Validate all fields using unified method + self::validateConfigFields($data, 'pre-built', 'pre-built', self::PRE_BUILT_FIELDS); - // Check optional prefer-stable field - if (isset($data['prefer-stable']) && !is_bool($data['prefer-stable'])) { - throw new ValidationException('pre-built.json [prefer-stable] must be boolean'); - } + // Check for unknown fields + self::validateAllowedFields($data, 'pre-built', 'pre-built', self::PRE_BUILT_FIELDS); // Check match pattern fields (at least one must exist) $pattern_fields = ['match-pattern-linux', 'match-pattern-macos', 'match-pattern-windows']; @@ -247,9 +329,6 @@ public static function validatePreBuilt(mixed $data): void foreach ($pattern_fields as $field) { if (isset($data[$field])) { $has_pattern = true; - if (!is_string($data[$field])) { - throw new ValidationException("pre-built.json [{$field}] must be string"); - } // Validate pattern contains required placeholders if (!str_contains($data[$field], '{name}')) { throw new ValidationException("pre-built.json [{$field}] must contain {name} placeholder"); @@ -403,6 +482,53 @@ public static function validateAndParseCraftFile(mixed $craft_file, Command $com return $craft; } + /** + * Validate a field based on its global type definition + * + * @param string $field Field name + * @param mixed $value Field value + * @param string $name Item name (for error messages) + * @param string $type Item type (for error messages) + * @return bool Returns true if validation passes + */ + private static function validateFieldType(string $field, mixed $value, string $name, string $type): bool + { + // Check if field exists in FIELD_TYPES + if (!isset(self::FIELD_TYPES[$field])) { + // Try to strip suffix and check base field name + $suffixes = ['-windows', '-unix', '-macos', '-linux']; + $base_field = $field; + foreach ($suffixes as $suffix) { + if (str_ends_with($field, $suffix)) { + $base_field = substr($field, 0, -strlen($suffix)); + break; + } + } + + if (!isset(self::FIELD_TYPES[$base_field])) { + // Unknown field is not allowed - strict validation + throw new ValidationException("{$type} {$name} has unknown field [{$field}]"); + } + + // Use base field type for validation + $expected_type = self::FIELD_TYPES[$base_field]; + } else { + $expected_type = self::FIELD_TYPES[$field]; + } + + return match ($expected_type) { + 'string' => is_string($value) ?: throw new ValidationException("{$type} {$name} [{$field}] must be string"), + 'bool' => is_bool($value) ?: throw new ValidationException("{$type} {$name} [{$field}] must be boolean"), + 'array' => is_array($value) ?: throw new ValidationException("{$type} {$name} [{$field}] must be array"), + 'list' => is_list_array($value) ?: throw new ValidationException("{$type} {$name} [{$field}] must be a list"), + 'object' => is_assoc_array($value) ?: throw new ValidationException("{$type} {$name} [{$field}] must be an object"), + 'object|bool' => (is_assoc_array($value) || is_bool($value)) ?: throw new ValidationException("{$type} {$name} [{$field}] must be object or boolean"), + 'object|array' => is_array($value) ?: throw new ValidationException("{$type} {$name} [{$field}] must be an object or array"), + 'callable' => true, // Skip validation for callable + default => true, + }; + } + private static function checkSingleLicense(array $license, string $name): void { if (!is_assoc_array($license)) { @@ -414,9 +540,6 @@ private static function checkSingleLicense(array $license, string $name): void if (!in_array($license['type'], ['file', 'text'])) { throw new ValidationException("source {$name} license type is invalid"); } - if (!in_array($license['type'], ['file', 'text'])) { - throw new ValidationException("source {$name} license type is invalid"); - } if ($license['type'] === 'file' && !isset($license['path'])) { throw new ValidationException("source {$name} license file must have path"); } @@ -440,68 +563,127 @@ private static function validateSourceTypeConfig(array $item, string $name, stri if (!is_string($item['type'])) { throw new ValidationException("{$config_type} {$name} type prop must be string"); } - if (!in_array($item['type'], ['filelist', 'git', 'ghtagtar', 'ghtar', 'ghrel', 'url', 'custom'])) { + + if (!isset(self::SOURCE_TYPE_FIELDS[$item['type']])) { throw new ValidationException("{$config_type} {$name} type [{$item['type']}] is invalid"); } - // Validate type-specific requirements - switch ($item['type']) { - case 'filelist': - if (!isset($item['url'], $item['regex'])) { - throw new ValidationException("{$config_type} {$name} needs [url] and [regex] props"); - } - if (!is_string($item['url']) || !is_string($item['regex'])) { - throw new ValidationException("{$config_type} {$name} [url] and [regex] must be string"); - } - break; - case 'git': - if (!isset($item['url'], $item['rev'])) { - throw new ValidationException("{$config_type} {$name} needs [url] and [rev] props"); - } - if (!is_string($item['url']) || !is_string($item['rev'])) { - throw new ValidationException("{$config_type} {$name} [url] and [rev] must be string"); - } - if (isset($item['path']) && !is_string($item['path'])) { - throw new ValidationException("{$config_type} {$name} [path] must be string"); - } - break; - case 'ghtagtar': - case 'ghtar': - if (!isset($item['repo'])) { - throw new ValidationException("{$config_type} {$name} needs [repo] prop"); - } - if (!is_string($item['repo'])) { - throw new ValidationException("{$config_type} {$name} [repo] must be string"); - } - if (isset($item['path']) && !is_string($item['path'])) { - throw new ValidationException("{$config_type} {$name} [path] must be string"); - } - break; - case 'ghrel': - if (!isset($item['repo'], $item['match'])) { - throw new ValidationException("{$config_type} {$name} needs [repo] and [match] props"); - } - if (!is_string($item['repo']) || !is_string($item['match'])) { - throw new ValidationException("{$config_type} {$name} [repo] and [match] must be string"); - } - break; - case 'url': - if (!isset($item['url'])) { - throw new ValidationException("{$config_type} {$name} needs [url] prop"); - } - if (!is_string($item['url'])) { - throw new ValidationException("{$config_type} {$name} [url] must be string"); + [$required, $optional] = self::SOURCE_TYPE_FIELDS[$item['type']]; + + // Check required fields exist + foreach ($required as $prop) { + if (!isset($item[$prop])) { + $props = implode('] and [', $required); + throw new ValidationException("{$config_type} {$name} needs [{$props}] props"); + } + } + + // Validate field types using global field type definitions + foreach (array_merge($required, $optional) as $prop) { + if (isset($item[$prop])) { + self::validateFieldType($prop, $item[$prop], $name, $config_type); + } + } + } + + /** + * Validate that fields with suffixes are list arrays + */ + private static function validateListArrayFields(array $item, string $name, string $type, array $fields, array $suffixes): void + { + foreach ($fields as $field) { + foreach ($suffixes as $suffix) { + $key = $field . $suffix; + if (isset($item[$key])) { + self::validateFieldType($key, $item[$key], $name, $type); } - if (isset($item['filename']) && !is_string($item['filename'])) { - throw new ValidationException("{$config_type} {$name} [filename] must be string"); + } + } + } + + /** + * Validate arg-type fields with suffixes + */ + private static function validateArgTypeFields(array $item, string $name, array $suffixes): void + { + $valid_arg_types = ['enable', 'with', 'with-path', 'custom', 'none', 'enable-path']; + + foreach (array_merge([''], $suffixes) as $suffix) { + $key = 'arg-type' . $suffix; + if (isset($item[$key]) && !in_array($item[$key], $valid_arg_types)) { + throw new ValidationException("ext {$name} {$key} is invalid"); + } + } + } + + /** + * Unified method to validate config fields based on field definitions + * + * @param array $item Item data to validate + * @param string $name Item name for error messages + * @param string $type Config type (source, lib, ext, pkg, pre-built) + * @param array $field_definitions Field definitions [field_name => required (bool)] + */ + private static function validateConfigFields(array $item, string $name, string $type, array $field_definitions): void + { + foreach ($field_definitions as $field => $required) { + if ($required && !isset($item[$field])) { + throw new ValidationException("{$type} {$name} must have [{$field}] field"); + } + + if (isset($item[$field])) { + self::validateFieldType($field, $item[$field], $name, $type); + } + } + } + + /** + * Validate that item only contains allowed fields + * This method checks for unknown fields based on the config type + * + * @param array $item Item data to validate + * @param string $name Item name for error messages + * @param string $type Config type (source, lib, ext, pkg, pre-built) + * @param array $field_definitions Field definitions [field_name => required (bool)] + */ + private static function validateAllowedFields(array $item, string $name, string $type, array $field_definitions): void + { + // For source and pkg types, we need to check SOURCE_TYPE_FIELDS as well + $allowed_fields = array_keys($field_definitions); + + // For source/pkg, add allowed fields from SOURCE_TYPE_FIELDS based on the type + if (in_array($type, ['source', 'pkg']) && isset($item['type'], self::SOURCE_TYPE_FIELDS[$item['type']])) { + [$required, $optional] = self::SOURCE_TYPE_FIELDS[$item['type']]; + $allowed_fields = array_merge($allowed_fields, $required, $optional); + } + + // For lib and ext types, add fields with suffixes + if (in_array($type, ['lib', 'ext'])) { + $suffixes = ['-windows', '-unix', '-macos', '-linux']; + $base_fields = ['lib-depends', 'lib-suggests', 'static-libs', 'pkg-configs', 'headers', 'bin']; + if ($type === 'ext') { + $base_fields = ['lib-depends', 'lib-suggests', 'ext-depends', 'ext-suggests']; + // Add arg-type fields + foreach (array_merge([''], $suffixes) as $suffix) { + $allowed_fields[] = 'arg-type' . $suffix; } - if (isset($item['path']) && !is_string($item['path'])) { - throw new ValidationException("{$config_type} {$name} [path] must be string"); + } + foreach ($base_fields as $field) { + foreach ($suffixes as $suffix) { + $allowed_fields[] = $field . $suffix; } - break; - case 'custom': - // custom type has no specific requirements - break; + } + // frameworks is lib-only + if ($type === 'lib') { + $allowed_fields[] = 'frameworks'; + } + } + + // Check each field in item + foreach (array_keys($item) as $field) { + if (!in_array($field, $allowed_fields)) { + throw new ValidationException("{$type} {$name} has unknown field [{$field}]"); + } } } } From 4e4ce282dbece5381cfda430aeb2a1299cb8cb9b Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Mon, 20 Oct 2025 13:41:25 +0800 Subject: [PATCH 105/207] Fix zip extract not strip dir bug --- src/SPC/store/FileSystem.php | 59 ++++++++++++++++++++++++++++++++++-- 1 file changed, 57 insertions(+), 2 deletions(-) diff --git a/src/SPC/store/FileSystem.php b/src/SPC/store/FileSystem.php index 7a574925d..9cbd68b79 100644 --- a/src/SPC/store/FileSystem.php +++ b/src/SPC/store/FileSystem.php @@ -584,7 +584,7 @@ private static function extractArchive(string $filename, string $target): void 'tar', 'xz', 'txz' => f_passthru("tar -xf {$filename} -C {$target} --strip-components 1"), 'tgz', 'gz' => f_passthru("tar -xzf {$filename} -C {$target} --strip-components 1"), 'bz2' => f_passthru("tar -xjf {$filename} -C {$target} --strip-components 1"), - 'zip' => f_passthru("unzip {$filename} -d {$target}"), + 'zip' => self::unzipWithStrip($filename, $target), default => throw new FileSystemException('unknown archive format: ' . $filename), }; } elseif (PHP_OS_FAMILY === 'Windows') { @@ -599,7 +599,7 @@ private static function extractArchive(string $filename, string $target): void match (self::extname($filename)) { 'tar' => f_passthru("tar -xf {$filename} -C {$target} --strip-components 1"), 'xz', 'txz', 'gz', 'tgz', 'bz2' => cmd()->execWithResult("\"{$_7z}\" x -so {$filename} | tar -f - -x -C \"{$target}\" --strip-components 1"), - 'zip' => f_passthru("\"{$_7z}\" x {$filename} -o{$target} -y"), + 'zip' => self::unzipWithStrip($filename, $target), default => throw new FileSystemException("unknown archive format: {$filename}"), }; } @@ -644,4 +644,59 @@ private static function extractWithType(string $source_type, string $filename, s SPC_SOURCE_LOCAL => symlink(self::convertPath($filename), $extract_path), }; } + + /** + * Unzip file with stripping top-level directory + */ + private static function unzipWithStrip(string $zip_file, string $extract_path): void + { + $temp_dir = self::convertPath(sys_get_temp_dir() . '/spc_unzip_' . bin2hex(random_bytes(16))); + $zip_file = self::convertPath($zip_file); + $extract_path = self::convertPath($extract_path); + + // extract to temp dir + self::createDir($temp_dir); + + if (PHP_OS_FAMILY === 'Windows') { + $mute = defined('DEBUG_MODE') ? '' : ' > NUL'; + // use php-sdk-binary-tools/bin/7za.exe + $_7z = self::convertPath(getenv('PHP_SDK_PATH') . '/bin/7za.exe'); + f_passthru("\"{$_7z}\" x {$zip_file} -o{$temp_dir} -y{$mute}"); + } else { + $mute = defined('DEBUG_MODE') ? '' : ' > /dev/null'; + f_passthru("unzip \"{$zip_file}\" -d \"{$temp_dir}\"{$mute}"); + } + // scan first level dirs (relative, not recursive, include dirs) + $contents = self::scanDirFiles($temp_dir, false, true, true); + if ($contents === false) { + throw new FileSystemException('Cannot scan unzip temp dir: ' . $temp_dir); + } + // if extract path already exists, remove it + if (is_dir($extract_path)) { + self::removeDir($extract_path); + } + // if only one dir, move its contents to extract_path using rename + $subdir = self::convertPath("{$temp_dir}/{$contents[0]}"); + if (count($contents) === 1 && is_dir($subdir)) { + rename($subdir, $extract_path); + } else { + // else, move all contents to extract_path + self::createDir($extract_path); + foreach ($contents as $item) { + $subdir = self::convertPath("{$temp_dir}/{$item}"); + if (is_dir($subdir)) { + // move all dir contents to extract_path (strip top-level) + $sub_contents = self::scanDirFiles($subdir, false, true, true); + if ($sub_contents === false) { + throw new FileSystemException('Cannot scan unzip temp sub-dir: ' . $subdir); + } + foreach ($sub_contents as $sub_item) { + rename(self::convertPath("{$subdir}/{$sub_item}"), self::convertPath("{$extract_path}/{$sub_item}")); + } + } else { + rename(self::convertPath("{$temp_dir}/{$item}"), self::convertPath("{$extract_path}/{$item}")); + } + } + } + } } From 49cfcbe92d58abb6c1d2310267001b2ac3505a68 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Mon, 20 Oct 2025 13:41:33 +0800 Subject: [PATCH 106/207] Update docs --- docs/en/develop/source-module.md | 32 ++++++++++++++++++++++++++++++++ docs/zh/develop/source-module.md | 31 +++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/docs/en/develop/source-module.md b/docs/en/develop/source-module.md index 4b1b1fc0f..51c3ba3ca 100644 --- a/docs/en/develop/source-module.md +++ b/docs/en/develop/source-module.md @@ -36,6 +36,7 @@ The following is the source download configuration corresponding to the `libeven The most important field here is `type`. Currently, the types it supports are: - `url`: Directly use URL to download, for example: `https://download.libsodium.org/libsodium/releases/libsodium-1.0.18.tar.gz`. +- `pie`: Download PHP extensions from Packagist using the PIE (PHP Installer for Extensions) standard. - `ghrel`: Use the GitHub Release API to download, download the artifacts uploaded from the latest version released by maintainers. - `ghtar`: Use the GitHub Release API to download. Different from `ghrel`, `ghtar` is downloaded from the `source code (tar.gz)` in the latest Release of the project. @@ -89,6 +90,37 @@ Example (download the imagick extension and extract it to the extension storage } ``` +## Download type - pie + +PIE (PHP Installer for Extensions) type sources refer to downloading PHP extensions from Packagist that follow the PIE standard. +This method automatically fetches extension information from the Packagist repository and downloads the appropriate distribution file. + +The parameters included are: + +- `repo`: The Packagist vendor/package name, such as `vendor/package-name` + +Example (download a PHP extension from Packagist using PIE): + +```json +{ + "ext-example": { + "type": "pie", + "repo": "vendor/example-extension", + "path": "php-src/ext/example", + "license": { + "type": "file", + "path": "LICENSE" + } + } +} +``` + +::: tip +The PIE download type will automatically detect the extension information from Packagist metadata, +including the download URL, version, and distribution type. +The extension must be marked as `type: php-ext` or contain `php-ext` metadata in its Packagist package definition. +::: + ## Download type - ghrel ghrel will download files from Assets uploaded in GitHub Release. diff --git a/docs/zh/develop/source-module.md b/docs/zh/develop/source-module.md index 00feb3c42..769ffa08b 100644 --- a/docs/zh/develop/source-module.md +++ b/docs/zh/develop/source-module.md @@ -30,6 +30,7 @@ static-php-cli 的下载资源模块是一个主要的功能,它包含了所 这里最主要的字段是 `type`,目前它支持的类型有: - `url`: 直接使用 URL 下载,例如:`https://download.libsodium.org/libsodium/releases/libsodium-1.0.18.tar.gz`。 +- `pie`: 使用 PIE(PHP Installer for Extensions)标准从 Packagist 下载 PHP 扩展。 - `ghrel`: 使用 GitHub Release API 下载,即从 GitHub 项目发布的最新版本中上传的附件下载。 - `ghtar`: 使用 GitHub Release API 下载,与 `ghrel` 不同的是,`ghtar` 是从项目的最新 Release 中找 `source code (tar.gz)` 下载的。 - `ghtagtar`: 使用 GitHub Release API 下载,与 `ghtar` 相比,`ghtagtar` 可以从 `tags` 列表找最新的,并下载 `tar.gz` 格式的源码(因为有些项目只使用了 `tag` 发布版本)。 @@ -77,6 +78,36 @@ url 类型的资源指的是从 URL 直接下载文件。 } ``` +## 下载类型 - pie + +PIE(PHP Installer for Extensions)类型的资源是从 Packagist 下载遵循 PIE 标准的 PHP 扩展。 +该方法会自动从 Packagist 仓库获取扩展信息,并下载相应的分发文件。 + +包含的参数有: + +- `repo`: Packagist 的 vendor/package 名称,如 `vendor/package-name` + +例子(使用 PIE 从 Packagist 下载 PHP 扩展): + +```json +{ + "ext-example": { + "type": "pie", + "repo": "vendor/example-extension", + "path": "php-src/ext/example", + "license": { + "type": "file", + "path": "LICENSE" + } + } +} +``` + +::: tip +PIE 下载类型会自动从 Packagist 元数据中检测扩展信息,包括下载 URL、版本和分发类型。 +扩展必须在其 Packagist 包定义中标记为 `type: php-ext` 或包含 `php-ext` 元数据。 +::: + ## 下载类型 - ghrel ghrel 会从 GitHub Release 中上传的 Assets 下载文件。首先使用 GitHub Release API 获取最新版本,然后根据正则匹配方式下载相应的文件。 From 5e229a0b016f5edc15ea1a34ff81f2af3ff3cf29 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Mon, 20 Oct 2025 13:41:41 +0800 Subject: [PATCH 107/207] Update dependencies --- composer.lock | 289 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 196 insertions(+), 93 deletions(-) diff --git a/composer.lock b/composer.lock index 069a340fe..4b28fc613 100644 --- a/composer.lock +++ b/composer.lock @@ -8,7 +8,7 @@ "packages": [ { "name": "illuminate/collections", - "version": "v11.45.3", + "version": "v11.46.1", "source": { "type": "git", "url": "https://github.com/illuminate/collections.git", @@ -64,7 +64,7 @@ }, { "name": "illuminate/conditionable", - "version": "v11.45.3", + "version": "v11.46.1", "source": { "type": "git", "url": "https://github.com/illuminate/conditionable.git", @@ -110,7 +110,7 @@ }, { "name": "illuminate/contracts", - "version": "v11.45.3", + "version": "v11.46.1", "source": { "type": "git", "url": "https://github.com/illuminate/contracts.git", @@ -158,7 +158,7 @@ }, { "name": "illuminate/macroable", - "version": "v11.45.3", + "version": "v11.46.1", "source": { "type": "git", "url": "https://github.com/illuminate/macroable.git", @@ -416,16 +416,16 @@ }, { "name": "symfony/console", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7" + "reference": "2b9c5fafbac0399a20a2e82429e2bd735dcfb7db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7", - "reference": "cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7", + "url": "https://api.github.com/repos/symfony/console/zipball/2b9c5fafbac0399a20a2e82429e2bd735dcfb7db", + "reference": "2b9c5fafbac0399a20a2e82429e2bd735dcfb7db", "shasum": "" }, "require": { @@ -490,7 +490,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.3.3" + "source": "https://github.com/symfony/console/tree/v7.3.4" }, "funding": [ { @@ -510,7 +510,7 @@ "type": "tidelift" } ], - "time": "2025-08-25T06:35:40+00:00" + "time": "2025-09-22T15:31:00+00:00" }, { "name": "symfony/deprecation-contracts", @@ -916,16 +916,16 @@ }, { "name": "symfony/process", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "32241012d521e2e8a9d713adb0812bb773b907f1" + "reference": "f24f8f316367b30810810d4eb30c543d7003ff3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/32241012d521e2e8a9d713adb0812bb773b907f1", - "reference": "32241012d521e2e8a9d713adb0812bb773b907f1", + "url": "https://api.github.com/repos/symfony/process/zipball/f24f8f316367b30810810d4eb30c543d7003ff3b", + "reference": "f24f8f316367b30810810d4eb30c543d7003ff3b", "shasum": "" }, "require": { @@ -957,7 +957,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.3.3" + "source": "https://github.com/symfony/process/tree/v7.3.4" }, "funding": [ { @@ -977,7 +977,7 @@ "type": "tidelift" } ], - "time": "2025-08-18T09:42:54+00:00" + "time": "2025-09-11T10:12:26+00:00" }, { "name": "symfony/service-contracts", @@ -1064,16 +1064,16 @@ }, { "name": "symfony/string", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "17a426cce5fd1f0901fefa9b2a490d0038fd3c9c" + "reference": "f96476035142921000338bad71e5247fbc138872" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/17a426cce5fd1f0901fefa9b2a490d0038fd3c9c", - "reference": "17a426cce5fd1f0901fefa9b2a490d0038fd3c9c", + "url": "https://api.github.com/repos/symfony/string/zipball/f96476035142921000338bad71e5247fbc138872", + "reference": "f96476035142921000338bad71e5247fbc138872", "shasum": "" }, "require": { @@ -1088,7 +1088,6 @@ }, "require-dev": { "symfony/emoji": "^7.1", - "symfony/error-handler": "^6.4|^7.0", "symfony/http-client": "^6.4|^7.0", "symfony/intl": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3.0", @@ -1131,7 +1130,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.3.3" + "source": "https://github.com/symfony/string/tree/v7.3.4" }, "funding": [ { @@ -1151,7 +1150,7 @@ "type": "tidelift" } ], - "time": "2025-08-25T06:35:40+00:00" + "time": "2025-09-11T14:36:48+00:00" }, { "name": "symfony/yaml", @@ -2861,16 +2860,16 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.87.1", + "version": "v3.89.0", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "2f5170365e2a422d0c5421f9c8818b2c078105f6" + "reference": "4dd6768cb7558440d27d18f54909eee417317ce9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/2f5170365e2a422d0c5421f9c8818b2c078105f6", - "reference": "2f5170365e2a422d0c5421f9c8818b2c078105f6", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/4dd6768cb7558440d27d18f54909eee417317ce9", + "reference": "4dd6768cb7558440d27d18f54909eee417317ce9", "shasum": "" }, "require": { @@ -2885,7 +2884,6 @@ "php": "^7.4 || ^8.0", "react/child-process": "^0.6.6", "react/event-loop": "^1.5", - "react/promise": "^3.3", "react/socket": "^1.16", "react/stream": "^1.4", "sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0", @@ -2897,12 +2895,13 @@ "symfony/polyfill-mbstring": "^1.33", "symfony/polyfill-php80": "^1.33", "symfony/polyfill-php81": "^1.33", + "symfony/polyfill-php84": "^1.33", "symfony/process": "^5.4.47 || ^6.4.24 || ^7.2", "symfony/stopwatch": "^5.4.45 || ^6.4.24 || ^7.0" }, "require-dev": { "facile-it/paraunit": "^1.3.1 || ^2.7", - "infection/infection": "^0.29.14", + "infection/infection": "^0.31.0", "justinrainbow/json-schema": "^6.5", "keradus/cli-executor": "^2.2", "mikey179/vfsstream": "^1.6.12", @@ -2910,7 +2909,6 @@ "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6", "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6", "phpunit/phpunit": "^9.6.25 || ^10.5.53 || ^11.5.34", - "symfony/polyfill-php84": "^1.33", "symfony/var-dumper": "^5.4.48 || ^6.4.24 || ^7.3.2", "symfony/yaml": "^5.4.45 || ^6.4.24 || ^7.3.2" }, @@ -2953,7 +2951,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.87.1" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.89.0" }, "funding": [ { @@ -2961,20 +2959,20 @@ "type": "github" } ], - "time": "2025-09-02T15:27:36+00:00" + "time": "2025-10-18T19:30:16+00:00" }, { "name": "humbug/box", - "version": "4.6.6", + "version": "4.6.8", "source": { "type": "git", "url": "https://github.com/box-project/box.git", - "reference": "09646041cb2e0963ab6ca109e1b366337617a0f2" + "reference": "05d205d99ddb72f3729658a0115db02cfc08912e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/box-project/box/zipball/09646041cb2e0963ab6ca109e1b366337617a0f2", - "reference": "09646041cb2e0963ab6ca109e1b366337617a0f2", + "url": "https://api.github.com/repos/box-project/box/zipball/05d205d99ddb72f3729658a0115db02cfc08912e", + "reference": "05d205d99ddb72f3729658a0115db02cfc08912e", "shasum": "" }, "require": { @@ -2988,13 +2986,13 @@ "fidry/console": "^0.6.0", "fidry/filesystem": "^1.2.1", "humbug/php-scoper": "^0.18.14", - "justinrainbow/json-schema": "^5.2.12", + "justinrainbow/json-schema": "^6.2.0", "nikic/iter": "^2.2", "php": "^8.2", "phpdocumentor/reflection-docblock": "^5.4", "phpdocumentor/type-resolver": "^1.7", "psr/log": "^3.0", - "sebastian/diff": "^5.0", + "sebastian/diff": "^5.0 || ^6.0 || ^7.0", "seld/jsonlint": "^1.10.2", "seld/phar-utils": "^1.2", "symfony/finder": "^6.4.0 || ^7.0.0", @@ -3005,6 +3003,9 @@ "thecodingmachine/safe": "^2.5 || ^3.0", "webmozart/assert": "^1.11" }, + "conflict": { + "marc-mabe/php-enum": "<4.4" + }, "replace": { "symfony/polyfill-php80": "*", "symfony/polyfill-php81": "*", @@ -3070,22 +3071,22 @@ ], "support": { "issues": "https://github.com/box-project/box/issues", - "source": "https://github.com/box-project/box/tree/4.6.6" + "source": "https://github.com/box-project/box/tree/4.6.8" }, - "time": "2025-03-02T18:20:45+00:00" + "time": "2025-10-13T17:13:17+00:00" }, { "name": "humbug/php-scoper", - "version": "0.18.17", + "version": "0.18.18", "source": { "type": "git", "url": "https://github.com/humbug/php-scoper.git", - "reference": "0a2556c7c23776a61cf22689e2f24298ba00e33a" + "reference": "dd55d01a937602c9473cfbe0ecab9521cb9740aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/humbug/php-scoper/zipball/0a2556c7c23776a61cf22689e2f24298ba00e33a", - "reference": "0a2556c7c23776a61cf22689e2f24298ba00e33a", + "url": "https://api.github.com/repos/humbug/php-scoper/zipball/dd55d01a937602c9473cfbe0ecab9521cb9740aa", + "reference": "dd55d01a937602c9473cfbe0ecab9521cb9740aa", "shasum": "" }, "require": { @@ -3154,9 +3155,9 @@ "description": "Prefixes all PHP namespaces in a file or directory.", "support": { "issues": "https://github.com/humbug/php-scoper/issues", - "source": "https://github.com/humbug/php-scoper/tree/0.18.17" + "source": "https://github.com/humbug/php-scoper/tree/0.18.18" }, - "time": "2025-02-19T22:50:39+00:00" + "time": "2025-10-15T15:29:47+00:00" }, { "name": "jetbrains/phpstorm-stubs", @@ -3207,30 +3208,40 @@ }, { "name": "justinrainbow/json-schema", - "version": "5.3.0", + "version": "6.6.0", "source": { "type": "git", "url": "https://github.com/jsonrainbow/json-schema.git", - "reference": "feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8" + "reference": "68ba7677532803cc0c5900dd5a4d730537f2b2f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8", - "reference": "feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8", + "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/68ba7677532803cc0c5900dd5a4d730537f2b2f3", + "reference": "68ba7677532803cc0c5900dd5a4d730537f2b2f3", "shasum": "" }, "require": { - "php": ">=7.1" + "ext-json": "*", + "marc-mabe/php-enum": "^4.0", + "php": "^7.2 || ^8.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", - "json-schema/json-schema-test-suite": "1.2.0", - "phpunit/phpunit": "^4.8.35" + "friendsofphp/php-cs-fixer": "3.3.0", + "json-schema/json-schema-test-suite": "^23.2", + "marc-mabe/php-enum-phpstan": "^2.0", + "phpspec/prophecy": "^1.19", + "phpstan/phpstan": "^1.12", + "phpunit/phpunit": "^8.5" }, "bin": [ "bin/validate-json" ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.x-dev" + } + }, "autoload": { "psr-4": { "JsonSchema\\": "src/JsonSchema/" @@ -3259,16 +3270,16 @@ } ], "description": "A library to validate a json schema.", - "homepage": "https://github.com/justinrainbow/json-schema", + "homepage": "https://github.com/jsonrainbow/json-schema", "keywords": [ "json", "schema" ], "support": { "issues": "https://github.com/jsonrainbow/json-schema/issues", - "source": "https://github.com/jsonrainbow/json-schema/tree/5.3.0" + "source": "https://github.com/jsonrainbow/json-schema/tree/6.6.0" }, - "time": "2024-07-06T21:00:26+00:00" + "time": "2025-10-10T11:34:09+00:00" }, { "name": "kelunik/certificate", @@ -3502,6 +3513,79 @@ ], "time": "2024-12-08T08:18:47+00:00" }, + { + "name": "marc-mabe/php-enum", + "version": "v4.7.2", + "source": { + "type": "git", + "url": "https://github.com/marc-mabe/php-enum.git", + "reference": "bb426fcdd65c60fb3638ef741e8782508fda7eef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/marc-mabe/php-enum/zipball/bb426fcdd65c60fb3638ef741e8782508fda7eef", + "reference": "bb426fcdd65c60fb3638ef741e8782508fda7eef", + "shasum": "" + }, + "require": { + "ext-reflection": "*", + "php": "^7.1 | ^8.0" + }, + "require-dev": { + "phpbench/phpbench": "^0.16.10 || ^1.0.4", + "phpstan/phpstan": "^1.3.1", + "phpunit/phpunit": "^7.5.20 | ^8.5.22 | ^9.5.11", + "vimeo/psalm": "^4.17.0 | ^5.26.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-3.x": "3.2-dev", + "dev-master": "4.7-dev" + } + }, + "autoload": { + "psr-4": { + "MabeEnum\\": "src/" + }, + "classmap": [ + "stubs/Stringable.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Marc Bennewitz", + "email": "dev@mabe.berlin", + "homepage": "https://mabe.berlin/", + "role": "Lead" + } + ], + "description": "Simple and fast implementation of enumerations with native PHP", + "homepage": "https://github.com/marc-mabe/php-enum", + "keywords": [ + "enum", + "enum-map", + "enum-set", + "enumeration", + "enumerator", + "enummap", + "enumset", + "map", + "set", + "type", + "type-hint", + "typehint" + ], + "support": { + "issues": "https://github.com/marc-mabe/php-enum/issues", + "source": "https://github.com/marc-mabe/php-enum/tree/v4.7.2" + }, + "time": "2025-09-14T11:18:39+00:00" + }, { "name": "myclabs/deep-copy", "version": "1.13.4", @@ -4228,16 +4312,11 @@ }, { "name": "phpstan/phpstan", - "version": "1.12.28", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "fcf8b71aeab4e1a1131d1783cef97b23a51b87a9" - }, + "version": "1.12.32", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/fcf8b71aeab4e1a1131d1783cef97b23a51b87a9", - "reference": "fcf8b71aeab4e1a1131d1783cef97b23a51b87a9", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/2770dcdf5078d0b0d53f94317e06affe88419aa8", + "reference": "2770dcdf5078d0b0d53f94317e06affe88419aa8", "shasum": "" }, "require": { @@ -4282,7 +4361,7 @@ "type": "github" } ], - "time": "2025-07-17T17:15:39+00:00" + "time": "2025-09-30T10:16:31+00:00" }, { "name": "phpunit/php-code-coverage", @@ -4607,16 +4686,16 @@ }, { "name": "phpunit/phpunit", - "version": "10.5.53", + "version": "10.5.58", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "32768472ebfb6969e6c7399f1c7b09009723f653" + "reference": "e24fb46da450d8e6a5788670513c1af1424f16ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/32768472ebfb6969e6c7399f1c7b09009723f653", - "reference": "32768472ebfb6969e6c7399f1c7b09009723f653", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e24fb46da450d8e6a5788670513c1af1424f16ca", + "reference": "e24fb46da450d8e6a5788670513c1af1424f16ca", "shasum": "" }, "require": { @@ -4637,10 +4716,10 @@ "phpunit/php-timer": "^6.0.0", "sebastian/cli-parser": "^2.0.1", "sebastian/code-unit": "^2.0.0", - "sebastian/comparator": "^5.0.3", + "sebastian/comparator": "^5.0.4", "sebastian/diff": "^5.1.1", "sebastian/environment": "^6.1.0", - "sebastian/exporter": "^5.1.2", + "sebastian/exporter": "^5.1.4", "sebastian/global-state": "^6.0.2", "sebastian/object-enumerator": "^5.0.0", "sebastian/recursion-context": "^5.0.1", @@ -4688,7 +4767,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.53" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.58" }, "funding": [ { @@ -4712,7 +4791,7 @@ "type": "tidelift" } ], - "time": "2025-08-20T14:40:06+00:00" + "time": "2025-09-28T12:04:46+00:00" }, { "name": "psr/event-dispatcher", @@ -5640,16 +5719,16 @@ }, { "name": "sebastian/comparator", - "version": "5.0.3", + "version": "5.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e" + "reference": "e8e53097718d2b53cfb2aa859b06a41abf58c62e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", - "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/e8e53097718d2b53cfb2aa859b06a41abf58c62e", + "reference": "e8e53097718d2b53cfb2aa859b06a41abf58c62e", "shasum": "" }, "require": { @@ -5705,15 +5784,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.4" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" } ], - "time": "2024-10-18T14:56:07+00:00" + "time": "2025-09-07T05:25:07+00:00" }, { "name": "sebastian/complexity", @@ -5906,16 +5997,16 @@ }, { "name": "sebastian/exporter", - "version": "5.1.2", + "version": "5.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf" + "reference": "0735b90f4da94969541dac1da743446e276defa6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0735b90f4da94969541dac1da743446e276defa6", + "reference": "0735b90f4da94969541dac1da743446e276defa6", "shasum": "" }, "require": { @@ -5924,7 +6015,7 @@ "sebastian/recursion-context": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { @@ -5972,15 +6063,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.4" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" } ], - "time": "2024-03-02T07:17:12+00:00" + "time": "2025-09-24T06:09:11+00:00" }, { "name": "sebastian/global-state", @@ -7108,16 +7211,16 @@ }, { "name": "symfony/var-dumper", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "34d8d4c4b9597347306d1ec8eb4e1319b1e6986f" + "reference": "b8abe7daf2730d07dfd4b2ee1cecbf0dd2fbdabb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/34d8d4c4b9597347306d1ec8eb4e1319b1e6986f", - "reference": "34d8d4c4b9597347306d1ec8eb4e1319b1e6986f", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b8abe7daf2730d07dfd4b2ee1cecbf0dd2fbdabb", + "reference": "b8abe7daf2730d07dfd4b2ee1cecbf0dd2fbdabb", "shasum": "" }, "require": { @@ -7171,7 +7274,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.3.3" + "source": "https://github.com/symfony/var-dumper/tree/v7.3.4" }, "funding": [ { @@ -7191,7 +7294,7 @@ "type": "tidelift" } ], - "time": "2025-08-13T11:49:31+00:00" + "time": "2025-09-11T10:12:26+00:00" }, { "name": "thecodingmachine/safe", From f8801e224f03c833b221ec13cee5306474e222c1 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Mon, 20 Oct 2025 13:43:05 +0800 Subject: [PATCH 108/207] phpstan fix --- src/SPC/store/Downloader.php | 2 +- src/SPC/util/ConfigValidator.php | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/SPC/store/Downloader.php b/src/SPC/store/Downloader.php index e94bfedc6..63bec8075 100644 --- a/src/SPC/store/Downloader.php +++ b/src/SPC/store/Downloader.php @@ -668,7 +668,7 @@ private static function downloadByType(string $type, string $name, array $conf, ]); break; case 'custom': // Custom download method, like API-based download or other - if (isset($conf['func']) && is_callable($conf['func'])) { + if (isset($conf['func'])) { $conf['name'] = $name; $conf['func']($force, $conf, $download_as); break; diff --git a/src/SPC/util/ConfigValidator.php b/src/SPC/util/ConfigValidator.php index 3cd828edd..445c6242f 100644 --- a/src/SPC/util/ConfigValidator.php +++ b/src/SPC/util/ConfigValidator.php @@ -525,7 +525,6 @@ private static function validateFieldType(string $field, mixed $value, string $n 'object|bool' => (is_assoc_array($value) || is_bool($value)) ?: throw new ValidationException("{$type} {$name} [{$field}] must be object or boolean"), 'object|array' => is_array($value) ?: throw new ValidationException("{$type} {$name} [{$field}] must be an object or array"), 'callable' => true, // Skip validation for callable - default => true, }; } From 487980c9a882933f347112b8614be8de41f8e7ca Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Mon, 20 Oct 2025 13:48:52 +0800 Subject: [PATCH 109/207] phpunit fix --- tests/SPC/util/ConfigValidatorTest.php | 1 - tests/SPC/util/SPCConfigUtilTest.php | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/SPC/util/ConfigValidatorTest.php b/tests/SPC/util/ConfigValidatorTest.php index f132636fd..aba611a42 100644 --- a/tests/SPC/util/ConfigValidatorTest.php +++ b/tests/SPC/util/ConfigValidatorTest.php @@ -50,7 +50,6 @@ public function testValidateSourceGood(): void 'filename' => 'test.tar.gz', 'path' => 'test/path', 'provide-pre-built' => true, - 'prefer-stable' => false, 'license' => [ 'type' => 'file', 'path' => 'LICENSE', diff --git a/tests/SPC/util/SPCConfigUtilTest.php b/tests/SPC/util/SPCConfigUtilTest.php index 92353824c..c4b1427a2 100644 --- a/tests/SPC/util/SPCConfigUtilTest.php +++ b/tests/SPC/util/SPCConfigUtilTest.php @@ -44,6 +44,9 @@ public function testConstruct(): void public function testConfig(): void { + if (PHP_OS_FAMILY !== 'Linux') { + $this->markTestSkipped('SPCConfigUtil tests are only applicable on Linux.'); + } // normal $result = (new SPCConfigUtil())->config(['bcmath']); $this->assertStringContainsString(BUILD_ROOT_PATH . '/include', $result['cflags']); From 310335813fa6ad627fec66490d270164c5f5d106 Mon Sep 17 00:00:00 2001 From: henderkes Date: Mon, 20 Oct 2025 21:23:54 +0200 Subject: [PATCH 110/207] use libedit for postgreqsql --- config/lib.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/lib.json b/config/lib.json index 81335539b..6eefb33d4 100644 --- a/config/lib.json +++ b/config/lib.json @@ -781,7 +781,7 @@ "libxml2", "openssl", "zlib", - "readline" + "libedit" ], "lib-suggests": [ "icu", From 32efeb970c927c605dd78e646ff5091033076f8a Mon Sep 17 00:00:00 2001 From: henderkes Date: Mon, 20 Oct 2025 23:00:23 +0200 Subject: [PATCH 111/207] don't build ossfuzzer for zip --- src/SPC/builder/unix/library/libzip.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/SPC/builder/unix/library/libzip.php b/src/SPC/builder/unix/library/libzip.php index 931bfcc35..ad0befea2 100644 --- a/src/SPC/builder/unix/library/libzip.php +++ b/src/SPC/builder/unix/library/libzip.php @@ -22,6 +22,7 @@ protected function build(): void '-DBUILD_EXAMPLES=OFF', '-DBUILD_REGRESS=OFF', '-DBUILD_TOOLS=OFF', + '-DBUILD_OSSFUZZ=OFF', ) ->build(); $this->patchPkgconfPrefix(['libzip.pc'], PKGCONF_PATCH_PREFIX); From bba390dbcc8718f48f6cd559e20e6d4571fa91e8 Mon Sep 17 00:00:00 2001 From: henderkes Date: Mon, 20 Oct 2025 23:04:33 +0200 Subject: [PATCH 112/207] add runtime libs to unixshell (debian 11 is stupid and doesn't add them automatically) --- src/SPC/util/shell/UnixShell.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/SPC/util/shell/UnixShell.php b/src/SPC/util/shell/UnixShell.php index 75a0be3d6..b8d038b01 100644 --- a/src/SPC/util/shell/UnixShell.php +++ b/src/SPC/util/shell/UnixShell.php @@ -8,6 +8,7 @@ use SPC\builder\linux\library\LinuxLibraryBase; use SPC\builder\macos\library\MacOSLibraryBase; use SPC\exception\SPCInternalException; +use SPC\util\SPCTarget; use ZM\Logger\ConsoleColor; /** @@ -48,7 +49,7 @@ public function initializeEnv(BSDLibraryBase|LinuxLibraryBase|MacOSLibraryBase $ 'CFLAGS' => $library->getLibExtraCFlags(), 'CXXFLAGS' => $library->getLibExtraCXXFlags(), 'LDFLAGS' => $library->getLibExtraLdFlags(), - 'LIBS' => $library->getLibExtraLibs(), + 'LIBS' => $library->getLibExtraLibs() . SPCTarget::getRuntimeLibs(), ]); return $this; } From dd752cd5be23c51a0dbcab3294261b4ae816fcf2 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Tue, 21 Oct 2025 15:50:12 +0800 Subject: [PATCH 113/207] Fix windows 7z unzip strip function, fix windows pkg extract files path --- .gitignore | 3 +++ config/pkg.json | 6 +++--- src/SPC/store/FileSystem.php | 41 ++++++++++++++++++++++++------------ 3 files changed, 34 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index 4bf41b559..0d2bd5540 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,9 @@ docker/source/ # default package root directory /pkgroot/** +# Windows PHP SDK binary tools +/php-sdk-binary-tools/** + # default pack:lib and release directory /dist/** packlib_files.txt diff --git a/config/pkg.json b/config/pkg.json index 00e835956..d3b4fb909 100644 --- a/config/pkg.json +++ b/config/pkg.json @@ -23,8 +23,8 @@ "type": "url", "url": "https://dl.static-php.dev/static-php-cli/deps/nasm/nasm-2.16.01-win64.zip", "extract-files": { - "nasm-2.16.01/nasm.exe": "{php_sdk_path}/bin/nasm.exe", - "nasm-2.16.01/ndisasm.exe": "{php_sdk_path}/bin/ndisasm.exe" + "nasm.exe": "{php_sdk_path}/bin/nasm.exe", + "ndisasm.exe": "{php_sdk_path}/bin/ndisasm.exe" } }, "pkg-config-aarch64-linux": { @@ -84,7 +84,7 @@ "repo": "upx/upx", "match": "upx.+-win64\\.zip", "extract-files": { - "upx-*-win64/upx.exe": "{pkg_root_path}/bin/upx.exe" + "upx.exe": "{pkg_root_path}/bin/upx.exe" } }, "zig-aarch64-linux": { diff --git a/src/SPC/store/FileSystem.php b/src/SPC/store/FileSystem.php index 9cbd68b79..e66aee0ae 100644 --- a/src/SPC/store/FileSystem.php +++ b/src/SPC/store/FileSystem.php @@ -635,7 +635,7 @@ private static function emitSourceExtractHook(string $name, string $target): voi private static function extractWithType(string $source_type, string $filename, string $extract_path): void { - logger()->debug('Extracting source [' . $source_type . ']: ' . $filename); + logger()->debug("Extracting source [{$source_type}]: {$filename}"); /* @phpstan-ignore-next-line */ match ($source_type) { SPC_SOURCE_ARCHIVE => self::extractArchive($filename, $extract_path), @@ -680,23 +680,38 @@ private static function unzipWithStrip(string $zip_file, string $extract_path): if (count($contents) === 1 && is_dir($subdir)) { rename($subdir, $extract_path); } else { - // else, move all contents to extract_path - self::createDir($extract_path); + // else, if it contains only one dir, strip dir and copy other files + $dircount = 0; + $dir = []; + $top_files = []; foreach ($contents as $item) { - $subdir = self::convertPath("{$temp_dir}/{$item}"); - if (is_dir($subdir)) { - // move all dir contents to extract_path (strip top-level) - $sub_contents = self::scanDirFiles($subdir, false, true, true); - if ($sub_contents === false) { - throw new FileSystemException('Cannot scan unzip temp sub-dir: ' . $subdir); - } - foreach ($sub_contents as $sub_item) { - rename(self::convertPath("{$subdir}/{$sub_item}"), self::convertPath("{$extract_path}/{$sub_item}")); - } + if (is_dir(self::convertPath("{$temp_dir}/{$item}"))) { + ++$dircount; + $dir[] = $item; } else { + $top_files[] = $item; + } + } + // extract dir contents to extract_path + self::createDir($extract_path); + // extract move dir + if ($dircount === 1) { + $sub_contents = self::scanDirFiles("{$temp_dir}/{$dir[0]}", false, true, true); + if ($sub_contents === false) { + throw new FileSystemException("Cannot scan unzip temp sub-dir: {$dir[0]}"); + } + foreach ($sub_contents as $sub_item) { + rename(self::convertPath("{$temp_dir}/{$dir[0]}/{$sub_item}"), self::convertPath("{$extract_path}/{$sub_item}")); + } + } else { + foreach ($dir as $item) { rename(self::convertPath("{$temp_dir}/{$item}"), self::convertPath("{$extract_path}/{$item}")); } } + // move top-level files to extract_path + foreach ($top_files as $top_file) { + rename(self::convertPath("{$temp_dir}/{$top_file}"), self::convertPath("{$extract_path}/{$top_file}")); + } } } } From 2e13be2a7aded02e93f802ab58d9619fb3e28030 Mon Sep 17 00:00:00 2001 From: henderkes Date: Tue, 21 Oct 2025 13:54:34 +0200 Subject: [PATCH 114/207] prevent libedit from building strlcat/strlcpy, no idea why their soure code doesn't prevent this correctly itself --- src/SPC/builder/unix/library/libedit.php | 17 ++++++++++++++--- src/SPC/store/SourcePatcher.php | 2 +- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/SPC/builder/unix/library/libedit.php b/src/SPC/builder/unix/library/libedit.php index e436ee8b2..39e14bf72 100644 --- a/src/SPC/builder/unix/library/libedit.php +++ b/src/SPC/builder/unix/library/libedit.php @@ -4,16 +4,27 @@ namespace SPC\builder\unix\library; +use SPC\store\FileSystem; use SPC\util\executor\UnixAutoconfExecutor; trait libedit { protected function build(): void { - UnixAutoconfExecutor::create($this) + $make = UnixAutoconfExecutor::create($this) ->appendEnv(['CFLAGS' => '-D__STDC_ISO_10646__=201103L']) - ->configure() - ->make(); + ->configure(); + + foreach (['strlcpy', 'strlcat', 'fgetln'] as $symbol) { + $usymbol = strtoupper($symbol); + FileSystem::replaceFileLineContainsString( + $this->source_dir . '/config.h', + "/* #undef HAVE_{$usymbol} */", + "/* #undef HAVE_{$usymbol} */\n#define {$symbol} libedit_{$symbol}" + ); + } + + $make->make(); $this->patchPkgconfPrefix(['libedit.pc']); } } diff --git a/src/SPC/store/SourcePatcher.php b/src/SPC/store/SourcePatcher.php index c08204f5d..c7738e92d 100644 --- a/src/SPC/store/SourcePatcher.php +++ b/src/SPC/store/SourcePatcher.php @@ -44,7 +44,7 @@ public static function patchBeforeBuildconf(BuilderBase $builder): void } foreach ($builder->getLibs() as $lib) { if ($lib->patchBeforeBuildconf() === true) { - logger()->info("Library [{$lib->getName()}]patched before buildconf"); + logger()->info("Library [{$lib->getName()}] patched before buildconf"); } } // patch windows php 8.1 bug From 4e393886aa1835ddcb58346c5c6736d802d8e891 Mon Sep 17 00:00:00 2001 From: henderkes Date: Tue, 21 Oct 2025 14:23:55 +0200 Subject: [PATCH 115/207] no idea why our source has that uncommented --- src/SPC/builder/unix/library/libedit.php | 26 ++++++++++++------------ 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/SPC/builder/unix/library/libedit.php b/src/SPC/builder/unix/library/libedit.php index 39e14bf72..f2bcd6e59 100644 --- a/src/SPC/builder/unix/library/libedit.php +++ b/src/SPC/builder/unix/library/libedit.php @@ -9,22 +9,22 @@ trait libedit { + public function patchBeforeBuild(): bool + { + FileSystem::replaceFileStr( + $this->source_dir . '/src/sys.h', + '//#define strl', + '#define strl' + ); + return true; + } + protected function build(): void { - $make = UnixAutoconfExecutor::create($this) + UnixAutoconfExecutor::create($this) ->appendEnv(['CFLAGS' => '-D__STDC_ISO_10646__=201103L']) - ->configure(); - - foreach (['strlcpy', 'strlcat', 'fgetln'] as $symbol) { - $usymbol = strtoupper($symbol); - FileSystem::replaceFileLineContainsString( - $this->source_dir . '/config.h', - "/* #undef HAVE_{$usymbol} */", - "/* #undef HAVE_{$usymbol} */\n#define {$symbol} libedit_{$symbol}" - ); - } - - $make->make(); + ->configure() + ->make(); $this->patchPkgconfPrefix(['libedit.pc']); } } From 96592bce3ef5b02cffd3d8282c254f920a2bd609 Mon Sep 17 00:00:00 2001 From: henderkes Date: Tue, 21 Oct 2025 14:26:44 +0200 Subject: [PATCH 116/207] fix --- src/SPC/builder/unix/library/libedit.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SPC/builder/unix/library/libedit.php b/src/SPC/builder/unix/library/libedit.php index f2bcd6e59..2de9077fb 100644 --- a/src/SPC/builder/unix/library/libedit.php +++ b/src/SPC/builder/unix/library/libedit.php @@ -11,9 +11,9 @@ trait libedit { public function patchBeforeBuild(): bool { - FileSystem::replaceFileStr( + FileSystem::replaceFileRegex( $this->source_dir . '/src/sys.h', - '//#define strl', + '|//#define\s+strl|', '#define strl' ); return true; From ac8a9af89cc969fd5a24df63f37a85bf382128a5 Mon Sep 17 00:00:00 2001 From: Marc Date: Wed, 22 Oct 2025 19:43:54 +0200 Subject: [PATCH 117/207] Update license path for attr package --- config/source.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/source.json b/config/source.json index da58158cc..8dc3613d5 100644 --- a/config/source.json +++ b/config/source.json @@ -47,7 +47,7 @@ "provide-pre-built": true, "license": { "type": "file", - "path": "doc/COPYING" + "path": "doc/COPYING.LGPL" } }, "brotli": { From 6789ea81ff3c3ba2edef3e4a4494c86faf42f3b1 Mon Sep 17 00:00:00 2001 From: Marc Date: Wed, 22 Oct 2025 19:52:21 +0200 Subject: [PATCH 118/207] Update license path for acl in source.json --- config/source.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/source.json b/config/source.json index 8dc3613d5..8a2aaf62c 100644 --- a/config/source.json +++ b/config/source.json @@ -439,7 +439,7 @@ "provide-pre-built": true, "license": { "type": "file", - "path": "doc/COPYING" + "path": "doc/COPYING.LGPL" } }, "libaom": { From 55322a282c9a44e49865b9ecb00db40eda7f0522 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Thu, 23 Oct 2025 15:19:45 +0800 Subject: [PATCH 119/207] Fix rename cross-device link bug (using copy-delete) --- src/SPC/store/FileSystem.php | 43 +++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/src/SPC/store/FileSystem.php b/src/SPC/store/FileSystem.php index e66aee0ae..f6ce371e0 100644 --- a/src/SPC/store/FileSystem.php +++ b/src/SPC/store/FileSystem.php @@ -645,6 +645,36 @@ private static function extractWithType(string $source_type, string $filename, s }; } + /** + * Move file or directory, handling cross-device scenarios + * Uses rename() if possible, falls back to copy+delete for cross-device moves + * + * @param string $source Source path + * @param string $dest Destination path + */ + private static function moveFileOrDir(string $source, string $dest): void + { + $source = self::convertPath($source); + $dest = self::convertPath($dest); + + // Try rename first (fast, atomic) + if (@rename($source, $dest)) { + return; + } + + if (is_dir($source)) { + self::copyDir($source, $dest); + self::removeDir($source); + } else { + if (!copy($source, $dest)) { + throw new FileSystemException("Failed to copy file from {$source} to {$dest}"); + } + if (!unlink($source)) { + throw new FileSystemException("Failed to remove source file: {$source}"); + } + } + } + /** * Unzip file with stripping top-level directory */ @@ -675,10 +705,10 @@ private static function unzipWithStrip(string $zip_file, string $extract_path): if (is_dir($extract_path)) { self::removeDir($extract_path); } - // if only one dir, move its contents to extract_path using rename + // if only one dir, move its contents to extract_path $subdir = self::convertPath("{$temp_dir}/{$contents[0]}"); if (count($contents) === 1 && is_dir($subdir)) { - rename($subdir, $extract_path); + self::moveFileOrDir($subdir, $extract_path); } else { // else, if it contains only one dir, strip dir and copy other files $dircount = 0; @@ -701,17 +731,20 @@ private static function unzipWithStrip(string $zip_file, string $extract_path): throw new FileSystemException("Cannot scan unzip temp sub-dir: {$dir[0]}"); } foreach ($sub_contents as $sub_item) { - rename(self::convertPath("{$temp_dir}/{$dir[0]}/{$sub_item}"), self::convertPath("{$extract_path}/{$sub_item}")); + self::moveFileOrDir(self::convertPath("{$temp_dir}/{$dir[0]}/{$sub_item}"), self::convertPath("{$extract_path}/{$sub_item}")); } } else { foreach ($dir as $item) { - rename(self::convertPath("{$temp_dir}/{$item}"), self::convertPath("{$extract_path}/{$item}")); + self::moveFileOrDir(self::convertPath("{$temp_dir}/{$item}"), self::convertPath("{$extract_path}/{$item}")); } } // move top-level files to extract_path foreach ($top_files as $top_file) { - rename(self::convertPath("{$temp_dir}/{$top_file}"), self::convertPath("{$extract_path}/{$top_file}")); + self::moveFileOrDir(self::convertPath("{$temp_dir}/{$top_file}"), self::convertPath("{$extract_path}/{$top_file}")); } } + + // Clean up temp directory + self::removeDir($temp_dir); } } From c6de6e705676eebb597972694cfb2f1fb8c49894 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Thu, 23 Oct 2025 16:29:46 +0800 Subject: [PATCH 120/207] test zip unarchive --- src/globals/test-extensions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index 03e0c324c..ad814c0de 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -49,7 +49,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' => 'pdo_pgsql', + 'Linux', 'Darwin' => 'spx', '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 d3e2b4b5b29c26d370d4023992c2da3051d02187 Mon Sep 17 00:00:00 2001 From: henderkes Date: Thu, 23 Oct 2025 13:11:20 +0200 Subject: [PATCH 121/207] don't even build tools in the first place --- src/SPC/builder/unix/library/attr.php | 2 +- src/SPC/builder/unix/library/libacl.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SPC/builder/unix/library/attr.php b/src/SPC/builder/unix/library/attr.php index b33cf9870..67ac5feb6 100644 --- a/src/SPC/builder/unix/library/attr.php +++ b/src/SPC/builder/unix/library/attr.php @@ -17,7 +17,7 @@ protected function build(): void ->exec('libtoolize --force --copy') ->exec('./autogen.sh || autoreconf -if') ->configure('--disable-nls') - ->make(); + ->make('install-attributes_h install-data install-libattr_h install-libLTLIBRARIES install-pkgincludeHEADERS install-pkgconfDATA', with_install: false); $this->patchPkgconfPrefix(['libattr.pc'], PKGCONF_PATCH_PREFIX); } } diff --git a/src/SPC/builder/unix/library/libacl.php b/src/SPC/builder/unix/library/libacl.php index 223e09fc1..8c5d699d3 100644 --- a/src/SPC/builder/unix/library/libacl.php +++ b/src/SPC/builder/unix/library/libacl.php @@ -26,7 +26,7 @@ protected function build(): void ->exec('libtoolize --force --copy') ->exec('./autogen.sh || autoreconf -if') ->configure('--disable-nls', '--disable-tests') - ->make(); + ->make('install-acl_h install-libacl_h install-data install-libLTLIBRARIES install-pkgincludeHEADERS install-sysincludeHEADERS install-pkgconfDATA', with_install: false); $this->patchPkgconfPrefix(['libacl.pc'], PKGCONF_PATCH_PREFIX); } } From 8a9c8a279dd0a80dccafe7b75e26e913444523b4 Mon Sep 17 00:00:00 2001 From: henderkes Date: Thu, 23 Oct 2025 20:08:28 +0200 Subject: [PATCH 122/207] why does this fix compilation? --- src/SPC/builder/linux/LinuxBuilder.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index 3995c3a85..451aca5ce 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -211,7 +211,7 @@ protected function buildCgi(): void $concurrency = getenv('SPC_CONCURRENCY') ? '-j' . getenv('SPC_CONCURRENCY') : ''; shell()->cd(SOURCE_PATH . '/php-src') ->exec('sed -i "s|//lib|/lib|g" Makefile') - ->exec("make {$concurrency} {$vars} cgi"); + ->exec("make -j {$vars} cgi"); if (!$this->getOption('no-strip', false)) { shell()->cd(SOURCE_PATH . '/php-src/sapi/cgi')->exec('strip --strip-unneeded php-cgi'); @@ -247,7 +247,7 @@ protected function buildMicro(): void shell()->cd(SOURCE_PATH . '/php-src') ->exec('sed -i "s|//lib|/lib|g" Makefile') - ->exec("make {$concurrency} {$vars} micro"); + ->exec("make -j {$vars} micro"); $this->processMicroUPX(); @@ -267,7 +267,7 @@ protected function buildFpm(): void $concurrency = getenv('SPC_CONCURRENCY') ? '-j' . getenv('SPC_CONCURRENCY') : ''; shell()->cd(SOURCE_PATH . '/php-src') ->exec('sed -i "s|//lib|/lib|g" Makefile') - ->exec("make {$concurrency} {$vars} fpm"); + ->exec("make -j {$vars} fpm"); if (!$this->getOption('no-strip', false)) { shell()->cd(SOURCE_PATH . '/php-src/sapi/fpm')->exec('strip --strip-unneeded php-fpm'); @@ -294,7 +294,7 @@ protected function buildEmbed(): void 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("make {$concurrency} INSTALL_ROOT=" . BUILD_ROOT_PATH . " {$vars} install-sapi {$install_modules} install-build install-headers install-programs"); + ->exec('make -j INSTALL_ROOT=' . BUILD_ROOT_PATH . " {$vars} install-sapi {$install_modules} install-build install-headers install-programs"); $ldflags = getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_LDFLAGS') ?: ''; $libDir = BUILD_LIB_PATH; From 8e96c649181dc4b33be8f44e480b29d0c4b3ffb3 Mon Sep 17 00:00:00 2001 From: henderkes Date: Thu, 23 Oct 2025 20:08:52 +0200 Subject: [PATCH 123/207] add stdext to swoole --- src/SPC/builder/extension/swoole.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/SPC/builder/extension/swoole.php b/src/SPC/builder/extension/swoole.php index a4a531cf3..7ff4b3314 100644 --- a/src/SPC/builder/extension/swoole.php +++ b/src/SPC/builder/extension/swoole.php @@ -69,12 +69,15 @@ public function getUnixConfigureArg(bool $shared = false): string $arg .= $this->builder->getExt('swoole-hook-pgsql') ? ' --enable-swoole-pgsql' : ' --disable-swoole-pgsql'; $arg .= $this->builder->getExt('swoole-hook-mysql') ? ' --enable-mysqlnd' : ' --disable-mysqlnd'; $arg .= $this->builder->getExt('swoole-hook-sqlite') ? ' --enable-swoole-sqlite' : ' --disable-swoole-sqlite'; - if ($this->builder->getExt('swoole-hook-odbc')) { $config = (new SPCConfigUtil($this->builder, ['libs_only_deps' => true]))->config([], ['unixodbc']); $arg .= ' --with-swoole-odbc=unixODBC,' . BUILD_ROOT_PATH . ' SWOOLE_ODBC_LIBS="' . $config['libs'] . '"'; } + if ($this->getExtVersion() >= '6.1.0') { + $arg .= ' --enable-swoole-stdext'; + } + if (SPCTarget::getTargetOS() === 'Darwin') { $arg .= ' ac_cv_lib_pthread_pthread_barrier_init=no'; } From 8e50af3a7ead6c511e6e5940627c32c6fd21979f Mon Sep 17 00:00:00 2001 From: henderkes Date: Thu, 23 Oct 2025 21:21:37 +0200 Subject: [PATCH 124/207] update to rc3 --- src/SPC/builder/linux/LinuxBuilder.php | 8 ++++---- src/SPC/store/source/PhpSource.php | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index 451aca5ce..3995c3a85 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -211,7 +211,7 @@ protected function buildCgi(): void $concurrency = getenv('SPC_CONCURRENCY') ? '-j' . getenv('SPC_CONCURRENCY') : ''; shell()->cd(SOURCE_PATH . '/php-src') ->exec('sed -i "s|//lib|/lib|g" Makefile') - ->exec("make -j {$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'); @@ -247,7 +247,7 @@ protected function buildMicro(): void shell()->cd(SOURCE_PATH . '/php-src') ->exec('sed -i "s|//lib|/lib|g" Makefile') - ->exec("make -j {$vars} micro"); + ->exec("make {$concurrency} {$vars} micro"); $this->processMicroUPX(); @@ -267,7 +267,7 @@ protected function buildFpm(): void $concurrency = getenv('SPC_CONCURRENCY') ? '-j' . getenv('SPC_CONCURRENCY') : ''; shell()->cd(SOURCE_PATH . '/php-src') ->exec('sed -i "s|//lib|/lib|g" Makefile') - ->exec("make -j {$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'); @@ -294,7 +294,7 @@ protected function buildEmbed(): void 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('make -j INSTALL_ROOT=' . BUILD_ROOT_PATH . " {$vars} install-sapi {$install_modules} install-build install-headers install-programs"); + ->exec("make {$concurrency} INSTALL_ROOT=" . BUILD_ROOT_PATH . " {$vars} install-sapi {$install_modules} install-build install-headers install-programs"); $ldflags = getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_LDFLAGS') ?: ''; $libDir = BUILD_LIB_PATH; diff --git a/src/SPC/store/source/PhpSource.php b/src/SPC/store/source/PhpSource.php index ca6b6b6fe..e70ae59ac 100644 --- a/src/SPC/store/source/PhpSource.php +++ b/src/SPC/store/source/PhpSource.php @@ -16,7 +16,7 @@ public function fetch(bool $force = false, ?array $config = null, int $lock_as = { $major = defined('SPC_BUILD_PHP_VERSION') ? SPC_BUILD_PHP_VERSION : '8.4'; if ($major === '8.5') { - Downloader::downloadSource('php-src', ['type' => 'url', 'url' => 'https://github.com/php/php-src/archive/refs/tags/php-8.5.0RC2.tar.gz'], $force); + Downloader::downloadSource('php-src', ['type' => 'url', 'url' => 'https://github.com/php/php-src/archive/refs/tags/php-8.5.0RC3.tar.gz'], $force); } elseif ($major === 'git') { Downloader::downloadSource('php-src', ['type' => 'git', 'url' => 'https://github.com/php/php-src.git', 'rev' => 'master'], $force); } else { From ef5e6649815718f9a1621733e65e9de8f2f15a5d Mon Sep 17 00:00:00 2001 From: henderkes Date: Thu, 23 Oct 2025 22:14:57 +0200 Subject: [PATCH 125/207] don't build iconv program, or gettext programs --- src/SPC/builder/unix/library/gettext.php | 2 +- src/SPC/builder/unix/library/libiconv.php | 8 +++++++- src/SPC/util/executor/UnixAutoconfExecutor.php | 16 ++++++++++------ src/SPC/util/shell/UnixShell.php | 1 + 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/SPC/builder/unix/library/gettext.php b/src/SPC/builder/unix/library/gettext.php index f0fdae547..332e25c96 100644 --- a/src/SPC/builder/unix/library/gettext.php +++ b/src/SPC/builder/unix/library/gettext.php @@ -31,7 +31,7 @@ protected function build(): void $autoconf->addConfigureArgs('--disable-threads'); } - $autoconf->configure()->make(); + $autoconf->configure()->make(dir: $this->getSourceDir() . '/gettext-runtime/intl'); $this->patchLaDependencyPrefix(); } } diff --git a/src/SPC/builder/unix/library/libiconv.php b/src/SPC/builder/unix/library/libiconv.php index fd68e309d..5ccc94843 100644 --- a/src/SPC/builder/unix/library/libiconv.php +++ b/src/SPC/builder/unix/library/libiconv.php @@ -10,7 +10,13 @@ trait libiconv { protected function build(): void { - UnixAutoconfExecutor::create($this)->configure('--enable-extra-encodings')->make(); + UnixAutoconfExecutor::create($this) + ->configure( + '--enable-extra-encodings', + '--enable-year2038', + ) + ->make('install-lib', with_install: false) + ->make('install-lib', with_install: false, dir: $this->getSourceDir() . '/libcharset'); $this->patchLaDependencyPrefix(); } } diff --git a/src/SPC/util/executor/UnixAutoconfExecutor.php b/src/SPC/util/executor/UnixAutoconfExecutor.php index 075d7fd32..f196cb1ce 100644 --- a/src/SPC/util/executor/UnixAutoconfExecutor.php +++ b/src/SPC/util/executor/UnixAutoconfExecutor.php @@ -50,18 +50,22 @@ public function getConfigureArgsString(): string * @param bool $with_clean Whether to clean before building * @param array $after_env_vars Environment variables postfix */ - public function make(string $target = '', false|string $with_install = 'install', bool $with_clean = true, array $after_env_vars = []): static + public function make(string $target = '', false|string $with_install = 'install', bool $with_clean = true, array $after_env_vars = [], ?string $dir = null): static { - return $this->seekLogFileOnException(function () use ($target, $with_install, $with_clean, $after_env_vars) { + return $this->seekLogFileOnException(function () use ($target, $with_install, $with_clean, $after_env_vars, $dir) { + $shell = $this->shell; + if ($dir) { + $shell = $shell->cd($dir); + } if ($with_clean) { - $this->shell->exec('make clean'); + $shell->exec('make clean'); } $after_env_vars_str = $after_env_vars !== [] ? shell()->setEnv($after_env_vars)->getEnvString() : ''; - $this->shell->exec("make -j{$this->library->getBuilder()->concurrency} {$target} {$after_env_vars_str}"); + $shell->exec("make -j{$this->library->getBuilder()->concurrency} {$target} {$after_env_vars_str}"); if ($with_install !== false) { - $this->shell->exec("make {$with_install}"); + $shell->exec("make {$with_install}"); } - return $this->shell; + return $shell; }); } diff --git a/src/SPC/util/shell/UnixShell.php b/src/SPC/util/shell/UnixShell.php index b8d038b01..2fdc1b077 100644 --- a/src/SPC/util/shell/UnixShell.php +++ b/src/SPC/util/shell/UnixShell.php @@ -29,6 +29,7 @@ public function __construct(?bool $debug = null) public function exec(string $cmd): static { + $cmd = clean_spaces($cmd); /* @phpstan-ignore-next-line */ logger()->info(ConsoleColor::yellow('[EXEC] ') . ConsoleColor::green($cmd)); $original_command = $cmd; From da8debdadea912491cd953414a2c103dbff90735 Mon Sep 17 00:00:00 2001 From: henderkes Date: Thu, 23 Oct 2025 22:19:53 +0200 Subject: [PATCH 126/207] test php 8.5 with gettext --- 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 ad814c0de..0b73801f0 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -16,8 +16,8 @@ // '8.1', // '8.2', // '8.3', - '8.4', - // '8.5', + // '8.4', + '8.5', // 'git', ]; @@ -25,7 +25,7 @@ $test_os = [ 'macos-15-intel', // bin/spc for x86_64 'macos-15', // bin/spc for arm64 - // 'ubuntu-latest', // bin/spc-alpine-docker for x86_64 + '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-22.04-arm', // bin/spc-gnu-docker for arm64 @@ -49,7 +49,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' => 'spx', + 'Linux', 'Darwin' => 'gettext', '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 7bc4131c0286060b0a5e58737a150dac76b14cdc Mon Sep 17 00:00:00 2001 From: henderkes Date: Thu, 23 Oct 2025 23:11:30 +0200 Subject: [PATCH 127/207] use correct license for gettext as we only build libs now, update gmp to dynamically check version --- config/source.json | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/config/source.json b/config/source.json index 8a2aaf62c..349ba68cf 100644 --- a/config/source.json +++ b/config/source.json @@ -306,16 +306,17 @@ "regex": "/href=\"(?gettext-(?[^\"]+)\\.tar\\.xz)\"/", "license": { "type": "file", - "path": "COPYING" + "path": "gettext-runtime/intl/COPYING.LIB" } }, "gmp": { - "type": "url", - "url": "https://dl.static-php.dev/static-php-cli/deps/gmp/gmp-6.3.0.tar.xz", + "type": "filelist", + "url": "https://gmplib.org/download/gmp/", + "regex": "/href=\"(?gmp-(?[^\"]+)\\.tar\\.xz)\"/", "provide-pre-built": true, "alt": { - "type": "ghtagtar", - "repo": "alisw/GMP" + "type": "url", + "url": "https://dl.static-php.dev/static-php-cli/deps/gmp/gmp-6.3.0.tar.xz" }, "license": { "type": "text", From be51bcfdfc3c9c829b5f157bb29d397edd52ae0c Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Fri, 24 Oct 2025 13:55:33 +0800 Subject: [PATCH 128/207] Fix libevent build, use newer cmake options --- src/SPC/doctor/item/LinuxToolCheckList.php | 4 ++-- src/SPC/util/executor/UnixCMakeExecutor.php | 2 +- src/globals/test-extensions.php | 12 ++++++------ 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/SPC/doctor/item/LinuxToolCheckList.php b/src/SPC/doctor/item/LinuxToolCheckList.php index 2f6e866d8..a23ad6d57 100644 --- a/src/SPC/doctor/item/LinuxToolCheckList.php +++ b/src/SPC/doctor/item/LinuxToolCheckList.php @@ -82,14 +82,14 @@ public function checkCliTools(): ?CheckResult return CheckResult::ok(); } - #[AsCheckItem('if cmake version >= 3.18', limit_os: 'Linux')] + #[AsCheckItem('if cmake version >= 3.22', limit_os: 'Linux')] public function checkCMakeVersion(): ?CheckResult { $ver = get_cmake_version(); if ($ver === null) { return CheckResult::fail('Failed to get cmake version'); } - if (version_compare($ver, '3.18.0') < 0) { + if (version_compare($ver, '3.22.0') < 0) { return CheckResult::fail('cmake version is too low (' . $ver . '), please update it manually!'); } return CheckResult::ok($ver); diff --git a/src/SPC/util/executor/UnixCMakeExecutor.php b/src/SPC/util/executor/UnixCMakeExecutor.php index 3e29addf6..eceab9014 100644 --- a/src/SPC/util/executor/UnixCMakeExecutor.php +++ b/src/SPC/util/executor/UnixCMakeExecutor.php @@ -205,7 +205,7 @@ private function makeCmakeToolchainFile(): string SET(CMAKE_INSTALL_LIBDIR "lib") set(PKG_CONFIG_EXECUTABLE "{$pkgConfigExecutable}") -list(APPEND PKG_CONFIG_EXECUTABLE "--static") +set(PKG_CONFIG_ARGN "--static" CACHE STRING "Extra arguments for pkg-config" FORCE) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index ad814c0de..ade41c320 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -13,10 +13,10 @@ // test php version (8.1 ~ 8.4 available, multiple for matrix) $test_php_version = [ - // '8.1', + '8.1', // '8.2', // '8.3', - '8.4', + // '8.4', // '8.5', // 'git', ]; @@ -25,7 +25,7 @@ $test_os = [ 'macos-15-intel', // bin/spc for x86_64 'macos-15', // bin/spc for arm64 - // 'ubuntu-latest', // bin/spc-alpine-docker for x86_64 + '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-22.04-arm', // bin/spc-gnu-docker for arm64 @@ -49,14 +49,14 @@ // If you want to test your added extensions and libs, add below (comma separated, example `bcmath,openssl`). $extensions = match (PHP_OS_FAMILY) { - 'Linux', 'Darwin' => 'spx', + 'Linux', 'Darwin' => 'event', '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', }; // If you want to test shared extensions, add them below (comma separated, example `bcmath,openssl`). $shared_extensions = match (PHP_OS_FAMILY) { - 'Linux' => 'mysqli', - 'Darwin' => 'zip', + 'Linux' => '', + 'Darwin' => '', 'Windows' => '', }; From eb4445ea59748e42e9c3e1508dffbfd4c17f61e7 Mon Sep 17 00:00:00 2001 From: henderkes Date: Fri, 24 Oct 2025 10:06:29 +0200 Subject: [PATCH 129/207] use release tarballs from Daniel rather than automatically generated ones from github --- src/SPC/store/source/PhpSource.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/store/source/PhpSource.php b/src/SPC/store/source/PhpSource.php index e70ae59ac..1c0be85fb 100644 --- a/src/SPC/store/source/PhpSource.php +++ b/src/SPC/store/source/PhpSource.php @@ -16,7 +16,7 @@ public function fetch(bool $force = false, ?array $config = null, int $lock_as = { $major = defined('SPC_BUILD_PHP_VERSION') ? SPC_BUILD_PHP_VERSION : '8.4'; if ($major === '8.5') { - Downloader::downloadSource('php-src', ['type' => 'url', 'url' => 'https://github.com/php/php-src/archive/refs/tags/php-8.5.0RC3.tar.gz'], $force); + Downloader::downloadSource('php-src', ['type' => 'url', 'url' => 'https://downloads.php.net/~daniels/php-8.5.0RC3.tar.xz'], $force); } elseif ($major === 'git') { Downloader::downloadSource('php-src', ['type' => 'git', 'url' => 'https://github.com/php/php-src.git', 'rev' => 'master'], $force); } else { From c30b34ae5c6f56b3aef0eb5fd885e7dec4e44024 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Fri, 24 Oct 2025 17:02:15 +0800 Subject: [PATCH 130/207] Fix gettext missing symbols on macOS --- src/SPC/builder/extension/gettext.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/builder/extension/gettext.php b/src/SPC/builder/extension/gettext.php index dc4f58aaa..791cbef40 100644 --- a/src/SPC/builder/extension/gettext.php +++ b/src/SPC/builder/extension/gettext.php @@ -15,7 +15,7 @@ class gettext extends Extension public function patchBeforeBuildconf(): bool { if ($this->builder instanceof MacOSBuilder) { - FileSystem::replaceFileStr(SOURCE_PATH . '/php-src/ext/gettext/config.m4', 'AC_CHECK_LIB($GETTEXT_CHECK_IN_LIB', 'AC_CHECK_LIB(intl'); + FileSystem::replaceFileStr(SOURCE_PATH . '/php-src/ext/gettext/config.m4', 'AC_CHECK_LIB([$GETTEXT_CHECK_IN_LIB', 'AC_CHECK_LIB([intl'); } return true; } From 4cdc6a07ae7e269ef1e0a38cac051592e2560eef Mon Sep 17 00:00:00 2001 From: henderkes Date: Fri, 24 Oct 2025 11:49:11 +0200 Subject: [PATCH 131/207] fix php 8.5 --- src/SPC/builder/extension/gettext.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/SPC/builder/extension/gettext.php b/src/SPC/builder/extension/gettext.php index 791cbef40..7baa36502 100644 --- a/src/SPC/builder/extension/gettext.php +++ b/src/SPC/builder/extension/gettext.php @@ -15,7 +15,10 @@ class gettext extends Extension public function patchBeforeBuildconf(): bool { if ($this->builder instanceof MacOSBuilder) { + // new php versions FileSystem::replaceFileStr(SOURCE_PATH . '/php-src/ext/gettext/config.m4', 'AC_CHECK_LIB([$GETTEXT_CHECK_IN_LIB', 'AC_CHECK_LIB([intl'); + // old php versions + FileSystem::replaceFileStr(SOURCE_PATH . '/php-src/ext/gettext/config.m4', 'AC_CHECK_LIB($GETTEXT_CHECK_IN_LIB', 'AC_CHECK_LIB(intl'); } return true; } From 56bac3576818e64d903d7eb3d22b40608f7ef28e Mon Sep 17 00:00:00 2001 From: henderkes Date: Fri, 24 Oct 2025 12:09:24 +0200 Subject: [PATCH 132/207] do both in one go --- src/SPC/builder/extension/gettext.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/SPC/builder/extension/gettext.php b/src/SPC/builder/extension/gettext.php index 7baa36502..303cc3892 100644 --- a/src/SPC/builder/extension/gettext.php +++ b/src/SPC/builder/extension/gettext.php @@ -15,10 +15,11 @@ class gettext extends Extension public function patchBeforeBuildconf(): bool { if ($this->builder instanceof MacOSBuilder) { - // new php versions - FileSystem::replaceFileStr(SOURCE_PATH . '/php-src/ext/gettext/config.m4', 'AC_CHECK_LIB([$GETTEXT_CHECK_IN_LIB', 'AC_CHECK_LIB([intl'); - // old php versions - FileSystem::replaceFileStr(SOURCE_PATH . '/php-src/ext/gettext/config.m4', 'AC_CHECK_LIB($GETTEXT_CHECK_IN_LIB', 'AC_CHECK_LIB(intl'); + FileSystem::replaceFileStr( + SOURCE_PATH . '/php-src/ext/gettext/config.m4', + ['AC_CHECK_LIB($GETTEXT_CHECK_IN_LIB', 'AC_CHECK_LIB([$GETTEXT_CHECK_IN_LIB'], + ['AC_CHECK_LIB(intl', 'AC_CHECK_LIB([intl'] // new php versions use a bracket + ); } return true; } From b59a06facebeb35e4476374c1cc7943604079eb3 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Sat, 25 Oct 2025 02:56:38 +0800 Subject: [PATCH 133/207] Add backward patches for win32 --- src/SPC/store/SourcePatcher.php | 17 ++++ src/globals/patch/php_win32_time.patch | 110 +++++++++++++++++++++++++ 2 files changed, 127 insertions(+) create mode 100644 src/globals/patch/php_win32_time.patch diff --git a/src/SPC/store/SourcePatcher.php b/src/SPC/store/SourcePatcher.php index 7b72ad1b7..d9bae08b5 100644 --- a/src/SPC/store/SourcePatcher.php +++ b/src/SPC/store/SourcePatcher.php @@ -23,6 +23,7 @@ public static function init(): void FileSystem::addSourceExtractHook('php-src', [__CLASS__, 'patchPhpLibxml212']); FileSystem::addSourceExtractHook('php-src', [__CLASS__, 'patchGDWin32']); FileSystem::addSourceExtractHook('php-src', [__CLASS__, 'patchFfiCentos7FixO3strncmp']); + FileSystem::addSourceExtractHook('php-src', [__CLASS__, 'patchWin32Time']); FileSystem::addSourceExtractHook('sqlsrv', [__CLASS__, 'patchSQLSRVWin32']); FileSystem::addSourceExtractHook('pdo_sqlsrv', [__CLASS__, 'patchSQLSRVWin32']); FileSystem::addSourceExtractHook('yaml', [__CLASS__, 'patchYamlWin32']); @@ -500,6 +501,22 @@ public static function patchFfiCentos7FixO3strncmp(): bool return true; } + public static function patchWin32Time(): bool + { + if (PHP_OS_FAMILY !== 'Windows') { + return false; + } + if (!file_exists(SOURCE_PATH . '/php-src/main/php_version.h')) { + return false; + } + $file = file_get_contents(SOURCE_PATH . '/php-src/main/php_version.h'); + if (preg_match('/PHP_VERSION_ID (\d+)/', $file, $match) !== 0 && intval($match[1]) < 80400) { + self::patchFile('php_win32_time.patch', SOURCE_PATH . '/php-src'); + return true; + } + return false; + } + public static function patchPkgConfigForGcc15(): bool { self::patchFile('pkg-config_gcc15.patch', SOURCE_PATH . '/pkg-config'); diff --git a/src/globals/patch/php_win32_time.patch b/src/globals/patch/php_win32_time.patch new file mode 100644 index 000000000..28766378f --- /dev/null +++ b/src/globals/patch/php_win32_time.patch @@ -0,0 +1,110 @@ +From d919783778c6d2310285e657fd0c3612238bf6ac Mon Sep 17 00:00:00 2001 +From: "Christoph M. Becker" +Date: Wed, 14 Aug 2024 13:02:12 +0200 +Subject: [PATCH 1/2] GetSystemTimePreciseAsFileTime() is now always available + +As of PHP 8.3.0, we require Windows Server 2012 or Windows 8 as bare +minimum. Since GetSystemTimePreciseAsFileTime() is always available on +these Windows versions[1], there is no more need for the workaround +described in dllmain.c; we just can call the function directly. + +[1] +--- + win32/dllmain.c | 14 -------------- + win32/time.c | 29 +---------------------------- + 2 files changed, 1 insertion(+), 42 deletions(-) + +diff --git a/win32/dllmain.c b/win32/dllmain.c +index a507f1e169246..ab625bf3e597b 100644 +--- a/win32/dllmain.c ++++ b/win32/dllmain.c +@@ -38,20 +38,6 @@ BOOL WINAPI DllMain(HINSTANCE inst, DWORD reason, LPVOID dummy) + switch (reason) + { + case DLL_PROCESS_ATTACH: +- /* +- * We do not need to check the return value of php_win32_init_gettimeofday() +- * because the symbol bare minimum symbol we need is always available on our +- * lowest supported platform. +- * +- * On Windows 8 or greater, we use a more precise symbol to obtain the system +- * time, which is dynamically. The fallback allows us to proper support +- * Vista/7/Server 2003 R2/Server 2008/Server 2008 R2. +- * +- * Instead simply initialize the global in win32/time.c for gettimeofday() +- * use later on +- */ +- php_win32_init_gettimeofday(); +- + ret = ret && php_win32_ioutil_init(); + if (!ret) { + fprintf(stderr, "ioutil initialization failed"); +diff --git a/win32/time.c b/win32/time.c +index d1fe51458ec57..af02ee96a10e7 100644 +--- a/win32/time.c ++++ b/win32/time.c +@@ -25,40 +25,13 @@ + + typedef VOID (WINAPI *MyGetSystemTimeAsFileTime)(LPFILETIME lpSystemTimeAsFileTime); + +-static MyGetSystemTimeAsFileTime timefunc = NULL; +- +-#ifdef PHP_EXPORTS +-static zend_always_inline MyGetSystemTimeAsFileTime get_time_func(void) +-{/*{{{*/ +- MyGetSystemTimeAsFileTime timefunc = NULL; +- HMODULE hMod = GetModuleHandle("kernel32.dll"); +- +- if (hMod) { +- /* Max possible resolution <1us, win8/server2012 */ +- timefunc = (MyGetSystemTimeAsFileTime)GetProcAddress(hMod, "GetSystemTimePreciseAsFileTime"); +- } +- +- if(!timefunc) { +- /* 100ns blocks since 01-Jan-1641 */ +- timefunc = (MyGetSystemTimeAsFileTime) GetSystemTimeAsFileTime; +- } +- +- return timefunc; +-}/*}}}*/ +- +-void php_win32_init_gettimeofday(void) +-{/*{{{*/ +- timefunc = get_time_func(); +-}/*}}}*/ +-#endif +- + static zend_always_inline int getfilesystemtime(struct timeval *tv) + {/*{{{*/ + FILETIME ft; + unsigned __int64 ff = 0; + ULARGE_INTEGER fft; + +- timefunc(&ft); ++ GetSystemTimePreciseAsFileTime(&ft); + + /* + * Do not cast a pointer to a FILETIME structure to either a + +From b357bc794b0dafe9cee3f09972ba596ac4610d01 Mon Sep 17 00:00:00 2001 +From: "Christoph M. Becker" +Date: Wed, 14 Aug 2024 13:12:24 +0200 +Subject: [PATCH 2/2] Remove now unused typedef + +--- + win32/time.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/win32/time.c b/win32/time.c +index af02ee96a10e7..57db914e6a8f6 100644 +--- a/win32/time.c ++++ b/win32/time.c +@@ -23,8 +23,6 @@ + #include + #include "php_win32_globals.h" + +-typedef VOID (WINAPI *MyGetSystemTimeAsFileTime)(LPFILETIME lpSystemTimeAsFileTime); +- + static zend_always_inline int getfilesystemtime(struct timeval *tv) + {/*{{{*/ + FILETIME ft; From bab330b64eae068d47f6bb67784ce0d768b2a7f6 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Sat, 25 Oct 2025 03:03:40 +0800 Subject: [PATCH 134/207] Unify CGI deploy functions --- src/SPC/builder/windows/WindowsBuilder.php | 9 +++------ src/SPC/store/SourcePatcher.php | 2 +- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/SPC/builder/windows/WindowsBuilder.php b/src/SPC/builder/windows/WindowsBuilder.php index bd218fb5c..76489b02b 100644 --- a/src/SPC/builder/windows/WindowsBuilder.php +++ b/src/SPC/builder/windows/WindowsBuilder.php @@ -176,11 +176,7 @@ public function buildCgi(): void cmd()->cd(SOURCE_PATH . '\php-src')->exec("{$this->sdk_prefix} nmake_cgi_wrapper.bat --task-args php-cgi.exe"); - // deploy cgi binary - logger()->info('Deploying cgi file'); - FileSystem::createDir(BUILD_BIN_PATH); - - cmd()->exec('copy ' . escapeshellarg(SOURCE_PATH . '\php-src\x64\Release' . ($this->zts ? '_TS' : '') . '\php-cgi.exe') . ' ' . escapeshellarg(BUILD_BIN_PATH . '\php-cgi.exe')); + $this->deployBinary(BUILD_TARGET_CGI); } public function buildEmbed(): void @@ -346,12 +342,13 @@ public function deployBinary(int $type): bool $src = match ($type) { BUILD_TARGET_CLI => SOURCE_PATH . "\\php-src\\x64\\Release{$ts}\\php.exe", BUILD_TARGET_MICRO => SOURCE_PATH . "\\php-src\\x64\\Release{$ts}\\micro.sfx", + BUILD_TARGET_CGI => SOURCE_PATH . "\\php-src\\x64\\Release{$ts}\\php-cgi.exe", default => throw new SPCInternalException("Deployment does not accept type {$type}"), }; // with-upx-pack for cli and micro if ($this->getOption('with-upx-pack', false)) { - if ($type === BUILD_TARGET_CLI || ($type === BUILD_TARGET_MICRO && version_compare($this->getMicroVersion(), '0.2.0') >= 0)) { + if ($type === BUILD_TARGET_CLI || $type === BUILD_TARGET_CGI || ($type === BUILD_TARGET_MICRO && version_compare($this->getMicroVersion(), '0.2.0') >= 0)) { cmd()->exec(getenv('UPX_EXEC') . ' --best ' . escapeshellarg($src)); } } diff --git a/src/SPC/store/SourcePatcher.php b/src/SPC/store/SourcePatcher.php index d9bae08b5..1ffe98ead 100644 --- a/src/SPC/store/SourcePatcher.php +++ b/src/SPC/store/SourcePatcher.php @@ -571,7 +571,7 @@ public static function patchWindowsCLITarget(): void */ public static function patchWindowsCGITarget(): void { - // search Makefile code line contains "$(BUILD_DIR)\php.exe:" + // search Makefile code line contains "$(BUILD_DIR)\php-cgi.exe:" $content = FileSystem::readFile(SOURCE_PATH . '/php-src/Makefile'); $lines = explode("\r\n", $content); $line_num = 0; From f426ced78997d148905765848e31ca18edeae5ba Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Sat, 25 Oct 2025 13:42:04 +0800 Subject: [PATCH 135/207] Use phpmicro patches instead --- config/env.ini | 2 +- config/source.json | 2 +- src/SPC/store/SourcePatcher.php | 17 ---- src/globals/patch/php_win32_time.patch | 110 ------------------------- 4 files changed, 2 insertions(+), 129 deletions(-) delete mode 100644 src/globals/patch/php_win32_time.patch diff --git a/config/env.ini b/config/env.ini index 044de07b7..a1f149c59 100644 --- a/config/env.ini +++ b/config/env.ini @@ -65,7 +65,7 @@ PHP_SDK_PATH="${WORKING_DIR}\php-sdk-binary-tools" ; upx executable path UPX_EXEC="${PKG_ROOT_PATH}\bin\upx.exe" ; phpmicro patches, for more info, see: https://github.com/easysoft/phpmicro/tree/master/patches -SPC_MICRO_PATCHES=static_extensions_win32,cli_checks,disable_huge_page,vcruntime140,win32,zend_stream,cli_static +SPC_MICRO_PATCHES=static_extensions_win32,cli_checks,disable_huge_page,vcruntime140,win32,zend_stream,cli_static,win32_api [linux] ; Linux can use different build toolchains. diff --git a/config/source.json b/config/source.json index 349ba68cf..fd0301be7 100644 --- a/config/source.json +++ b/config/source.json @@ -762,7 +762,7 @@ "micro": { "type": "git", "path": "php-src/sapi/micro", - "rev": "php-85-win", + "rev": "master", "url": "https://github.com/static-php/phpmicro", "license": { "type": "file", diff --git a/src/SPC/store/SourcePatcher.php b/src/SPC/store/SourcePatcher.php index 1ffe98ead..f628544fe 100644 --- a/src/SPC/store/SourcePatcher.php +++ b/src/SPC/store/SourcePatcher.php @@ -23,7 +23,6 @@ public static function init(): void FileSystem::addSourceExtractHook('php-src', [__CLASS__, 'patchPhpLibxml212']); FileSystem::addSourceExtractHook('php-src', [__CLASS__, 'patchGDWin32']); FileSystem::addSourceExtractHook('php-src', [__CLASS__, 'patchFfiCentos7FixO3strncmp']); - FileSystem::addSourceExtractHook('php-src', [__CLASS__, 'patchWin32Time']); FileSystem::addSourceExtractHook('sqlsrv', [__CLASS__, 'patchSQLSRVWin32']); FileSystem::addSourceExtractHook('pdo_sqlsrv', [__CLASS__, 'patchSQLSRVWin32']); FileSystem::addSourceExtractHook('yaml', [__CLASS__, 'patchYamlWin32']); @@ -501,22 +500,6 @@ public static function patchFfiCentos7FixO3strncmp(): bool return true; } - public static function patchWin32Time(): bool - { - if (PHP_OS_FAMILY !== 'Windows') { - return false; - } - if (!file_exists(SOURCE_PATH . '/php-src/main/php_version.h')) { - return false; - } - $file = file_get_contents(SOURCE_PATH . '/php-src/main/php_version.h'); - if (preg_match('/PHP_VERSION_ID (\d+)/', $file, $match) !== 0 && intval($match[1]) < 80400) { - self::patchFile('php_win32_time.patch', SOURCE_PATH . '/php-src'); - return true; - } - return false; - } - public static function patchPkgConfigForGcc15(): bool { self::patchFile('pkg-config_gcc15.patch', SOURCE_PATH . '/pkg-config'); diff --git a/src/globals/patch/php_win32_time.patch b/src/globals/patch/php_win32_time.patch deleted file mode 100644 index 28766378f..000000000 --- a/src/globals/patch/php_win32_time.patch +++ /dev/null @@ -1,110 +0,0 @@ -From d919783778c6d2310285e657fd0c3612238bf6ac Mon Sep 17 00:00:00 2001 -From: "Christoph M. Becker" -Date: Wed, 14 Aug 2024 13:02:12 +0200 -Subject: [PATCH 1/2] GetSystemTimePreciseAsFileTime() is now always available - -As of PHP 8.3.0, we require Windows Server 2012 or Windows 8 as bare -minimum. Since GetSystemTimePreciseAsFileTime() is always available on -these Windows versions[1], there is no more need for the workaround -described in dllmain.c; we just can call the function directly. - -[1] ---- - win32/dllmain.c | 14 -------------- - win32/time.c | 29 +---------------------------- - 2 files changed, 1 insertion(+), 42 deletions(-) - -diff --git a/win32/dllmain.c b/win32/dllmain.c -index a507f1e169246..ab625bf3e597b 100644 ---- a/win32/dllmain.c -+++ b/win32/dllmain.c -@@ -38,20 +38,6 @@ BOOL WINAPI DllMain(HINSTANCE inst, DWORD reason, LPVOID dummy) - switch (reason) - { - case DLL_PROCESS_ATTACH: -- /* -- * We do not need to check the return value of php_win32_init_gettimeofday() -- * because the symbol bare minimum symbol we need is always available on our -- * lowest supported platform. -- * -- * On Windows 8 or greater, we use a more precise symbol to obtain the system -- * time, which is dynamically. The fallback allows us to proper support -- * Vista/7/Server 2003 R2/Server 2008/Server 2008 R2. -- * -- * Instead simply initialize the global in win32/time.c for gettimeofday() -- * use later on -- */ -- php_win32_init_gettimeofday(); -- - ret = ret && php_win32_ioutil_init(); - if (!ret) { - fprintf(stderr, "ioutil initialization failed"); -diff --git a/win32/time.c b/win32/time.c -index d1fe51458ec57..af02ee96a10e7 100644 ---- a/win32/time.c -+++ b/win32/time.c -@@ -25,40 +25,13 @@ - - typedef VOID (WINAPI *MyGetSystemTimeAsFileTime)(LPFILETIME lpSystemTimeAsFileTime); - --static MyGetSystemTimeAsFileTime timefunc = NULL; -- --#ifdef PHP_EXPORTS --static zend_always_inline MyGetSystemTimeAsFileTime get_time_func(void) --{/*{{{*/ -- MyGetSystemTimeAsFileTime timefunc = NULL; -- HMODULE hMod = GetModuleHandle("kernel32.dll"); -- -- if (hMod) { -- /* Max possible resolution <1us, win8/server2012 */ -- timefunc = (MyGetSystemTimeAsFileTime)GetProcAddress(hMod, "GetSystemTimePreciseAsFileTime"); -- } -- -- if(!timefunc) { -- /* 100ns blocks since 01-Jan-1641 */ -- timefunc = (MyGetSystemTimeAsFileTime) GetSystemTimeAsFileTime; -- } -- -- return timefunc; --}/*}}}*/ -- --void php_win32_init_gettimeofday(void) --{/*{{{*/ -- timefunc = get_time_func(); --}/*}}}*/ --#endif -- - static zend_always_inline int getfilesystemtime(struct timeval *tv) - {/*{{{*/ - FILETIME ft; - unsigned __int64 ff = 0; - ULARGE_INTEGER fft; - -- timefunc(&ft); -+ GetSystemTimePreciseAsFileTime(&ft); - - /* - * Do not cast a pointer to a FILETIME structure to either a - -From b357bc794b0dafe9cee3f09972ba596ac4610d01 Mon Sep 17 00:00:00 2001 -From: "Christoph M. Becker" -Date: Wed, 14 Aug 2024 13:12:24 +0200 -Subject: [PATCH 2/2] Remove now unused typedef - ---- - win32/time.c | 2 -- - 1 file changed, 2 deletions(-) - -diff --git a/win32/time.c b/win32/time.c -index af02ee96a10e7..57db914e6a8f6 100644 ---- a/win32/time.c -+++ b/win32/time.c -@@ -23,8 +23,6 @@ - #include - #include "php_win32_globals.h" - --typedef VOID (WINAPI *MyGetSystemTimeAsFileTime)(LPFILETIME lpSystemTimeAsFileTime); -- - static zend_always_inline int getfilesystemtime(struct timeval *tv) - {/*{{{*/ - FILETIME ft; From 09198b431f37a6307c7dbdee450a8e58f1c06c3a Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Sat, 25 Oct 2025 15:41:48 +0800 Subject: [PATCH 136/207] Use unified configure args format --- src/SPC/builder/windows/WindowsBuilder.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/SPC/builder/windows/WindowsBuilder.php b/src/SPC/builder/windows/WindowsBuilder.php index 76489b02b..1892d8014 100644 --- a/src/SPC/builder/windows/WindowsBuilder.php +++ b/src/SPC/builder/windows/WindowsBuilder.php @@ -103,14 +103,13 @@ public function buildPHP(int $build_target = BUILD_TARGET_NONE): void ->exec( "{$this->sdk_prefix} configure.bat --task-args \"" . '--disable-all ' . - '--disable-cgi ' . '--with-php-build=' . BUILD_ROOT_PATH . ' ' . '--with-extra-includes=' . BUILD_INCLUDE_PATH . ' ' . '--with-extra-libs=' . BUILD_LIB_PATH . ' ' . - ($enableCli ? '--enable-cli=yes ' : '--enable-cli=no ') . - ($enableMicro ? ('--enable-micro=yes ' . $micro_logo . $micro_w32) : '--enable-micro=no ') . - ($enableEmbed ? '--enable-embed=yes ' : '--enable-embed=no ') . - ($enableCgi ? '--enable-cgi=yes ' : '--enable-cgi=no ') . + ($enableCli ? '--enable-cli ' : '--disable-cli ') . + ($enableMicro ? ('--enable-micro ' . $micro_logo . $micro_w32) : '--disable-micro ') . + ($enableEmbed ? '--enable-embed ' : '--disable-embed ') . + ($enableCgi ? '--enable-cgi ' : '--disable-cgi ') . $config_file_scan_dir . $opcache_jit_arg . "{$this->makeStaticExtensionArgs()} " . From fa6fa1c425a84decd5ab2c65f438497385649098 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Mon, 27 Oct 2025 00:59:08 +0800 Subject: [PATCH 137/207] Add docs --- docs/en/faq/index.md | 5 +++++ docs/zh/faq/index.md | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/docs/en/faq/index.md b/docs/en/faq/index.md index a942244cd..b65dca463 100644 --- a/docs/en/faq/index.md +++ b/docs/en/faq/index.md @@ -44,6 +44,11 @@ So on macOS, you can **directly** use SPC to build statically compiled PHP binar 2. You will get `buildroot/modules/xdebug.so` and `buildroot/bin/php`. 3. The `xdebug.so` file could be used for php that version and thread-safe are the same. +For the Windows platform, since officially built extensions (such as `php_yaml.dll`) force the use of the `php8.dll` dynamic library as a link, and statically built PHP does not include any dynamic libraries other than system libraries, +php.exe built by static-php cannot load officially built dynamic extensions. Since static-php-cli does not yet support building dynamic extensions, there is currently no way to load dynamic extensions with static-php. + +However, Windows can normally use the `FFI` extension to load other dll files and call them. + ## Can it support Oracle database extension? Some extensions that rely on closed source libraries, such as `oci8`, `sourceguardian`, etc., diff --git a/docs/zh/faq/index.md b/docs/zh/faq/index.md index 27611a50a..142a1503f 100644 --- a/docs/zh/faq/index.md +++ b/docs/zh/faq/index.md @@ -41,6 +41,11 @@ buildroot/bin/php -d "zend_extension=/path/to/php{PHP_VER}-{ts/nts}/xdebug.so" - 2. 你将获得 `buildroot/modules/xdebug.so` 和 `buildroot/bin/php`。 3. `xdebug.so` 文件可用于版本和线程安全相同的 php。 +对于 Windows 平台,由于官方构建的扩展(如 `php_yaml.dll`)强制使用了 `php8.dll` 动态库作为链接,静态构建的 PHP 不包含任何系统库以外的动态库, +所以 Windows 下无法加载官方构建的动态扩展。 由于 static-php-cli 还暂未支持构建动态扩展,所以目前还没有让 static-php 加载动态扩展的方法。 + +不过,Windows 可以正常使用 `FFI` 扩展加载其他的 dll 文件并调用。 + ## 可以支持 Oracle 数据库扩展吗? 部分依赖库闭源的扩展,如 `oci8`、`sourceguardian` 等,它们没有提供纯静态编译的依赖库文件(`.a`),仅提供了动态依赖库文件(`.so`), From f1d1d4fe106d694961fb38411be7ad0bf46612af Mon Sep 17 00:00:00 2001 From: Jerry Ma Date: Tue, 28 Oct 2025 18:56:18 +0800 Subject: [PATCH 138/207] Beautify docs (#948) --- docs/.vitepress/components/CliGenerator.vue | 173 +++++++++++++++- docs/.vitepress/components/Contributors.vue | 219 ++++++++++++++++++++ docs/.vitepress/config.ts | 3 +- docs/.vitepress/theme/style.css | 18 ++ docs/en/index.md | 125 ++++++++++- docs/index.md | 117 ++++++++++- docs/public/images/static-php_nobg.png | Bin 0 -> 988058 bytes docs/zh/index.md | 138 +++++++++++- 8 files changed, 772 insertions(+), 21 deletions(-) create mode 100644 docs/.vitepress/components/Contributors.vue create mode 100644 docs/public/images/static-php_nobg.png diff --git a/docs/.vitepress/components/CliGenerator.vue b/docs/.vitepress/components/CliGenerator.vue index 430dec241..378f6eaed 100644 --- a/docs/.vitepress/components/CliGenerator.vue +++ b/docs/.vitepress/components/CliGenerator.vue @@ -744,10 +744,26 @@ h2 { } select { - border-radius: 4px; + border-radius: 8px; border: 1px solid var(--vp-c-divider); - padding: 0 4px; + padding: 8px 12px; width: 300px; + background-color: var(--vp-c-bg-soft); + color: var(--vp-c-text-1); + font-size: 14px; + transition: all 0.2s ease; + cursor: pointer; + outline: none; +} + +select:hover { + border-color: var(--vp-c-brand-1); + background-color: var(--vp-c-bg); +} + +select:focus { + border-color: var(--vp-c-brand-1); + box-shadow: 0 0 0 3px var(--vp-c-brand-soft); } .my-btn { @@ -781,17 +797,160 @@ select { .textarea { border: 1px solid var(--vp-c-divider); - border-radius: 4px; - width: calc(100% - 12px); - padding: 4px 8px; + border-radius: 8px; + width: calc(100% - 24px); + padding: 12px; + background-color: var(--vp-c-bg-soft); + color: var(--vp-c-text-1); + font-size: 14px; + font-family: var(--vp-font-family-mono); + line-height: 1.5; + transition: all 0.2s ease; + outline: none; + resize: vertical; +} + +.textarea:hover { + border-color: var(--vp-c-brand-1); + background-color: var(--vp-c-bg); +} + +.textarea:focus { + border-color: var(--vp-c-brand-1); + box-shadow: 0 0 0 3px var(--vp-c-brand-soft); } .input { display: block; border: 1px solid var(--vp-c-divider); - border-radius: 4px; + border-radius: 8px; width: 100%; - padding: 4px 8px; + padding: 10px 12px; + background-color: var(--vp-c-bg-soft); + color: var(--vp-c-text-1); + font-size: 14px; + transition: all 0.2s ease; + outline: none; + box-sizing: border-box; +} + +.input:hover { + border-color: var(--vp-c-brand-1); + background-color: var(--vp-c-bg); +} + +.input:focus { + border-color: var(--vp-c-brand-1); + box-shadow: 0 0 0 3px var(--vp-c-brand-soft); +} + +/* Radio button styles */ +input[type="radio"] { + appearance: none; + width: 18px; + height: 18px; + border: 2px solid var(--vp-c-border); + border-radius: 50%; + background-color: var(--vp-c-bg); + cursor: pointer; + position: relative; + vertical-align: middle; + margin-right: 6px; + transition: all 0.2s ease; +} + +input[type="radio"]:hover { + border-color: var(--vp-c-brand-1); + background-color: var(--vp-c-bg-soft); +} + +input[type="radio"]:checked { + border-color: var(--vp-c-brand-1); + background-color: var(--vp-c-brand-1); +} + +input[type="radio"]:checked::after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 8px; + height: 8px; + border-radius: 50%; + background-color: var(--vp-c-bg); +} + +input[type="radio"]:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +/* Checkbox styles */ +input[type="checkbox"] { + appearance: none; + width: 18px; + height: 18px; + border: 2px solid var(--vp-c-border); + border-radius: 4px; + background-color: var(--vp-c-bg); + cursor: pointer; + position: relative; + vertical-align: middle; + margin-right: 6px; + transition: all 0.2s ease; +} + +input[type="checkbox"]:hover { + border-color: var(--vp-c-brand-1); + background-color: var(--vp-c-bg-soft); +} + +input[type="checkbox"]:checked { + border-color: var(--vp-c-brand-1); + background-color: var(--vp-c-brand-1); +} + +input[type="checkbox"]:checked::after { + content: ''; + position: absolute; + top: 2px; + left: 5px; + width: 4px; + height: 8px; + border: solid var(--vp-c-bg); + border-width: 0 2px 2px 0; + transform: rotate(45deg); +} + +input[type="checkbox"]:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +/* Label styles */ +label { + cursor: pointer; + user-select: none; + color: var(--vp-c-text-1); + font-size: 14px; + line-height: 1.5; + transition: color 0.2s ease; +} + +label:hover { + color: var(--vp-c-brand-1); +} + +input[type="radio"]:disabled + label, +input[type="checkbox"]:disabled + label { + opacity: 0.5; + cursor: not-allowed; +} + +input[type="radio"]:disabled + label:hover, +input[type="checkbox"]:disabled + label:hover { + color: var(--vp-c-text-1); } .command-container { diff --git a/docs/.vitepress/components/Contributors.vue b/docs/.vitepress/components/Contributors.vue new file mode 100644 index 000000000..c1f474b0c --- /dev/null +++ b/docs/.vitepress/components/Contributors.vue @@ -0,0 +1,219 @@ + + + + + diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index bf210a996..8ddc9c1f2 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -4,7 +4,7 @@ import sidebarZh from "./sidebar.zh"; // https://vitepress.dev/reference/site-config export default { - title: "static-php-cli", + title: "Static PHP", description: "Build single static PHP binary, with PHP project together, with popular extensions included.", locales: { en: { @@ -44,6 +44,7 @@ export default { }, themeConfig: { // https://vitepress.dev/reference/default-theme-config + logo: '/images/static-php_nobg.png', nav: [], socialLinks: [ {icon: 'github', link: 'https://github.com/crazywhalecc/static-php-cli'} diff --git a/docs/.vitepress/theme/style.css b/docs/.vitepress/theme/style.css index b09fc6828..ccf440746 100644 --- a/docs/.vitepress/theme/style.css +++ b/docs/.vitepress/theme/style.css @@ -4,3 +4,21 @@ max-width: 1000px !important; } + +.vp-doc .contributors-header h2 { + padding-top: 0; + border-top: none; +} + +.vp-doc .sponsors-header h2 { + padding-top: 0; + border-top: none; +} + +.dark .VPImage.logo { + filter: contrast(0.7); +} + +.dark .VPImage.image-src { + filter: contrast(0.7); +} diff --git a/docs/en/index.md b/docs/en/index.md index 3aee06126..7d80bf2f7 100644 --- a/docs/en/index.md +++ b/docs/en/index.md @@ -3,11 +3,14 @@ layout: home hero: - name: "static-php-cli" + name: "Static PHP" tagline: "Build standalone PHP binary on Linux, macOS, FreeBSD, Windows, with PHP project together, with popular extensions included." + image: + src: /images/static-php_nobg.png + alt: Static PHP CLI Logo actions: - theme: brand - text: Guide + text: Get Started link: ./guide/ features: @@ -19,3 +22,121 @@ features: details: static-php-cli comes with dependency management and supports installation of different types of PHP extensions. --- + + +
+
+

Special Sponsors

+

+ Thank you to our amazing sponsors for supporting this project! +

+
+ +
+ + + + diff --git a/docs/index.md b/docs/index.md index f667ce448..b2b25dedf 100644 --- a/docs/index.md +++ b/docs/index.md @@ -3,8 +3,11 @@ layout: home hero: - name: "static-php-cli" + name: "Static PHP" tagline: "Build standalone PHP binary on Linux, macOS, FreeBSD, Windows, with PHP project together, with popular extensions included." + image: + src: /images/static-php_nobg.png + alt: Static PHP CLI Logo actions: - theme: brand text: Get Started @@ -24,13 +27,121 @@ features: -## Special Sponsors +
+
+

Special Sponsors

+

+ Thank you to our amazing sponsors for supporting this project! +

+
+ +
+ + - + diff --git a/docs/public/images/static-php_nobg.png b/docs/public/images/static-php_nobg.png new file mode 100644 index 0000000000000000000000000000000000000000..64b6695c06c767a80509e66de527dd8f4291a54d GIT binary patch literal 988058 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

)V{aD;2+L^F<5n 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

g!$rHph{xq(ja8xD#8P}cKKkGRpg6yRg4 z?KnU2r!Cv_Ft`gI`2{+IV>U1le}lTrMo>=Ly5kEL@K%IOGbil=%PS#p>70J|rBm3HGfAA;Ti(d2^$Q&a9bC>vu!qsx%mFns*@RAI1 zLH;Wf6Per>H)ym)`&Q^r>)uBXl#fd;`6a(1qXBkgNsGpvwxON~!$aK=mi4%pzN79M zYbC||BkYo}#109E_dV~ zYrw5!s9cqCbO>3MA1FPFj!-vxfZhnw^Ri>=2T20SrpdTTUit(2kv>4#3=B!9KEyr? zeU`I)aOPVaD-kc>;&pW#NG{<)*7x#`@dy>P$uAQsb-Zk@Hoou?2R{<5%>-2Okvj6T^Cr(Jvy|Ne@*w@$@|=sC z$t2@_um&Q9 zUw|XO*qq@}3TdaVo3X`@iIa$;%)%6V{f>vUnwBXi@$|Rwia)1+$A?nhfl6(>WsE0! zIR`M(mOuj6M@%Zwv_=2dYJyS@W1Yk_;>D2xq3D|W#s%aP-3IsgR(K|YZg?jR-A7s1 ze$Z_vV5?6LGVa$+k5EsYl4}yCrm73# zVIrQrENEYv?9YDs4(-+dh5^~|dT5t^>0qj{g@aVSx_956J#CZ~RVL{33?@!bujMU4 zhuW{d^=<8=w|u3&n>j6DWEXWK zhEZp)6Xei1YRonK3mDxoevhqL)!zSSA8Rjv;q%*NmtTf&an_1Jk$VXwaGW)gU(Q=2 z@9wK{nwZ!)Bw$;%2h!zSbYdomI3GURWD}|$xM`Gw3y_jT4o*p{UBRD0=#UHy4$-7o z+^t(j1%I|is@B6Wh?j*&LBGAAt+WeDV9hqgM z#o)*Se#KF8lJJT^#@)SxuY4LD@0s`;9K=!Lxy8S?-vbMQ+LnjzOy6ex{N|p4L|icE z{7?PVNqPBL4mKm=l&o2)(*q=Zw#&MZxyl zJ}=ZimG79~G# zRiHC9bq>kb(KfR%+y4HK{I6}x`PZ~PyACF)9AkO)NdoavlBli=;^?lq@aFx6LjOlVyIwhw3}gN6@iM{}|kfyMed7$s;1@X_nF!LEJBWkk>#AsU|o{ z;HWG02DRY=T_gGiJo~RQNieCtsf6?$d7VB7Jd>#&U@EVUuixfYDVHXpp9Dy}Jxmhi zdkuQo=UhDiEzZ`EXsLcR-~@bR?2Nhmbh2&bh=Uvlvyt1~cYmz?$?wN|5jFq-KmbWZ zK~(>TcI(%Ex9!+@S6ef-qHS1vUYnj+mxTN{vOjug7w@*-#d3WT@#8bJPJb_Ip+;LE z(NZmaVNbsMAMx~`3Q{GI5$E;kR|h!2lCPBjYsaicA~=7j&GX#*2?ilXR&Ho(rq3t& zJD2ZbT=Ow0XUdW!1}U%wmN*S+5x6p0d@3oImIUxJI`>Ve zY{NSCBk?k^^P0bHOW72@^s_w9gzl4IC-H@5_1(my?3K8RJG17%o@5V$Wy?>tyYBr6 z11rpgFNot@+Os?)hze*H|Ky?MIFqU!TeWIc+kf~-yYBL>?Z1D`_p!1>eN$ld{I7Vc z_t9^z*|yhuvMCJ#=yh#|bkg@?4@FWOQm6Q5!riY05Up9ZAA*x7^3=n7ew48?(!LA? z70yZ0Sv-?;6I?d7j} zMcaJAW|mgY#c3E%B$xrHOP@5Cd3_0v$XAKzWJYnM#_Pp(-MwN=?Zji z-RaqGh_MMAh4@)cr)$C)oPa6q70el&8GHysyyd6PwVZ4mBaQSnf{V^l9ENtgQ>yk1 z1a){gK-!d!?y%#yf)j0lgU_~d0)2eh1`bh}(j+p{BCi)m*10C0o&PDz{RD%-NSaM} z2qKu->@dPdK$x4Bt19TIln57)ps?a;nKfq{>@p^Uxb^Y8#Dc(gBnz_3(W(nx|4&C$hW@a2{g(FBz8&q=H~o|L;url8bgs-& z)yb)eJpb&hpS1el*#&`{Sk`;FOQ*P)NtSktsxQVsrPtn19|4%((yOkhugcI* z}6vTF;UrOK3LPO2QQ#u}>8q^$3o^q0hs!te zi@#9HB{k7&^0JOIzbTQ6{`I=``k^H1?&$!vU=!i_=jSOW z2Hl26Z)nUUSsRv(sF0tl5}aYvMwv{h*TQj-Qv6+6q^Omlwj)3IjvZU1n7YaXdbE9K zQmpRSw)$Wh&ojtGyFME&j<%!fmfZvv_}f(1z33n1k1;csK|~72#sQC#DJx8MtMu;7 zL`Xowwk?x6WB{zR3mj<|rzBhOr)IG0ah@b6*cDc$fuEZWo@{sC_NBJ}=)-Nz>dkCO zc(7~@aDoR=JxcENEp=MN8ItoWuDG~;?#uVI@8!{&tFFA1`bX2AeO@BO!}8&?aMVdq z4PWV3CRX-8k4on4o6to)PI5i>0*9)~Odj#+{w0N!A2!f_+7mPf*@YGVAQsw7{{t(@ zCqLv{t^-6o^mjF&T6Rbbvg)SP5EoTFt#CS z2KUU$tK(FT?WLgdt2m>;rLOSh7xit<0ezELA4jqOsY@P7hAAMtz*Ju1177L7ouAav z$7PU&^Wa6<#eNqU{4Syv{b5!yg1@x&I>8Tn;Y3RwW23)mNA%&!T9{e+Kppu8X6aiF z9w{rZ&A$w;>Pz`GJ~;^=y8VO={?Ag~|aNSkyu1B8W+0DJ}MbE#kt=+sHXV0uR zqeB)2%N?5c{f_Pypw5P;jAla3@#A6yI$ zoOP<1ka9A4FR30EBX9dImDF)~Zrd3hrd1t{*At-Ve06T%PzkNhQKx9&;*wsS5Le)h z?dz?*-W{n~NBJ~XJn(v}+= zMz4?o$QS=P7vH?X&KUsMX5df>WX*s@hq$4b2t&9>^1=^g8kum_fu!5+_)7a%zy4di z*LX9}gzgXRveuvjN`tq5ayAG(*P&@*VgpOAXWJ~FAAj91waYGkK0AUlb5Cv52fa|Y zR)W9y7N3PPkPQZfx6n;4JZg}EWJexz$Rl;k0NXwy?j|+{uvMn;EPX@1%0oR@){%{R zZ>#Dw-|*8JOJ(3UY)sjbknQ!eREfUHGi77))IsSKoPjAV zS|HcO*x)^{QBw}oQFh`fzbqSBS~)z2<9P-cJOHzDRD4*qF!KcaXMDbW{9|u#AN{Le zZ;wB9SKG`E>FY?Id>!M_Lr?Rnv%Rbin&BC1?APKyQ4SV-*Ez@)-udgb`qWQgW&(8k$)!p%V?^gB~*=x-h$^9b+eXb}?w{)?C=ut~no? z_cHkKsrIEW|9*S=(H(7y8THl7rjJdnX{Ux=>(LhK^A}#5q{!2V1o$;mt?Ua2-@~4u zA2}wmrEcDs0q@jVgL4zxBvr`Agu(u)PO1a3=hUegIb>qn+^6Z#UAl|?Q186L^~f5f zD_aPT%=XKPdM(~?Ur3QVzrn3^Ro-(QSk_5D;CBZ50Gvcq8sVUa_{Fz?tFXi%xIuI2 zIJydLxdUGPJ?3s6mn0OJ;;-+ChU6J(lkKBz+he!3wX4^&vf&{02fA%^IBcuh?=YeTGK1hbqpP@CjLb||B{HV+?$_Z2kTGUhe zPx?7G`e2GSFWN+z@Q-`)E^^{LIPtANvp*MK1!)D^(??==yX~+KD?4A)sh#i{esS<| zCRYKuGH4{LgWzNILMq`mbzEIxJGN;%9vRHXUYx$BEWlV9)GYT!+1rQD*g7uUgO6b|+Q>q#TvW0$pAG)cSSrJu+^JNWn;u~5G7R}x&5 zl(f6}NC?=wDo{>#TLv4dZ^2XR*}tlu8V3wPiA3&}y%e%Cl_q6r{GzUAaKN(SPW#ph z0pb<@p`%oG@Z9_9)A+W$^@GQRjNQ~BeYEs@*l(&YB7JnJX6xx!+;{RN_5kqFF|LJg z!CUVpF8qa89>xXw6@8MgliS9gM*r~d{-ZWI%_9czdM6tZkGZM`8*=6m{(1r2iz}Yk zSK1r{gX1IPn(@ihC z<;ka>_};M#rl&!$C5W;O?Mt5^-)gRvd{5dJ;4Yxih5(1Ui5?fx+3>9_}m7vw}jL5dRFKDwx7B z4-P$!1jnO;k59lKXxx*ifL})clPmzy#L#QBtrNCP489JR-w8&z7o4RVxcap$)5po= zIu)efbN(lZ5RR@aGk$y+M}<1(1cEWyy8?fMZ1{__C{hcJYfWHOGF_9)lswY)S} zAZyzc=6?@py-tKd!{VtUG(iGS+k@vGmJwcH!cT+cO5(gr05drJ;GzQ$RUj!|ln`I* z$`@gcFp6I9hZcWzgtj;dZSqJ6A(DI4Q&)g9dB&h>tcv)~O$O0GIF;F?iQebu4e>2RI zuOP5I#zW-qc-Q;donL>bt!Cwi??YFPnc)*pj>tsBf~3@WTJ2A-JFo3L@Kn3$1+Q-} zf7$EkBWu}23f(Z#Omb5Jkuc@4-%yASxf6Q@GvNa`df&qUSNg(N@a+jgzb`(S@dOK# zCHbOk4dN>4QCCavL{`~|dzDe0>?a0s)tI8kXfSWM6DE%qMmp}ZUfx#2i$xX-RGpE>(E~B>ei01+!%SzGHdFr`KU{~*%|uO zvV-m5p~u=i_k5swWZ3E+09`IzU8}Ki)Z{sY=nBBG$1tic-6qAv@Lw`77yW7yXs@nBTTQC zPF307H`IHo1!syxZ!6K`+%_}l=%61sfYTh$q-(qEBfbi2i~;H|e(4je$atFP($9q^ z-}qGU{1(%)Ph5*V^s1Y4)!QRBZrIR1$*$Hv{o}7~8<5$|k;CxRWYveNEli8Jzu?Z;*&sddxC0cN-F5LtFt-a(gxt72_`*6(V6Z8tVS z`QpneHYoX+)LPcM4%mS3VtM&@l7vuXBOl-_>J9fwUbYv?PRkyf7r64ukcSe z@f#E=ec_(>ONimIeZ_i0vAqn;^TSO2YAZwMptYTI_19tEIj}g*L%{- z-IN)q&ADxL{k3B03_70yvcg4>KId&5A-{aSyKHdvPj^CxnCQOn`ltG3`BdW_`>%L; zzaQFu{euJ59^TXci--JCPPO7rHKKn~rf3^trJ?@Y`axWJA0rF6W*6}DB z`R0OsMqPv^oN$|9MaRzR^&5ZWo_p@uM^Q)r9VuHnmN;-$azLxMbS!Z|4ru?DGwOI^ zd}8Vj4ER4{M0N_pJCE^W!b?Yn(M?GWIVUmn289*eJBmuw+|J>(7=QHPPqtUQ=*D*0 zrCY5Lr>Be1(AUhhP8vsHV2=SdQ1h9xf>~ue7bF%vMp$EQ5L&@V8TuG|3dIQ-qy;g) z_~$)?q$Ikuqhr#+CP@$}NjCA|IxP)B7j+0Og`k7;UU0t#Y8v@Qk^ zlr@<%X%TOiXWM+_5H#g6C;lH`E#ep&bbf`e_$!aTLv5aE1ZQc?Qb*`bVrZE-afN5{ z#Q+6?g1oLKDKBqAM+FZC&!HVJtIQSy80i#Y4rw!B)V;?!W4+Xe2tXcCF9&4=o}iiw z%2C=%9-sl7$lV!uswWt+4shjbW+M3ICN^_3M*~tG9fPk1BoAzRto{5O-_kDJxUL;y zLz}LT@>!Z97x0l+L4=E51ALpD+Q<@BX3vk;?D^KM&*xp*3{FWifkq|C%Czt`K(emE znhB{eEn7#;V0d3$F*sLO<(=1Rd3Ozc>(~-7wN2aiNP@z*b-Y&Bwae9(Wn!a3D|Ri3T)U1y9c6Xxd^9TQvsD<9L4ImXB*|#I*s>C(;2~Vt} zozz!4^DT}^tOIu#2n0sZhaV=%;vZXqCdxDG)*y*t!9x1=D9;AVvE$e>+mOe~GJXTJ zO{%@`;h>#(i&|_u-zKcK(|uHQ3P2fz2*LPa+7*U6S+Gl&x?N1eC_%*`@`E;|Av&Xu z)=CY1g98_S(q0C1;R^`GM}VvLLFOd+2Zq-R4y{CQ;B)M;{3%+aTi{xKM1842s-O?) zvAfWoen(p_A`V=?52SZc8mWQ z8!57zW&6ONeysh*f9ARK>#uG1-uDeQz+`hz+O)q>%&^J^>%*702Yu*b;H>2Uy?E(Z;=s3YU>U}B&)Dke$8nlJ;$oxYCwONK22X>i zao1Yvn6#HZ=cbR+P>*4J_b@7Y{>Jrr9{q`XA84<9^-XO9%YdCB&(fwil-f`vffCPH z8Q{lJ152l18*y|7S~!{nTXFcznz@U+&IL!3L^+6+qfGEb`2358bWY+Wt(I}Qx7UOt6XKA#ZjxmQ@rm;XhE=@p zj7N7m!mjfQ0KIQP0|bM`@PzZg;hyCeKekBO3Y38j-oZ7vi5__1xDBX-CwPf_4}vL? z`dsxi{0x5#kcL1)hb?bBbjEIkq|_6raZR~N|6+iEBexu=b3pKbZ_OxqIUp+!Jil_2I z{)9HprD=NIxozjcr`k(z{PFhReDB|D6JzU{xjjm=F2UuwY05~mfl}#*n#94EfsOZs zSGvLF@Ijq}FThY{!YCY0^I4hJ3JG-;yksIkEmy%@$wHoaqz{px8JrnZ8GKd1nA>T? zGny)#fN7n`O8Y>)4%_SECmyxr*Y`>NYfo3hQ`nMqXopQ8~N-jo|xyzrRHPosa zrNaU8fBVzhs}>4Jxp;z2#n2i|wy#J!(PrlM@cOsiZPWC{Z3Bt=V>`dt?!5a$ZTF+Q z+Xx$)O-zxfPp{$K_H394@5j(d40rlj;cc>l&LEE@b0Q{v$k$Kasg53+NTu&0%gmys z7!V*zJ@rtI)>XFh8x;)dk zYF{aMwymyIqG=(E3O)TRwTs%|H3%a8QX9cxo7!HlnOsKq#h1g?1LAMev%s?7ldMdb zoS5XbXs6nj?)p$$K7W+wZP&HAV>8fXoq?`!K^gNq*MnKs=uS?Kx4rE3;-KKGzVCau zfn7wRZn!o_0^|UIeZg5)+g70*U=&AnBK+f9d_7O!#AeubRv+0HY18YL5r+ORi8JS+ z4_OMV{GVmzwfs;%{G~pUSv+^}wEIxu_*v=R5ENDx(wRP^T&U>^AK@gy1`qM+ymi1$ zI{YJfp^=~Bl0=wquS>UsnF3Nbsx5fR&0eST)^BO3ilqZKVOa+T60^{tg9AMd@xDhM z0Rdmz56{IHex(f&6|VuOZo883Qchm#WArW3`t2(~lvnAV_4M6~bn`ohcmuamCI z+McmlY}n9_eXRzltB$g@O}~Zhz(af&d^48IDyso*J%KV(SPZe z-;!Q_O4#0?XFxjbIcUl%7zeuNcq7FKI=g!H+IH&~?`r?>=ik_#%l-;GpWG2YB|WG8 zT}aHI;whUFJDEdUaGbHo1BuAt1pmdMFA;a!3m@gfjOInL|5_~mMayuXzs zvd?bxdXXbdWY=KzLfrT`KxA-{>*!$uZ1^cYfG_z`)WAu(xdgsmod-Syn`6u}e*OMO z+Ryz8v*(*Ov?J`?-t{zrB776hq6|0}XZBi5!aucoV>^0uZ<_~?fAFJkY?oYeBeUnu zEXi>kRR$^*INf6JhGEF zwA!BcJQn$;ymCRfCO;$W@H?8oTbb2Hd0eNz8C;s2*@wp%Fd1LT^7fgh+O}<(~8u*XRWfg<6u}`~< zHLI9tOxcNIjaY;L&Y?1soCIbA4ivB=LVhfymlQgF4&KR z5$?q9!fBf519rA=KhmcAQO_N`i_M@Fby7T}KQ_f{(u5sRr_?0}p@bujS&f1X@Q}tn z7;K{Gk$w`oO4qxc^^6A^Y(theEeyD9&!)gcKI1%3njB#cn^`YXQ0aS2XKyLD4bb{oa z#7Kcjv-nvq{!p3dgMi_Yzy9$9&!k)X+LNse*aAaX7V=TC(4Gpw7kmE8GmAv_N!T2` zr5R-H;dL)KC~7(7?I3036+IEhYTswpttT$}8|5ed9wkd{QVqOjKo(v_-#{dT!unZY zI!g|+v|<0EefwGNaS9IVAWSJ9xoHJID~YW~0(>)#wKBlSO|-4DRJV`bHUXuuS?2-(It=?xRIpe;hi52MFaXOmXSD>2Hs; z83K`y{eTaZ@ijHUV418;LS~6s#Gf+qG|!kj@B_b zWps?tT(RUFK46>|1Aq2q=U?=OhxhGMG3=x$#L}_EfwP+f)q~G&8kVsC&T;?~m_hqf z7i_uU)|t7Ze~V3nwqR9fc>XZaiO#?SdmM-5xtF}Ee=$uxuxod_^4crfpMUam?Yb*2 zYu8+PNgQx0u&ys7vKVlKIj?EFU7G4{PC8TFPL|~veA7?`O*kNfrNKGt1Z-7jl7xa^ zK?-EzZ2ip(V{|tM;TRG?-W!Fz_u- zNp^-nlxqeO@-D#`-$_UZT)Zb->F9yAZT0qw#&Z7U_=iLn{>YCir}>}`nV-~JNBsF4 zJ;-mOXmJqH(8_6?y=4cyy=P$Hkvc-P4oByY=N%{I0s>wN&pQ4T2u+p~W^Pk1l7KfR zawZd&OF~T>U9Q=Pj_AXn){Vjpik(3)S)XNw%1s839beJj^}Y|bJMO->ts-H}>^bF3 zHpR9AifT7YSA&GQQi0{Fb?3BQ2Y0uZKJUlct6%lw3|R2&^SrZ^I`U-2g=3387AZD5>d%zpnJLp8e$YzYtRm*JQ zDY~3K2ObrS)0C}I#(RNffXvZ#OKJ329~`~QE@q|4cLo;B+r0- zVa}CIt~@ZgBUz$v$%jg0wLjnuGPY|O6omh$6L{t5VZT)ut*2gx?+_;}b;i$N7E&&i zLXZAIyGA>dQHPThq0{^izUqhiCoDfS2F-p<^op;p1Q2%*anMiryt}@m?^Z7kg^x|u zx!}r{;yYMfqKz_{j!gwl&5pYH7d)ZOYqPtV-GAPe@qYVB`u_>{Jg{;~ z=d1p3Nh*cm;pUm=vdn!KZ%Vo81=SdRW9ozkF9HCbPYtqSg3 zH?b2Zd0<}^ejXFz%rd1PvCPUF~#|M+q`m0Zi$aHgOd` z2nAOY()eIti*e+JZsrlEpIXi$CV!If17Gw_G?N&kQ);hj-*qGd%-|Xy z3?9-GJp#0pmoC~j{KY2#>%1q}+<=CmZz(rE_P4Yl1>jfJwaX!s-=*8J*|ZxTK)kn^l(U7hudO z$4AE(=Zx__k$@b-Yv7F)*YQ+f;;uM60kMja25%Nn1 zR1TcqL%`7;p>0Wxj>LdXxN+>MH!MNJIqLLv9wtT7+=CTIwsp7$TDB9~D1hq<&f?%G zvh5jAh+E+$^Y}<}u;eFo!dsGmmoEy%fe5eZAmxSdLleK{dFpfDK*sXN7m3|fa5g?1^)^xIHA0OWDkz|K!p4PK7SJ=!Ozem5**TFD=uHp;}h}>841h4 zDe|%mdYC~NWNIRXP$DA=28{()e9ZGmh5E8~!=`rIm+x)=>{s60&fBoI9cHJ5re)xZBmtK5hn_x$0-NK zSd}2x$C;U&m?Y6W@>IL~?oYPgd&h6IZBKrrox9;;b}C=byX7C}8TNhPX;tA`Z(u6F zJfNyh7XP09-Aj5UA7D86;kozxUWx9QY_FPH-&U{Mz)a_+wt9La@37v$tk5d-4K6Kn zrvFeoI)AtwUO2*Y#r<=b^TX`uKhwrm*w?4p1ofs?t>^u~8`)rN8jRV9NxFFlx`)=# zcHu~PApRlEo5SIK59#i>7TqO7uhmBhvKuHH${jy)tZh2y(zcA{*!SG~XYJlw?{DXy zzp!yYY**q*{qB!E-%(5L_t8xd)kCFLV0ayC5D0_(Q`Ao zej6H1ZWl5`=TdqH5$(67N9wA8)P;Jznff%?2by%reRKrKXWE%uL(!6iBMS%V9AwlE zlZOCs(0I9C4Go zw8t0aJkLN;nnx#x;?~n2I7lcB@=g52KfL1Si4!hE$B)1#v?Xl|T0R;pR9$r@7lVfQ zSMp!93D0ZMHEE-*w9R)7LeTHUQ(n-kJ=BBJw;-LBcHs@QQw=obLw}=+_{+oEjJEXE z)kP4%f9;R>Wx!clshd?6eD@e=aXd)&W=CdSG(K(cMu zAK8*$k)eF8L9yiv`2KNz@V@gkKfPz){#&RaLNc%_aI$nPao}v`K=rV*nSv$Uzgrx@ zO!BU^+1V%BvXR4B$=48+;XzI=WAh;WgI*$s_EU@4FX?8+3A~;;bhur<^+H~k!Fzg- z%(Yj(;^l2>-C7bSmfj@*!kWhLS5TCVW`^hY5_sVNUGi&!n!paHVKA2&6P-dF5RR39 zXZXhf5ejm@92siP&jb=WOC7$B5~Ow9{7+dEf1Ri!)d?cGZwPF`IPJk{rY-A>O#ah~ z7cB`htkZF_y3Xww$(}_VaQQ_WYDkih0WZID46+y{keXb*q3vOL`zv4g`u6HqI(xo>* zFk>L~(r%Dy0FvO2bNQTLkDJO~B}lN#nM=y8RKZ}$Gs#jYA#pNL=U?e1h#(ge=>&wz z0eLdhG?wzOO^q(O)-l;}vkylcbB-G_Z@Hv~b30wa5i!YaJvP^M#1R zAN%%6HbR~~x~EN?nq;T&t!>xQudwX>gS?A-w4Hn2d6`k4^YLC9;%%JBoz11_E6O}J z8hy6^Rnl539!zZVTiMc<{Y5=jS6otVFt4qfXGUIo5F4Yq^06PJUvZw*RMhjn`q%r3 zv}l`Zunfu2hVP&51WTu7)B~!9W^uBQduTWMVVm0Jw3~J+fzoEF!|J);Dn})ArN2pb zy$>zfah|&34Y(xF+V@#D$x;s|CRW3Px%RbtKhnmy&b&JHSgH=hfCCPH|WN+8>aczkF${QY^RP-k zx{vW*25gjxiphVa=iptq!*9zdk7d|YZHr)H<7BS?BP$bWb-@cJbR_J`2imHJaKJPA zR7t&XW2>mAe)t>4U`O4Q4qDVjU@429>?@>NwWckm3EMQTv5Rp*KI>0U!?k?P>X$y1 zo^mxlFDv}e-RLB3iGqH4v0d8EAfrs-zUAWop(BGWT$Vlowu(faRzSs z4f;btJ59c|_1#C9#M{2J;I)#l9{bAU613$j2GtGec5fhg+G8~b%j_4%GN2Uj_Hq3y zn-I5~Z@I1g5C8msYu8_WdE4>Ww}#bRWo1R>%tQM7M_b2$18SY=mKDp##(s0x-u?e+ zC~s%(o&QV_OXo`*I4e0&(`aWU>Ptv}mpPytP(QHG^S^a!bmV3HcpbCjGt34|=9ReI z^qs8E)cHzFd_o+8yZ;)fOyaEWzJFVL(GAzN_kH9q+f6Thar?(V^JBb!ce2gT9KolX zSm8i1<~kaespa|eEP=;S5GX8TOaMzCxY_bnC+qWqCeZ|g*lTd8*-?|VI8z)(4sg<8 zo}!IY_)r}tVFCu8zwyA_HxLki@XgGyPKi?Ui~z4B2++yQlZ>4r7|!#v%yK395iJu` zyh-6MyL6D1w1}6^%V06Py93h=>MB63fM|sqH(B0*fbZj!tpKs;%}B9V=hA9;P6A6b&yT?YT&Dr({UHR!bm;fS%!U9_*D2(0h{;}2+@uM7Y1ON zRWcHhi}H=b#QD@IW|zQG$8PWTF_ABiHn?^VXU-%#RgG}U){9Ztw%3_R7vD62b6uY!t9Z){% z;HovNk;k&OpJ-&Dt#l?C>VDsw5_a=>|3ir^*FlNqoQueDj(xXjMiI)Pz>fJ^bAh z4C_gss!+T#>@%3Hz_jE|KM>C#ECd-TFTGCv$Pn1{7xhGXH+T%R%4; zZ@vwnqW6?HAhi9J&Z-C-SPl%-Kmp4h;j?YqN0yx;m;gs~%IK(W= z22(t1KEeBR#*ecJ){b`Hy|=bMegC`L{&qXF=9iPKEVQSdevswjt&J0yYZIJFD$N$# zZ$G>)r|LeH@{6{hBlII3sda72>Q(2o@u}6hcW~e1?a4iRza1FAE;{e}cFqNtw)N{b zXA`!miM7l&kF!bGYL+2S63p7C?60Nk>an^yi#>F+uZ3f?3@q$#2M+9N`xs<+=E=v~ z!%u&%?PD3bpMGqb-pnS2=kR-?Sn)p5_8(%SGnlL{I56~o zvG?BbdR|wZ@79rYs&tNevsK(=JBgj%8;O}f0yl(^$%Fw0xG)p$1ZFaPn1LabkjYSz z02vYpq|j1HabnV|o#MFLagB>?%a(1)Dpoy3=Nw7*`~9u=k(6KvmmB_x&vVZEzE9bE z?X}ikdzIauX-3w44{~+VSU%67%g>QM>OGw>>UucoHF~4#B$}G!6-)%_jxHm5S(mJg zxL!4Tl7Ls?ElqwZ2$H^8*2ot{%5SxcE}#lsRGuk1-KO42hbQZrZA;y5)9NgP99kl2 zmC@QQTshE|+5S9yrk)c{@^CHBVBnbaDX-9-0wr@oOR~o+mp_J zIj_6>VB4_#w00PMBEN#EzeQ}y^Gn$B1Bq$lbb5RIuh;!ko%>J(+LWH4XcFP1-#~r?%-EjtuN8xn$CG<$~XmG zxrol^S3c@DI5Mm%I!65{OUJ;oc%|OKK5!3IfXjVg&!bbzfKm7cm3`1`N3Hc}W061J zs~}aIukERg)aH>#yd%%<9zoj3CbJs4StCj*Ng@YGcXZ`Zm*7};A}Z&?Gx_3`scm=q zP}PYq-V2Z$^=|k;N2GaFLXo+60P+w#;R{r^K9-(Hk9F>0S(cf6Uia=te+wU->b>NL zhw4|wuJ#rIFYSSN_Uxy1#^W5ycvoNYCbJ&VvC76V?Aeii$^|P?HXyf+`Q{igb4ge~ zvyE=LbxV8IfBcnp3a<+sKX8D~$SDRc3jg>8MA)jkF$*<8h=msa!Izot3h4Iu00b~r-0@8UA z2MfeBS{itbNeno6JB4kQsca_fjG0DTLzU@uI$%EKOE<=VRXFC)W@Q8u8a)l5DTI$J z5T^kU5Jy^!R`t9aknoJO8aFstWda+Q!U!dF#^Jyi8l-6uHBN3)V}liD*2&`>hQI9n9vbZ7qzapR2B>i&bc(>;{Fx5ybJF`hbEh-gQKQ44 zLnA+Q_S1RLtD|E$0XmixMm{=+2z2D*LIR^~0yQ%gei=L%^v$sDyTe~O6sC^4^*O-W zxT8nHuIe(Xkj?!62 zCmidNAv-*550NKOcipM!q``ZZql_sB8BwBr%As`R;83Sd#F_e&9)qXABA@A8|2R3p z>+Yx@o!$YaK@K8sJ9pgDF1_>v?NeWR6RBF;wB{UkW`BU7?m+Yb0+Tji`Bfvf5^&+$ zUyts-O~OMS*n(+s$?N%|p%ra-bV+c!Z~N`-$RU?G*0FiRGus(wJ)x~V^{lMlUdkHo zAp-KjMPrfCq5hH3Z(HtP=twD!Gql=5bdF_HjgT1_;h;yi$saqBCP{l3J$R_?-MgE2 zxbJTJ_HS?ZY`wW%^^LE!T?e+dcA#)sJ+``y46JI*c4~*mcToq(GIche*Lyk2rSl&? zqz%azxd6S~G%)j!b`QCOHjnJ=-FpW!p_a43-g)hw?VoLb_KwfC|M1ecx5qs82bspd z92^<7ol&0PD>_eESV-Wj+-VrBN9E4|o}09<(m~$$aI-(lWsj3I80+7|wk0|~1B|DE zStnhaGYy!M_b7Tq8H+9n1k%t(ErwVX9?)??+tN-s^Q1bFdae&V2);6iqdFxiS3O00 z5?2GTqXddRtG3lkNBY9CWLr232Mn&@BKVlzP6mUeLE5@)ZIbo-OL*1YKpMJ&9v{(P~FSe&W>G5sd+NEt| z@fbleLHal{2Fsn@Fd$E1yt9QC_Ctd+cIco^ol!U8Z;!{;Ata;@o!UIjtd9i4blz%j z`LbDs*TI!@pUWd>dU;P7C<6G6fXgBDe@Nn-x>B!r$gk23rIWn&a&Hg}>FPU2{B2v2 zgx;P!(lK9sLBLK1-~mHA$s}FHFLCCaw86i3U%WiR6Y|zMIO<4HM^>57gzZ}M*lH>| z`GB7ev0gdyt!qQ+I48XwGoi1)2Rrppc0gWb0EaZgY&yAP$L{vp*S@|z01}U8Hsu|6 z-oslpN6R4=x#7{$B{rd99CYfSL=&=8icI zd{1$pTGaOxNpr+}mpP!SoR5>SZ^2;yoj7$rj>%exGMz?OFTfU*k>J9klzmQfPB7p0 z(v!M$(V}+v=;8LB4}G$|==slLs@{6c9l@c&F%FDDmp!t24zqC#W@}xe2B8-`b3 z(Wn4XFh!@ZG_2xoo=gX$Y>inC4PA^bh7OuU1k7Tz9bq(G8GW8;9CZc(-3358E*=^s z56ekeVnD*qanSiV=JWt?NXG;Dq(j3mruM{V&j33EID{KxOnKsM+890`lE?BBBqy+^ zGlX)*)iiM|l1Dm)C0})Zb)1SXqzqh*yUtGzl9@g{aOBLMcj@;zFmyChU)Gy=_kMLW z@VIakaH@NnN_wnU9YsOv=s3O3^NhX%OXpgEec(33Gx_4$IBCr&u1*YPPmU8DyU`N& z2N~g9(7&kd*txfT_3~@m+ur$}_L@KVllIL!x3<&QuWjpAuV}lrKNy$qf%Gs^UMhPDV7YJ>&QYC2@nDp6 z8X86xIgY)*-E#96+lN2+f7<2O|5aPPY!f5NOWQ79o5oNYK+5Ungkr_3S2^M>jo`P2-%qy}{=k23&wlR9+xh2RfG&Gn zTeWI)W=0INbfLe06dDQ0L1%)E22fuFOGn!NgNzn2^6XnHrFW8%W1riJ=EisjSznx) zNX!iBTQJ0k`=U0yXl3wNv1()6xZ(Wf&i_w-!Vk1ZpY{E1?V3k1a(b-Yzw4H^pK0}n zSj)bA*#_3+v-ue9#-PuQ{_OOSCN+XQSC*{tPM4+LaxH&K27S7K(XQDe2it)|JKO4& z=b)p9+7;h;FJ<<(ji+vCikLEbG<|K4n`uFlbjc zOO8rsiK8RXwqFBp@$wK>(f;wSx;uQxM`jzc>owr}0h z?%8!+TSf=V_|yS!f_MV}06+jqL_t*1OIi8l3-XR19WNHrZuat8#cCCWuA6x@u%>Sz9wihOBRJh$UD=g4#TPl^Q9+?5ydAT|Sj$W!lCJym*% zbw*Y?;=#|fB&jsOjFw3m$dAvpP2g$pR<$mtPaM&CR8KmXQ&ta_ka`KFE&c=9#4oeO zc$m>~%K}mHC>;xK`Y646>Eum1{Ilb_f^BJ~0Od(~IF(N6GJqDJjJgL2WCZ*LDo6EC z)Sa=l;GQK-!9zLZLu*J79$r>^D7-7Ewavx<360=ES=M(ty~r&da>=6oq=R4m%%3*V zHYrbRTiOLr`i)A zwYlAP`(5nap}sEYUB_Wp76pTgpJ0q$T`-Nb4cg&0G`8gDA9!H|;$Mve@iN%V?RKWzvUKjqv(cHeeDIWd{hVk~ZBkGFCxCJg5Y4LUn@BVh)S!cHGj6fbGFnacLo{7UfjPho*6Ai7CI?w4=8YcpJ4S`e2HEIT?YW>>S zL>d8XS$t~5Ri_UfO`ZgcJWkL{P^y!mkuq@5x#*0lQ0iP~(I8h$#h-LI9rm7U4jsYO zcnMo4k+T?K@iM&uvUzlBNW#bT(4zt6c}75WV&Vv3Y&b8+PQ09;P-SWmJt}CeQEfXC z#N|Zi0A&M5r%?wW#Kn+DT6Zj72F3oyF%FJZZr9NuUgFRN+8S=Bok~xa zMtTI|l(?`29Ad!D2VOeOAQnEAQ(O*3f=Qlx$hSCDIu7tW!FG&0qjvCIUM8^OnSP6W z)IuAq0zJ=lc#3xUKOOlfr%?xxdf9#y1}{ZKT+$%|ENMym;eOt!4!q9st<8+2g)+$F4&esnI*PvL%XYhX(EuZZ z540<<`dEAW-~0^kgubn9Sba`Au%FT8@g23yMVbMDB&Y2Lo-lidC6q)eQt;3#5hV@X zY&eT!ZN-WW1UM_0zJ6ERcW@U|?Z?~G&UOw2x9z=qqHQ0) zr5%{u+s0TMKQgka9fg;?fP=bIUrDPU<-_{)j%}BF@~-!kAI`l}J{bLH^l_Z^{DXa? z%oI4K-E_yt+OB&KwsjlNY-3B;Ks&V1_FX1}!c3cuj3EcgkFuhkw!Y$>EnDxdvy5Iv;aZMHQBRnsI6Jaz` z_9%L%N3XKcbvBEf_~nt(IJAr!1F(NtO;0Q(G1?%gJ#*a7G>y z!N5F+51AE)>{xfF zmg|wa?cDv)ANSIUW-+D9IQKipf$tFx=nc*ta~$|i98km4 zb=;1ga>}WfPE1TZ1I2k3qv?|v5btYG)Xi};HCNid;|JPzm{FE{AKclVaQ?aNQ(wNK zosDyG{$n1EK}HD^`Jm>bj_nmc!W85_9Gf_108ve6ZMw=IBalD_XplA7_R1%alhALO@*w5%D|}&!unrlilFqU`y0oT|e;p4K)PbZt$PvdJ z!<=7(Zyl`4qm!d!CshW;=5T~hr#@bQc;MWKi}~VkBSCRaf^X1^V?=`Bn@$3F?b=uG z*;}sz>J)Yl`Kyzj_pegs#Q1nd%iS0UlTUEPdSHT`?K}6kuU~#m`1aEB!>R0(Fqt*zM|dBMYoW#8+})=~xy2nnWJfu5;545F9t6dc1X@4xf>*Ui zo%0+v5W{JAgp?evk9I1l*9NolI-O8@i`E*9eH=^K1pvgT8SSOF{*^%Ya6W7EVfa|ELw-N}#erca? z&<+3k3B*r0(4})sZ!J||z+6o>`4WzJ+qM=EtXsFfW7&XTCpqsDmKp-*#Um@*s?}#? zbp71NKD(W<{>g3O(SdgReOC~uKg5VSo7mBjFf+y4WoFt?Rq(3<evJhhLNnPeUhhPuZO6gmb-i*eyT#s89OX7eWNXM;XSs@Q?G-P6yI?P4@g+o;p5< zbOOtuH`z@WAkNuZehFdW$Fic~+j*I|V+bq2BvPXM@ zaPnBLxLY6E_MB@M;jg?hPw`cFJ%1<#kPklj@wvKJHE4dgD%7;c@>5FQGYDWhKDM2- zC-LE9VZ}|gfxNH{R>zZefGjzb-0EB?-0hIF%mr)!hCq40qIuWW``fSl@~^gs_Oo{d zZT`SP24=`7+_VqMIk^f0Qk;PdE5&1)*;M`W`uo4|C(wdyc`rS| z1?cvS%Tpb1>(wLd>39*eI)9Fw8@vzl`Y6|FI^uWl{kz&%FT1Y&^}8=@zs6Md zt9i}KGDezCBQT#K{k`{X2lf=RKX7P)kq!yU1nnFhu3dS@uVI2CKk{&R5u@kq#y#53 zZ7+H0tJ>0~XJoW>Faa1jrQNz0K7aDbI`z=evtFvslu14^n4=4ha{-J5)}+@Nm1dpa zIFYuSp0jNJ@Eu5|5mp5l<*bQ|YvHYy}%M@q6F7FBa3J33tTby_Dbh2Vy z2~RmSkV!kHJOh4lN+*CF0X%ccx38o+OnpuBJ2-HRr3E*&Pk!pp+a*{2DYF_jve^^U z#rNM!r;N^_?Y-a!pPc(u?Y$(ZyW$rdl`S`9^xfpkS8n9BW=q<=J8oyQqP^`Yk9k>p z@rz#FUid@5&>r)c3)+g61nvvQ==7S09F@au`4Aa685O4u>WnIfzH>U8N%rWnjkxaD zz|m=~%BXy)sk{WJX&baBVCoo~PI_ERE3W;FaN6!B=`8Yhm|&Nhq0VUw$c>#VGfbJE zKYvjhV|07X>NDHsbD!GIKK&W(*x`Zp&3i9x2iX;VH6#A4;AfQV0A<2!%T=cMlRL#B zuQ*SAajSQTj~|2dBS#LjY1-WiIt8}xzO3DQ!iIi^wW)ma%u^eMd1HYCXCHPm#J z$T4)jgjsgvx7X$*tmL-jT)ko0DPLIPCv5I3zbD`Kyx=9palF&v3oi1kHeIVg$+oVH zxapiSZe32Y>;D~hU)o05d~lZK6lp7zDQtdD9Ny#4TgH%?XZzTvFKO3Yb~&$iMAn!oG{k8Al4ZQUZ)7A(SbQCpx>dy{ zrOpI%xtV-Z#@w$%{;G53pSIRcrE1$q3-pvM`S?VKtZC(4HittVASg6>U!L*9p}hCk zwe=xCDcd?{fp_w&gIwlf2e`6noy*sB#F&mFdJK5Z*sIR-f>GsLkd?}h_<+0cDXsLI zbz(ik`0P`_c{#y;I#>nIi8D%FxB5#->xjBQ`%0};ul#`ws7T_umzOaEBwYT z*iOKwmJit}+rt5WB=0LXCu#LpecO>Gd8x}_iyJpva8HV6XlDm^cF7GnY3%Gv?s@=5Qo8e3;VYZ zE*kpr>#n=O9ar7nXl~uPjG8;XXE~sTm^WZap5551lUipRgf*1Y}PV#abR7bi|);eG) z`uVKA#g9bUiyDRom^vmg?x^wvi=CmT01ctxt3k>kqWoz2%+lx^LdrM!@kbI*P1|`|f)Hr6{Gj<0fZn2sAAUxQ)X8{~{m6P?gv zf67fD3yf}EtNc+W1Ganq? zbHvp*D4-7X)(22+&jK5zug= zD#v>2oBT&L6t890BGU)Ebn8V9N*v8vc%xty;rxdUU5e| zYtw1GGkqiF8$^L2&be*h4kv0Ux+|N(0ZH0wR+F8J)e&JS%4pZwWURB2J{+^3?x6 z&qKbWuPL*`tDcdVDob4f!@%Csv>T>()N~4)uxMyBdhPOSFGe@*Xp5ZbFw1g;-q9l` z*jhgSy{}4OFk{UXFR6ca!`?@rKF;gdR<2mqHlDJE>GS>V#=9SApS$Gi?Gx|)P}?^# z-NxDbK%F?cba~dRt5aqeX}6x_Uv==ISEw7$?If};OVPvUp8P612BrzHfFW%`QGRe@ zJ=@-;!yCR~!DSrsFtVL`F%LCC-p~u|$U7NIkBO4?M5hjNpj>$#okCjWz_ywC6>j8| z=boqFs<+ammQy;*Qp)zqLCT`OdoE0LOX074X#-BNS4xKyJNoLEL8e9O74wT@` zJ$Wftm0kY~vh8$GR|!@eL?Ug7=XnhszY=s@e!Z5r{G`6&o6p5Hbnz=}%XcG6^Lg#- zNvGKeQCU~*5vsROeCFcznm4?qor{fq;NE-NeDs$4KnSlpI+@ZS$SZMFFXDgkc1orM zQC|Px;Lks}YwwrIV@1fUxnqt4-_snh)y*Aq9QfyQKpWt&*U_2Tqt~N^S7T(Jj1j^H zu+6Qy9HpBe0^_MG?4c9R1|OUmV9aYf=-oe$bx7B4d9V!;usroCPh!g7LKHir=NQ)c zj{F*|prjp%(TQ3>z<$)|MdOo^HxxOr7&4C0(B|0Vt=`q(t{!Do(aqAOw$hF8dcVKc1AhIEI}7E=~QUMw0Ox2P8d$J zih)O*FrK?PmrhUe#1Sx08Fme;G}-Z>5fgLMbqMg%XB#-2e|MFH|2v?qV_=vv=;s}9PIc8<>gDW`OQGr(=#QK%2t_*&i z*`UKN?RKyTTiX0Z;ErGGI8L#Puk~fXIL*tMovGlA0Z=4RVPhk9!W|k}L=ZE?YpZ74 z4L9G_K6KIN+W-DvZ*G72u}`;K?z*?FTD*wOuGZq)MAu@W<`W9iQU$cBi+458V%pLy=uaUlKGCG-eYc z#o8i~&l87r30?9E*fYr92)nW`UwwMpw)6J9ulyNL_=)!Nm;HKs&U61A)5IT-3>hRb z9iO$|2H_Bu0A-NTPG^lcJz3H~H#$Vwwmp zhy?QFkjHVn$>Vc%iDg=c{m8R0t!o`^9boCTEZdrmd>(7Sof1Dyr_kZUz7u;{TXV{p z?Y#4z-Zrc`zuk1x9c|C}t!>fBSX;Dc4FTOl#0d~7)RP#PfktHt(Pr%COvH{!DCXxZhj3~yzil&OlLCZ zE*nUv9(V|+f-?131q;DNhH!XK6us>1fv}{-6yjKcJe@h*w+>5}v!9B3lOU6ENn~xP z4YTX}B)jq7v;BIOZY-l`kv#_}%ukAgZjatiUG%Q)oHCt%5XP?DcAh{B?eh>bE*>IS zpAWOwGpas1GSs%w(RBIsH?|Lc{L}4@+qR$=C!xQeR|2l&wUWz_^C9#qvcpvQ?CAmm z11!r>ww>B74(bg9TX`HCV!4#(VVzc;DB56!+)9IdaY>VVU__k*$>*sbWWaQty@=fg zoHjz9l_)3^B^Rcvw7^9UVxOs4&9v!#<_v~zLqcUHw>ev32kz(;!t zpwJ>F)}Mq#4?~OOX2iRv(|i*`^eFiw=h}S!Jj!QKuY;pJkv4Er#=KT1rXBF>3>)={ z{PwWTiIbp0H#n4jQO>9ja8b_e2r`kl%Tv+MF7e*&)sHf%zE)POyNu$?1L$;PI{9n6 zQa)4nra^YhqwiqnS?MQcJa8{O1?Rk;7Vg;z>;{kf8F=xz9mgYdfZlrhJ?)2n>XmK% zvc>2mUL#5SuMR+vlM2eUj$};9GQ@f>@}{OZ##?yj^M<^6Z`^xu;?3sbkhxab+%d<2 z?`aO4?9F^n6FNuScZ~xoMu+N-tUKk@uk+s3??<1mN9#_ZXcww*RqSz~EfQ;yUBtOR z&G3%*4Tv7vy|zf3~*O&u*7)AsSyE=;{gz5>*&S!;#~MRG{gz-8C-7aKuVw+`#3eQ zJK`{kv$XM%#%u(HV_~^IkFl3$JS&_uj65{~hfav}Y3${@j*sc2)g$~SzX3(E;gr}J zAPj>`;ecH~=~Uc$D(qQ3G)^K$iiQp+jV#s>3Ag@F%0M zjJknSHWMSr^L1r9Ounz)5xk*cUUfA*+8)@ki;ZcnY=8IB&$i!s&FkAmU%jI3IyBx+ zWxeKVMwlGA-MM`y(}x*}M^+?494PJ|91nM|m{(8C?V0?r<6r?hHBU@WwC{iR&$XvN z^~d1B7*BDMSPY_5rBjku08!r=l_g&S1fRh#`R1Q|us%F-)Z5Xr3JP>^O9o+f$}Z=& z>Ni!T<4c}$KRc3WOP&H!hsZj%9P76W9(8ajKF=~;m&A_tC%7SBbr6*NSdYq07i1}G zuBrD`JZT&7RR`QO86mYX0o)k_2Ih7~3EQA>f`C|D7V`qf`|rE9ec*53)b82;W!}fV ziOt}c)i|$4@f|tOAzM;!T=no3R-W=@@TK(5`p)NL{cR;1s~zi`ZTIcGvz@;7>FsBK z`uEy%pZkioY15OagQabP85WbQE4MAUUcB3|PbbxmAnDeDEqN<>l~2~C(_s6VPUp9^KnR-p#aNoL??{R<=J9vLi|Qk~+g zgKDpCQYbA3D2^m&BvCo$dD1SOYz!g*0=n(Em)pqiAKtY4&_%k9?_lTjNAdh`$ebqii{&`(UpNqph(_o z8|r6+(ZV4%61<0aZQ$(8fp*=EpK5))%YI;h6NbPB1Pv*oV(-Xa}f?r+?2)z ze8FM@?%DPbLDNy>+CY6Zo61d19BjATy{&!vi(hSDyYSO(oWhRIurCKXbLsLG=uh52 zAff=&c1xrBS9?fGuGQNFmdG@vRUKJAybtZ(rTmUB0OOf?)fv6O7aVgQX)Qg}*_sO2 zwUt%x;vuaC(@p?*3Gb{?Wx#f6omFsdr&ifXyX8E@DH}3Um)cd~C79*8w0SSOlyegE ztap#{Bm2Pcd4h7DlZp0*Oe-7w*->qv3L=pU;Q=Z9;48Q(8y?mTIYNWi-nR_tC@THt zk9(yzYxYP+_kk;H+r5+(OeKY)q1kKYSNyb<(p`vvCHH)u*JX-}X;LS2r=i>Ay|SuY zyNp2|iYpS}SL#|m*YXE=p7N?qW+ohXl`aB*U<~oP(tWHmfBo;jnSEXEWNFeeHe01b z5S=VQSWmNZv5gh%$tQb3wVv|=l4w<{#mk_b#C1`Oqe?!862qA_sF1i zj>_*I2edZ*`}gl3U%hhG&4;HZ{w>CN1cN(;Az0wrCiN`;F|wZPoO`H%HN5upqvhLT z*3JFxM?TSh;91XXn>L?WYxZzDb!c^LbVkduAp>wV!ZG9;6JT*G&O{e*b0X(O z>2f`z7>CH`;vip06vxEG@}uWCXgDh{v;M@hcx5uO=U#Y6p7gNyf@^Uxy|@>h>nT`kEIt9uCgc1z!S~Pwgk@dM91UhOuyCxZ6edUp3 z^V{9`?8r3szkbh$+poXz&)cQf+|UjpQ)jJT+m??lZsP|IwB5V*^7^5}1Pfvk@+I%2 zlRA}04|jM!InCUo2P)v8Bd&`XRou&2YcGD`e`B}hr?f+p$TPvYDV#DYe+=QfJC*Wkshb z^<^9DJ-1xjYU+UdT;>zUkUTz5M-joC!N2)3D#EYzXi#bp8`=n3rEi*7*=0I4)Ehk6 zF+#}|2m;@>HO&aWdLvVl>Vdq`ww6Le6%yo-E6v-lZ= zcQgaI=n5|A8Q?Bry87sfwe6lAw^9#N?I<ruL&h`s#MZ8Bb;OXeog#fjQHDh2rRc zAEU!|4#|IUQ=cVhOA2MaO-Ez;+vmJmw4(_W#^;M~pxJ2j+Dc~-8X1ArP?(0)_UR~|nv7_C$=k~T} zcxjtFd@wu?kcas?!T(U76on<%JdFMi`d(0{;mc7vxp-wByT30U9c}B@tZHM!!|nDx zd)k-2etG+w4}Q4qMJI~$vL#Dcr@kCJ<5D7*qu2?j3`@TjR{M;Ol3wZp=I}xHhzVaL zDc)Nz^4@yv={Vbhy2rK? zaOF98+Sw4kr%Yif2NlS7^~z1;o^pG*q)wragi@9D*5-35fc8lJFi$(jJtLc9{p26A=am{u7!*w6AjX(msCckZi$K&D`(EWy}OQXNa&3eUc! zLj@YeUtWu3+Ld($9Bqxi9@c|pcd~28fC4H#;R}40Pqr^-dr432=3Y2?t@wBCE^WMj zq`i-g3g7VdziH=gTHkiCbZkL?wcC&a8|-}IzlTN1jd$Y9^z}`{?}4LzefKl2^Y3`g z=5CVCtvk2E=8i`U2lNu=jyVqeOE{o*p11$t!F!i1Upk3#{Xv|6BUc8+GTlAOSB0w~ zR}ok6U^WaMN}pa)cFbPV_8vIYuDbY=_Wb8RzpY-o3R{m6LF+qp%;{HZaE*q}<57BU zHRKwuILCw`I&i`+$U0Y=O!Hth{AdXH^lWW@J=bpeEKUf9JV7LeO2^BO1sk+xL>QPF zxHyR3jUnz}SFjl;4R{Hp$en9`Jvx};6gV2$SXIgqIS!4W4p6__R&!(rSnv>DIVfc` zHLh}0m>PbaBM&ga*&@Jv4H)H*^Vo;qr_4+F9akd^n! zuOscb^;B&@d8udNJ9wH;mr|!y-djh0B9mZmde8k${gJ0esNj)pNvAJwU4ZwY*}w-5 zfUs-N?JNm=aIq6bXWUI7m8Hl5*N%WYwVgtc2irphv15z-+Kval(cbgU-)md?96_d^d^!L4K^A{YDu5gHUR@wE~?Pg~)|Y2v+N)!A)^QO)gp?rs-6=a<^g{?zZb z$36Dn@Cq`fcoUN!L3Wf&N7#ng(b~=*%QN^c+yHAq9bC>$ukNt^$itj`h$dFPS|h{*2~| z+d`&ws~~KH9$8mQ8S>ue%3qBh8t_sCWu)%GN4;jg%%+jITpRd^XY?s2(QC+_JdB?5 znLOqr?9#J6xh1`IA)J%jp14qGa1+PqTJo!7O>bIp$~pLy4B3Y1Jfx1g^8EF%Op&A- zIJZ69mf$PxVHkZse&C_@%`IPIKMZI=uN|ec#hjHpApXg(lhcJ4-tdIO=95ky?y0Yi z&|x#dsQNKFuU4;G)t2+tiiZf^ue;@z_IDrqWEazog`K|w8?+-6%UH{9iH-2-dR`bO!=4kB7O8yPdH3hbz?gvo$$ac z8`FVc9M)LRSzX;!jp{lZ5vH9xX#Syq*}97R`gqn`I{BuOpN z9G-+f;YE)h3n|yK)T`kuX~RC?i)S`fMb1K(Aiy=VT1XVyeAa`Z9d@d_7^s)s2u>ZY zo^t7xb>UQe>9P$(_k+A|w1~d|PNQQh+E*{Vs{O<-{c78^dO2?!*b_c=Hb5R#dzPZ! zUynwL1<$@2K=)(oj$$wW?|oBKUxO(sy}5PgFk$X^X#W(4>=9HP7*9j6JEtL-sa9oiyqYbaFK3voVo;}~q-w6Wd78sJ^q9%#>g-ZR?R zG6EW=yYd+SPv@-X;A$vv1avZV{$uDcCNVq|A^bR%8eJVCwLM2UR2ukP=2~N#;FX&* zjPM!w2W4=xV<3(O&ooTggh`VH&UO-XPKu_b+t^9N)zNBsmaPG<^TMQh*~@V-(2tQ9 zCCcfs3!Lh{CQ@rJ&M}^pm5sGXt^?>H-8%IecFQvOi^Csyq`?sLAZg<)^~%ZgMQ)3O zJhLuz8q1NXJTaT()lie5c+9nB)rdVQbP8~+W~nQS86d#XiLt{&Uc`apI-@LLA#P%0 z9a*P3Wl2XGIiz#aIZQ5ba5`Q%NnqgiGW2XY$2mh6Qmre=xdu1b>QW zK=wYcEIR?OoiJR>3mv|yJ7xV_5BaE^C|7YrX(x{Cy5U@1SErWng_kzsXgg*5T$%!( zX9k&RSJamxU-+b{J}H z&(53Mg&%oyyK~nU+8ToM@%;~w2GD#l;W0drO3U#RmhqM6Mm`+Av-_CA4O6yPpYkZy z_TIv)rVh4O{`6n8=RNNy+p0C2fjNXc;b4;9DdE*=BF;|jbR#S2?M!2JAY{as`cftx zb@fpHNS8F06u?L5u|oxE53S-Yjq*@_A>|Sjd3H8|>vpr>g8GX4nJofs3G}IJVfjk8 z=p0}zWCSbI!_imPohbBMuZ~iSN9v(E24q;bSs^J4U(z2rGQSOvEayGyk8WpgdQQ9f zrn}pN`>$!Iu77NsI55E)W~aQ{ZY$7CrwetU%yoxLRzL?SkprU6s|+XhwAIVbB1pfX z-FNf8cGjaF!>Ii#Ism|5`be!#7ffms7|F~N^_Vi4_AgO9a=Li6S)RdrWnH;UZVHwD ze7bzx3mgg&bYKNGa&4jJ6z|9m33}&+gmqNy$h>wS+v=2s=xXknk1wtbOpxP1tlZJN z1f=4ZbUd|uvskt;yZqj_o}H~>+i>Z_5PL3cyX)3=|K6=_jQuMP)4^vR4}VVnJH?{8P%a%=m*MW1flZ`+pF zw2cfc;uUR+GkSW2nKKE{m;z_et4=wb{Ti4JgdVVy(7;x%)YN{;L56Mn>WavaOyM|Q z-#t!RHxezr3H&&jp*?2L1A_nXFT`|d3{0U5_!ZP6{}3sEOD=2={9CRaWYImgXX=S^ z)NjJ{6J1H2tAmr*e96o=X`PX0ou_!dW3QnpWr;uK3P+oqK%6quiA1MZl?T1*lmI}M z$s>*OK-sAWRi;T)PU=2K3)Fo3qL(SHy^0bOF3zUn1Tlu%g|+V|RPi ztNtspd=Ob4${Q$@JwE`UdgC4v<*UEZmauWx)1Lf9c6_g%W_LPf3%VGyd5pYdLnWM113^J!Ndg;iu>hI& ztN~7Rk1^;O>&{6^I`XDBywFIGF_s2fWKXg|4Tdug7{*>AIJ6K>`7>V`RIYX6cy4+P zyav32XY-U3XWrv!G^83R{t6$AZH%+GJ@1tT+~O0C07kv|7?zoxYm6a5v3cV(P`-hW zv}MyR?i)n8R^8`169(nNbZx%*LKlGJSW>L%{Nx#U2+L7{Y@*}^d8NaV5-AY>OrPhz z^$;WPx?=MBkskAib&Le@P}uO#%Db>cd~1P0`ZY*M~;=raLYA0F~GP80PV7}TLb zo}<{dHD#caM`3!L7@r_$jGA|SERQMSjSzbj`;Y%Gz;0xOuQ28^nQbX zW;)O@kx^dSnzBWEaLxD7NIxUxceM-O^M-cgJ)dZ+SSLNf24oQ*0PD~JDo6AQXUbF@ zyc8@_I{yopD$fr53zxNJYfoug@4JQR)<4{S=@;JG&VSqm1VYPcACBhY^utGY6&Fu; zA(nq`0B6UEoe$NXOLlea#YMhJ3)n>0Ofz!mW=7q}nIqWp&U8RZ+tLviW;h3sKH6VK z^Y~SNxEs5_9*$aOT{gH$u5H{k`qooMytpeL#9tiU6w!8VZtL6*0NY{dAbF(js1aj@ z-A(KIDVGZ5o#q5oYznq&&4%{)Cp@tonViQ6>L=Tpb(_(*$PDYE2iQje<(N)5Wk;Mk zeaPwYqdIRa5B^UcV1I`*+dca(ZHM;G(n0k&HvDt{1!lg$Zp99 zoe|)ThZ4bt(l|G=(x z*F9J8YR5s=gcIc2d&l0Ytu+aMq4@0tSfLnbnp2=!yaDOH27+FSx;~Kr+(@!G9?cko|aqf3E3f?`dE1BNCTc_B=8px^oLW_ zLk(YEgA8e?dxSBplKY%1(+To{VE``-auU!4c@n9idsr^}~N)r#vtCMe0d z#+=0RkQ4hI95I+Cu5bI&hZm7}Yo+6~xI04_~cfxe2BzFX^G_m`;Xx z09(#!q&xha&7hMKJmp<4U-ujgdo)Qysg^S6B<4T7(CCY}V+bela0Yr@n;bmAQ9PY7 zpabH^Y5)Cfc(s53Wc$XATiOTMx8RL$d~3V#D_6DqcJFV?nD*<&Z_2^mJ^M1sZZW|P zVqoR*qdWCiO#Z3kThf^L_>F&<)AvL>D`bLQv|r5V`7@sKqd4CLp{#qxrK7G0&OyXZ z6y?B;2NQ%KBjTCSbTEP~T*FIvP@_+s48lY1!NMHYorgR#zx*}G%WwoGc0qx>OuhHg z>u`qml%?aC>Gr*jsV=Q`uR|pd#U~vw;4FU)IxJb|UZ+->GoMbbWv0$~Zr+;lLV(39 z)PTtP+9@eahshL<^@0UBdJ_+}&wTEk?aG_q&9wHl=z<+7=Xl+LHx$IN6{z=1hA5A6 z43gm{Q`x86(y?`Ic2{Wg zYsC!=vb#A8zm)|_CrBI0@{I}r?Zh&Wvd(RXh>k;BKv7OA57#_U|D|JqOGn+z-?e}B zp}a~SaV0=bP*0gIm9XxXjIC~Gokbu$aB92kn)fh8brC`0N=C%(Bmp-I2Zl1iMbXZ8 zcceZ-L+Q(@$?>*g>Be^Jye->?8Z@>D(>Fn03W=>f}eri|t2^hbwS zbT6Qhc8{Xn{5t(T9&m0tuVVv%Wjbl4)Z&xvpm*Ogl~eiDO8Hx=L&=WHXMS++|VqD#5X(h6deE#J7NJv6<8*P|`T zW^p9`2Z!+ebVqTeyZVQ}K0i6V>LW0EqAv$_yXj9cu96KF; z6*gVHXP+4aJwYYU)9(58e(KP=g^%HBj}Y6fasu09H>~1X_G5>1*&ge~GK$*L8Pe!2 z<*@d)sgBG*v#lsI$_XFq$o$FUwH-FptNuWqQI`g=)@k%2IwR%vg5@jVy0(_MvN3?05y$%XxTf8m1gR5--bo>?>Ar!39W$@$vC3qe~X|VZ5HlS|;=^I}~A4P{(NhDoT~CarB6a*3rQz zxWl`nJ8t6icf1Dc$A9F-ZSDH?tUaE{7eL2!Vx;XMw_JIdje#`sz|Twq;D|@^ z^IIF#=-3D!z5z46_rjD0=$GHto6eSwP4JZ__~ht=*N1TirkEB>E{r~}N@Gp;0d|DF z>e`#z-@gB&?RCHXhV~gYe%r&wUMoizwWW)OaTsQpiE$7I-*>R$WB@Y!1&81$f&auI zuHSwXSL$w_cZvM%&ck^x89jG%xT*aS^_RWmf3#CKoSzYej10i5lj>br32$}&ZD3{+XBxBhijl}|g;vMhx9?C423q%lCx2s8EWNTKBoGP6UO zBCMoCW3qki;`g@CeEAJbYhTAY=$$=zt`Q~6R=(trsQPQYLbg~$=9R5U^uwy-Zo7!!+Uemt$%`4ii zd~Uhj5@h+Xp_3W`WM&&~Vz4K7H5u zVnAtdeHdBlM<%4lV6r;v*bSf8WVv2c{g6Nc{&{Y2Y1@+bcC6T$)VIJT2F&mvAUtj3 z`AkuNEble{BpoW_ZPDm@Ue~poHT8~O7w=W$_7gY?=%L)#q0De!zOqzwhV|wvmTzcR z-}oVBF+8hnSbr}1$WAJGHJIR3eNuV=eGu7GR{}@50**%l1kRmFplljAbTX`5sPhu! zP`KqQ6JlhL(Txt<{)KNlu{{*#@>4xk0Z9tuOPJlqXKqwxJ4>ewfMZW$AB1I@{Bqw? zO`jkqWm9?FwLSQI;xJrMm&z|+V@8J%Abcr59bq9vjR+ zSujB7*Sa>cWGUK))!7eXgBRH$@+Cu3j=-^bkn_6?m2v8{30p8PRF9g_0xvhUyUDM%qne(|gEG zbPnYRBOUg_)0$Ix)~5(qmhxJ1#&d2fFU}5giv2=5nN91o^aSa^09x>qj*=gI2mo1T z*Rk)?DCOE^VcG$Y&L%iZ&OwXV3d*Yvpd<-@>xt*uA|BK3oTiU_gI9->=Wax40+-+{8eP&Z{>tU;$N%$xZ)2LBUcQ`o z!6CoH6fWhBxY{`?4zyzW3Xd*4);E7<@uJb6+O~7&Rb+89o+We5lPVDhB*8bfw8aleMOrjx};Y6E&7jhS8~rlt&?#vh}o z;nf(#Na090n@SiOM(^`Dj)u;8oHWrF2G8C2DQmvSu9=H5<@e;ndm1F+B&g+FW1fL8 z5^81*P=%^dO#sDx9kia2A_WCl2C&4rg8PD((Nyj`vao<>>E*^*jFW=%>Jg^^!;8xj z!>n<3bj_;hoLkdr<~t`z<1S5>EAF9#OC5SFGPiYlFz6|ZDWHtLXH?JWz}nmx+CVT< z(vn(;JjAI1rulUM40!qsfCwNg*JO@9X2t-t9VS@Njt{ZZF#Yar=Z?MY+Usv2xmj@vh-1rUN>?TSQE&V^%yzCdiXc1n|x;b!z~qydNXrv)(e2 zB0-epnr9t+(|SZ!IX9g|&Zj)rV0&1S9Tpy@ORdPC+VUJxD6rwO9gtvZ8uo8OtI|MeH%)t>OUA4En6 z>9iS7@a*W0qk0Ciwg+i2zyIMMIc>9D=Uhett36M>fc;q|BXJ!u) zSZ`;e%Lm(@T@SR~J0EB}cHGyt-F;VkVDJ4@$2U8a|CzsIZFG2Z+jRPA$k1uL8td$~ za^>l5$&z(#Y?Sw8gD`!cbQDk*utTRkqt4W6MtezNT^$?ZAv@nY>SrC=`KG`P^y*c; z8xf$hVIfH;*s#-AvOWD7FTvR!ZGZCTKiBq6ZfR?moyq&>w@@8)0-$$Gc5Q889bc&h zu9Zh`qL0uAM~~83HaUV(7;5i(=iA#Ur=F8ny-kesetGz>gO75A06X;T1k|fXw-Jme z+sQFaU9n_rRXgkKr?rc}{`Pi&wlLB^N{7k;a-^#HKJl9izD|DT`NJK@>#Fy# zyFNL+{K$SPy_+sIl8A}%@pk0kK{`tN+lCd(!-HG*?r*Ps>$}?9`24~z{>S#hA9#Ly z%z2yJ$kh~6|#7dtDbScbEBbZNVL>wWDvf8#aeYV13) zgpJ|$r8BP4PW2l?m=7(VKlMe*L;fN12pxy4{$j(#p^@LafA{WBlG17IbDP4+v$^9D z%Ym{&k67~O2>&i}K%H)n=j@U-Ypytac=AW^d6wa-I0V6f4c5R<@6gm}q;$#*_B=O` zm|`=pwX0XRFI|3RJ9p!$?fl0+CQd=}Vze{uoV@m)Yw%(OF&tQ`7)-&d_%(2rsqxb| zXk>H>{i}6d75H=pH3l3!G|XLqt~2lYQPboDAu%=@Z;c#qy{}QFkkDtD32eEe5!cB1 zIJjt-5?JZz);(F`$I&E5yuHv+rMJIJ!*3iYXo$l>ZhNvl*TFMb5m%3l0$QR-@vpNW z-A)(R5GTD3r@^=B$uI4W5Q#(4Q^vFM7ypV@@CKGJbyh7vW1W!<>jVCU_rME%63#~_ zz+Zy}gCuu+b!5sw({-{F1no}uG>{z_Tnyg^*=S~0`wTm>zwI6GZm)gw+uJoa-zJo{ zhH00h?8xqD%@pr1FK5hp)+vYg;$XQPoF@1c7mx0@u1fED( zni?53OJv$Q1z}}QIo9EhvuCi&pLJg8Xm2=_I=h_=!@6GC)EBrp;wpZ^wmo!dBgeqc zObnbrWn7sxhSo8(qe)qc<4c)#CizT!W&xIt9TvU}3{1B>Zuv_4)4%>7Z3#Y_bv5hz zxc#GiVH&7~9{}ij`FtMdm>^X?9cJWw^{O*_!TI9$JHPgk_IP$_KXR0P3Z|vmO_XS_ z%6Hmo!F0-|bh<&8bWYOAqf8Dk%S2kGZ<^`W2xU6ctYc@`46|OImr4_e-^IxIrS0mg zKhZA!!h73ApL|2R_8S+rTkp8I-M9Ukc5v!0@Y`*5v=Lm*L4uAUWMr`W%pb_TL3r6u zCkAielN{vrFr8EnvlC8`^{0?`jhVci|M{5HBW(Cx~_g^9bvH z>2O6?*-o8FAx`20)C6;pTXaiwiNYs5a8@Q4$0;>T&adKY#MZwj~HRTg>dC*%=2AZNK07D2yIH zozK1#44;c?kL;wklO%EiUek0kipdHBuwmq92YT(xSMo~4_kX1A$8I~?zIw$*5qa}o(w9vR zXrNi7b!JDRw%e1n5v!!XNU-P9VEL22XWx&pwb}SjxFLgvK5Zc$7mt zP4Dy2YPrHTPmebJ49gIf`dVJt$roD+9A_4apZ7x_=khGGNub(&3)~OJ*Hr%TTi?+> zddW5H+P}O`WOyOghX*WSIaG|l&c{#Hzi z=X1v#2Og;$m1wEtvP$6p!JQ6J9pwwDK zjY)3v9HT~>36g#EQ=e-uy5RfT#?#MG(`%<xAgENt^lPiDh^s0LJM&j<10SwCPmJ7aeb(nJ>Gb zbM7dFxM(q@*JrK;HfZUtb&SNPGv*!d42H@E#9!5(?xfn=ra)n^4|zRS8sCpFBL z@93kIP>w@6M%81l<4PAfj)7}-`gN(9{w?pHTp&4uwFi4kw!QHx&j;iLIbNLSrA9o)gQcXE}*?Lzee)7C~Se~I| z0R#TRi+$RzajBLa)svY;MUXW{?9M64k zxrh8xzNE?f){{ZAhxKP2TL%DhK#ad}B1u#ArNg7VmUC#DEGv-F$|1kXsPN)ka&8*0 zeP)|<fBQ#m_xO!%j7`L*r+IIDm|X2QtmZ4X`1Uur(!M!?Zh}iX&sHBFIX|ua z@85V&JLjC|Fh!hBA2utJ5AM?LAr54tV}Lgea3X!uVZC_RaTIs3CzFoQ8c1dh=dhbY z&ahlzSG)7BE8C@Czp#Dk6Yp$a`syFGJMR2i+r4iK5N6pyo?v`nm_VG*!uq(YJgz4b zNf>Qo^RIU9ry^U$~`xs#zW?D4Uk6FJ7INAg>!5^J%d#2)uL+b#YL`E^TUv)&Mw=!bPbM>3D z?ZQC(Az>^1LfcTmTnYwmq3w3eDTKFYo!Oz{9pg zdjJ=w;ES8DeT=cCEIe}yjs%9K;m1!{NPD<27- zL65<|Wq4ROUE3CRWHxe08Sq4yeoB_17rM=B`^geQ+ZR4crypGwBpos}X|(0)E!!MA zMvq}|XtaIgjB84D zbYgTg;21Lvj)oA&LVz*aIn_*P$n8JSM(F~SvCx=nINdE?zee9*1LJb!%ZQh4 zDdQr1KR)*;qhE%yaM0kIMjHps7+5=`>6^l=ax$6Ym&t4Y$UP zJJKAdgmVqDPG0cP!Qim$(C)cLS0_>&lO2dW@0^JkN%D(Rf^T^1^Uz{#*`p2&%hRyh z^FL1`&NGj0>b3CYug;9;!67Nc$AU>uUARHoG&qA5uozJsUev}XW*L3Fi4A5hYQOpG zuWRr7%$M5T?8rVswq>l#9E2~v1AUSabLo=)k`+lRdUW!{+oQfu{N^TK#l8CN?tS~O zX&(0YmIu8Hek?yD%uFetVh8bOJ@rT1)1Llg?a<5s0mJ|!vb=v9XH+M10Owm-ljqVQ z6y?Jy%9-6jS`VE_sKn`a1_$TXNvNuNOI^$F9?f0wVcxD@(&0iGZV)7|lqm`|N$RJQ zSz*=t*Q>+Ddh6sTIP%<}Uk6PbO{)VsgOe>Ssdt@N zQZ?UA(T*HwpZ(ms+GRJrr>$DF3Wt9$SUFP14|xpStV&L~Tjw%M-4QwBoBf1X=?;~C@ zQGy@qH^Du@EbZN$^=FUHZ);X=Y-gOZxm|wk=h+KnJDY~B=h;JW8^Ea#T5(U8#`(7H z_){|&zL)A8hA8=}DQ&?F^V~IEmi1J?9l&;Gmu{@D5%;P`>0t={o>Z zZ^~yED5YMZ<@fW0 zmajgqc0w7EF$&{e+KiM7A6cpZT$2b-;61lft~B}axp;sP9Zts*)E=JN+phV>N3)ar zz`{ky1D!`4!SSTu+BL=}rO`HZcxsaN)!3MEG4e^L z7U9-o2V3Qp0BC=KP7h~yyajwgQ)1BH1HC>*UFN=olI9y ziu}rl*s!YK{lEegYTuw#@bakeY34wHrk%} z`14IjE{q;&W}G%m8iQU9TMQ@`MrTShrXj=}nHV85xV*NM=fRHvL&ov_GT@Gf5AWs#?NrW|E7swYFrRwrX|T6@l6f?ev+krd_90UP0Zt;~<-1Nov-j6c1ossidI^BHVwM^Avv|0<>YAd!& z|D5u#Jm}mVA*fxt2bq&T)PIcEUOm7R_K&vFmHCX$)9FKJfa}J0PTkRN*>W+PGhGJa?3_NfjP;)@iFg<>=XpOP$8NmoI#Kt6 zu)|2)+z+AZn4p9@v6D@Ca0Jt9I|pa@rLkudu=Q)sXqSKEBk*%R9Zu}redHkU&<)gu z4n&8&v?yOWkcBL<;Nlno<|5v^zH9m$%raQr&OY<82od>VjOAKpUaLl0&m9%?e)I=r zc*x6qDDC(;_oT->>icwnY7fYxtjgAsO>qDp+mCv$7bqKa@T3>SC~q~2D?!Rh$|r^J zEyo1H_G7!v{SLRNOmHz!Qg4$cI+HfijeL5~pg;PG_9{;5f7AI%hY1~^<5TZNDr9&e>#eT-#N?4aJxL+uel@3J$@S~%UpxQ!))xT&Kg}b)JE9= zP}_X@4ZchLv+e#ZTO(h~mMv?mSFcPb(=>s&(r>4DI`-hD9a4_i%G20p%b^aUZ>ZZ8 z2LCKm{U?u0@0CrrLkcjdZ|O*tfnrAQPMjG{p zodBsru9Y)8mgB>u!>xk)@Q3nclCnc32bP_d%CeX#H~qh>SHa}rCE5W(F-UO z=9X)?ag#OjI96rU(i0p*7n3VY^3}NpO`Hm^IAl07={OLk0S$j-j$zc0A2-lKpm
q|BPSk?dK+l#Oqxz(8{;1uNUkHm#{frI8S&;!{!=_~9U{MI5aAW(Sm;66WJ3b93wdVi=D^qc;Lu69E8<@xsi5f6yBJ{G}3{p}r zy>hJwWl&j{ew`y{Fj&vZpEB0TeA1@As7G+tAv4W!$IUvmej*)Yh9`Lj>x9>RDSdXns0zT~4Hk1na_ zU2>mEdw4B3C`-L4jou$}1`6^tdt^tu_0CJ$S1-97*&Au=*KZhf#XVntnbAt>c+IK}ZETnw*>Ad#_3ulG^&R1y_Ogl%I=x6o=cqTUy7vmE1_H#iBoHPcb(jD{<|dPy2{*}|Awv>E+9Uyz5Rwr3 zrI}&|(~Rlvykt`cbpj-DxYF{mn*tZwh8ZFY< zeiN*SZ~d6J@vHMa^R}IVi+!NwHm!qI(#7yx71fAqYK?O1)V8D(M-Tf-BalIrZmx{n zyKi$mwDE@M@lJH=eG+(wbIxSX_@5`rFUert6G_@wS04Ok3+?D=We|&jBrv}I-u3a> zuUsA*?!7DJ$H2h6m^(0#eVr@EW?u2 zp)d79I`K$g;+4yBG`{VZiV<2@L}VXG0kXeIzAA%6^jf73p>>&6Zwy%3-l!}2D-SnC z_NG1o&dERKEh9G^H`pXUk|_K0Y|%+D+j}El_(B+d=T;Nq%ERJT23qAMildyKYFo+) z6@!l)Wie|; z*X)7MY}~x*w}~se8MQ{Q$(zq61^$nvK+{0~Kep6o8i_-U!j0`2%k8N4Swb1r)h!jQXy!phOdvLMx3>zVl!y zl+7}Ft_iCkE6RZiV2-vo1hsK2k7`;v;HIF&h*9wIS;|Z%3P**lN{;y#K}me#Rk1%M z+$d}A69cbY`o}YcKH#drSCJ5S&K@?(Wnnb(s}f`$8qhlNIl!!^vQZ^Hl@sHeKll{I zw8TqAsDZP}m}#?|(9~tmstS3(FJ+;WS&y9@9@N_2nFqgp_44n;yZ-K<;+^mPP~5Tp zp&00FL-}`r1%oN;%_aNbg$LOrjR{KkWF)t6r~ewD9`i8Hlsn=>-^X|~V3xXTVa9Tl zna)#Beo>tNte?fm=+1+spf+V-e<}OxrMH6>{@kaUhIpf{OMR1znyMvk(BAqhe4!$R zqOUPVJ>}|=jH@DA6s%O%L{*rk$G@y%U|%@~Se{e0(uwB`X)4an)=<7YRE>Df)K)(5yaHFKI1|<~V{d%-yC096)?XZR z+xp;_p@!lpCz(~LVR>CAeBnqB4<>`7F*N)5J{0>nJnPqg={@n>3xA$11l}qToB-U8 zLQg`#j59!F`7N(y&6C5yv5i3@4KWYr8s-K7@%9Ae89CrJ8INqdB`&@6z47@k{ZZ`P zeSgg1^mmu9+jZG?RA_U_dSVDF`6PWov*DX4PrWxHmG4r-!(qNP(k6`ZnMtIAZM!Bh zysQ)=08eTRLmK0IRtJ06yO?o(C~p4#rLlMSP%bTAyl5HGX64NYZLEB;YjSo^W4H_& zmA=M<@;neqqevcbC5Hy#IIA1RxN57NS=?ny*RWooKW_fP7g(Y`4<59?;JgXy%3fs3 zhybs|Hwk0G{L&M{gY^fa81{qPXU1tKKZ`^1y7MfIa!nlVp8RuGkb(-|Gc0l-(m^|% zw5ZQ&EZblD&yYrFwz1leTK6TL1~_~TEZIzd+nv8OF6qAuZ24cKPM*Pl1Z%S`^{%m9 z1_-jR2Szb)-1@=FBK|oOYa7q=8&Zapc9n(}85>`h?Tt2PKEkSJJB*XogCz%dZ;m_e z{94Rn+sw?F3}3RELKC!3Ilw`gfx?r!vemM36?tOIbphq_2E6 zhc?**KizoGhWPwfzZG}fd<%tdWxK>24iKE1hsMckN(=iIXQy+2Gjyl}&z>Zo{Th5r zV&YPN@QU&5=d9l}D8WGE)q0TasM@Kz(}4EY6!`*R@EL=2L@3{-&oiB2*_ZMvU+9FL zeV(#c*-Cy+5_oN3mYYA;W5%c4!YJ*wq%Q;2szZkdd6bdzi0RcYXn2W>>9QY|CiK7g zZebFx5K4a_j=sxJIbk4g!AF)S+Ys=qgItm>9}-_ZDS4he)D@(Ope?m>-M4Hj&{;p_ z`Ow~d8Rjgyed-KkS7-O^_`;VjkN@%~@8U`|(h%R}@4}W27AoNYLnq{t34>@11RmhD zP;i;qGq?ZVbIw2Sl`L(aIOUX6+O}`sUWjD;rfX85NrC1JdXop9Q3@!nW^q6It+VI! z&POPmj}o5t1Mf`eAUG6~L_+^gX95LXEB;<>HUmNJJ*@Zd*cl_ccE@v``z%fsp2uw0 zWRBG5bv*84RKW0m(*3*$KNX-NxR4D95CyD4PJ!mT3XxKyDq49!jRFQChm=PVbN?xV z41wn;vT@5^ECeTT{H3sSq}kAhpmWAhx3P^nRzpHGKtu-Flx^gG&r>bntG z^QT&*ZmCak<-LWa&d#V#V1T^r#lILQaY)(d#LVc-`)R8pq_S9)sZ)U!)`7+GKjSFOBG|AB-qx>51p*+R~yJG=+LDbN8yX0+qwlx(>$rd#;KPUHm7( z2U^{44&s3={Y^Z2g@DZ)17+_Te3I(NF$vy!a=675LpO;U2?C zW#+EkZ6coWpt6jD-)KAHts$vWuJJT6T2_OY4<%<+2a5Z_k+_ljzyJ2{UlR{)x-sT< z_Oq0{gZ{v?E{yMh9Hnu}7^hKqEH~v_ijg@KiX1EUvHhs3EN{WD{w1#dbO5zJ%8WV& zA8lwROV~SFdN781+~Mpc6F>CH!& zw$E(W^sVjm1Hv(GZS(fA)}wI_K>r*lCEOmx^C;ZXGP!>w?z;7s*n40{bTL4(pA{P^ zBcWsEF=_gAxts|Ho*<6}_E>)AJ>6fbQ`F=KY3X*SGEi|aw=DJbbjPjtKOA598rw3y z_(cYRTDXm1Am+|n7;Rk1mi-?_FYBI@j=4<>TF4v4=yYJMVbn6nRx}5C2kMvvDZ4$W zGG(t+0=YsXxC|L?J*Feb{>O0Z)jIU&?6mzusngQG+ZN;*2kwEU2_`4!1c}BpZOuH1ZL-2-h{7U@+*qPRNq!UNL`@tu988N?j zg%-uIF9WfL<>~`@AD4QAZAaYrmxGiUrrtrGl-Y7?+>ZyN9iyCq)r zYrmDS7R?`sVT^d?Pxian7nSm61pbJ(?Wvu<8Qtq31G%hh?;IPLxA@gpUVY_*MCrgd zF9$8uM9pWD0!<1u4fG}tJfjp)gecVxUU0#)zW(SVkNy-hv`dk~+FGf@W zX~-GFFwhmkMQHT(^u(37-x0kiNavk%76)!|Iy5spuJzKm^uATKgGu*Wq8PR^a<8Cr z)>;9k+)E{pcMVyMbk#=%x{5rJQ&=BtEL)q!sDCPs2r-qb6w)Gv0Mdy!e^R*VWt`Rq zOuiETl%M#k1b9f3PURtCnVv9(uxS;jxrb8aO}x#QFom~HL8=0)0VnV(fM;ry3yOad zaLQnJ;6OqP1DGlbIbu$}MS;;MQ*jh{8O*RA9H7|GHUej9b4HE)0iSTR@WB`*i2)D_ z?GkDa3UUd%3WtLTZa3)c?ak%FxBuYY_~<7;AHVwBZ;Q*ncU^4RJsd0M_p>y&>{rip z;3o~T48V{U)17(ieAf5$nD*z$6w?A4uaB3m0+g~xyXpBI`OX)-BAQ;m)WT`oBP`RF zD=vD;TQG=DV1)&LtrxOi8w?MV80Qoa0Q`D~9G>z%Bcn1DxmI;iiFO>yb}{Kt57=dIDzHiu$i_>#^6 zno_L7XJT(}V0mn`1t&`coW6yzWzXg~=k(Xc>t6d-2Iv;C?|hUc^vukT4JXYkUtZrw znX_czoPH|j6l;Wmq+CTp*(^sFxb56^e_Zl~cXJx?+iAnW>C_xtH^$!hMql9F-Wsym zOJ)0)3Q3|Pp83)6w;KEFVEOCxB)$pwMZPv`8sNpFtl7z5Bc8vm$0o zTyf(kK)pMbE?mLYSN)s@Z#p|~>;VwIKE4^XO64tXQ}?a3_|?ZJca9^Nnc}pB}uo7Msw*7+!Z?Xq32lfG9OG$3 zlzy%B!-gAA?(?68PuV~L40Cqhve+ilU~IgXHr?QV@KPQWSl|ZUQdu0$)4qJBeJA;t zw+4C|gjr#hg-ppSXLSh!7z0j+;*m%1imf~EVk<}o11E>=7r=^X#Vz#ByIB`M(YzK($JPS9mFP{eP;HHgyWs{ zQ|eKY6EAs;gjO7oQzj?R@mVSp_&_2b`OC&+KK2V4SH2TA(RK1e8q2`;b`JX+lcO|b zU27QUpgKR+2oV_4J=`sTjh82oYED9E3X;HeC06)ccnq%z)v0Y``0FM2Og9HxXx6zM}^X|mRhKIMre|_6KV*MjqIY4q@4DQ%Y8!0Qa za?l~sAblx7mRHnTvWzn%@yzzF&Y0ER`P=L}{{lf?&09uld1<;P1)3B%OaUcH(={pZ zOj6+BvSrbE`|TSh)~sE7?bztZFCeI0vv&}K(33(^uqe!wO(`3}#@R9jU0ph6|L%VD z%dWaEPFr(aoO%lT(Tzbml{kgJ3XlgiDY$a)G(ttV3MwUO3RmKkD^w832rJVogcQ(I z3YG#2Kl4{9Fpfe|`0gFnz^$Y4rb(g6U*lPTqHw8bbj`3h5G1zZlWG}z^Ah9!;|oz_D;*GqMyz)y0W)U6!s_x=z4 zfAN+-`182phFfF7oSs-TkL8S%ZI~0ibMGPV6f>0q$yR@O7bhWbjYs+5uXW<@$-0_W zxaO~`dDQ3h3^I;N8b9x%tzjAquB_;-n(H z4sD#Jn#FZ!Er&+p=9|A1U%ui!F?$9BXNk|@d}&?y`L~oO!^I7pHEcw*3!`(}-mRI% zum93t#){=<#-3qLCPz8+r2KN%w=Vv-2^1HLdW$r`!w#8ldeiOOJ0LBdL82DBL zweV#Y@oD>$6f0y){C#bF9+Ahf{ERT&|A_a-hj<^-P=<~U0{0-Zy-$4>1^&jhH^m1( zc}eWt%#8%SJ?v5EE_DWZ?a#7a8)>|Xlp3S>oEO0WlY`z4B5I&pmAUL4*w&N%lKfWt zM&Gl~Z1|-CNxX8ssk8EB&_q5@ev#Sfe_UoRjI4WkhI+G-3NN5L0K<%Ihh@+dxsMJq zH3$w5%EPWqN`%C1N*5{pY{6HKgYUB+)xXH;Y*+X@=qZ(RMHDc^$+BB6Cn55?p|d2( z89cS^T4v$rfIqn83PIB5J?suz5?Q(ls0_C9N<3leI&;7Ie)gXCa=q#Pyzl&DU%EWj zE?E%!yzd-X+5gi>?Ni00^0(=85Q095woCONoN6PUX5H(VjaNf#7I{Fri{pZJzZIC zu=uIiA+`AKVX6B*W?L@#$~WRg&$%#GuUU&S$yF~zbVgS})8e698W0$oj=C$*oS7Dw z@D$8MO{Xw%pL;QK6^<(KWyCoppRtIeUsVPbMhZRQ3O`4pjZ8d^dKEmKf=SHr&a^ds z3Pkg5{8Tg*mJ0Y(O7S;ty&5f{;iqw*qv9$f3VW3ua4!n9#ZwWbfaxeV|}ItfG;Ip~?z%pwTEUDh`tvGc!5ptD~zI1vcXL zyVl3Qe&o~frnmlaTzku%v4T^3y?SMIA9t5?V!O)+Rd!QZE}BR|ciP`Vy=flPUY{sz zTC^win!M2<-{E{znX00sL9X(qLg+r`4rT?oza4{m-`G&R_=T^J^Ur-5{J^qkl)5fv z3Eb!G3CDGRso>=$%WwVbtT%Z|#YsO6oV+?nIuqBQhNgyeF;ZNnjgm_m>raK!cU`GZ zXY5_NjA4v1>g>7U!mfh><|SVgL$>gpOLxUc*;@g2_aSiNFZEMIyYG;7bcn3T3Zr1I?h zF4I9*mxwz^C;b*LT*gxR#T@u{8HQFTE72J|;)=L}kUVe{?tJQVh$YST z8#7puFpd%P$okPZ=bYz9PtQDflsMqw5_|ifG-6~bQ#1;!kt43fC?-DnfPUhsztMf_ zpR=yeL6^(YLBMorfDvA15DScKkCeX}7RIx!+0VLqK>uoRiHqGw9sP^5UIw<1L>{dDYq0%Tq&=c;=VT zEZx)RtfT3_3fa7LHLQFc`PZ=Oj(Bf;DB~@>GOpAiJiu8p4i3-j?_&nNGroQOt?|)| zFOB%KNMj_yPH(j5ZzwEApFX zb~y4AJf8g=2-mvE0Tk<8h7!-Lufj`tlM1j8q)t)#W&6)ObQ4~&Jed!9&b3haL z_LH`$H-L26-FHEOiNRaTQ!{DKQOsOVh-Wa*Wb<&Y}-Jz`>9o|I{V%hkyIN zSjzS^x0-l9h3%o}9YxNFn{7|}NSD-G$OZmCMEjU|aK?<=UigxizVgmH@06{~zBJOz zvH7P-fhGl}Q=n;}Pp3xn{h6eIRz&N*eZx2Q_4O~K^FA9T+Fm?Qj8n#G)TW}%hYAgS zeHo!vdFR7DQT=ngAAKw~KeQ>%J@fQfyolwfF4x2;@uc7umZod$s${u0R-ra!#9BIm z=A#Hj->c!7Mh$5cF6O78N&^SMr6^I@D2&pOMtJEIzD3fYx)Sc_c`6KqTP9(dr-I*^ zP|Ik5Mw0oN-kE|lx`AiD3bq`y5D(RH{H6pj?`RLH9He4Nn#5Ow2biWPGfhf91f-+v z;NsoR;x4>YWJsp~cj+$PC^g`Ka2_XK5!R(_3Ui%h^oq0;x-4UFY3rh{IOK_Ymv6Y4 ztI{yc-~4;;h^ue9EmkgB82!E7v3vWD7~aS1S}IuJ2@HSIMR+>jtDE*Jxzp+A`}D99 z@-+TUnp3ajRR2+1(90QVjB!p<_K+M62UIPT#COj`W=D46k=WXIIbI4kl0}s}rAD%;vN+3#qX=1P@9>;W|s%-nKt(xc-v( z>woy=OtPSFNem4>nmH#v6;P%q)YD7Mp2!_5{8)aE2V;8N@;=?Cq|(P<#nbn!V*Q{4 zsy}>e-vmY3X0d;CDCYDoVu|`g>>a&0mM=ItR<1fR#`Z%~PIULI1nbx~pL_@mdC$Gm zx@ruYp+?ID{cI<*X>+(XZRaCHao?6}q7MVxCG)l*SCu5skd_)u7?qdp!;-!=`-c4?5pH83OEH1-qcl|lwXZ!d?}*QtgHF?Zd~K}vyYX} zN}DSEc`lu%%;Kgqo-VKQ0(Mz-BKPpKy+Iq>hIvV&GU!$CEURXUJSh29+=?NnvE@%( zvy6?t)qW;%1g?4H>L=R7?p=?>4L4m29rv)zy%?%9IIwUQKg(GDfoo#iXiL1y6HlkJ zPZ8*`;5LGe$nKc&@Dz@spctD4p0vzE;OH|Ju*zy+U`||h>ks0SU-(+wed}$^;P%Es z?^2()fO1zO&@*Hj#yR!icC4I5rroztXBz18s{Lio3X2fDluP7+p-fXI*(3Vyz=|tt zAZh-xj{{k+`*ScabqL_4fo|O?Q-NpS;-HdsQD>&Di|l_hZ~O8xAR&QFm&PygQzlx2 z#Iu!9-3|KUXWiPUMaVFoX=npWKjnAwaHBm5K)y+w=od?IX?^lMO~YGr7M&y zCQ9W6=bszBv%5KMbax7H1+FTVBiO=qDV%BC1En&cBuQfikU281I7{V?ybwyJ(K+I* zbF^K&(wN0hVJVDM02FSd(I=%H{wlc&Min>>2L);>0mS2DN?@C&Dzj#gGYh1vf>>o$ zmCNihM+H6M`kTMPF%5ok=9kO+%o9aIe9Is5Kq0B=a%3CfskpAf+@}XIDZ~#z&k+uN z6JG~6JjHcnbc8Fin7Ls!no3bC#`!D^)oCUu`GX&e-+uf5V8;B8ShaK!cQNRVv2D$QGL9UMBFAJ5vQ>YgIX+hJYC5;>LkA6H+*wJz8w`o*Hq(zSMqttmg zk%zvuv0UGuvkYoZqvLyH7=wJ2-xxEK&auj4r>%Q2*Z;jHe)i@6CDyDxkJGZ@V+xl% zY(4NU{pG1NW>LEIONC25NkT{?@F4%`%gBvyxJp&R;JdU1>Xfv_FfVw(G+Eub!oqmK zGCcXfGP>-UkL2MjIEDi-BBk~;-%OCN;+Zm!PGkNAJ z0MfRwXLb^UdQNv+Y~6l$eBtx&j=|B*>^<*=M#G7hgJ`~(7l2Yh^;J)D$v7Mk939i{T#MRk)=80LU;6ZL>K%mt@CSck|Ty7~4_wlnxC;Nsr_M6X) zk+|lX&&EG~;LSPMGBA5d4DNX}70;4;1E<90v40ZZqrCMymj6-F9`jk#)u$1rzdt5{ z;nO1ID}Q|IC~p3WKfIIlWfqt%7=68qu@Xn(%9}3XoP-l&(UO(akp~cJyfW|x6#2}V zJbBN7nw&|tzp$QB{Dt1t>8bo)N7ol~`@1<O)<1dvX zcV)lG+XMqOJ02R2GtPYutE1+_bA%_~+E2*)4j!@}+jf}gfG)4_OFq>Qu+X>?-$6y& zhBKEQ;^sH<063P#cA4=UXd<5+i~?hg5!;S*lb`b}5G@;A8t%YxiLq%l)@(PH!7U*g z+_^G{F!%GDPZ?Y;c&1U5ZMZRuO1#oOp)qa5fhO_HKAIO#xfb76jPM?=C)~SpXFRg? z#ysa@ob3VQ?BDk{!)+R%IEx!3T4s4mgmTC}LYmt<;V6*&k~AwmS;ofe4}CO9n=qx# zv7G+X!=}Gak6-MSr6AVYf+4R7Bj9C-Hj7iV`HGsNkRoaep zu>6MkvyLot8qVk`!nV(nr>r^o&+x*Zjrx;D4H&fzh+hu2!*^yNYzHUVIGFwWAqMEg ztqulcB-=Rf9jtI=T=wPA&a-#+Lmvkvlta?c8wGl~8u4c8;WvN%O|b*Pw|4oW*s*n6 z>KutrVpV8R@v;qA8?N9&Hi*K^gV2+i_&03Yx$|2T!+qz6M^yP}x+Vph6nHEJiWGXR zf77Q)foFmO%Ad{+8#atBT0D>a=%c@aTxr)xS6-P0qn@QLf3dj?jZ6M=EB33LLi!Q=GEDEgpvaVJT;P(Wx^=4nwo}< zvMIw&trCXf4lXLC9#W$c*v8W285rn02S?(HD{hK^eBZys@BhX7;>Pda6UVPw z5&aC3?B2ee>w)${52;bH_noiAlNZU}2x?S8hSk{hX_}**Vbgy{hxXTQLL0r z`0SsJv$%tM$>I|raXZRAN)|?jwD+pG96+J&b}El*%{PLnb}t*R8cmb0K~^KX(XwyQaEOX z8L)ET0gzqY#GTw7mtFS$`0%HGkEP#>n8oG(dhSzqi%bI@v-;oWYDu4Jh81_=RhU`l z6kLPSIvZmfMt9Ewt(v&{=Fi1Rt1pPvYfq+5G(Jnc7Almw$Y$AMhdeEx zLvUu&1{la|i97E3W^|(1)0*H(mb!~a)`NUivCC=)KXdWlfxK6K=fwKx?_V9OR-M8C zg2t3(I2_BbvRu7vTd3_pzg7leGh0Z(JqvJ*KV*As*YJP5U=tbkMBz1#&tp0>=RcH7x>yq<92z&c zdoUJrpy-Nai{o3@-;##<4Od*51H|*#qdsT$Y|2QTVOTmSBR}Zm1-ElSbCYyNK zKay5@%w!;19pMnPn~5j%nw5@5JPbXaSy-9(`p+M;^9w)Hr z-K4-XKmn&>x&{aLZS3go+0Ch|ui%;=`gV3Qx}Hi&h*PknvYp>W5THjQP+aQHiNbUG zVh?+uF1`Fa@tm{Ih~w9-K`@V{z;?N|I{E~M$~eo>#*!`JDTovzQ$HoV-m1sA+3PC4cI?7=-bdb$_0RGO2q znKk$D9B1BJ8OSKgSsAn`gCJIGDXsfneXYyMb1MOP8E!gpDVX}?&AR57;b0{X871M# z7kp@Fppm75D$hClrlIZCdFGY8NSURIvr5UAd?o)mc$LdL*>~*V6$uQl136|^^Y>X@ z4l-FJaCVSLK6AB&&iuw`cimiFw(Zd$#3dL1UF_Yznfs9EkSE(6v}_K8$~2iz!!u_r zDXX-cXbcd&{%8Lr&O86re6t*zunA6BpQN7JF&@QNYbo~%(?R5&@1&D|ZTl*k9i7BE zFc{zb#>e90m;7-o#OQIg$iAWNWne*$nTFG}*MeW;ul|o0W|SIsbiDd~^s@o>DL+g*-PB}FeEnddC9t@l?pd{_&$)uUv2iQ-Y zcTH2z?GEtK$Bi-|WBun|aaKz7%^8SYn|H_kTW;a>`+n#;nuz4GU@}glLEMs$^M&ey zAA#X%+_tyDM-Rjqr!k98U*i>crggy8eoLM-t?k2u5^Yn-pA5!YZ5mgl?a1%)eIt$r z4(T0abXGN2$uxLac=9QLlT^h}FZs}*a^O^$x{SwDxW4<$cV!20Y}5LeU!%Q3Ys;NR zH}J~V58;`%z%_5nk+ZFYL z(pb0pg|Te$88N44MeN;iFvbpXegbV{i~*8SeiIBd0zFp(wYGL=pC>m+_gW`po325I z`uUjWk$iPza1E=^BSXtq4YTCF+Z!b+@@3-(Qt6pSFf+Q+X9W4ahpSbWvW;!UvL$i- zo$KS0uYNmjxZ;|a&2?Y>80p=d{_a5Hr~}OKZmkEQxs+S^YbF}N#b7S|Y1ScprUCA| z`8rT%zgYYLK)<4_wtv+><4G)k6>;j!J~;b&{OX{Oc-S}jovVy^I#}=Qw0`mgTu5FH z3dx@i8kKTqTOqUz9DpBrJcb_~pf_*QrH(;-@hdujZNih8)d9W7i=RRx=xXhQcTh z!lJ)du}LFLZ&*faa zD7cWb_!U^G{3%s%3K*S&)1Tko8>)a$p@*POLd8;qjZhnVY~MK)-~9Gf@$P^4m-v%+ ze<1GUPV>``Umdf##%{~TM`Cbri1^GxgSQ5x^~L`w=XZ655=VyDu&4U0^gvHZx|pqg zlHWsf+So7O-aZ?Hl!L;kr$LOA(TNfElCu<+xC6awvLc2y4@jFEi|e6VyH=;WhfLVcoaY4GM?5Fyq@)^paa zN?uu!;cQR!m)GS{owO2G!pnCJ>V{E3czJIOGNBx)6ei0NR+P_%^2B%YKQOH49Mr)t zVMCy*h@vJkONZeF5P5k8aK9qs@#?!jgK-Q<#lj|7hWw2r^|F(W{k$Q z*IW`;-}%Yto5gYIz=0c~QmKDwKIP1ge>^~;w9mG-p4f*$`K+^kDPH}GHvzv3`g6a0 z4~OqzfS8Bvs4UTj_VPZ;ue20rm$7=HJLF}F^jKVZ#l`XAPyg4L-?xkbzA*+>c5u(R zbT2&HFq;wwYjwIyyry~7@A|Ake(QYJ@>M^->$`EDPAA;yuxnm9i_J3E?D(i#2P_Uz z_Sth5#?aWkarZ47V%546I5nH)@65k?PqBk_V&CO8l>qg0ci{lcKr_F{Pf$6-X93eg z5SbgpsHROp$Lnvsh7r-N@Y5XXXMC#sB3AgWlvwjH{luAe**fz;>>PcNz452S$`z*& z%E~7P3%GKvwh{SIMi-8&O#Eq79OU3CJQJSF*L^ijiBFr9FZr3JZO68zOQW84p%Z4N z5kC3k09W$7SppDexXy3ewtc_yApJ<6<>P4^aiB}XNMon$PbYiw@-Ruib5NGJehb(B zS!bQue~3Fe?gpj`t#z{lV1`` z7M{+)7$^0!yJ&2`20KsMisxmFQzxw$?46x`;KBACW>JAk#>HSae_f+giH~Dx$8tw| z*KeOk!a4jcoEopb`(1zf>6pk(IvC&qa`s(rmm1u$E0!&q7soAM5;t%d>1V(6^|kD@BR6ExK3>W@@`+!O@!=ovyFid1dtGT+xHhaV4dLys&o)7ZF_opdSA9@ zcz8FlB|u?#(>7g`0!<1$Aq9%Wdcr8pz$OKr5eg{14xW1Y>0jTvW$SBDBIn!3<2lp4 zvMPOPxGDf}_WArxzZ@ASvUi>@WKY^PcW~+}3enl8pUP}m8_Tsvax~g~wRP`#Ic*&f zfK!22uxOa*6iy0ig}REDLVhN~G-vb3H;r=;a9KH#QaHJsU4f+Hs-QK!iW%lq#wRgy z4<&$S8m{EoMm$fMM~qQi5HVxmyPr0dNs$u|i<~kJ806zJY!!hN?BJk)O-H-}r|x@0 zDM9dpF$TLM>_u4=M}ZnQg)%b@DuW7IjdO*v`Kg$A_*=Aea{umNT>kAV;*a0?SMits z{PDQ+{)gkt6W4Hhb6afQu!%kYWskY(RBRGP!RjghwfM(!=}&%18yO{;A_=8eaTbMo zZD9tsy}g%N@;SVBp5^T=+9_%E`~q zJ-Qw33sH_+VtB*@_73J@crIIqh$!LA)R3VHq=#&|-`On@E)OhQE!@khp+nsg$NH2$ zspyeDl`533oRtArm3ix^C_QC$L{;32AN-MgfbtH^G$b@+`DZ)PmD%}{M|$wbdPxN| z8LBA#DyQ1*-c5B+A$?wZTe`Yxs0O->0Xoai;rCk5m2Y^JrL46t}`YR+{O4Q}L44@DBf^ zQSvTJTgMojS~zb_JUVzwY~MZ#&z~K$S|n5jzJ<7Hj6)rHHv1skEA+1T6&~Y`WtL~}+BF)d zo$*`@{{__b2z?Rl0X&krCZOI*%@qEj6=j+HvJPweNt`iyt=nunq|Fnu$(#8+`b0sQ zmZxosd`#~kUe3(3;v$VQ+O7SFGC`MZmiSWBaNAGH2f}Qt!r*^thm>5yQ20cre{flG zS&m=gmO(aQYBWlrshN24^acWHXZq36VZylP$~)qL<$$6(v z@7?n*t(6P41%Q2VNh^HyXn0y1)lJ2#9>;jrq|@V0f3HchU!t5k<&$wVEUlX%2IF^b z-xVtsFNl@Pm&Ubsua7T${o8TfRT%25lIxw_m)C;L;I;r7KlJhD0ag>Z;wBAK%0_)! zi{4AF{HR8;cYfD%WArO4lL!YF;}^OVp0VEKfvijW5MyLNTn1CsIZQ84)IQkrO!BN4 zxA@2ur12+@ThGFD;JEUweOqQutZYAor7n@V5k!0k8N68}*~}SvK(<;YA(JQ%qyvXM z%nlFRs{MaX48UQNp3n}Aw$85Pw+U9;aUu|dpy*WB-5Rfb^IL($;I-$xGC)-bQKLXr^58Uzin_!M1OjXnMXrNu zetMZr`?L3cAWlE|`1rY>y$IzJftp4b3MR_B!qT6{h@c!%c6LoU>9sgHqo^^XkRdz` zKb1U$TPkS!r@+;yW$>U)W2zY6io+CGBt%vxlIEqLbw6g#J`tuOsDM2z=oQFBS3o;r zk3n&ela&?dD$_H)7npEC<|)^}ASMD-W0*k#{mDbcF7X6cXZ=$t&;TRsAc|d?=~Ovo zHqrd}rx4wb@{_YUyeoLwu!n&)D>iK$jO#i4?L!}We_Zv0jpPz>7IYov@VNW$zCZCv zqmDOmdprj^NlWSJ`;X&DGUa@)$)#8QrHUY6^D#DmTHSxiUUIdQ{VcWJHR_=Kk?#Dn zUm2@bo)+uYof!)jtc`w_{I)VXy@JO)Kj=;gv$7<$eyJL_fLTG3wH z$p+N%8 zGh*pW<>}!)+hYL-wy(a zBO~w!eE`7w`WD8y=e#IxzUdpWbLftk%j$;%?EiOANq#l!!ncK&Er&eo-eAuSp~c2S zTfQCl!87NbeO&gf?nCbC_O=L5>?eO3yhclI3uz3_Bn;BJqRM`H(!4M*?7ua@#NEMO z36T9T`)$P|jS1i-Zb=yW%0vl1be0oX@{7RgRyz@{jq-i9kF@W_hOL2%J7F{ zST+Y|oS~N(o>+bW8G4YuD*G71EpK)5)Khhjfd|l(YXG)S@V|A6(91r_!DqL3ZQi^s zf2$YGXA8jGxbe<=!Tk0=SYv2f`sW%kaE+2AaIju!rv4r-U4IyEX zsKhK2VajuPM+BTqpqS)izsTUI=X~Q0+1M^oO9VyvEkt@@z?KqAATH!%4)d{_dUP>NLlfr zj7ppdvzx^3-1aie~v0E$elg%TfykJ(kuln?+Q=- zRNPWvs^}y16DEGC1fp=|YzgVTD^z7zr(vxCb9T>CIJ<608Wy|=R{^U4EJ9F`siLW2 zuiB#UE^%_1CyJ~2<_sobX&fSa-AAsl*NDz*QxL??iUBHVHR>q2bU=_oK$K{dZH&za z5XxWu=2h{wx4k3&^>bg2jobHPn4iGPgqFDffrnXUxQ{$6fkL?`-Qx5_4iuh}%iO?E z4Z!!D@ertlYy4W79nV=HmauE64RRRP2*&w10}?uCkxfxga+wV()7*;&t` z%MFS^?A>b*mz7eU%v!>)!WL-?bjiLj}+})i0OJn}(lZ@|rx5gD%1& z@3MTcEd4ci;fq7^HEDDzjeghJn)K8kxULGxff{((nJU>rqez@ZK8;}BiXlN6@ppMK z8D)KFFy+|=&}m|V8CDdzF-~m%?)N?&8@GHvXRXIL-J1mbk{nQ(C;3P_orc`Zw0NWw zCs$9nI%9SG$}j#uF?ZfdmgqKShg_CP)zze?0ItKysF0G^Rr4=t{mL3t_;=By^qPNfLkCWJA z-PSfcSN6zr-eoVJQf=8b%D^pk3{U7UZiP23Dg2yqZJY8ceK_TCa+d4#T3O99 zgPD4Z$Fi&`-p&_s`Z1i;FTFr%BgaZgRX}sHYSc%@X?)vmvoCb;2pW&Difh;Qo$SS5 z5UW-!jg5P^$CtiyO?>F%pNS62-^0PBv-|p@tEY#V+#UeWiecoRosR?V)|-8;OV7Q2 z(JUS0cDZ`WNRY69Dg06N0ddpmr>wBsO8G2~)_?Y!`jvFnc^=}%cdmdlJc(IkiuG(= zCEo#~$OHx=z)}3GO8~W_~L7s zQ*H^Gyhd4-(Z$U97}tb;@S~rOf8x&b(@$6vk39GQyroeujzn&_Bi`{doI->1j0t$W zb^oD5R}2n~y}l8>R(nm}d^Rc2q`;3rfu@1}BM_+>zGA59p$cJ zlN7uI)$-6 zg`uPI2@C%m;a0UmP^s(*w)lke|3h$!enU98!;f|C$nBY=K zPq`IGm$FY_h^reMBHa6QckdaAyEyFa;?I92-uQd(jLW`zO>E=(v@@A8*D&Asz(X-M zG{R~H;;Vd^mMkofMdkl7U4|bs6##}3_FDChMWf2Etxe6nV z0qS0bH)q9?y~x|EYO=0W=rj_`fUe3dJW+2lPi z)wp&!WbR+I-WqjXjBa?FdRFO{;_`(&DJsxi z;9dT=F2zO4W}V`vVpsAYJb_x4qMXUTuENN{17U%;@i|8#%k6+w-kIArBOX|PLwx#6 z?;+M`v@@%<{~!m8k&!=3la6=uwmfoD&cwr)wngtef7OfsBQs&IO@+~uh9(&Zkgr`{ zEzQN#bkbA^-otGj*e~>Oz1zV9oY;Q(hvGZeeVpt6PK>RO-kXa8avXs8I@A3)?pX1w zUwsO1`ulYFNz*3?f1V%(st&|UC1GEdt+qJAy$=~9P<}4 zxQYEe!dV{jVLR6XCB(^?6`?*CC4$?Ij4h}_zvW3cjo|g%(aHl&2~obJVh%>BK0fn{65+lR^!xo ze(UP9e3id7&UBz99@Kz$tb1uPyl*JBZrd62=aoI`((KajUL7C!vs$#mVI; z_8Ls7P^jD}d;uuDDj*eTE^TYbniNP1(98#kqXhKZpF$}On})Q^2jSu&R(aSKxEVKv zH-a<`c)(~(q(9*rI>=7a6eY}o1cj`^G=(1mJ`FY?(EZ%+Ft?z2VQ4GoO;%;fM9u(KSF>+hfP@POjVX9 zz*DTp7{qX9p$+(2llmopsq|WR&`u*-<2V&>;^c|<(A~qdRLWHPG=y^?2p(%AAL*C% z&bL}|7K{22rW%TKLiND!iKJ=%;n(Pgo@`{S0+D!HSc4{mbJ4 zX1-_5nj6O*cM|ruE0f0AD#ZQTM0Sa}DVC?ePd9WcO9TPOcUA$I{YkVXW5C)N{4e;o_!*NI;H<~TZ8z@<8^>ZK;;|} z0w|PiM_zXZ)4n_%ym8QL3-~{afrQK%A_~K@Xy7G1NSCvzJoR@Ff`q)8YkK9Q8s|w6 ze9TYa&W`#_x`JaG&iLeN6jvx6E@;N7ZKm|)4tgD431B&N^0n>DKBMGY+MC;wj3Pb9 zX&1I8SCW{C0~Q)tc}OUDktGHQ%Slt^PjiyW#S^fT~}8p$OCg0Whd_=Hanp%#M5NyM4Pe>Rp_N@bxRM zkB?sb#n|!CMr21P2g=RmkVIAmzz0ch`nypEqvXy!e}jG5*4Zp*mRoM%edTA)vLhSh zm8@;*KY6)PXVO{cUUvt>Z6~I&!cb*^No?P(Tb|jE^DZ073wdQEAWEODAuV46L}bX( zGN#PI)2HG16kdf6#;rKG8c>}`JhN?p>3;U&E5jVnu`RjsC09SeHx6s}_RWtwIDGH7 z-u#x>KC+(!2N%TFOITS5>9yjO21$H#DlzD-q3Q8KDu*u-!E+3wB>q2Z5)Dc zx+Vph6nGL8Xd38Gf@sYoPdf#ab?w6p_jh%7UxV`X>j=0O6u<)*DD?d(U`Nn^Wzi}C z3d~f_ESka)A(jRJ;mSyj81vPcUmEoYN`>b^tv)01%X>u>;^d=O8hOMi-wMrwa|$>j zDBR4KsOc=HLRw=am(lYq#)$id-7hB|WjI}BFZbV)IO&4Xuh4Zi(b=gyi5>;cQ(5<; ztZv=0C$78cj`+YwJ{fQO>wk$G@3=SCEMF2!7WBt{l($U?+X%Md$+NKeI(}0SRCh`cTv3XdA|@Z{K?nFnP)S(J4c7VM=x-~nP9jMM?jXa_Taoy`8J5Iew96mS(;=z}t*pR|`J)C!H~3|1aU z<^Ty{9UPFA2CRx9ag3V=G>Wm|D%2`kD(BM8I@ixI-*whc@pn+j^u=HPBU&2vi38rk z(D*UF+a=_+T&50u{ak{q6HbL$^U}|Ee;J4P@=Nv4dToS@Lbfkq0XrRGW#*mqD1&(j z8@y@!ik8(OdHBA7MQiS8C|Ul=>a*fAn`vA${vlzsHS7SjEsdHJ&w6{Y#Hi zzV$PX&-$xr@S1YwJ>8YhhLY`}RT$*m7&YI&`6lQ~ob)K$WKS@#3y=US_swpR{M&)&wWn z+pBmEL+R6P%MQTe3n4A1tWx^;V*Cr!a4S-{y3*E!pb;+puaCJzvia+1S`evy6JY7yLaa;1U<8Rb47@cft{Ydc`>+mEdJ)* z?~AWodt01$+R1Sr2k>=wGl;FMv@w8_&OCJbO}(d2?B~MsS-t&zf3<1Lw)f)YNLkZ3 zFSKd?ZBpP#Q9xKv7IIFKe+L>c-FJoSGjaa8t5t|3N)`8Qz21sso*q>+L@z)}F^ zzI5|K7^bqO@&i6DtH&b+l=4bJs&G!BMYuQ@B~Afqv4DY4O(h`XH53ZqDOfW}t8Pk%EK_2h;=H^S+1&7b>W^cA z)35s5Icbb_psY`Dp1{tLJ+XZDnekIE{grs>%U;h`h8M-^)#t>*MeCT|a}VtP*tf6T z>8zsdDdZXxJ~aUIz$i+nYT{K+?l0E>w@y`*+xYfy9*sYFL>_a`d4mU2IhKE>6fNMS zu}Yl^Lq$uaUn3?5QNUg0PhOKBRIqh!=zOK%)=n9|9Tfpa=ZHv%@nOP#d?x%k*mM=dm z_6~DOI7+rNyxLm zon_8H{Ezrd{~ev;aA}SVc|89kW0kKX;vVr)@~&x)3QF&z{rs-Kn(pZ5v?|EB_Mz5+ z%gZNO%G|@U=e;9?T%j?SE4$8)xpNmV8}8}Xt{lOzZav3c+=t~PvGF2NoftVlCT*RE|v5jSt zx+AM}M?V|hkNc?cr$-?7DR}zV{-VYyC-d8XL3{pDfE=W-@3lT$Npo<5J^4EZk&%SjAioez5N5<+qilAFBubO&P~^( zK$8MbfdWkf{V5Qyne=I=fELOul&I@CnB)YOoSlwbaM}btN7GT6p&_hX;ESg-)~Vz$ z!{f>B!@Kvysx>R(j)xv$xppi2kI!O807G>5j$(wNq&U+qFa?c5R3lgg!0V+HrYdH| zDd_k|UMWb)!x__52oPZ^q^T?^%Y%4_*URKonHQR8@bHTcaZqoG*or!t)B zOsW9XspKjsQ>X)%6r6gWcflWEW=RMNd}o8Zdbz)x{hxa--onzw!8E!!q}nQJB6eWz=Lnxh)$UXKd!InkE zTzXG%nzRQ1Nn5X3^4a0Zz0{+#2RXZj|9<03@HFffPQ5o|yDPrBE(I(A!cd76`=(wouf_U{$zmcnd z1~3vdSc;--Tj*c~j5vyiPf7^ewEeJ7p7-Z$q~}QZZkzO}0iT8l zQFCUU_@#ZAUorZ{M4CESMkg%ZGz>4iJ_>XK|6j*#}Y9(ifDzN!-kg%|!#>A0 zW|;U+((W`UM>(UzfrA;`@-eGr4hLs0!bm@b^9oLngJUz}o=vP|#yIz|POtSe&+15? zZn|F$^Qr$6h1IyzGz7N!S#6b9 zl3(RHX-RJG6i9fy-LPTV9I-xDbPV0)aM5(>4z@QE2eL2pwY=A)-8)NF$c(Lgw_u z*RQ%ERxMc+YnW9>)xw}_W2R_M8dEBmMTQsUOo5Y<7QvQ^5@3--fG)5#-0?wqK_wtz z6`mRk&dPvHO^)Ei$Rf7!(|91M%Q#ck5texSL0Z!nrAQ%c5`;N|FO^M}hpL1*Tc84` z0yKeP?!J2O;&#?hSS`$2b@vRgudX9DZQUMMU4L7A^i!XUH~sG0;~Q687u)uZ#MvjW zi@xrz*!=J#T(PsK%nXQEW-6vdz$cQTMt}-NV%3NvdQZ12Wd>@a3J)7?teD^g;=%Eu zTqpOIU-|QR9*2ev^smZO*C*Md>Yioyg}eXoP#SZlX=j-xcl)v(zYZ)x{?HYLyzsQ|_1iEF z8_Q^Z!prmxxWaMPQ9o%_$~SE`(Y%NY$YdH}NDDkkHzPW^dT{fjcg9z~_`w)CxHWoO zyP?;&>7;a?f(YW-hAB+bdzBLxlTOM0?ZJN5OuIBl}o`AqJ%_iP!Id|2yMYEA3cj%HljN&jPRe%gy6vW`vn?LFdqZp;dLX*F`Y>025Ly1A zHJU74;d=4c2w?yKV}1;yer)g{d!f&!Ph+bJ^>5cXL4Ri(ba1QAj?1eKOd6rg49klQ zAW@z?cY$!*iUhKlmbLJ=v!Q+)WKUg;9lv$Pvz_^!eLH@28M0xPLnkcz2<1|l>Go^{ z+OO>h-jy!3{bjzu^yy4{!l7R;{Sk(>Gp@qrXB#c2cvF^?HOd|wbP_Ldwq0mk*ID~g zh6X;+!xVXlB{D*T-#YaCiwV+{SzFr|?VK#dw=E9?EPadhqR}r-8f9)THa~CsaB2Mv zP6Y3pyNFZ&*Dw$^Kkj|tc3^OrD6287M_q%I`R<=Wv8m6gmnZT!?1{ps12JBMN~9_O zvhTNp78_{os;QkjIY@TrjyMh@edUTJv6;i=zQOYM4}9YDG0uTe|~np?Nlqh}z%E%~n)`6eo1)`@(dpU4ks?zXhT zTkw#4OUmR0U|DC%x^(g&JR)yspy#!$;84q*Jd-+uJOxik9I|x)Z6-L1vxkZH&gqZ) z9^4ea`v?C$Hg4S!C#+o^o9=&zd(b;rv7{8LPMi}&mQ5bER|XW#Gw(Z}v1rMXU%KVC z+pi&o4XQ9fP2PMqDbS?AlcGSeBc4>!W}+qqo)HQt7dVEsEcH^Sk4M^Im~*#`4)A4h745yxa4{b%GN)jpRva z<*C!|H&;pGfAWLxc@_ZmBXmd!jgy^Hd39D>MOPzNL(r8JGJvz|sceyjijpUmJ5%1y zviPhM@>G${IOL^qQVtQKOpQEMz*VX>dY$n|<60g;$uVDXG_LeDe?TT|m*vZQWyvO< zM#y+Pbv$yF0RAO?@y~%L;G3t;F!K^tDr+iNgv;lp3>i&M&w9uKCDTz(X(GQR|C2u3 zjo)St4U?wOMdP|<)@0mu*A;Q)?H`C96@S{vL6^4+t7Ks+T=_fwp`kF2VP=i|!fXCJ zCy5^)L!60VThCMVfptJ5flO^b8V(Lrxj$2ydWc+i=b^ag?knPB7r#ALa6uTd(kYiRY){t{2a^{es3GviQ?`$va4!(jzW z-Pgyw*(+Jrd;$mVaTu5eCG}oYN^=JW^FC)FWgiJw$lLNrH~s9sq1|!k`fqcsoqNzd z;h)+iBWtlhYVcb^6$1yTn6-vyc8oq0tCydjS0S?aJo{BKHXre*w;cFg3>o{?(q5DS zZb@=$i)}|9uVuF#_|w&PVY?QwV#pX~|6t!y@=Kig&RI_K6P_?^t3HjFj)!ugu7q*> zjE0b*HEzwnrm-(_3AMBo5B+Pq%~c7BtAM3<*>YkU4Qk{16W8ejY8rmZA={?|h|UBn z+w7;R4079!#+r1Q+M=V;4?G7I%IYKQQ@Kh!1{*x+(HVE^-g1s`a(@?l&{wZqOIsX{ z`!?Oe!GO-9YuGhtQYe#uOASx+nD%XE+wey(YolY4F0TB z;5(3RpXydB`*mqfrI8mjMWz%S;C{XxV6o4%F2!0L>M18cmKl&; zo(2jOY4tP!YJzA|;Ay0Qnsw{`{UbMyPEP!1O;^oggwY`dVhSrWLu#m?C~%QaWt1F2 z*@2P1Wyfx2fG}QhZ+PpU#?9a7nkAO8sdSX<)KD4`sLsBoGN%$M9DWM331;UslvPer zNC}9rTvF)^3QNu^At0R{SMa6cs<0I={9M}U>}eW8;%VL}H)(_c4s}i$&JWS-4<%|Q zSBNR76|NRZF+Bl3BkTwDe%oF6&QN ziH}AX+ZFh{==pDm^UnDxXx+_S<^STbt)5)Pb~|DN^a> zSI!J*N!*;tgDSQl+CppW-LpBaz2+-IrY*9pb#jD|={aZ6)AC2CNB^b+mW)R@3tWFk z1pJsEN5efTdD8VLKXED5+TahuEAAy~sSoR#8qFCw{jd7^<*{qmqtva&Md2sw%71A@ z!WSCD?HGIV?cSk%^qFHhC^?h6>{oCixNeM@I@_m%lJZu%M5?^{S1#5(*-wAj-dg(X zM>gF>086Kxm4!FU%?d2Jc90C-OCuC;;w@-r&OI$#LrAVF1Ge(N?Zo}z#fV9M#?N$_ z)|^dGc>USOTVGPf?J@TMWfeff*lzS4;#F41Xy}#!IFn|2u*j3{8%CY&T^v)U5T~{c z2fxhAymjKItL@S6+L!rmaV=XhHQ42nT7hM}1&mr6|+phACHLmN$KV zv_GKsq})_GU-ILzExy*X^e((m`s<`SblAqhs1IV89vU4%X0D5+3+Kh(fB53K==E=k zKm2d+h|5_9zj4dA4#sqU1d8X%zCu0t*1%&&7bvaBzeSV=8-%v4>+xjoFGVE8|Mnr z;i0|Bi|R#g(V9FkGe*V_#wR}a#rXS=T^whha(q0zem&<$Sm&ITLcQB2T{T$F4=MQN zz(HQCkhJu=jSlwiU-O1vf72f{DiFjx2b zXUD z&2jm+uZh2W*Zbn#ANX|K^S~wy^VNCq+oKOXoJ-vgaEECd#Arpx7bPK!B9^HD_@zY6 zG9(?P%q`iozF%6wmEM4+S5Fr|N80gfg_3Vl54wB>&Si%ffYfEE!z{0fnJ3}Rq%!4qMEPtjKj?U|T6V;>^(hQv31LR@#W8an1wH!qK7M(#>V%W%BWL3WuDU=x;{9RffARuzvu;TjJ3x< zo0-{?#y!vCzMmzg4x+WQblQUu$2s`Wx<8b3W_dlc=Xc%x-T3(D|CGC&*TtUgo0;)D za`t>W4|=!;?dP|@qv1BZ^gcQXUKu@; zieSFz%PZemFX_)LIh!CS5zLapa}s4R|cu4Q*zG zdgISA}dC88v~iPV~zAQoPnt<5GVQ6JjzUV8DLUY=xRHu?c4aa0cl{I(thCk z?3XRa;r5a8hH@K6UKEDLx&61r$^p8P4WHG3F56&S0<9sZ0c~V?zV*2C+Y5T=4`j%od=%U*C7|gXPkCoQ60zC8IdDNF@|}nWAGj6y^F0QEtyBHVU_%0E{Hb+4-S6o4>2d12 zB(3j9$3OZT@|C#xq>m-S5kF{TA6y4ed^*snEEs0+dnnY`mWw6evKmF|cb+!}r6<2CVcd>1 zv!ye>bHxqu#<%`atY)eI$k0#>4-PR1K{$g14mNP^XW{=wnKaSGmk^uo_{8LaPFC;@ zEnm9qRiC{0;%x+JOO%XxX}Tr_niP2I6lfagPo0KM2+te^gp8rz_D$tY^su;U5&QCgV-Tz|mJ-{^0uKLcmLRWQloSvSXXEd6T zMiEJ%CCPw=!!CYs4%qlvd-2NPT?d2%_G7HY#$W@B0}j}FU=gxRSc6SiED01Dff5R% zFnKhoCw9+tuGCfg`~A;*zk2KIs_q$SMv{5HTlIeLeeXT@+;h)O=iJ!6pS!;Iv+VsV zUh&FYv9h#$I!l%95VQ0TJcg^i$0$e$I0~O4Ratko-4jslWEFN)m?OAIAb$!tKBaU3 zguflE%BFPrW9O=X;9)a)a=@E$IIzo?5x1}krY`4pFZNEZzd4R#a>soS zbpQP~KhXWNAN}{;zkAz%>F$5ziSETWUdw&Y2iRZ!K=vcvlcOyY60A_xn#HmCw$scX!?O;qE;j`>_tu6}i*_k<*5VA?iMsimP|d zE3@aEwZN$nEN}nr?%+k&!Bg{Z4t}%E0maXi4Az@d%yM}s-8_P(`_sKSd(UpKSbV&D z$8Wraz2~3o4(z?Sd+PWj@MIVZ>61VGqu0=TXx|*FzQ*Bo-71XPu*sNkO+zs5U%s1v zhp^khH@ureT6{)yZDkKSeqd*e<+qyA`bL$b9IP<-bzygmgBh2X=4d-#-5t2#k|<@S zkL^a3Vc=|csXtK|EIgE#-P|*c4$&=Bu6A=J;o+z5>+XKwceGTWRQ{nyMbfe9;<1TTXs|>~jw$FLv)<;6O_DsB@T{{E@eo zMH)`I&7WnCGLC>;ao@cbMabmrroL>L2>^ZwO6STyn5`;K4)P9uA0eRe(G) z9`hD7si!(ZTGFmKVOpnY2o79w>0kNmop=6b4_1i`*2&L=0}~EB7aXWz(&qxx1jmE} z&pijC3mrLf-$yE97)IVe3-ERjS=@tTuq1)g+{&R)~^IC^d8 z8i5QEgihHfz@45B2yC34Jv^F<*%Z=9&-bES-nvFGenc@)-^ z8BCY7fi^+|FTV5ZPmDpD0lfEbF6V!XE+_}@7Ao-$+{fc;a3Ux_MOk>&d+cJ_x`N0G ziuXzOpUeK8C<5NQyu#qcJTo5C?sFwk5t7Y6glQFP1tsrgR#DU{zsu=1c;d{fMv)yn>b|UCUGLmLHdAJ2GN=oRwOMKh#h_ zjW=;)A1MqtDCnsWXiE78C$y(r0jrRvFxC`jGgJIgxUsbvxhN@o7hKf~1^m!!7#{gq z5oLt1^vf1jc~`1^PvKi^64Gb2+%}NcZqVpO*A)&;H8*p+H{0yOYPB zBs}G=u*N-Uu9O>P9z9%z;{DgRT>I7C#TQ@AU>JiDC;{`}l@Bfpb+E-l;oLH?n}ZI$ z8tMeIKGSoa>^{{!aR1%iyMF6u7^J$qJAUMe49ry-Pt^G#X&aGlIFINUIGtrJ+BXN^ z23=BU`eJ&vw$Jmu<+ylTeCLB7`aAfLc>BP^sI@1H`v8F(1|~+^9S;MWrOjGC_EdM- z0S^DV=U2KzhyEPbQ{6y5d-W5!Y8h}~5rmcvl?`49>?)v?C(7~C;xgMDc6B#gdvn*l zABCOvY=(0(^fvA)SsMiSZT?th&TtqUhw*pEX}cbM>>gHBd>!GqYLAsFDkmzDDhSqB zjWl@6LG1XcxHx#XLq*Yg+QYPP)+g(>Z)d^J4$!paFbZ)@2PPc&LO3u{(7zDwO~QULIG`jpbNckk2j}~gW}KewZGMg~DhVMIkK%fN`ElzIh5JJS-nGOIyn z=4s#_9Or63F%uL)i91xmy9XC)D<=p1L6fjY)jY4@-k?L*xU za+pgqD&}^W58wA7vrWt_6ZcL#b!gHk$nhVe5ZHRo-n;kNcs2hGmuGHk@w9GzyO8=f znD!nKhMzRVou3GgeDCP?A(YP}Tq3+GI7NXaJw)ohNoR3A#n#y)uaEI6sGSHx^7O>X z6PaDNT*#N592n^Ay2`do{c1U<`}9iKQHfuPaHIgMLR-S;0)qk5OA2lXDMai*K?E!E zRb?jSj@g!|0!;%UF_~o`Pcl2j)RN`W@>sLDg-^e%%y2(7kdk%CD9{Egovk`Mo0Ix=iG-%qpzMlQB_=Y$d{t>3L97aB8SyWJA{b*q7EP!)3 zSf-j8SVNojldRihif+pe<%@?i_ORQA2|d%DUOCzApSv3S6W#5%f24cijjv_4@Dhl# zEDBNzV+I`EkBo9|d$!2zW0fcJ6ovNk%U{T#;Wcbkc>txG5kgG;p<#&TBIxH(Wz^+CnF2AM3y&_^F(eX>rD z>Ip=oK3e|q=c}(THGpNC-Uh0Ka{$8l*V%ueU(&%k;EmK&s!~_1y3|?gTNFOxmL}`? z$beH=apiDH{Di3)?Sf0c;tCbQdkC4cyiwwyS!3JdmIG;U0E6U3NpF3S>B^w8$)iuP z-p^2%jJMi?s?$0Akv7&@SC_}nGT>nQQ0+mrALfm`o}sN(iT6ws5An2ZRsKCF@0YsUIhT;8 zu%=NUQwcwGi86F6!cVF>`<#alZq1l?D&P(U8PDv$1tnRBB?m4SUcOPP@}-L!i9^z{5L)Z~wJmc>hp3iccv$Lu@ zx{JGS`lfGV>H0oo6R$TzSx3N$zyj|S)K$J!=z{@GCF#x#kB1+*Bwb}fK@@m|$p|2P zJ9A~6xeqo%2ucRwoGG;Im}i!ynl*=)&J?P+%51`m+sGElR}ooOBJ|;=U=;&gxhd#W zIDRojvv8KRl&`+LrtCnE!kl6A$J=lY?wHvbz@QA)fJ`YZ(k>0H%o?_YZ2kN23V9g6 zHO8fFbl@Bx#WMwM2PmAetYxm2U1!ZT#$nlKA0qsk?H)aJd-q>|>CMbHKG`kIa#hyy ziQo-`DoF8&u%^Q_IU~MqzQI!m*#6kJypg@nFJ$k!v*ak=xG5`Vg#&d(dK}D84s+V9u}JcvIbuVKy7#wD9Rx6_AJ-ro#e{3 zhwnSpz4oiWvAgKvE2AVzw1Xs;E!#n7tWzE+6Mn0(xdlOfJJ9p!!*_NMKlvH*rk3WK z_o}tlM2+9gQ0ily=L~~W3=-^}zpQ)7OTK}9=ojVO3G2iR3Tu>I!a1WJ?SxR43+b>( z**;`I&pJyO+u76s%8;h2VsRl#FfjUObq#o3$>P=v2gFp;YgQ7(keoULtnry%`Jl0V zlG(N$D(A+pzoxB>NgKeo{?cmPMK`pVM|^J>+bHrOb&xzsT+}<#k~(Q!CNH#0d*wy- zO=;smU;UB&6FDqy{H4uyq222-{&8#%q<+uYiF!^g5w#&>&k(QZj;{<@vdYz1qYWAJpKYLmim z0Np9bwztcyvO9X@DI8Wf_5F%&|DN65C+>cr`?cTrt?nc5zm>sVR}w6A7hG_F>&p&g zpxv2m`83O*yXC>_QO~e_hY}oqx^>Q(Zp(}V`pFjtkgKh&@+A?LkuxgMQV`3_3E zWL*-I@AirKnb)?<9#*H>1C80TK%07otzJL#^S{{rvw!#2?$s~7xx4RYxD1nWGQ=& zTxW(Qohynq9k?Uk3UfY-%<_q2)*0Z~>E-O`T~-M_Dm!+b&gQyja1EvOp3gnfedLp$ z>fZf<4|i|*`Cl2a^2J=0w#dN2q0c>(I29%q5PlWTR9ItrVPhb3jKXhcfxKsBNV-WX zWABaK*SOirZ3rWZ!1Orc*V`3FjKf}E5d?9u7o19HP^cAP2mEtZ+{3AMB2c<5VUcC; zOzU)OY<^JDRCrP7a@qOmelK&DV-i=Ez~kqvyvtNgTZCqmKg&@qr==X=Zk{{KpmH!n zSy=b9Ug;1&e#Voyu=}kd?~}nCnS|XLO4DXCBVZ?;D!~Zq5wb-GUfi=x9Y6(Z%Zg#e zFI|~&mSL1TXQWkDvfP|F#J_0(2{$t-0yb~&_Btb$+S z=JO1*Ln>YJ)EPa6^;HI#9)0w4-RbVL%)0L5&fuEek=h8+!1A9kzBQ&p0 z*Zsck(o1ikZj|zuffoh@93aT-4z#%H#0H>FLgvsg1k}0NHEt;QO!vT%-|eos;zixz zNAI#f z*9F~G95VNj+u;*sJBnY*RmDYZiKUf?Qo5*9z5D%le5N~b{BXDb!1a_p23mFa$-&N;@vz!y4>YoZI8QPRz>x2c^ zdZ3#oD`E!Wt+zz23-79n;^jYiAzir{!q3!I-nJFcr;$Ixx25G#)^MBQZh0HS&;XqE z+xqD}>lz0g#o<;d`xgDR%Ts4tjl*27IBg%K$#_WQfK%rnzf?LhGp zh?D~pr?Tnk`5NIW!TH?uQ`Bxa1+@Ph_uGJyqRqzd=C+ZWn_-^KmpGC~SYXQrZobV^ zjcu7}b2Wn7-X6N=0m}AVcMI3IE>jLaeDA~EhyU@9bk_m z=wseNQdDQv&-MjzRU7!2h2ZhIkePx~ePB<{(z;n$3TZ)O9 zaNvIg4md14^XX52`pDH+U;V$GJbL84^kO^FSm?{vU2%uNhOmH~p>U;;VfPUMgig#( z@fgbh_i`8b_3Rt_tKa+m-3`}W)xG}re{Hv8CtWbYP!y0Td$mW=Z%*@Jb z6kY@&`BFMGLXOPjTcaQv!Fw8s$Z#kfQ|xh7*ii^|8M`x0vnYfLKMBK+3W3ush(m!x zWKKD2LVOFK88mSDZbl)?({r5xQNcCLI&`b-L>Y$;)8jx>#A(7yyi3UCF)<}f!{^(j zsFraL5-cIDW|wtK*#|~<>5>+cq7Y|14MzVQ287T!1AWq?BExD%VBw?XtT%?0_ZpQ4 zc9?Vv%yh4=p6DLq&T-BB!XEAreu6Y${88eKDL(cec;OD8ry0EJxDM^+n_tVG<%`K* z>KRdZ5M0qM?aZ)Kk1PS!Kljse*CI1_@O1g9?#?^7# zWS>oJ%0n<%>#ZlH@Ez%H?~WaNthF_z9pJ;gDaQKO40pvZHV3h+Bie^bIZ-B_!cp~6 z1zkRw58{n7<+t>uu5ZLCjEZ)QZ5KwmH5>K9!C3|)p+P?%+rZU+o60(heFiXax4ki( zv>L`VwR{q7(mRCf)8BYeFz^$e1`qsR!b zl8BNS`UuP~td57&iaFXrI+R70x*xjlA=<5l?w0GW&J6tRY&rV}Kg@ODKiqZS`(5AB z{lV9NL-*2KZtM;o*w?MhobFB?e>$sETwyTFe)1gbx1)IK_BU5^?cyGC^V01Ft!*FW zJ>{15r*ptd*X>F{&o3eymX_3=p84o2?r(|cE|M-%p3Kadd9-scL}U>ZJQ zLq0uLggixO}*I)NCaMeBcYb+sE2zB44 zOF5lklIIGe=2m9#smJpio_P4N$GZRe-~V%PoMhWdVXK&oqs18-bkL2ris>^k4a_po z2M^9>7l-!7Q{jVq2q4fFM%acw-h8C2^y;2mN%zj+D6!{s7RM0Rq3ZsAS`>cNCX(+qwRnLchaDdE?1E_z@XhH z0~6E@BFx}gD}d79>Z@tZv*JLeE5B;#yYY%cf`ku#U^TU3W+T1&IRGsaGH{r)EEo`^ z{jr@hP4Z!h_S7v}8gsPrG*QH@a#hGO?c1-Rz4y*b*zNopT*KGC$KR zH+)U^vRhu%UB(r!4BN9U=c#Ue>14NSCwJ0YcEFu-2G1qOcHm53-t7Nsz)>IS7>d1R zv-LX!Brgkw?SJX(PLm(XBD?nP=?*=5xclcn`s0M{xRK%d?vuCQ(_OfWfiee{px^Mu zZA%~>GC&^CzZoH0+t*J*&~6I(XF2%syFJ?lqu$VuAo)2l6Anx`@O*G!qM$z?T%F*2 zzBpi~q4cu$;Gsu<n%Zu5U>x{U|5}QyHg(uyk_`!@&y3F#m zISycPCelOaboWXgN5=ukjJbaET$MJzb5D1I8Sy*W|K)7?ufOB{-G^_#8@R5!;-Ujw z8MUiB`qYu`{(B#Yn;Yz#Y1W#pDkd~P-<8gxOS!dh&8L0)9)@Z5_HOXQw|*_W?&pGS z;aWTi+Xs$)99bVgu|Ort-oKVzq5z;|yH{V0#RHX`wR36SDTE_ue7kuOyTp(DW9Hkd zj!I}L1wj3DmQ@W#sj$8S|IrMznlv7Bx^eIvA{UAV!WU)8!Irwhh^4#4!x;!HZS)tFybp zWOcFRzhw@h+OvBP`iyifb8qo|gnP2P?#i3HCl6Jf$ze&jCJx@sB>lyv z`1RI!YZu;U=pN5={WN@iWJ&KcMbHTB;nSiF!p3{>9j*--8oD-9Y`rPx%4dDevr(cp zfh&@iGSK`JoP1T8bQRDFOK$h*f#s;Sbi(01<&>FhYuFsBaF8;F&s}@S%}5hW5$)2`bWPn`zq+1snRE5tgp33=#-q zTi^g)Ygg3eaS9H@3cr};>?(@1b@)%s?8073eyt)1IpJ52Hn`>AxY2*yefZtN>*h0p z=Yu4l)9Bx`VoSK~!uPGy<}k#Un*ySon*)@4@-`Gn2g&z<(MKLUM87iCz2M4AvgPUy zX4rr9%|Dap4S)7ebbt5{d{g)8SG}~m_`pTfky9*v_pA=`KH15khvboX*Xi%%b=_x= zN{_N_*|ZNLXH(8C>y}+MVIzV%yPk5qKuvMN^`1Q!u!MeRckK95_py(ErhCtC zeW3f5Uw>!!(a(MkD!T6Si}te@Y@s`P_(=EAliXpBo5Iss2As+QKI7ioxesv&vz2M? zL%c(~VcK_#*LU2S#~5OrH6ytC-1NImQ1If@BXHmG4rZsF$@A(tPiR*NbRT%P=ze~$ z$(v$7IZL2t$P)yUX;v>d5aUwl%uZl8Y{#kiQlwBEcLbc^bze2JQI-uS4UA90C}9ZU zzFQB)T1Lrr#!J#77?H^eHwr}#3aG43A>0!~gm>j@XQDlnY}Kt23RJ*Gh$5Tb$FkKAv=>EYFY&?i;|QtOU+f9t7j~ym z$f-@;UY3lWK7EoEB#Yht{d;n)nn^i@n|$|*J!eXnIpzDFdp@3+vR9omBR5o_tq8yk z8b(BnfrQ^ z#!UoPq@ru6Decwvk*_L$tIMal{Rgk*O1sZ7gU;3k%DAgQREmAOI>_>)@@#!^AjlE~ zfVCiH^Z?hj-Eh-QDCln|ym1*@(Miyl#2;53R5qAF-?2aiLP04>J{1oXtYjijMr5)Dx;;i;}BQ|BPdfYC-(YG&lRz3W)&21nYN~| z_7jT1mzhSXAr4pP2&0l?yWxSOOMGiLwV9<14IA~e1`%97U#mjoyDLLLm_y;hM`-V> zI?mQ#X@R?;6IhbwK#BZtfUVLBJw2>-T%5Lrwlyk$8aX12^hvkvq%h`Tg{^v@b_X6g zSfjFU_^e(rZ#~JK_mq6|8$Oh2@BVY}(x-A`;JAgg!8CZk8`kF5zFTnfx0R*l=6fr* zq5sg{a1Y(IH+l*eZ6C1J5-FCJOp<&Cv>0ia_!9jw{+sfPJ|`SisOhdI!QZDjXg>0(CyfiB^FSqo;-QFJE-D@ zdE*@$OSBUw_}NAL)MT$KTvN*n-o%?>_{O_UVH+X6qwsO+-G|`?8UIeO zKJxf&0Z_V!B7AwelwC!@nQ4_U=~5WcGK(TTKL; zeTcSPn z2Yl5I;=zCFE(&|v6Yx7Q&@w=rF0VK3fF_R2j)SAE5;A-S8eocbRCpX{AJ~EdUeA7s z2~R9RpT7}P3m>-jsM6v0_Czy?V*GpH^{lPK_zfIdaP-}(i8-3HI|Lwd8`x=BH&cGPr=W{ z(Il^V9ceR*By3QJAe8|zYiCI2n6mbp1jlfR2qcyIWwzuWC&#(eSQDYhb^ z%yTH5w~i!D{8%0;I3J{;2A*&s9c(dLW*}x^cE|Kvj~zSqFAH$8w7uuU5jVfJMX;b*RQ$es_$P}T>d_KoD~F|*>x2KIx0JzCN4NaY#=*R zg{ZwKYoDVNd(BHYW%$!~bU*!;Utp>GU+ga6;H%T8PSDY!ym7L+d%?uz{p8+9ySRK3 z#r+f~3Ufdf0+Hj@r%}pPBIlUlUEolbj;qq1;2zSC-}bTYzrXYS-M{{Ser}ZfD=xZ# z4wTcYpL)7`n)}(^Up`M<(x%WG8nHKle-v=cB3v^=dvgQrmZrJ4_Yi0ko=qP^sIu$b zaQKeBISj%!clmxk)6(2PoiSHfoM+#i%bRsq5k7<9ucE8stAMCtF095u6NTI?C+Ay* zV1awJy}CvL)|C<7p)JQ1Vtumz6F-Ge^E%5uEnOH-NuEJiHh+m49OM`ISIewbmYqRk zrX1-=;aH(Zp;!7MY(q=UmV06^OLd9QrSuWf!5_sNK|A3Pw~SxmPvu%gf-$GKNlRw1 zU{Zu?VTn8C9C-cKIGHzbE6k;!lYZhCmxmxa=wJezEtlT-sp#|PzhOLkfjf05qjiWO z>_c#q86Jx0EWQc?OEE(y=or}0B)B}pE?0`ic*RYBjeHl|G;wGy88&f;n0mR28$t*l!f-~dy61L zZ|xh=nlqFH!Xy|=+-=`-wI6Wzun+w-SJ>^|d!Soeq}@X~n{!JD<;Pi8%Y@f%6%#Di z4D6uHsX**nIAB!pK@HThIRcBjU$%V4TO?CP%vj8^V_b{L%BH=$YQ>3zar3mVDzB#3 zK`Qs-YMgm@fYZS|%L|nv?*6E#TMsn02?@(P`_^?-=>(Uw`9vYbVn3jp&4kbJ; z(n>w`SA0ZO{O?oH=Z7$<3&TQSc-j>2%r>lBa;Ts<@+AIhi%`eY{@CU@o9dv2d|IWy zF`wEN6nWiD1_0olXkbq2xXSk;*NJ9tKlNIAq*5HF!bsgpqrJ6Xwq>?!l3nLr$P>#L z^fCas%pkS#+qUgsAX<}w7y8VKyfDXOo1a8K=C_rbAW0AJ=3i8g1@1r3<+pW+4gC6# z$2AP2pZL>;Q8p|S_8%=w<(2I*iaL30$$t9qQMakoEaw`+lgG4r{)h%V_xy*5(t^% zDz!OpHaUHUt$Y8uI|7}rxZyg^khqu0fU2u5ZLhOe2njCpGzEb~QGV%qEEQ9y*4C$Y zQHefr`K4EW_p#%5%K|H4jSl!VF%u3qTY1(-E|*J-CxlC2z$j|^A#`b z{^MP-u|2K>;BV!`}I-Mue|6&gqfLi)=$&fs!-9trgM}QXF!~Y&`DA?+Q&`v8+RZ7 z7H){E`HzQhaLqsOF`$r%$2e@d@=XEjqXfURJz9E#XB=4r2dEw5WL|j%8frpjiKh@$ zRM4ER@cKFhLZys$^^yv(hZZfk3>u;IBv;cdFtaz$?CS{*Gn-<$9`Ypu4?o1OP$TbC zHv0H=i=sj4njvpxqHb+wOu;>eF72>`-j9D+d*9 ziTf(9oh;( zfl_SpUjcZvAp*t^ifUG#|b51KshHPj(m0Tt}H>c{F9jU@GBfvf2V= z&M>rNr#XwmQ>u4THg}MJ7his5aCnx43NO@xzx`VOik6LE>rl~j>g3Z5Jh6p^kxap? zGd(!(nlYBE4ipsSL`6BW{CeQ0heS%K3i`524mhl98MNZVSwl{z=0O4HyXu&Vv28!f z5oxvDP1E*BwRJ@}+k?zBOLR|{X|irtdi0PT#6cLh3|QBizq8-+L)z9kanz;7xkDV< z-S3>(h~Iv~Hp;;|<5W4e{$&6H+5y2-8#rV8NZs&pkV0k51e+$~O?v|k(jo00>NxGz zAn=!xU+wE@P6(evp|f3+$1S|u7}jamyt8|48J;p=;2=${JRl{+W3E-oleEEybUt&_ za8xPi>rMN>v-xj@@mzje!Jp5q;Zr$oZ48`&kL3fKVyxQ|rk{MLDo}DLZy7+D>P{Sf z8Xm28*D^@IgTduTAAYR+)py;R=WB0yS@*~P__uUl`I?t=McWPC9&SKb<{&u-MO|j@ z)(Oj%lLW2|S)%N?{mwYDKc0Bp#<7FdeD7l$-M{+jU*byH8@l`NxtIFt>I*0b*gSH; zRb2ih$8ZCUN9s&*K8vS+>|(XqsrlV|zVq(8?|#B0@YF~wmWi2gV8Vef4hJR*`WJ`K zlUSY~4yfJC{K7B%!t%A(Ui;Tioj7?bea!)c8rGn%@3hlNH-sg^LzFRHsxxzG@NtC8 zWfVEh8~@t(buW0qjor;RT+uC^It?7cpu!HF*^X5NBfeeEr(j~=JUhR;+q>^VX3*ET zzx=b^tsne&_x9g-SNEO|*3w&XUd~c>g{c!yAI*|yNQf|&!@r~}9XS^52Eh1k_Bil^ zcb;+gp?|Ztw_(m@n!oQBXR{B(B~E|(04>~hv<$;)Cy8aAWdQe9DwHY+Wxpo(n`cQm zGX<`IRS0)4rHZg8t_vH%l?Yc|j*U>OV7tUVKT{Zi8i7|uUV+Dbr_PWo&}`Z(7Qz5nLKAQGD}WAD%|*8X)30a@T;(sXrKdOih`(6o*6#qbBlzu6|N0grzt0i z3;(ukRa$4b=i31ZVN!m<837A8-AuQF*Lttam`43obTj)!hK<4!Muk7ddH|dms-o;8 zFD>WN9{%7fO&XQ4GYo3Y?{KhVzB{?<><)Ahp9;Jt`x~V*UsawWxb}IkaN9gROb!Hr zyzl@^s9Dl`ie;EPS?Qp#Z@$k_H|1+fukorlYNoiu+5?s}b){CVt{}02Xfzn*kcI@< z;%7iwe0!2NK{lKtM;uJk2)0Mk;2>p$tHJ1J4h+AWy`Z1PZy!;Muf2yDT72;{qAh?* zG&hu<0@*&Quqnu+)N%;sB?m9>9zXm*clfEtx@#OTvz$=wc38&yJhI%ll0_7&>>alp zTfbEN=4dC8`SGg3O;>XmpMNd=E%tH+4RuU&_|PGi=W^=x#gsS8DCNUQa`heqp57#2 z9f8fB3C=uQ_gp3pnW+=0JNR3lqX1KmU7{bwp7ez-h)VsG7oS@>c)#pTK0X%`vv@<1@DtU(Fe(i$XabhuBeKl9YnPj$C`=C(X9&_qC;C@RdM;cPL`i_7aZ9CH}1dxq2KP4WYWjk)6h)b z6Anx`@H}x~qM$!djGdtUqH!P{$Nl%;|JjQ!I`DrkomhPz9DG zyV6VhII{%~fGDp#ms}VH@x-y?EW<|d!`T^gJ9ZT)bgPlss zkKnXy<-V0$OYWw?V;{n_u)h5shHGxkG4chDLzpp?XMLJB%~@fF4n0gkZu~k+K8I51 zjPN4Drn5{D2$|iQ;r`eRlpstZRUkOla&?6c_W>%@n7AnEycITUCJI3pp>hskc3we~ z*@#u}<-~NNRuFe-uL7;cnO)838v$9tS|L?hOqsJ>&MrAapV@rxf}(`2>rmzZ06+jq zL_t*5GF^lqzN85fa}Tb55yYXj3Hg3EK{#?fs|h1k5tnH)E+2*bMoR>C+$f>UWHZy{ ztiACfghlCw#|{uQL0UM&i^thJXT<$h!I8HX&Ne{c;FYxb$P?vvm9i{*rtn&RYimI9 zXNqOVCF~6{)`SmC^8q8_Oja&U-2`w<}N| z-E(}L8FkGx`M9=Tr{p*MMmu~0*naS+y5Bn(2sd9Xd;@(Z?@_ouu<>dduJ&E7^*eHF zKts=S*bO%dvgu>{K&^ZgM+iScFbq@3(hlKoJ_=_2TJ;qD`HKT=dnorTTf$oYqKKyq ziKFV7Wyyie9h~I8qC%O~vCg931zuZ1)f3g{akDYNQ)P+60r^{j2Fryrfhy#bMDo2t zTb8p@MN|+i<|v;K=wIx3x$?s@Th5ssT#$jFd-C%q-yKR@obP1E~H>B3OZrk9KfrdcY9@1_A z*H#g%ux-J?YE72O(*|uaDNk}|!wl^ku4QX}8PLP2l@ZHZ{P<~Z!>}YN9$Wbh;hwF1 zh_8<#C_>9N$fTwG$rH3wk-=QI#^|H{id&aFoOY2@+u!!{ zzuX;yu2)=jWmX3+?5rC|98Pr{*Fh-rUJ|S;4tOaCLDw4S$aTuV?2dnda{lH%c~-b8 zu-l|};ymHNgagkH2PO*o^TXE()-N6hl(!?bJ^AEQ|LMa0`@ep5@zfhQ#O)M<+b)-c zDcq=}D8Se;wN6)IX@!o`J>U;<=lECL^1|-Tba3DJ``8!u`u{1y$r%I^C;XVhMOkMS zZ+2Jr@MA~24}bV$-3LDOvF_jh?5~Ydx}Ph!_Uz$$AP$#1^0-TIi4J*1#hm}do4EPe z^xgaE){JoD-;M5Z_ZH^4e#4ds7YY~=fSzdtjnF;~`Rs8$BNTmjmuQ!gsuIp=>&zsn zw7c(I?kJdNh76@m!L-dnI|J)Xn2noxu3)V2*=BX+)9{v(p<-RaEvX`n zl?G?DiuNkMS-uMW&4d^~n8+ia8 z-{t45jX42jeL7WNG&LIv6w74`KF;+cJNmrLtGCOarKK9qnrC~6G^U=UqLh*(jSA^1 z=km>K_Le9EbJOghMcF#RzVkBBsnWO+Ridn%88`~u$3JE@iSZJL#(0~(T+Z_=-kyNW z*pGofD_p~{4KHpDZ?Z&~XN1%|?m-8*hEX)Td21O^Xb)}}=qijetX8Qdy3jx#P&#M_ zsT-6J_k)`^E{B#J>%j7|gEuOv?o}plcwcbAh22%VF6kaQbyw=7q*!`@AGY-O0H!M$@S~5=Qg#hDK zVR5$JnMvydhhwGg8=I%QtFTMWMqRZY_PnBFFpTN8{5x3Wz?a(wY-0>#zDc{5Qs}K~ zHQ;8r+E*^!MW1o0)X8UON8RROK1g?~v$b#Dw$JMmt*g>OIB@8e>khMxs|Mt3r+iwy zmk-)?vz}*=fHq{*o`FYP>+r;tGAjBmr{2l3Y*!eaI?eTn@NXyEho(b!wFN{Rp7vSS zUPkwH0M>6Anx`@I~doL_z?H}l_ zdE1Y5*IscEhasV$aVPK6;!1bhr|#%Jb@%<2b>Wa+;Vk2zBUpUcxVfrFnr5Q2qt%wIVpOWYB_6)>_4ki0ay6*53&-I)Ss zd@@T0yyCqAyDF(OMyC-x-P0N2HcADv5eU_7RthOKLcc<+0P$5zX#f2E<6A`gyJp*q7XrHYN$%`L+p1%9z-DKMO`SwP}; z-#CiO67@qSMI$Io;k~^@?c!>P+p;wBt_UAC~-i> zgThpp)V{oCYn9WEHR3bYUPaI;Zn{UQl^N$Tjaf8ZZLt{0;UJ8*O-6h5?&UT7~aO|XLBl#(Qk_{q-_J!fW=>2thyzym!q6o-z5IlMz<oqh z_pS0!<}l^d+cYe%xDj^8oOO*AGiW&3e-9zH-zv7&LCZoEq0wwE^`0_q9kU)--&KrM zzEzq{`VLm=IH(pSn)C{1q{gF?D&MU)?qzqiPU4}UWQJ4(vJV=oj!Hl6SkhSS)mrMD zg9Z+uS&XHFFudJUtkQ4&pY||HzAe-$_Tp>pTm~eeE8C;+&y`$8irqc*fJUho&baN@ zoON~kkESW|rlDreOUYkj5Jn@VK}T3&eOy750Rs4yfz3Wm5LYwvXJ|9~yzrx7vYmS5(vev51;nezMwR`p$tqHZ7c*ojl!zj*7<=K0fq@SD3o z@cM7;Uc+7LS6sp^F*|p0J>@B`qTJm*{`leUhkoD(L&P!8;ET?IiGuz`XZa+;=ZOPq z3Ns)2(1#AQAN{+JuOEKr`r^_qgal^&_69NsZAM_S=8X>k_Mfr)8& z?3n}RgD1&n;01RTidpj6;fG~r-%lJrETW_*ma(4}SBrbhd-U1hnuA%qogvv9rbp~c zXRE$NNSG9*A#5LNQ}_)`n{7S9a5%VdXpwA&OuXC0C8#7A^jVn!-LM?~ZeUQ6G=V7( z4EoG*C??Z)sXI|F$w%vs%CZAdDz9h2H$@w1{nLad+^Ym_;NGCI{03yCJg3asuu{lW zOsBz-0W9cghjnF;%yKSMd@#PE6dNP3H7G@yrp{K`x89=I0$Zwd4aS*n!?pU=X1}eQ z;<3G`{q4j@=DX6$W%3SW>EC9v4ZqGA3nn~$0^u?kr{YgqlCIEMc9r5*S6iGOa;dRS zTK9@>IoQ`#(rDe)I3w@g^|WWWo2IOQAZ+CkE@=yj4rviKe8O&sDB{|POIQafq$}5| zabmdFgL-&pmixP%r)i;t5s#+5LHDdoADp~$hd9IL=imO$ zJYVy&7j=L5^}oM+-PgaiyYa^BSlzHYOWS|@o=3Y^uy6gYJMU$HwUrZt_YqU3rNc5* z8I=4*mtSLp(bU@P{QTd%`|i8%0mMBNlbLgvFfkJjd?`6FQP97X+@Hk#Tyh|Npa|KI z{_aaJJ@}@@)s=rdwa#2N639AJevvil5bdrMMeHC)f#`j`sO!*!4|Sfn{-bYxYxnA} zd}X)9a=st@{vYb@Jd)|3ZVv*>uH6VI2xE(Z&(_|AtZ|&f?;#yS`*>UpS92eJkK~2kv&0Bwe-twX-5F+e z=Q+4$nXA?m&b?kOGiKO5Buu`mlqz^AjJoeU0=E0odxcbZ6%wQ z;XC-CB?2)e#Z?pv%Yi`{j~yk}87hTk!zb@Sj@TYJm#11roWWP&Rhfu#(C)D%a%mA~ z(5g+@er=zYwyhgK94Vv_r#co#y4&PvK7Ih4d0$X%V#qUZTqfw0R|3Ohlgx1&98>T zdSw}*HYCUn2AdXh{b9wUa>_dRzWl9aDZEqY!R+dXO=g3hP0smn(5kso3N7EE1JM|9o09MhozGilrGHMuOu)bK%t1MaS#Am9+!8c*EWE^|Vz+2z2|3WohaEw1Z=_dzuFT2m3oryf75z~`V*YAKjMfRd8OMt=cc%)+_u!)9CVW}u1=9R*0J!5_-wCiLmZqC zuEEGF+cVoW<9B2RZ_)+t;b$57iLH{-yM@JNA9Ei83@m~KMGvdJVUJ(?7=#&FxAJQU z_3LpC;p05+F6b6+h8ssC*fyYP;~Kng0fmj-Pb`)RzkNL4!+29Zd0W1gyfp^DOLs3M zPZn9F_kr7P&(r>I#Bld}zaA3lLFC_;i3i_9l`;)kzYYr$CIr_Wu;upW{ zM?Q1g$6vR&dg7bu^-d#v<)Z9#yb7>ml5LYm!JiBSb=ucplQOpTpyGlp$uXm4)kdpBIZ$HOm2`1q6+b78pF9iy~OoWbSW``SAh1> z7+xBEyrQjUs1&#eL!5?JxNd^6f_xOs2vQ2uD5Ww1e3e#b=Zbq4F~e#aAGC|B3D)9@ zFt3|&g5Oi)S5R^dTX8{0Pp?9G!=c@S*Tk0@v3|DGd{9uVrNP*#8y+^b#&Tl?_*o8g ztJ9`~il0(?+ShjPxCV{r9Z!uy8T7KmYxf2OXK)PlCYd7vU{I_1^6Sz8bs2=Y;Ro#U`T zujRAKW)_*u$?6u+HJW;r9i$s^YfHW~r^ZZRs-30G;HIKTsg$zdm9ms~{A?v`doAZ# zVM94h-QQuIr0u3MwR&pQw)eHN#U<_3F}|a)QU;p|F6vk6j(lODZJIX3efG8|rqcmD z>!M-BQ}l)brGyy<+%bLUAdIPyhm1q=fW!3hwEBs6t}%1qv6MHI^wi<1uNJ(t1AU#h zo~ta&U%a5nHp;XBALds$!)V0i%(!1*3U8L(PJrD3#g-;d)UQqO=HY!)34j8F5}SmB@~ghnYsC$zxvSQkN-gLKbbu*)=hpV9QcxR zpzk%lhImTXU|cTrUjPmZS1E?r&Ti`Em8&H+<%S3 zDfaB`>yI0fG&t?s#WfUwVkeM7!pIB}j~uZKkSi37BJE)su6z#h_5OJcBKL~B z2%vCD=bg;9x+Hp-Pa#DG zRzXx4VO_>4TwPhja#Q~1n5Eyr;dHtSE9t&H0bZdk0}2SVF6C7ijzEn7Bc451#_ricTQ{8CBj zg|4DIG_W+8vMsE$Xl9apb5`6mg*Px%ehK5Fk%r(>(4$fmEzbV;W4tg&)j-NMO*r1L z>tni6c4Fhp+153yD`8P~98?K^`!s4-xpTEZom}kzNRBBIF)i%rnm~j zK_V5t3~*6SmQfDfukEb*X>Pozl4Kc?hRr4{z`0Qeq8@-U*6>pvJfzIkFqYlW+oMW7 zWlRu93+vU6D$b^(xapu~wK3wi^NA84Jk^f5B4>?(XYV-2ljtj6d9=g|iDh_T7}FU3 zQBIsq&tM?!gab1gyi@-2;ddi}ckInWzy2A3ggn2SpYL%KxA8y%Z2_FNx%aY;kIaxB z?Y)P&Yf9Q@sn?r>&PbnEuxg4 zW=kD~r@NT#cL&(7z6+QIRv4Y;a9W42R)91Ajla>GFBsC!Cjepz``p5wy$@V-!wqjF zZzY|35+_UBW!uC|IPm4bf$DL-94ML4FyX*+#DO=x=}nn({N3Ab`{;EyzTo>8_V3|9 zurnN}J!?M~;V1%;b~{EstO)7Q`nLyD?PWjjZk|Q<-Ki)zBVmu1jvJeupJCdg)3}MC zhGP>J5+C8jB#{aZQ4q!hK8x>0w?Rzbc1FLUziA#e01>cyWaDYtB;afp0q!H-oC8L$ zAss`|2$sF40<}vw&v1>Je9N_KoaF9)WraxhgDR9p7$IT>UH>Rmk?v-zcHZk|}^X6OLbmVBqu&|moAl#q&?7Ji-cBb5U)n%#B>Pfj9ZJph0Bb$f;R$M^OIL??>dgbqe7A} zeEK#m4j@RQ10BY#QsQcbN}sc2#7F2k_Z9=2lk#zi;D@{M$^Y$)K0cOvZQ@!zeHwnr zGxnRK_^qh$@wdRq?b0QmvR9b+ayS{`b|8>W?||=pT7n2%RWrq1@w9qpJU-_$il^#1 z&jc3IHklTt3DuiC2OkC-hBXN-88S!3tD(+Y#0~iX&vw=pcIYo3lh;GXk$pTwMP@!G z987f}#FNQ2d-mp&4u?^_)#mA!fjM6)z zVY8(r*TEjmRCh@RTQ~Q@`=k!(r#s1R_0xf< zQQhn_$AL0$U$CwlPWr*RJ#iJLm0G8{u7+qcv|;?bV;0^4wn_)9#-l{PY?g4I@qX7E{m(r%?=g4fWt zZa#+x^{u1nue8EV<1_wLE|hqcdExoj$RAcYf#p@o%qv!3*Aj z%r#9XwxXbCzooI`Pp8MLb-ubc<7{f1QH>iX2-{VTI==?E&D(hL@Duzk;w|9qct0OS z-6T8{)1nSN1W3~PiSWaBuMd`ck1+fhAa6JZPFq^Hqp9(2D_*y_ioT7QA`~L{shFA< znVsqpw8NhyLc!g;z@vPsmm|?2LL!Xx!f>P(m1zZ2(#>1pQ^DFeB7pPG(pUr_zZKjg zpkr_THJe+)w8Cl>ef(>t&6AT+AeqIIMCp^$Dw;JQV4Mi@#H*05KrVi_O_)9hfFj_B zrhZv17*u{TD+x~N5XL2rhLuL$GP9*14~*`*`F0?~^l4fe6y_6_czhdHm?-keyqb*@ zmkO84jAD9=yWvvUZ;Eo17I1BA^cs0{pAT#}x%2>e$~9W7MDW15m1XTUJ1Ve;#8rNn z@5`jsCCFx8UB6~rQJQ$Gv^D(L{32}|51$(bPxD9P>zOF#BhrCCE15%2k@lv=(Z1VT z_pSUyvkj^i^qg9tp{WB1|0~R*YUbznP|v(yyUs0`V8db97$c93s~N+o zgr7k(6TikmJhZRa^>6JQ2w_br@=^HVQA0nfpF%piw{Jk{^~61LH=Y z#26L*8`;L}`7hpk|ARj%)T>|p>H_y;VkR7zaNx^=160$AnQ-9u9tS@C=}#+d%>AXm z^p_T|z2=60ddZbnvjD8yiO}VJpUN7ePVm{Le!K&>XWO!Ovq#>_L-&F4(~dQG#{33g zXIaNVhu>R8D*|Z`{k#)j9QoNUfd0MT5WmjbnRB7qF3iwf;agMN2uk=>s8BIz`!p3` z6-Hfxsqmq)+!WEQbbyE^wEA7k+7XmhSP?)K_7(75W~!2F*eI#YAUDCh&8#&6TK{zw zY=lzppHc>phyiI z6#dy}>~;du1=1QgfP&Q(t_b401WRe!Tw03C-j#T#xzGG4P%3v&4<2UknK}0wyt)>O zG$8qVFrYMMCY}6pmR$v=ZAVe*5O*ncShg`FeM{5m+R}62I9{d=w++fcsB>F`({c*a z%za8%>YDD)6t}z?8S{Gd7gQs!^I5EO@Ox=6oi&#(uY+@ZAO{>mqwpEv8Sv0O>ngpCuW19QN8;11a8>KZB$N!mW9?cLUq% zElPQx_f`M{w{zhe`fZ1+!8HHzw_Mb1+-wThfB4Enfbh|PIJEE zFTec6%U}7je<}W}(A7Ws(T~=sjt&zu;lP9gUltrVyEXl?AZtRzgacnV2maKb`csie ze(9Hf>Af7T@>9Fnr^PG*dPElHC4$zuoiDZ~FpL8A0Sv#LiJ-NW=P(fV&_L(eI#kcX zY9PLc-=Y()!TQ}y3)8-R2Y2tV$)68pv&d(@hk+V=b0o5@;u{7*4lH~_$KHOvu+4uE zT|zFqq#FWN2$m5pU5=VrI)!B*oKec*No0;fBENY&U3wN6RXl}G{haMp_;nfaH23wY zbgJknjB7H3jiQkg&5=kQ98lJFtFtp(!g)7%4opJgan?e&TtTEV&7<-DXz6l3LqS;K z+$FXu5Gp5a=DQTV;b7e<;(D0-arVDJ}Q@zvd)y$317oLxZK^m;uH z409`x13@az)~{u@1F6L3)N;2k5cb4L6g!MJCxkJL{v=ZDjle1amiiE-Z8{^XTqSmK<4wmw^zo%K~I)npKka%=g7OpJBjvR`dU2FgrmlynB_mZ|r&39atA ztUvXW_@bb?#YK4Qd%~0=EoSRStIN`%$*g%xfDTkk2h+rnlw$YvbDIp?izv>(+xEC( z!GS6V!g5{)?U0EzoNb89?^iju!Gj%VcGwOU?{s%1fh=t^@X}Ugqv%vwuX0)SzS=_q z;Fz{bg&sOm9v%Fs(4m#qv)a$xLl3X0v@7N_QMdv@Q!Q@spu)!aoIee&xKp6I8F{es zZpFlR>^;V?xT5Y|>Q!|DJANrIJ7#^aBG*oROd zQ@W_xFO}AcRAp2}aUSJY{&>hy4myf*%s1g(mZ{>Y6shu9if;*!qE{&0$)0wNGYrBy zQ{>Zx*A^y9ItnZvPy|)PuVRu}s>H2wTcyHyRU9?q(HNIBDD-Jp*mfpwmHqV!;!Lpt z)vKuBR>)V8j#AFI%i!g+=~e+!s5e}e;~Eac?iI!d;hyj)043m;lA%EFL2@b_3iFya z^Jf~}OT5}2kf(y|%()R}W?khTf!$JXdWt9bk%ql{FA!Bu7MezpH`OgaeVdng1d>h% z0C4bnJk8=F*9ZZ)PGwQKQ>)s+xeumCrChpIZcvQ~$AkOMg+1MsSKg5DE{&g?-i=>A z!N2j=K2*RPOn@37FxJ!I)1w%@1Ra2n+?yr!$u#tj?&kAZrl)b-UH%OD*8Cg3MtA7Q z4-hh~#nIj^;P`iQKgYW%dIq)VhX3%qPU`NuE3SM2ZnY@T^O4H_Rtca^@%o} zvdgp}%B@>LjKeZ!*t-Cf_@b@gvMA;Yt~)m*j%o36&_a_6kg+Rt7jT5Bsy`~_S8xe6k>uqNa!OY zQg2C{b=kl0-&H2$LA8C*3|&6bEp7)5rL~>HUIU7i=NoN~@HJRwot>Xs=yrNYplui7 zEdz-&X);}s<6y!zg**_Of6fJ|Un}>UL+R1G@D^qh9Q=_FJ)1{Ci|eD$SakETG`Ds_ z{tjWszYW;JwYP5DnIWzr%y#ZWn4!HTdFZy4y}^k;_T)MFF4b#mQ**pb)1e0+zT|tp z=X-XGuOlx6blB;M;l|K99ZaGcbY;pJ9;ZK6D$}ji=Xr zHw!#NpmBRoS7`JH(>vA2v-oZN?a?Hp%h?s#BfR3`thLIo3ZlZU?h2ZGMsZZ|Q2KEB zv-l!l;wfC)d)ngBEz3X=;Im8j#Dzpm9F44{-9t7&Tn#q}R{P>ferua&C6;OPn$(gZAT==439045R-Z1SD zDS0PYlxotYg5tJTkxJsme_U=8vKJwj!;~OBA%c|EZ z=vBA<*3WrnmE4pO%9L&*YJ0bxMYo=bdP7-N;dHhdeEd0cZ9Vto_Y434Ev$J;(3tuz z0#(3k_P(u{sraSA`XvdW&ydo{jQGk*EyFLEK!oPBNw#OSU$z@*V+fW(IQVA!QUeX8 z9M?g2b>N%mM*}0)ebN-go>fAveMs6#NUQh4v^3kMWtJa*<1k%rJE?&=_nUJb1iTm5 zB3F6ouc97h9Xy&^#nES6Tr(7_MlpPRxV@6ApYiabUcC`f{ReLd%2$pDzb2*Y;T}uY28B zzw9F)``w>==z#~WoSU9nW;Vk?CZ__&N)==s<NpiOcR1p_NId=Gi-b-1iM7oJa(YKFj17D#nZ19#&t_c z1t@l4qwo`t-z|)ahd7Fc67D6WDH1B?5z3tfkCG%z4@V3!z@*X;hsLl9-x||v`IIib z!v&Ztqrv|uef4~ozPtMH9paJEUy3p!h;-KEuGIz`Lh7wZ$_;8r!yWnU=d-y$x46zC8vx zA`P1i-{VeO;Yplh9)4CyskpVL9SJZWykXtQH0Sa78o&UwIh`|24d3u>z~OhZH}?_Z z-V%DTxA$58lvUe$>yvp)-JK@S*H$=@=Yf0g`?eddyXL11;~w-^zq*?!>EjHXd`~#= zCFHuE`?*!ZiEbjVAOM4o83zM|! zIA%7bUEmgAXa#BT_V0#b09xUO4%iKIE)$#rV6ibWc$*Ydu%1Rx_2l$rlyQ~v&`SQP zEGjh5ajt-~)e%Brz6UX_xzwAPDrbOe2Cx@U2`qjEPGhP=&GbVdAbyqKm|jzIa6)A< zLOx+trW?KpJ1UGA1##mK;bfLdh{C>0TaC{-J0BGrh3pna;W~o8^y64}j|)@6xHzR% zg+O^-C04~<_Xz)DPf}`DOx!+(X)6t!9h_Am0MuD)=_w(-_LK@+_<(^*g*gWk+P&&# zjCU(XDS@Z8KbLqwL7cHHIF@dH+xyRBYVDP z^US}t6kobbkNIrjSS8F7t6)6QeTu=CYp#1~aAY7v8mwi=Kfzr7g-;rX2KH=gQ1vKM zmPcky7j||>k3ACDg9k4sU%7`KC2o%Enauo^RSs!fTIAq92X08WA=f?epFtexMPde<}c!N1g35@#7v zar6K|PcRpcgLBo)TURO`+Y)JV1&d`%j|^U6&o&D2QXkw_q0%pmXI#`gIOV#x8^+)s z1Q$F(Z@ya(%?Kz+9X8^kGi?IO?v8#Yy0t;21lOK-%Yt!Pw?UA4Dryz<3=oh`D}uAw z+0sKj71ZVHfrCfF&AQj$3WNLn!UAs7HNfer0`QwY+bXY7^boq_6$-gqTrz+NjLLfM zKqqfqhVP(;e3ssM@?Uj4|20ksF$nLEU@5k-L7)pZ8X#p$l9e z&}e)#ap!IHVL$H{ReLv>7A67vuu@;VFI+8*+}7x)Y3|y^=l8QQBN_-aZXe>=3h#K_ z!s{lD4ZgvQ+7^I_xg$>=`OVeSOPA6aokpPC=?T{^gSEqY zE{vUQTPB;1Ux$Gi?}Ufn1F&ta!mF&FkKE=j{1;+|LXXN<>)3rqkqAM341>swf5_8O zIAFGFU<~Rr6nw<05Erx}#CUj<0&f&nkgB-3ym|>CJ+rJml4b6IRZv#oRAGp7B(<73 z(=SWHdj(tpz0IO!b^(8dPmRL20=|=M&iE;4N8u$*nGFR@ydyt?w;8fFbCx~e&Rzu0 zILqF6rQob0Uy0@gLrSSHW!@Pzl>$i%ZW1P)&UlHVmd@8c(WZ1uqc9QjV=t;zW=bgt zhvOK<7n}5Du!6X1kfJFGl~&`CMrZ7@0s-MXNG)v&VC!`S#V=+XZeqzkpt%E zvo~_B@=ZnB;hKfrd%CAjob0Z+@TpMu z969_@cj)NvpimC0t~t=9 zBJ5yRl`rdzhcagAI(}J=WBX5}DPI7zS?;8X%<|8=FDF)ArhzT9^Hx!CuhP!g9_uE4 zAM22DR=x46H|#vd;aLzh0I-qTN{1^`s&2KqYI-c=rl-w#RzA`;#l6xvDo|hup}brj z;1fDfrsG8z!)KNqK>dP`#97ykSE^L@9X`a7xOs4&nUUW!w57F|y$vK*8d2yoOTRPi z&@NWJ?Alc`_A)o^St#hqYvosV`fOt?Kj-k?6iQf)uhcQ$I&5cpzVeFcU!-^I0OCCt zEnE3*D68AVhzlYB-ka+E{9e?tjbm@p`X>9M*2g}0RnHkE}`i`lo)niAF zeA}=6@-P45%U}L-_oO!^y~hwVlb;C(CLH(@aDbM1VkR8;AD#ntCL`tiq6;thho_Do zf7{gB8jA&|P9t_KsQ7q-wjEf_f>!6%IOBNc_`%OGsBj8fL&LrG znfWmemttlH8fGbIMq$OSz|r<*syK)O^%j8?p*%BO&UDpmarTf?4m3?LuGw+-Sk~;5 zFfK23nXF~S<=iDymw@an+5gYpn}F$gR0p~x^{(!gS}k>J-{pP77;h}b7zhv`Ap}Bz zNkZ5{STaclm?6o{I?K(>6Y|U?_uf3oO!C|?Sq4wS5+-2}7#lDc@Qy9pvMtH7_NDi| z@B5zm>hHgQw`>_4GWU7@lK%d_ua;A%PMxYcr|MLdeqa&#s-P%@yJA-qUg3vujKCXL zy3xyqLQyIC!pml^lsP0!G6JrGIj91e@}UVRtQUbR3*T8G$qKr3a0M+3^-=JWFYt@W zyLFib^(>T&TM^bx>$}g4dqrFD#xtt6#1~(c<4|-+qf$J90KbfV%KfW18;!}6Q4R+4 z-s(D+i-w23ImEy76toL?4?cctn&$c@6(7qW-kOYPT5DZ+IF>UPv1$o1lFpzK*lF^ zPZ9j2X%_`nfTUyTm+DZfMHR<-m-(aK$9Gm~DOg)|fZ~r%>EAx0!Zhzs*laEsVDrC{aXeFxg>VLVm7DbPb0!kZZeMju+*LPq|mB@XBq`kzl9QlHfck#AfkdS|3kP}4AZo>2;*vvrt_B_ zFo>JeX0y^z9KpgkDv!eRBxPN`dQBlcE61@q4sNkhB_Lb~)jYGGX(}ZHIOeJlTvi5! zSA=sFdsn|KW8e>sR8ADAOL>hu!yZ&kadSB{9-%N)@l9iS72Yhb%+;t^C6#(Og za)gj4o>Qz~wzGo1al_7tdt&r>e8)%mQ;`nnQHMSimNnO3Q7P3YPaX>8-xIja!~9ho z#LN0t@lwh1+qNsMr>5uAs@}o$oQqzQ4xc=hy16e~7v+eY;`2%W6r7A?6_=mihAp|G zZQv3v>Pmm%EDCq$EMBXb3=TX?RTLRZw z2)rmvzSp*0lm^#rr3*HP_k+ht z7rbA6M+E*@p2&y1rm)tTW^zE6{WHvxUccJJ0L3yd6>Bn&gClLfGM055iaj`)Mm)qR z_bs`7mI}#ML$)`|OPQoEFRtPPD(WEjYvuHIf(eK=PFoSC#@J;x)?zOyFn70xa_te}aN;;vXjN^mF6mll-!^gZW2!B^L3+iLWmv_Q7`v z%05s0Yk2+77*+Bm{lztYb@5D7@{wk>A-{MQfJQ8?gjL^unzp$3=3}X(CC=GAmr7r= z!~;OIPo5<|VM@c2E>NPtPS)5?db*pxgx-{0@aPVllCIy-l_`y;j`pzG0md)In6nMrc;NanSHn(x(+Vk$d z^U=>wj!*t1rj-*6Ky%CH<~vYVu;!XxmX#TVBPE_{uqp$fgRn}=B%}E1RXu4Gq3rP! zr_$=RtJC0MKgt1$4so2J4p)toKI#Wfg@iJS*1hI5b$?5~bzWHzFrdILdDTa%-j@nm z%C7>o1cb$2^+Jdtrjw{kr8l2NKRy(G{ONx-t_HXEl2iGq5*-32?~`dF3&lVlXC-wC zWqVoyoiJ{UAuKD!?uiTs00mKnd4-lD0B2#u6{czhPr)XHOqGl*$htzONv9Q&!w`7m zzVv)RS?p(zy_@+kCF!F89Vfs8Ls_=0J}IQSLWXZB(V4%TP*8wXq>|q%Wm(06^eU|( zWlBd2XnGh*IG#$clJ0%#Dkjp$vI!&h$P=9$WB+|2sr>GqQiXltsV5jG1lhu<1ek|Z zSCJR*Oph$&PqD>74tL+V0=;Jdh-(Wgn3_|DvP|0E-nFT-I?25S9Cf)}0N;OVg*8{@ z2OXBr<>6=lfjtzLl|1UlYtvB4DT`+G?AfKfaq2xvLuqT88oNTMo@G?*+Ki5jsxLZ z;rnUcr>FxbmfGP5`dZ+?E3DGal1Uq8&_hEf)82>g4H(OpcZT9#@|82HjBBKj7vbuP zCsP{Swlh}lVZE%RlEn0r96;wGbkRQe&I&Jqq@R(8h~-{y+e=K+(N7f15AoFrC(})H zblV6%{1zs7pegB8@;#g`EB)+Ar{6HG6Je1i-kB({4YL>9u_A6803GoVCw~q*K2_kw zyZmg!;-tB~mIB5r?KW%0cz|D=E^ohL1oDcX@JR2r6IZu|shgUn-vsB}2LjJ<@urTP zT-1?cY%7r*wry{ra7(~!Yzts=!S+s@^UMLy`>+vuCB}^D+>+0c{#>x14zk1l^-3a#2I?wrN?`TWwHw>npmA&b}(c|gp$XM#esznx& zw@ZQKY13K%@>X^kYx{i0mSyl&CnMw-R)?1kpBVXK|H_ru5KoerfWfQjniObK;0H~C z+*|*kb8Y6=q`>!20SAp3Z8i?}|IqNz$X5^=uR<~zWw7DMsb$C~Ey^=Y4Cf)vM-0-{ zNGS8SB2=gdj1#cB7v+3xBJOk+y~mE6h+jXm)0;M|ODns(Vh}9@eFy`<458NqI6>O5ls;HWHhSfODnPaaj{voVW!A`&^bVMBh zN5NWUHcY2U=<0z^p756sZc~6}H433N6kxlIRt6x zLoVQ$^Hn%Ay>VR?k8s}oj=i!x72eEKyftHYkF66D3i-y1l^W=w(l7qrf9|{c{U;`8 zIcd8uoqOJufupb}74P5_K8=5ZA`v#D`8w`_`|eB=<0H9kGVx-4S$<(?ep^;eV*&wh z>qteit-U+#+wGMYM+BeMp8}&iOCm@UuD~zP%DY61XMLa1 zh)}@gPr-Rn!U)8t3STNt?%#5%5^l0aC%)FFJdr0&_ng^y$7#W%8zZc;BJ_F8kQfx zbz6Yx;u|>TTiUt)MRC?oH_L>XN^|Ka^z+(86?MyHzQQkMs@0wa;U`bnH`!iQoTJWp zTJSPS5&2hjDb-@4AmWHBNb}$Q=H}`4uxS5;7y1x{-)K5@DsN*b+Z)6+9H=z9io}iH zweP12FA+<;+%x9V>sO&&qAhyX(22UwX%?OiwtQ}W+r;ST=hqJmysm=ltV{FoxI*OSvq^y;5CuyA_5;eUnN5=d&j6q3E~&%`c`;{MCO=@BZ002D1AO9Ziosei$WaE^XYrA+2L&y$wJL-NJJ*tT|DycTe_R!Wy6T>3ui6#AysG-;LoR2vwf7qVN*( zp3jnSiDxa0m)d(>JmF<$6(dX&$vSi;*Hy80P7==7Dxs`WcPgw|AkF5`5>`L&8(vWE z7IN}UWkW$%B~@kIG@8wapNcI03h+8%hd_-MY`GOs^>fuK1pF#aT$@HZag77sF!eQF zfl*2ud;mlER7eg%Im!o4Jac{u#91kb{iE<{z#>h+k91kckMhHeh6_t)9O%`q4KHQeA_!@Mj4n(?VmQ0h~^`uF-c7A_`u1RRmLUaPg2 zJ>TOI?TSmUOTFD|)9^56%kLDecu~c~`l2vdl>dSFek|ZP3)Ezq1Xgz*`U2hjAs6 zIP0R%0K5t5ZWqf9fIIf`k!G@P0m zN~ca7igeab;Z5_bcMYHQL1*=Dz7={AzrZVge%Jhp=NTYZRd9yTGkX^t>Yt6VpCaqV z=rx?{1Ejw{X(+rY*z3!hD_5vHav9WmQ5Re$zYuO zwq&e`u1C`~DbS?AKP?4vPySDvM-zIJ0?!l$92}I2LOCB?yZU#>C&oXhnJ+7&W2~um zqvE7_Vq}3wv5P^@5t;urp@DZ~i%`-|BiOC$TbcUT_NRLvd^o-TT|bk4=8dmOn-~b6 zbJ=<6RWG|Pee;`lrZ0T{E9s^??oP)KivwXD{1mq#u0`m$h)GZU|#P24I!LFny$y{zIYHhglbot6yo_- zpjWUKCr`lEPnhClZRUJ)8T5&(%7n#7tV#pR^uC+U1aXyACD-Gx3n zbQqIol&Yzdq+09(Z=hM`pa&;)_pDfzPK@nI`yah0UAf_+G{IF~%VH7$lXl`+Pp(R8 zIvuCtQ{F%bzp=4NR+IYD70-EL`ut6Q1bwDb*Rozv96<=BAE?xY3hhP6NaKu8_V)V; zjtKQ}7B#vjL=MtKeFZrQFM0T^!CwS$2_Sk^aeS0?<-Ncx-{rX!q>|P!X^@>M$f5$I z(p-X6Lg%<9t$S5}I(YQa)Yo+(CbZ{bn$ETkc%=j0x4p^p-I&*^0DJPjE2kYyu1v5O zd2$K`pOw8yEFvD*b7$n$+Q$9qT*;=h-_=!IoIk3+s)X%asWvh(96p=Y?Lfh32j*Dn zT7mTvGnewEe4#6C-lr2nG0_BX>okGa(nDUi-8k7}+f|`8b#5!JWW(RI^RT1=ZYZ@? zzu~)1xIr70TKfFrXPb)lL3*8SUD!_CMH;*V9^s~!?~Sjsy-L4mXYjoEStntAQ`XZEYx02Y#EWdtE zz?nw8Ro+{`x!`TLC=F*~;&C}=NOY#h_8sD&$FB!WueS^*5pX`lrux+DDcw`WZwwcw zrwd;sGR2+}ou?H++@6jrWvR#CZr8eyPrMFRd1lSPYAjkh(!PBM)8SLOZCrQB1?fkA z>=o&{=U5^SLV-oAs@sp{W$;}BYIAUy+2l>SW zD#Rlz2q<4xV-}xGPOo5W9B0v^Yxu;84{uqw_Pl3Zb?q)ni$R6>b)UtHY!aoE2`fR>DKmZT`ib z*&&#^60U&1usUXV2-nnP2=iW<6aw;s0OhI0hI!(9DD%P$iO2jE*ijbH)?En?#h@aN zX%>`!IL63?Ne6{&nI~u>K?oCOD5?m}u?H6BR?v2(4G|qb_NOCMyQ-LZJPTXO>gFr# zq8QYN>t~sDmNg6V@L|c1d@|jD=Q}@5bX}?QF7i$$Nyr+dsvSXpB;E1#o73spuTX9}7B!0%P80o|E$OK=E9NMMFqU=co#Yb})9^tT=~Rr}o19OIK62>3^r?^k z*EBqFAa%B~|9pm#qMXtY!MrNtBYVE)Ry( zoZf>N0Z`-JN^ym$$NtCnGI8JpmV3%|TCMmm-^!2`uV_<*+0K0TSFU_Bt~F%agw5kCPc&%l zlP3(Ebjar9#seF&5(gkb1NyKEZzmFknxI%8({AjxEo1aei@4Y##YVV=$Cy1X{>@9n^MRi^Cssf+* zuujVFiJ=QV#?h5${(9=aPd9#n*qE;V+xPlkN%LgS`nFCr)J=pi!DF3JPwOyaU$wd~ ztoKfw9uDiEAHM$D^q#l8Ilb@QKbwB&r7uidwycNmX43e`>9lg?%5=@u*U;YP(%*dg zAK9|k&Ec6nY3TG28~#xBwUQz)MI<>%9L!sV-AO77!GHZ33g+6dPMLCl;OykoRr~kv z0Lwr$zkmMvO`HDl)TvWt=2ZqS#o)E+niObK;F+dC9z~vMs7-iH3OutE$dV=U&epA~ zc8;7Lxslo3S8z}E1Vav6tCqE+tTB{0{5ZN~0mpYeic;dYPQhqY<-C7YT0O8fR?gr1 zvu{rS>KERY2KswZ5XKQkP((1@oSb0N7zJ$Ix;5$2i!Vr5U3po0=?kw+n=q%n<+j_? zaR$Frqho2u_ALl6?P;8M6?MhcK&E;I9u4n&hBK@bu=09F9wmQ)HNH1~pKXSX=^UZ` z>0d@`2mRUyuTSRc;TbQdMNnVPY83!Cth+F6+;$PdIhJ<_m0huNo8bW%-i>CKyzJ)&(%$+PCGX6jXFa2UAi)S`V)la2X52VKq-2rv0583DZGlddF9Cu=s`V;tMs-4ySuw1{A;)VEy_BI!YDY-i&xG$myYOX z=?cC^7lc(?CeP}_&IE3$IQljE`z>z%N_b-&g2G9sGlhwxbyZxzia*7t{+T1Htj2mT ziRFjHJ@Ov#wQAM+bny5iB`1r#SbM92tR## zBo3nM#A3sAS;-cMJW-W-+i3@&(8gq~tfb4oxosIIln}GV<#wWST+svEglF4}b_$a6 zon6}y zYpP%Hp~QT{_Y^SWpX;Oa9q#?N|1rLVl-}lHo3-qo*WuGiKKrK9SItwe!mteDVi|=I z{Uv_3G}ld;HboI+ygPZ672Wyt*kkvmPu}=vX?*_iv;qZvYKrR;p-ogTWG(e;@~7h> z{Zk}3n>bGf;%w7f9t)JYBttA|qwlIRsSjV2Z zz3CyW^-dsP=-&CJ*QO7=@9pVlf9iGV`sX8mY+M_1$|P4*TEA3vOyI0tyEZ-h@{7|N zCbVw+%$HLSeREG=Uz(qyeNyM1ZLr)1g3Eu&n!J6FGVsDY4D-P-1yxSieCzU-iRsD7 zb0)^eUb%MNn%jnlNB39J6?1|;cs5;=0!<1$!xXS5Z@MN0{&%K;gFsC9_V#x@cXoXC zW6NgeFGKJe>Vgb1ek5u>X8=EyxU(m1*}?k#e7y4Q9LA!h^o$XBgi9m@H8-trUa zmw(~s()z(Z1QhqUBFtf~H^a)Ff|5eZ_}DP;=9s1KP3P?1kuGO7{bkobFKry?Pd9%P zMg7zeE9zru*N&~RqBn(dKY=hL3YrPlMnk>}T4#C|oJ)B5_Nia_)%!2?zEt`W@5#bS zobo(VelegMsSa4(Yj~G9_5S+Rf0ulG<}d`@7R+KGLGo`+zG(2L-y z(CX@)!m)dk6)rv5S&>4;HCDqBFg@G}`GRzsx2qgvlhjywM)Gh~P&08)!__G?i-7xC z73_5ivI^-6J}ZK^ z%0kX3o6H)nf|~cqJLv!oLjV`IoZhnPCk*omJV@tvlnqbegu+ziX;}G*hj|J|K~7rh z#3dijl~)Rl-_E{pCn40Vf$>`^ zu6|K#B^(dSpv#jYJo(lubF3fm1Yf9SskeUs3xwn8jj#Q+^ql9s5(T-936rsCb8%=H z6D39Y)Pka&Z6TVrkFzg*ni;h?P;Bye`s&ReO^+P>PU>l6FYFv!PyzwkV7%3GuJDi# z$i1~IjbVAgv{-uCOW&2wJLl>&G&~(=PH5up%C0NiD%G|*LDjbtv(TyNgt@ux!}_-k z+Kx#V--RH7OXfwXk=qDwgc~onm8xyyx6n>9L1U6CCdH&JdD3A@PsgIzIhVT{KQZfeSj54diSS`qj`)mS$*snR~mNPm!3@D{`UV$cRl=x zw6d)iyhlxtaf*^!s{He%(g~{^2zU~gu~<4n4d&9pXYHGNwje>q^9-3vhH!+RDeqdG z5|?Mhl@EB!+@A9?3Zx8rTBn+^Q;AZ($H$G3Lp`_QF%+iTUZdx#d{Sa5+KC7!%^_+2-|zwQJVw z9UdLKhv-0w!{dB5U6TS$3OvIUXe#K>FhQH(o>2;@ImOb%nl-&Yx_oy2-1EqR^nrK3CB5h8eukCW z)d(452u>*Q3}i#6PH^9LXX@(i31KQ$95|fHedkl0UcI8bBkkU`oq_O@^okpvpV+6B zZo2h5>DZ~$=>+EQn>kEw5Oa9IaU~IV#X2B@QmfO`q7?{&mv~n{9yO<*t}(3mm#~QR zB!BATH%2RA6)M#by*QR(CEntY#a{)6zV-3z{Y#3cf~l}z9d>o}ptv1N#}4dITeqFV zm3NyUA|{q&9tg$ZNYsylt|rj3f+n1~(7j+`&A?B+NbRmMpH6B0XLa-&HDkLm@Vl1tl9*q!7GVtsr0bZ3<0c%=jwp zAzTZa0Ka95PzvzKCagJ3JVH?*Pq|&*QTUJj*p$cI1QHVhz&4U`#7E)Ve2g#bVpbmt z49bLI1-{`Wt`iw5z%e-?ZFqN;K1`d%LxGSMr$E>Sy(c+oU%JfCji$T4d2>32vfbOc z3Yxj{nlbcgt27TWE`MyeDj*YcoagZPOnTOp&rcm)y$F+&sf#lQrrf(so~6txUeb%d zdP9di8M3Okm#q+8=}R~NH3l!3UAH5UPCBVZyvWc@mv&DYOkngf4Url?mjqlNr~bV$ zatSLOXL#}RS>6rTS-4X$}POOqI(7XqUQm4{T4h1U$kmL!RqYzKt&w8`_XKo=fYsj*Bd*~YG|oXb=JD^oBg0*nEy(k?P} zv6PAY?Nd~^s);<_YZG#Wv_PBa8|YVT*WxbT!nI#0_&BkV6*l*NbJhg;S%%!^v{uP@ z$rdB@_E0E%SsT-5n#mzkEH4`Pjq+ zrtC-4DYnWzd)JQi-go{~`q%&Zed$#%e^EO3oGpxJDUA%DN|R%w@RU3NKgp}W^uSZ= z*zv24dL3ag!E+$a-@QAXvu$Jg$4`7VO^mRYebf3hi)B-&)m2G?ukD1Z0$BzfY$cDu zrsC?2wW*z;Q9gQ@Jbm59EgOeUo*MG-0b<5kpUyNjU6TS$3Os`pu(xQsCI$X?q<~8Z z+A631{@%B>%+LQN>!iE8Hj8 z(|GXciS%3Ve^+|v+x|rw7+8hkJrT+0&R32^Rx48;UN)`4+?_|vT3 z^)jQqbH}#ytV=FRFMrYV((bJr)3JRIr~CFFNk>nfMp0|MC0NO}BiFiIq*97`_^1up@PHJ^&RKbui8Z2m%B`s;5gMxUhnx?4mI5 zia{vr$Punisc7ar;Fe0jDXU86uHdA?sKRN1!+cQY5i$we%o7+2&aT8~;ag!}L7fQ3 zg&9Kt!!BB0bicHDX$r2;8!K5VmPA*&am7nTK|J(S@K)ebpcZ~vnN#5w$82t%g(z1B zvy$s%LpH0GPxGnO=A9LBm77ow%oJB(hTvWoRuuIpJb781g-MG%IiP;7vSV2|2OYK}uhBcm_5UUJe;0mFg zoD80olxfK zfPN`46WN?!@pk{XB^U6q5kd)l~U?WCSZACM!F! zVzH@BV{w#bPo;0%`ibdxa1!_8mCev$)!R{29lxl(uP7ufCGL z9#*Hb?^3z;KuTR!s-aW#AJRWt5JlzU7h@6#_)mDQoX3H9z_hIS6nMA6Fm6F-+dagg z&&ar%hy9aRCVK0I@WSjKjCemfrrBH_`^K zPFpq&A~TGo5&E$y6nMAxIBB^8YZ7q@o}wMJ(f)!BsWZD<`D+3Tz7^fQX~(W}(#Bnz z(&xVTne^!KQ|Y|(wsT9yWI8=I9(?B&rt(g-FYyz3a9+S$e#@2~SYu#p);3O`-!?rp z`?6JieXHL8fe(D{OJDku1C#PvU8Ccx>6#R1QsDcdKvO~gzR1^1{7*yykLV5wWpHi( zZ*afvhn>Qma$vEb+j4up;jxp^VhSbY}D++-MHtp>ShTJ_e&Z*)kB%0ag zag5cDY3@x&xas2RldYWme)(k=rR%SIetPzW=cE;^kbL8w`_mClQayU&blSXrU0T0> zAk853j-V{s`07MfzAF6do{EK0riLe1SncWa80u>$g6ZCQpr^&?-`lbC}K~D+LIS?XE^4M02;DY%#%o$&;Ke ztqHrrCt@r@NnYWOoPfU!f9q1gx10OzLph*c6o3_C71l#};HmPWVjpNJ^t!@DI$^6o z=RKV&4VW8(z$|#@RSgwy^2hSRz2@R$J_=~2Q?vG;{3?Ux2?fedxRXzzFc4H$q^2_oRV9})>u;NDK|!A| z?sP}G;M}W#iE>CCYR0a@)lpVZ!LNgRw^a}|zs)D_FH57e>7Jfmt|IDBcYO8EwC~vM zY4hODG&FL8^p$c29J3E}MCmMD#y_VkY0Gmd5N8T2{so8f-S`xye*TPGekC4W;p*Wu zhLt#>RF{v4l>5UB91mzS!^F>;HQUnxR?pAbc0+pYtKOY@x;LdEuhN27yjCsvg1GK; z*0o`79!jMk_>GNEb3NN!I`sG*=@TFOV=P~eq!q0w=o}80@wZ2|9{kE_e9x^DCAF<9 zotQciVQ>8L52bYj7o)Hu zJ;S0n1&7AG!oMV}fY##_UPRI_>Ky>~T~5qc50lj4I`)^ZVhT!C6cTaarOv>}Yw}lTK3*Zw^=EkMac<{M4!V8*)oC0V1@X2MgzEi$GKaEXJ4+USg1}=5b>M zK_!FnV%NDl)4dNoV$$>{AO6ksx*vO4TGfr9@5%{@T%%G z>zg*MOB*?%bqeKk6eUOJ40ajWq6`6jY2l)bekEQ2IEz0^#n-RVU-*rFX8}H6}bx0%(0-gM92o6@b{{@ZldS8n38=i?|3ClRE_FoA7j z#en;=yEsvrJ<0jHFqLUmhEU$T^H%{l?@a}`i~#&L1e6Yb3O)+J9z^E~l0s0dfT>gv z=2dR4bg6`^kSoBdY^%h|gYI|tJ4|ZD8<>_Slo-k&do{qv*=p^AL6GAtjH zCyC<;4AZ!39H+upFtY-Z`O~=aVc-mI3jbL#u#hSWS*dWvMW@255T*r)X>`U{K{0Mt z!t<(I>_sO`rNTHNtXXL!b8CT0dIw4r0pRCBSM%x7`yWb2#vkRdILzERk(-1$kD!R} z)wjZYgo!V!|Lj@c``Df7{9QMsZCiFzA6hX;+r01G6>}AG%R0^qQA`?;r(J^AUrjLy zGsqt5m3`gm>)&E;Y&U00Oj6Fde5bdHRL(i0WY*FeK(XC94yC0&72p2feEq2L(l`4itIQVn)dpP)Hf72L-vXdiuCE0bVD>CLbI zwRF)1FT@gpd*~~kotcitvWPFV2I;_(#g*^T;W5~Ox@jFt-}>e!)9rgcmR2!2<2fFv zh_TvdPOjV+9D^_U(7fFeyPaqpUU}AqKbCH|;Z4+UOFE6r-+_637ZX3?>Pg}{`BVPS z@A+hM`PoS)!^}gz&h5zdo7}BHcn3WjE&qj^PzlJ zjmo@bwf_)J-|aKo>7(qITupak!ahsf-M=5F)DuVYP1{!hzXb)*e$$ikJITv)SjHz$ zVi|KV9Xfb>y5l>4mp=2!KjzTCKjt9FyV79Kdd90ZCbmxnEh2OCkAG67a)DI&Fnnou zCVy*WQCI^!p)Crp17F%vuGPALhF9b13Y_v?(&x||p$3b{(qDR;u*8jnB<+m+g`@5X zTu$Ucl=97+H>Ud^*%uS`2EUJ$^50~C`H#Q)rC8vdgS8m9R?r6BN3K%uO1ZpX4sA}D zxFrJE_T#NgkhOPqMt#e(ZdY)!#=denV^1sf)5;|06iWCC&E3zrjCOrVnx8n4K7I48 zX%K6per`oMesYM3wQBOpc0swDI&=}YIGyDMGH>F+PO;kxv~YoEiQIg6lkdpdONMB1=%1E#ox zjOTM4Fo%gfczeIFcVGiD#(7IyhWjY@5`PS@{~4w6yZHHB%9T7S>MognsdP`rujEnE z)PMV4@-|!n6)`xkKJYd%aVoVSaI9UkHFa_|*U`y+>EV6fO1Izj_vx!&|En}MbUK|L zdYqM|A?nWkkgOt5pBp-_>=${20K+qQMkT=sAy=SK=2i6L&?ig|HOW?3HlLzAWYgii$|a5p=uQft zjhGd~{t7d)fjlvm}mps%p5xqVCukVd6j`YDKuuNt)G$CD`0=BwZy=DGkjp7{EU z_$UPm@xs!@YNO=`SK*3VoWf0>;vD!_{>Ha#t~^dq-X2a=pBOuy_B?!3>K4Cw(arK`_gq+y(8Ul{hL`) z?cuOCO`_S#!(H=j(eJ^#^l2)8PRxu9568;36I!F3;NH{Ik`5ofC;jbT{TI&LIF@=l zR${d>7WGr`DwYg>2R5LU`KuFNn`BvTI=%S%cW`y(Rq5FA(cm?eP)&AYf|N>dLM_@& zlmniJ-{VIckk5kmi5HetmYeonAIEx>?`=QQLtZvqL{(^g4+YtF7>H&CTctj?E7HWf z3O00<4T)!%WhqK{SlsY!Ic-P6Re^GXP*;@g8TuH_&_zK%;|kCA?kc$}pzSDUzFYQo zezs}j3eUbv{V_T0FCQhO_HpN*1WZ*t>I#ebXndAayXHOTfDR0ueowHMp zJ)90bc29cvq1)0OcYH2={i}bIKJ~fZ;TpBCrqdG#(^|G0tz^}FihJrOFl+Y;cIlh> z%6$3OuliZ0dZ)Lp!8?0C&A%m^GbM}ghDZgy#x(jDoJyR6t8wL-c=}#`ywu(+KRq%v zkSQRw!P20B&roXuH)2XXxCT$ql7>fp-_SM9<&Z6z`^u3hbaVRDS<~;MCjbnK>*;Y7( z2(^7^eDqcQ1A})D4-Y@2a(=}XSF}C;_~RMnz`OaUNr5H>o-PHN3i{KfSTp`JPJ!#M zPpywU5_0#{?%mri-}l)5k4{gFU&rh$XJH|v%+EX4h4K`m7_`=a!_|Nhs~bFaBPEpuNaCb+0995}}QS){CP4nOK(B_Wg+ zg)@Mv=QwDoxTxSbS}6nuPQ-AQJA^xNAk4TbO{zd4IB~#^%DjTr`oT4r?(R<4Uh|xE z{qwG3)_Pg`;w`r^XrG9EWxIFnV8*;NO^yt+QpA8Od?kR&Szh;kDhS5F$#-3Fi57IJ zebl`y6}K+<8GRL3U1Oe&-#OM3<7IziD|{n(`=s37vpYU|A}xbHt9u98o-l}F(8np$ zr_!Sb?@D*w^M!QF*FKsaxcye>`Y?CdAEF*kPzPhN0^v%OCevM5NqG9L_2uFJ9?&z+ z&;893*U1@9uSFPU^$F$FQ~f>MPyei}qBNtBTF;t<7R6R2B39`M5w-%qaXbLZldl!3 zTj2`|26X0ACIdn# zL5K^bLI%<~p}<3$IMHO>zzyzG*^u@MeJbFQ2kGQ_EeNEAcr62_he~N;>AmD#D|)d; z8BX80{eR-8i8|(*9uh`@%`F7jT=>A!?~Dy^Fums1d-va#&Oh&YoISCbQ@k~iCX6CU zdnW>Pt{(XvN)_KuFto7ZK0G>(nR{Paziu#n_6uL;(4_~{CQRK=bFX(ht4ev2f&`gF z(RTLa{`j;_`V2pw#Wj8x|MF}M_q)K(WnX}4SbcoMOPm64sb_|l=_G(s z#nz*BFVs*;B{Iw<&(5O|_paK)D%w8Qzt2nWdh2hnP3O{d8Vf1YEYBaF4Tjg>p+fknjCDi7Kx<7RY-QJ4HEdM>^w41N&;* zO!Vt``1B|5sAyZhpf6z_yl8v3kF~vp62!OplU1bAPbZAv2x&>4nVz|>Y%9j|S~C@O zGl=-W)qLD`<}ZjsdfS(WSnyH#C=rEk)<}w)jK#Nq8(*$b{Q+=6Gxe3d5kRycczCP{0fJ@eI|YNmj97H z^_l;a?zrb~nf$yZ9Xok{>ZF*1Y=2m_Vil8KoE|=Q4A>l^8B~xEz$bsdL$NFV-{({6 z>dLdc`(5v6zV+Y6D^C9!o|WfParGB?KNIKVTzdZQboj`^BxdxHfC%{HQ(Ud@1bFUCmMz1oiKe!Ea(-rRU}SXc^#g+g zj}MQG++Hc?ZdHU4o32TLCI!A13M{m~?;RV}K$cHeQo=CkY6UDlH_y#5OB!3QMk5aV!^_u}U>$LM6Th>xOCgB_?I4j1J6g zU6FEyDpoj99F&Jte~eR-fl>si1NTL?bD#3@@zd$q7rZIG?H#{~fVzf!ZDY`z?IT{#tMbu~@F@_>k`;HZ zLPR+k^Kc|4V)|CKr`x{$>GXSl_*0==v@P#Ur$-LQiR0V=5&45kb|O>Wea)n+0v8^2 zQ5HOnzvye}kNP-`;0^QF=)W|i#lDMCkJeGa$%?4-%^oq$K|a#n-ea1+XbnPq7pv#{ z)6cx|57R4N`gT_G=9tuA^_nvs+@m~AAJoORo)%2m$57B>6&G`K&ECD*YaG+-o}Sk9 z;Ju$ufAFVo3gp&wu8F#%;AU?txo6m#z2b3CF?gdaWeTxHxi^0-d^u-(`m<=Jv&S%ksIMphAbLTxJA zhw$iES;;n?ujf1b)1PXn&brAaWLkgZ|Xqdo=qb|oaaE8XQS8_)x7~p*mxY`Cw7iiZUZo{dD=<~ z_2;%2rZs`dR;qEf17X>6;>3}3;^g6U>=4^f4(v$}KKwP#+RuCc#ixs3?@A6^WMWN4 zZ-%~fl1b4SjM&6jWxObAyasF4_?DMkDj_|67w}2e2&3`45psm{N1A-E&axCI96#&9 z<%#h;QDdOrwSI!c$_>nYr1e|3q)udu+c|qicmBZY^mFfhS93%Joni8tE9xrjp0016p3$H@Qur*|0N;*Z z!4ELU9Jg9HS>rY!EtI;uJg_#UfBec<(~tc0djiiZFS#J?x$C=3)G?XEnJ)J0(!o6C zTlq>S9wH@u8Tb>i>K)L+ZYU%IRM0rFr1ndA)dU;xQcs@ z53Xs%$<_=UClRuCa&1X_S4X<6)x`3-nrpAXE7%|Oc!0X^NR0T2z zH(aN4t%1JG`}EB*d&{fD$4Wkh%7r59qdJDCnWx{p<06h;L|2oP`y zSIG5U3~~xy8s4){{wrSoO8WY+f6Digr+L)lP`*pvr3_FRAuxaC2MTG0wdsYTT%V!I z11cU_a6)`WndpbM-BG8mf(;EFOvCK;uXn5~q>C?nW!lb4!iG)f#vyclYc{8z-ZeyP zL(t-CD7Z>R&Q-(-On68oH>MG?6y)U_`7TV$qb!sOWjC*c03Slgd-9!1hf24Kk^+)^YC4q!c}rS}0bm0U z{YV<&fji|gzxWYmBu|pI9muPeQROROMFps6m_DDHu2K`H*9RWr1rC@~dcyD&nggXv zt2&pbZ{B)i`jd~oJ*@?gww697n}*XglN~B+%PYl92~b)^eL_d+BW)(9$2kI!J(}vst>GYY;{8{?Q-~2|} zylzJtI*vsJ%1ULb3GUV>yc0B&I#Hc*U{d}%yT6vx)FeX|gVj73^Dn-WX;Zrg3)X5~# z)Z`3`!#EQoozyuKFVYvDu>Wjz?>YNhmve~N_}KpRcc1vZ^v%0�+{cO^j;FE3bo1 zH5roIY(AGkwi2y&CS{hlc5=JM5GR86r1!u3BWc&p>(Z%HQ)%Vu6`0dw`pcw?=G~qR z;)GdlH}tdcsb`bK{&--?!}5ZB?S5@d@y*8`*|sA;+g=J?OI*#%GaopX)b;aK8!;@e zno}C+Sg)WHg~Ku>3Pi-HlTp-L#cKR?9nR zCwF{zPn6@z^Ug~@_0w62d{;LT2%Q{CCPcJJQF9?_L)_$1fAF}!uC$bnN~~^xX%(lD_fnkEbu+@{x4l(YKi)!yDK0!4rto~rmzgIQx^pQgJrtz! z{&IQRc$t?oeF4g+0-!Dg!BF5_N6AWtjZFo`n+!C?b>cx~UFQm`6A7*W*&tPQT8LRfCg9xfKO2%K_p=Kq&3B7RZLb+QRu11V~>xf^DeqPb#d66C%Sh+ zA6GU#A3z00XC2tq#7%|B$pgPfxJGEjik`G-<7N(MJelr(;AYI;ccf8Hb=PGM$~*)D zK`S9<>SWG~h-dMqD#=;IJad$K7`e6=;+C*_fBkCTB?1MBe-%wFlyu3oCX)Vq%LBdr z8&S?5PFG*@hV(Dq{Gqg}Z(BMFot9x*ZGGm6pxoEV1FqP4FqOAm$j`%EMTzRky~~s7 zTep2Oeg5V@Oue)<58d=|xU7(841Jf<^paJfpgw-B@R9s8!v5H6F8xW)9e54A&CS}h zk4{$4D3Os#{e0(eY zzU|5P(ymm1oMa8S_)9;-q8$eWQ%h^xSDp-r{ourPTnK#ew=OJqC^=O+%NXqrQcXG0 z#q6_Jb2^@lb9#QRPY*?$j1|!3v@N$3v~eqS7fQXiS)??~DeL>vp+k44eVog2-*>;1 zzV(g2OJD!eN7LuO`g`fF?|uda{o9x`Kay4wdrjX44sAylrT_py07*naR7f32Jso|i zqoorIm(#S1Beb!Tw676x_T~laF88pKsZ5%Rb`|97GvcJ)lerRJ_}%Y}-9oDRum#`6 zZzYYKL3LO>|JR)53V(wLC@`%v`zGtnwm~(Al|u((zozVcYgVUwAJmlnc)IH1^V7fi z#rLFlz2nX4xmR75)~@bmP#R04LnoN*(gLNGF~2t!2&QQ#b~tTJJVkC~8rwzaN40K} z2hH1wlQ?6bAO|1Gi@~SC=OUc@LahSD�QmE8o~|iTy0WQYole4yqusxC;H?U1jwQ%;z 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 g> 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%0Dyhnz-QouABBr$ym%g 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 yW2^xsBIpuusaF%Z(zj?(Pd91}YPOynQ znLP(DoI3Bck!)6

+hD>da!h4+U9``C0m%z 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�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�{VZa4c7+y|1}1jyE&M^_@DW!Ip=wO>|~w^FDXsn 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ϖaBU2mIfHzjdD6We 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≫ZmIOhF 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%0A14Ky`)+J%JsISUeCS)$WAq?>T;Or;z2V%t zJFXc>1P}GudlKqu5Ba04r&w)x>C#5~AXbl|2KS6>2+SW?4)hnwT%xpl>C&Z-^7~h&=O%s{@8#QPCMW(JhHYVnp?;Q= z?_k7tFo;u_dTa*hSIyv;$NilL<8w}IW=YAYdG8oW}W2|F%aOSSC3+crx%k2C< zO`v`&`N!KYzWcXxeB;Ys(q8kLSGO0v@Sb++)X}!c_ty8eR&Xq?wzcJ}7`0huRQN6^ z%i|qA#*|=y>m99fpxDJ3qvR~74hMFLAP+;11A)o z+o?09@i$NhcMT^_lJA2}5)9~M@ia!;yar)9N*Zl>VqmP3t0P>FEVu&8;4C}?CSe|M z34q9N;Ag5JsRE21Wbd(yx@nw1#-M0VhXcCgr&R6#qi*XLsnCt_)(OhYiq3})D?Ag| z3M8qAdy~viZLv9*MRkC(aTXW;s{l#IlzIiqp<`ej@>p8Nboe6+&?BFDl!ZJpXLu!# zpnqHZvGPTmZkV`+BXJT8E_KEYB6J3vm9#u(k%`MurCXlLE6ba@+PW-Vx+&IGPCQKTj=K{g9_Mm+Zk+>9 zEF>QtAh4|WyYnV&9enTgpkBR504dh+*d#8E&*%V&3;BzFK%e=fAvy?b_1ZdmvYdx< zO%N_l@|IsR)~h32>kMYFirYPq6NY>VUeqBo6Xb-3gE~?d<%&7{dTvS)wUsp7b0a2$ zT>vHEcCU#mS83zPqtko<*Hh6DYm%$@18I^Mkl5U;{d$Izw}Go|O1K06+jqL_t(4Q=fH+Spu!79_k= zjVqPoE(5puG6(t9S^lrhR6im=J1&nBpUfL9P1tVu;x1n^0{O`>O0$a<5Hq))@M@4xxx6Zbv#*oDW* zq#x;Q`Y4S!@cZUKS(e{7m=S;x2mZiwpoV*SKV3@L80)c(t*u|3nIC@-W@na8_ztWF z-%n>A0}IV;3xoE1;}{MGerZM+jP69Z)GB}9$8fT>_Oqo4vX*}hJD+O(4ZAD2BtXI z@>!gCO6c@^SWgBJ0Ak(p+aPCumfN5_{Nk_t8=UzHgi1%OUMi#|^oSSyD%il+^BJB? zTUH_900(#e=tTW=JbDf^>p1}(p z?rB$0(0`~S{_A@n$V0v9z6o4{4aA@JC|{^5@kVNpI&q|kx+OZQ3YjeDiW#z@mphsH zG*1m|5sY%rna}hWz;z?Ve6|iJcAO>9Vjr>YjB({$w;57G}P&4Gw`Z=uhdS zG9UU&U|Tk?2}r-};|QPBD{1tWf0Bm!q+j~DUwGTLEDtQ6MW^^xPwQM5K{#dPoiuyL zAk%#5Ke%I6UGGyRe{4_kEWs(b2OY`;FKDxTfRVTBd-@fg3Cnuqqsbrhr_bO)Rz;}` z;H!3hLBc%@G1lV`=WvKa=c24&Sx znOC^toxl`0oA5|_`s%OnL3;TopT&87jW$PF@lJbSAB1rRMIB_GottdyD^Ik4{*Iq+ zOY5I%Q+s@AVVjjL2*4i2wgCvo=#s#gP<*n@FCJrn?LvFyE8p1ey8ESMa5VvVG1?c$! zTyiD9ysi3xMd3a$YAy%l0PjiU6&pw%E|aWYne=P%``o(Zed%SjowReyr7*DQW0b%3 zn9rlj-%30ehG;lQVyeD`YtB1QYzMI!@Y*2!{P|7x5EyH7vy<)6A!#Hx|Lv#TsB(UB zwmtXmyW4NR^CRukkAJY;eCkZw$cCHHV`T&E(y3}64nl&68TJ^QIPe_FbF^masaT;VgA#?WwDlcpGHu?0^jQYJ_u+Go#Dl;DY%2 zp0Kk88q64Ko@WVPEI0QPC{=*3LtO6{*9f-3W}G*SsY@L*I}bnPiGke~0|#*y^PVDu z3Gxmn(|p-|U9Sbch?mZ>o49H0b(*a{`8CwxnY((|Oe++{DrSi!b?NYyW1_9pA?nK~ zHS*=S=m=`$W88&Jof%jFk^>0VnY`AAKy@C=XmgkPb532g1U{Y=JQG)zQe0#0?1xYk0Lfq=_jx8P;n+re_j%k|6Z7y_8V$(BrKm5NhY8>$ zYT*Sigl$mAN%4$_;+`7$m5=f!g@$YCH`yjaBhvJ}ct53>w&MmA%1PKmpp^WPI%hl% ze<&`9fHA|6ig$jU!KJ4zo3{-ZRQd_Dyd)lc)IpPUdx~lonz@HAAS=_+qr6ASxie|r zn#%0Cd>HhKJZ{CX!R*pLUhpPv|Iml2YvGIh24VXTQygY~)v?e5&kYV;c2Rvq0vU zvX+04zrPwI(4k3LZrE4xTW!Ahm;e#F#9Mgkm30dDTHWcg@}5+fM|ngh{PvXl!0Jz^ zILwr33OFOv6K$z*qYyT6>?7RZ799@GbcnZ24M+ zU!kC_C@cG34p#~ZN1hZ8$bi#YcJ95>#{sd}$!YsdAt|Tmmsj$j4)xJNg76IbZLhTo z2u>uAuPr$cXfgOkeh04X-!^%Dz?DQ!(K;@4_Uyy$k<0(0-FW@8=sz!peuZS+9tWxP zVRB}!t*$t5-r9*1r};~tfj!7(c1nW!qjSnd7}OI^ajiTI{`jE^Y2lZ{*BcCyJ*TjL zDj)d8&JFFG2PE?X6A^a#aEE)TrCHYhyx=Id=3Zba+`s= zDKqNl&YgSD+4C3Qz{_Q?WnKB(x5uYec6|wTVse^5%}=v!vZ>sj8xtkC#YkvaG$PK( z;EG_Txdvbil9tK?!-V~-dz_fxjZ8Lh7#?`&QG)e{+FfUEY+rWQ9ql8$fBrxG$WOGF zf8)2bxBS#UZSQ^mN7~s->uu`Lb?q?A=%yxdfR>+X%a@;QyS%5q&9YBthBpbyv}Fd3 zYb(qAvRNC)9znS8-0lzvlo1q5jUk2*!!$*(Fgx!udUg!Ppg98~3{7^7slPE=8cPV{ z@K;y{TrO8OFmxj|gV}NjHL?b6)&x%o-h5wg$}LxiKu$n{GwFQjz=eA}Pk=|+Y~lm| z%F!+(Z+@>0;GL0owrJA#^r^dKVRt9?1M8tbffjYta?QaJ1%}r;bOy9;UwWFWuq?plxh79Sn= zIL>6OU}caQ`3nbNAZG_3biSn}D zNfFtWuFUd@LwS-f6l6fD97G*SQ|Y&7z)v0gibGP>W02JqeZti(>MViBp@qY!*JQhV zxpzV0Z^5BFKZDB{Xx7-}aqQS}azTSDTDYI(=I~Db8Q96IP2N3UTS3m!$q`uU0Ql96 zx+`aDFid?7Ej)8j#=y_(ywi*Q}8lp&A0=y}nm-joE2@A5l<$x}21Fn=;QJKU@4 zO7@^jeUuqca(8xN3y&D1&ooYxMq1#Q z*Nv!4omLJ&E?y`z^4VwF9|_VG1O|HID*x0Ce`~PEwqNb1`U?9!SC_aV3mZYj_K%%k zl2QXS_7lM3h%QB8C`lzqDE*Z<$Pe|?0N#A^#lFaQsLSTqS1VVf#jy>pzS1GR4p@l0 zIyjB4c!*2q1CPN=xkH#s>>cm}ACrAgK5t3?Fv&9KovqdOzylx3vpwL`d!`?Q3hsHB zqA|I07{f2ITv$5G*_n3ox|^YuflY9ao*~P$g0y}4ul)F%M$CCY7ENC4q#gUP?$xUj zMQ7;)kCKq1fj#|?bZ20h@>Q3sf3#oK2Bh8oEy24C6MPtgJdr7t?(7;1?rmmV>#_=&!g;2DLd#>$VwRqo?14%8uTakf*Vv) zU+jF~4KR6T*%|kjVSxD}GwBa~Vyj)@Yn1j$=F&G|@5Q!Ckp7il{nGX~|HfO|#~=7q zJ9F1_+E^wis8a;VEN#|r@?4%^%ct1)WP_e?VrygL`(E;rXVH0QiTmi&YvI)B&+mr= zwzyFmabU!Oe?JGbHhRf=9|_dYpTB(H`K2pwm|r~n+P&%7x9v>NEbonD%6Tc8&$w)3 z0yk(>494TkWEg%hz!(aRMg60{r^DAkc-@l*d>bRA3!w3x$3f5>eCE+7+e4pxus!>x zQ|*P%eRf-%9&3O1XMdsniU0cB+u!-ox3+)z+wX5ro?l@zxtrTDc8r~!VfJl(xor`k zyDRDJ5NK8X%qFmL+y*R51yi=f2^ zV{TpzW;qe%7-XY9@$sEL40H^tET*guk37&(G3iYD`JpoUI-)hpJr2ywBtWCiW}Fsa zD9&Z(`XW}%J0BV@kJc!VRGQ8 zI#XDIg5^V-`~bEon+L%sg9QghbgXoIQ!n+%(>UMckMk2wQZU!$Tq&0xG)G^kNd9&j zCCy^Rdtu6p+ztNSiISG02O0?)40fzr988uF2XWJhn;c#hsF@P;Igq1MsZ&>ue`Z;z zTfKG$P@Pr3E6^?;cAPDnK@aN5j2`#|Z+-)Z`{Lr!dC#q+Yp;W^%r+rwIW1i8haRw~ zo#UkoeD(Z>R8rxB;==6g?$59NRd#5IqTqLo9o)B?F1|_n152kq*8!RHFj77YGB|PK z1box6SH|d+xkQaaIq6StY%r6|;cmt*wbfznI^?gYif_Lc+yUWzH>^t=U;x23DZ+XGfp>5q_1XT>J#lcuNAJ@D z5;)T;qeu29mX{{WRG(6^RRmQ}=QEJ_ZyWTPGk9k;@!t=>Aaiul}e+GGT-4h`5e3pG-Oker3uW8p^e^dCV z4aw{?_oXEW4m_7uXKHP?CI{DKm)QHwdxLV@N~h(Zk2ME(Q!jn7C&1c&E`0u3AF46% zfj$ae7vDq!`22HF#NX6gVDl`4x#SVH^6`~9d1gK8akVFTdyu-EymPI50GLc2zh0uZ zoh~Q!)O$J7zf1qnKcF+_3l7}tW&O?SuHl(|wE4K3JY(!}F-yO4{@hmk)W>}_kXIUJ zp&is6D3d>vvlH$0Z~TUK=K5E)2S4$#cKq~hZ3X>wf~6!Q)paI~_6v#<-ngVo#r^U} z9=P~j16__nd^Te`!K2?12mT{D;PBQcjW{skz<-zndTl*WcWvF;V^2MGAHVmVIdkT# zR+ldSB^;Hn-`Ltdyr)6M?ZDg-d+ZQO=XFYY?{c7Gyvk0+=-J)plCFGz7G`ipG)fvP z_AQHndi?RH+BnC_lgHZ~$B(tAE}U&|{k31u@y&no747T4_D{BZ@4mC$dh_WvK93X2 z<~FM#G}M{ z;hk)ZxIu|QtJk>ogTcZX<cF3r4IR{qfm~V#S4!2^Zh%(m9wb@^`8b62Sba@ z|2SnjiqxS4qQ!OwUdO~)?_9%+I2zQigCZVVtUxd*iu?v=0?jQoX6qE zaR&*YMT$;>LmZzhA4etx4Dv&kI4h~lvg0+5kCkkj9~iaNba0-b zG5F(XW@eRoGP_Q`?l4)Gxawe~USQE=f_KMVdQ8@7d6*cU2-7;f7Y9uTYzTtj98cs? z>4~&>NOyLA2Zr=G>lUZe+~xtM17pfcd z*_5x~u*;$9psJvk_6-bCRTDvJzs<{IC`$mmvbxf)uB_~Pcj9JjUK9pe0D5f--->zc zQ^68<9ysu!?)o%)T-Xkf8QO(BQxkQe%Vr~&b$phyjWWp}@27rpJTe<9F$sRQ_OSpedo`! zLg?y6X4Kh98$Da#D;CF3+|aH&dAc1rafaSHA7W@oI0c^q@*Ebmu2p!IT)28VooCQYI$a9bpBa8CcYgZn) za>~y>I;-m7DB_FW+drkf*#`pkJ_1+vj$ZoQej|gM+*79V z)AnQi_Inu|l@X*29FlL6>(19L+b2ghJ>|aj@sv7QVWKJlEByvl+Xo8QdevR33d|bh z^VJ#q56WOC%o8;EWBKeE5LnVq*(v&TR%+NM&w;1*fX}zIM;`q|d*bO|Z>LV&-j*&t zh9oF&ixCdz2T3e}mB01mjys;$<`<4ppFzKacNK^ub;=sgkq@MchJxf$_MXx&iX(K% zSA%qEu0AeB_w}N9el5QXpIRMN<<%wozzl@#2nQNOnmV*o;^e*9&H;(^)8MO2coNww zD|y(Hb*PgTw#yM;Q?(s+sje*{{*e=ZqGRAwGwL;1(&47Bq3v0XgA_g4t|$^bv|ZA| zEikJ*U5`pfKm`3zB*Lr7fY#2RWfNF#-+k{4gEQFStKdR&)K1=X>#6obZ~2?;jep@c z+uV`)Hut2jpgD*yuLeT=Np(YeXGcNc^X|sP%*i~HzP2Ook>|X>NM1kv=C{}< zaf+SoN>GS_b*JT7>fFIe+UDK9u|1uta=>?SzSdc~s)2Slc)n=IGaPn!;4D<$%hz!Q zCxh7RwvKT;SbE9@e9<`Tj%YKrof>Qnunu<|5bpKh$X^E{T)t?qVjbdIySjrX(?oIL zbY=-?4dAR#;E<5#Ug$R)_-%2-Vd0)wBp@H~h_gUZVdz`x02?Gs%SUL6!^ATkFK1-L zKTahMiF^&a`O|k!u0W=ir|LxQ`E4tb^|(abL6h);>q6My;)~9bybVp^C&a*`o{COr z#gWXr?t@b<933hh>spo$&%CB;oid%wK2V{Yb-St!aJ8h zOA||!V;^^s6J#>XzT7_kvEL1NY2~FYFst^!(_rEs;hSs$v(rb|6~4Z{aMS7A!Go0` z*ti*Nn{t((>VSQq_$mSe?$94#-mnh^7>DAl+4GW-JUb|3Su<81(ePUMCfJ$l=t6Kr zX2ABo?_R6ZRa%ZJw}Uz=_$}LJf9^oF6S4*W!K$>hwr`@@W}W4{Ae+L5`r z`F7#yb-tB8(Qdz+S0HB41HNj(!U^iwYcIuz`m5jh=Jw-n`JQ&qUH7z4F`GVJ)9m@P3H2vYqwnVC8#&fr0m}CwM$SiR#DV{04h$ypKe^nfz=#9? zC38T#V5h71;f(tB(xpp}uB(Jt{-y$GbC(yZdcWmkihM&n~t=FEr;}FBptq)eq zfX3u?&NL`oYul{A-`F{Ry&vO?F)|=Aq^1?7p@Qvle?Yiqu;`C1AXz@GDc2EMyFo` zBsLf(og#46G15_WR%4o(!^}!L`(l6ssr7DF8OgkVkNqqsL}$zZx zq+%fBROuKxqvNbi(d`V5BmUuq0V9V2WM(7c!RYuq+pDvL(}QQ}3|s(A-|oV*xkuARZwIngQbeeYhC4y#UB zf>SDu6Cn`(%U@}7Wq|c%2Ws%N9(hsvKptq5J{=xY4-UMxyvcf$p){igfgSzgnY5{6 z-SLV3ST}m+Khw4MlAq^30?lHVItdJMlV&wV{NpH-4-At}N6LKiq7pRYOqthZ)Co2m zY>^i8SrVQ(m}AgTO+@Dn9>{BTjenNUd-%Wym6Vs(|DU}#f%Yt^>pbJ_OYU1`Wo2b8 z)CLGbsnb$|0*WgmD(!NlUD4wLv`f#l-L}i1@=9G5W*Mx)DgMiAYpTXy$(QTFsa3uwPo8bB zf79FA9fyy$eeB|X_RM*B1|-1|3QpaKo5jpxxS!;6XHUBBigwLqJCK(vEVj3g9zD}; zyYs#_kG`wI`RFb%G}h&hp;`@{35?9S31;0F+qZtp^V*eHA7Et+d8oelW#PjlGla_T z{JHgZoMoQsm4K?Q6hLW_=IAHS#an~+WA#tmow*8+)dgi7*(xvkkC3JkDY0q&fp$2z+Y*|zyr{PtxTlb z5cyDs4u@@c$^w_r0pE0JN>0Tm$1V?cyyhPZ%mK82> zlUt)KpY+PTWB{=QS=Jq_5{OpU>?-gp$=LoFhZw^51c^ zeD%X}93aHBqB5;=m`*fsup$$@6TK zW5j{Z0ehfFIO+=v=Z^3V<5%yw?6SY$ok;c!y?6yi=^lDTCjKUPy?K3+2Hh@>2#gJm zzC*4X%*BDB^RPpS5ou>ObOIW`b~tucj@){u@wSM8f8yjBFj;F?@t*p=-840cRdMz*eY_xF7P$n#n%v7aPBy3I5}(B;l|j3 z4s{E#!CU&JBWZ&d_vAB9eH1UR#Yy;{3qL@RPMKv;0wilSgpP)IiS-b;j10UL&LG1W zkmzHe#!x!x(Wn~eME2u(IBo~YwUO0 z0G_(zbK}H89=K#%T2G%o-(K^E+uEH+j)`23l6E6JRfhaUE(0&rRpnB$QU|>*xf*9(lm1`;-D0C!R$S@X z28NMMIknkP3Y>hUMx)=ls*@m0>zcE4wv1abkdNH|k@j1^^{ee=zx%`R_gK5;svFwY z`5nxN&9v2pm9}_pp)E5&xsKzsbH`p@`#IRQZ{6MQ`0zX0>)!DD?ZEzP+I837fV`&B zKTw2EIw=mgaZ1_pM@Cw{x>0Qh^(S?XIA}D!>rL^4^gQ=k7C5jJ=mI4epL9G-d!v-p zUD9UeEiyA<)yr&@#*Ol=!Ge;7dBj8Z@|&~uL7k;!(JtIM1$NyM4~^)zb%Xze&f^S{ z1@EHEG-7T0BQ4cNnThw-S>=%S2N@+1KfUcwJ14@#^*Y__h`1VWy>ZaMcBWRu*hW@e zEFPglq_oc4cSzAjTR?p39)hzy79;C(@CAS6B)hZ9gKOpL=PXlKNh|%9QO@wDd~`UC z6Mr3k!!(0I4!SP0uZ07wsAgc#PF-jpxc%04>$`rg?cH^VfvqE?jwC{%d6khtp8L$J z9Xt28Gv`jUr#}5F+mmkj65wx*b3e(zv*k*!NyX2N5+g)&%LmGq2J5AX>Jy#N%Wc$* zeCkBCb?S-f3{`gYj%)SRkoFOvKHa=731!fRXU5Av(+H>9f=zsUP|p1(AFG^X2p#54 z9YGO&bxmFH-hoWh+CO;aKk;>4cGY`k zg@=`M_FcZdM>=2sK@NK^+u5$Y_UiU~zx$i*+DBd6 zP8@p({g+Q5Dh~chlS)hwE@1+hErBD8CdUsv_HmDU`2!C;z-Ael#2Gp1a%dDjDGrPr z^iPUiqr@W)d|VFLo7m%9pPW&@aOTXJhZYvjzhP?U%%9So+FVFf4hpNq#)Nn>OMp?H84+NMw=?P2(vQ1NlOwE?iag)#Bl67bB9E7k} z&QfQW!;)8cjp3~WbpJ}BnG9{iHjLb3!W2j>MiLlO`_$jl( ztFQ@Q#gly9xG2M=Xcu2)ZipcY?xt04DuHEh@Bn;#Ed7=d<3W^&*Fg2K4EfoODa*=^ z`{XlyPX{(JvV|Qvf`o7+#x%yoSW-uTp)nTYjAwy8a9cxOTwGqBnGaxygU*BLm7_sJ zJaPn{&qJT_s!?Df8(~)R;4HDV3=|!a9~}B#(x+~^NHZRefqX_hQcw)cMINPGAF$J$mL2v?VwTppS*s`}Xfq%Xb-Pv=b|+7$(-PaSFh`NjW7d-ZF7 zsa=1~r|@deRD1Y=dl>LI!7}9Y$jncrQMcCJEO416#OK<{(+{;Z1}F~U$gi=?`qsDn zK|6?({-|poO}jKp9(a%y9i?|&M|B`w0Y?j?5U_4%l`ObW*!4Kr;P{h3GJoGnul zwjX|~P&tNn`yqn#x`#)#S=H~DW^QgKbo=hPD-Znk`Hai=S5CIqzwTx2@R4`4>9HC5 zNnbdT9&rl9+)JZ;1qigvGE+XsijLFmi@)Go+D$k8E54TC7gWabHI%T1>o~0BlU;#T z*#RM7pXVV7u~i>Sr%K1XHdLQE;3!<;)WsUCaWEK}!f)$k${gg^ zfhR2m%6kWBV6T0%tKly2dc#aRd)Cz%jnxi5NB0=?^HZLC_U&&U zdH<>Qwzt2sU3K+M?bL~fr98N*n&OuL?&?+Okbg9+3@}}D`oxKQmseL=${42g)RkxS zJL146zyZ{36h<5vao`__16my}Ww+PMXEshBJ$?6yQ>T7@ZrkNwcyW5>8^&g5UOPTN z$F?Gqb8MhCwYGjyM}1|EC7sSH#rdKaqx+)+D1*a2Qexy0XJ=z)=e?bp9iT>(*HajN zvm8q}L3iDIxIK8^eeC?czdi1{t4Y|}PyFA%+n)Z_-`Rfhr+=fp=5=pxM;|zgfwH@8 z*|ry>agulE&T}kboYl;}ots_D6yG7~vmd@UzQ)e%c1AJ$fZIE5jWmOuzXlIjr9+$? zW-EQ{a&qmENsOp1Ter5kd1eh`Bvi+%6CGm#I$|hl6j}nAGy*Qrsg854(U(qgEW z>(pntC*{gh^Q?)t&n=5t8>~j~gTE6EPW0Y1#=|C6sYK)UAWsxYdkza1U=4ZBqnf$^B zZr(!#FXO~r{qtQ@H#e+76Gp~{rT!*xpvSa+W-!Zl(I;`znT>NQ{ql%I`Gup%R@unk zxEEaeiNV>~xi-sti!)rSbK(fWS#=R!!y|E$pDs%^sQV6NsUw#LKqur((&!X14wAX2 zfVlaoHFqR80D2P$^n7fP8`7}EEPQL%WRNU{!eW=j3r6Z}OJEn9t(9Y>ZX1`u76dFl z;VjqkK5frX^q}da#eoNh$Xuo1TKKj5^uR-S;3Gh!j_HW|-l*kS=d@q_b6gKy7n&3SbO#9X#r??|hIppnK^T>#E-D58|XSsfCuUiZ2K zpk5n#eB?+*&vlIs!QZ-1(%>ns;%$AiA<+Rccq^}5_Uv^SgaWCFelxz>dj~X33jmOp z@2Cr3($KM`s_TH#9xf~_q;4h;I;=b<;rT3mjJne4DW^hw3#QNd4&ovq?&^dzs@q;$ z@2rcdhorH+S(OH#tGgW5YopwVPPt|f0gTg5&_38!m|y(lk!_!K)Os%6;U8C15M_G` zV?>ZMk>v4^rf`S626aq$d`TrMlVp)HCmHR8ZG?js)_)y+>NSp;b=-jfUlDPjAOpvw zXEiz-iQV1a_RiNb&~`a{tDGXGauM2aP=HI@y_H^hz9uD*!}l^@c60Y5B=8mCqD66 zv)ksLIWaf;vdJx5m&a%3=UDyDZtvrImdnmC|L3J(Z6Vi#= zEzl!vbV_yiC5AjBB0)D8`kYZ{WsQiN%n2 z?j0p}1}MwOH3Gy{xM7r8;I_sE`T0T~IDrRci9&&>3R@kPKSNY?f3;**h zPMi0Xp<(87Rzn$B@UM^~Ke!Pz>SD-XVSDXf3PLMdy(WZD$(gjKkHmqIyd;q(XFxI_ z!L^PAQ2-MIBF7UILTZXNJC*=%i)ETTRmK$8)hqEo^FjBGx8HdZ_qZb=+9jqXa zc#%_5Tp?iS^cJHMCFnwr#(kL?ri5M6Y|>)E-f_R!IL+lzkb$J(L&*S9mr zkG1916KM+yFE9de4;`Kw%<~?cC5Qs%*p%y@BX_o)JNJc--+lS7wlilRz&Z6jX7ZQ} z`b&=nT%{Ed8TiD}Q;%zg5!!$mr!#tL5zwaY0n2j_#Y^xb%7c{QdD;}g}ysVeVL_R7V{~cfOzE%gQr?wGA-v+Og1?{o$*S7;# zK8m~!1hC%<@~FWF(!vk32lwQXMjb}=rF2XBd+@r7qp*}&=`7p$N^APkB+texYh#pE z>8Z$8owIE7=YX~9bn1g~7OXk|V?&PcG|!1NPqm>YM2^a40G0u0gl7GhPU%)2=8a5f zU(8edhpt=?^-CCpj!Q4E+Ubh-dGSgfR@vScef7+E4@2|?xY8kb@2j77Fx^2b_Zx7) z9~{|K@~)38w}&2JkcYP4_E`KL`^3k$fAh^RZ14Zz9qo!6u5T-VmaiFn0|x$l(NXAI zy|v$FY+=Fj3GMvZuMaYe6LBW>D2zDpiF072FrPTDMkz-e_+&X?SLckn&9`f~$M1R5 zo0bkAe(;qKojCEF9eZ~@eR_WGSH@ zI*yX2;TVNnbjjy{*E+Kp>+GPl4lTSW7AJlRBPu(+f?pqSh~WX226-(WcKl^Pl+mF< z=sWnX5YP~bVK5jDV(gMYH*niDFcnI5=<-s7LE~SiubgQ)r?JLanrWT8F{Cl99ORkK zra|LV!*9b70smx@TW&CS^{2%7P&CK zz?%Ua&-HGqMw7VUL;zp>V-N`!ndwZ)lMIG{zq9Wiou?XNqN*JFJEY+!aR%u&$Oq%) zsk=1Ss{tCK@~52i(vOmtjzf%n5R$K^OIg4WAA`T@uK7c6WZ(digES7@z!!N<*(Dot zprgvxd*e0cLMNZ!Gf01+=f@aRSSClx&K2S+S;oOZhjff|QZ@`z%IQJ6g` z9NGf^>N7?n5I&GYXV_0YEiSl&x--wtSgFIC#%%|xacvpWV*buM@ri@0oY2Fn>s5#S znu89IZA9>rc!Iof#fuwL#;E~voHL%I_9?$RRe7C+o#@|x`#Z^bv~AtKqn$l*gjGQ- zL59D!gsF${z*=Gna=o}XoWXgGRWa1YcF%`zZ;!p<=Jr=_|1-XO{MXP7Zke5irs$u1 zt|j5ZmEO<@eZs5~6cs$D{1oLA%ZIMg@zSZf<{5yB=S92eDu3y=yp`vP1CE0khH|8< zjTNU*!*lh@(DRf`xX+Aw;X;)QZ*3=PWdP1C^}>z6qAir+iUr6kXVgKMl--@eYHyUC zWq15dqij6u*iu^P?sY<^H>;%5E)JEGRP}B*Wm4~yse_4Q=w5vy(mEy2QhhecvP|_c z10nFodp8Pn@J-!`;3+?Pw80ab|6WJsg*>PJ@Z7rUY_EJwTgipx3*U6sXL;+Z6YBTE z;$nPKTfHp|m7h3vUwi8-U)i=z?`CQ)PNzuen&) z)G43mv_W^LrScVmUdyB2Cid%1UR0k@@QSbIF;x4qsq26N)<6q9U8h~3<3kr_Xgem_ zM?bREjvgi7G=uSc#b)dFnf9Eo|LVY6Sbm`G+;$l{R&_{rMQlE`Ja1$%jV*S^@;C|B zSJ%F6Zf@=>V>xK`Mq$K(Pn-io75&6Bj8cv`Fyg=`%>jE$Eq5Dft^V|0AO7%%-*)7o z2VXG1bMCXp=jMLw;_Uprs}oFPOis<>d9KotuvAKWz)pt_fdA?s0Yu}U%3J*qAPMOl zIN6EkuZ%Zm2Yv6+PWi+`$J^0+kFMQ9H7G)_Ifu=iprSO;P>5dVP51@ICi4a9z%}eT;}dnVK;8=c)>9T&gLX-`bQ>>@-57!C zS(Ts@9R5PXSmLk?fX`hHjTW+kcO&ot?YnyK+Ah+4ZjDc)zu@?tE}Xt@J*M`rg5)hDBp@l z0aMNaDSKO?UKcoZ-twhvoz3#5+cMuef7d(S!ad(7I)4tGa|tzdA#|F~qu}O(pK9lj ziB3lTNJC-l4G*rB{=Wm$PhZWtcG-5+HibuVN^L7>llshB;L8`=wShOT9*`zOWKVq8 zyA2((?!%v+#&edeBM8&V-#i;=s9Ska?SR$KL+Xl0Ri^MQJ2KKqQ^zSkx(4s0TUfRY z4#q-N>WU7X-0`q2);SfndfRE}gD>iy4W6>}^^Goj%M|ybwREKh6wC2;-vaq)x{`Tr za^0O^+c^>paB48pfi>}RK&<$}Ku&nNKoe)K&ExE;gNxD{x`Az+&(wd<>X=_UndMck*|9YSciz(;xbQ|c zCEUV*<>~0UYNM7(i+|FcRS(1|gKgV(w+D{i1N6qb=T89kG_M*grQAd&UD2%0D=YP1 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 z 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

#C#`1y&mc98-gf&M_XP}Y6q=T@NRNXYb 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 Cqd*=2 literal 0 HcmV?d00001 diff --git a/docs/zh/index.md b/docs/zh/index.md index bfa81cf4e..265d39745 100644 --- a/docs/zh/index.md +++ b/docs/zh/index.md @@ -3,18 +3,140 @@ layout: home hero: - name: "static-php-cli" + name: "Static PHP" tagline: "在 Linux、macOS、FreeBSD、Windows 上与 PHP 项目一起构建独立的 PHP 二进制文件,并包含流行的扩展。" + image: + src: /images/static-php_nobg.png + alt: Static PHP CLI Logo actions: - theme: brand - text: 指南 + text: 开始使用 link: ./guide/ features: -- title: 静态二进制 - details: 您可以轻松地编译一个独立的 PHP 二进制文件以供嵌入程序使用。包括 cli、fpm、micro。 -- title: phpmicro 自执行二进制 - details: 您可以使用 micro SAPI 编译一个自解压的可执行文件,并将 PHP 代码与二进制文件打包为一个文件。 -- title: 依赖管理 - details: static-php-cli 附带依赖项管理,支持安装不同类型的 PHP 扩展和不同的依赖库。 + - title: 静态 CLI 二进制 + details: 您可以轻松地编译一个独立的 PHP 二进制文件以供通用使用,包括 CLI、FPM SAPI。 + - title: Micro 自解压可执行文件 + details: 您可以编译一个自解压的可执行文件,并将 PHP 源代码与二进制文件打包在一起。 + - title: 依赖管理 + details: static-php-cli 附带依赖项管理,支持安装不同类型的 PHP 扩展。 --- + + + +

+ + + + From 9a2d94cc3398975fae60a4e6b7bc1923a310f878 Mon Sep 17 00:00:00 2001 From: henderkes Date: Tue, 28 Oct 2025 18:50:16 +0100 Subject: [PATCH 139/207] fix debugflags being backwards --- src/SPC/builder/unix/UnixBuilderBase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/builder/unix/UnixBuilderBase.php b/src/SPC/builder/unix/UnixBuilderBase.php index 85fb61517..6249274c6 100644 --- a/src/SPC/builder/unix/UnixBuilderBase.php +++ b/src/SPC/builder/unix/UnixBuilderBase.php @@ -339,7 +339,7 @@ protected function buildFrankenphp(): void $dynamic_exports = ' ' . $dynamicSymbolsArgument; } } - $debugFlags = $this->getOption('no-strip') ? '-w -s ' : ''; + $debugFlags = $this->getOption('no-strip') ? '' : '-w -s '; $extLdFlags = "-extldflags '-pie{$dynamic_exports} {$this->arch_ld_flags}'"; $muslTags = ''; $staticFlags = ''; From 6a4ad343245af6474ab424e23a3ad880b3592fac Mon Sep 17 00:00:00 2001 From: Jerry Ma Date: Wed, 29 Oct 2025 11:54:35 +0800 Subject: [PATCH 140/207] Add trader extension support (#951) --- config/ext.json | 8 ++++++++ config/source.json | 10 ++++++++++ src/globals/test-extensions.php | 18 +++++++++--------- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/config/ext.json b/config/ext.json index e5aa0ce3d..615be72ba 100644 --- a/config/ext.json +++ b/config/ext.json @@ -988,6 +988,14 @@ "type": "builtin", "build-with-php": true }, + "trader": { + "support": { + "BSD": "wip", + "Windows": "wip" + }, + "type": "external", + "source": "ext-trader" + }, "uuid": { "support": { "Windows": "wip", diff --git a/config/source.json b/config/source.json index fd0301be7..0ba328eb8 100644 --- a/config/source.json +++ b/config/source.json @@ -233,6 +233,16 @@ "path": "LICENSE" } }, + "ext-trader": { + "type": "url", + "url": "https://pecl.php.net/get/trader", + "path": "php-src/ext/trader", + "filename": "trader.tgz", + "license": { + "type": "file", + "path": "LICENSE" + } + }, "ext-uuid": { "type": "url", "url": "https://pecl.php.net/get/uuid", diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index f5855dc8d..8fbd8574a 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -23,15 +23,15 @@ // test os (macos-15-intel, macos-15, ubuntu-latest, windows-latest are available) $test_os = [ - // 'macos-15-intel', // bin/spc for x86_64 - // '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-22.04-arm', // bin/spc-gnu-docker for arm64 - // 'ubuntu-24.04-arm', // bin/spc for arm64 + 'macos-15-intel', // bin/spc for x86_64 + '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-22.04-arm', // bin/spc-gnu-docker for arm64 + 'ubuntu-24.04-arm', // bin/spc for arm64 // 'windows-2022', // .\bin\spc.ps1 - 'windows-2025', + // 'windows-2025', ]; // whether enable thread safe @@ -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' => 'pdo_pgsql', + 'Linux', 'Darwin' => 'trader', 'Windows' => 'bcmath,bz2,calendar,ctype,curl,dba,dom,exif,ffi,fileinfo,filter,ftp,iconv,libxml,mbregex,mbstring,mysqli,mysqlnd,opcache,openssl,pdo,pdo_mysql,pdo_sqlite,pdo_sqlsrv,phar,session,shmop,simdjson,simplexml,soap,sockets,sqlite3,sqlsrv,ssh2,sysvshm,tokenizer,xml,xmlreader,xmlwriter,yaml,zip,zlib', }; From b05bdcd83d8ef3b66d545b341a6157f92eed1dc6 Mon Sep 17 00:00:00 2001 From: Jerry Ma Date: Wed, 29 Oct 2025 11:56:36 +0800 Subject: [PATCH 141/207] Add snmp and net-snmp support for macOS and Linux (#946) Co-authored-by: Marc --- config/ext.json | 12 +++ config/lib.json | 11 +++ config/source.json | 8 ++ src/SPC/builder/extension/snmp.php | 29 ++++++ src/SPC/builder/linux/library/net_snmp.php | 12 +++ src/SPC/builder/linux/library/openssl.php | 2 +- src/SPC/builder/macos/library/net_snmp.php | 12 +++ src/SPC/builder/macos/library/openssl.php | 2 +- src/SPC/builder/unix/library/net_snmp.php | 49 ++++++++++ src/SPC/doctor/item/LinuxToolCheckList.php | 2 +- .../util/executor/UnixAutoconfExecutor.php | 6 ++ src/globals/extra/snmp-ext-config-old.m4 | 92 +++++++++++++++++++ 12 files changed, 234 insertions(+), 3 deletions(-) create mode 100644 src/SPC/builder/extension/snmp.php create mode 100644 src/SPC/builder/linux/library/net_snmp.php create mode 100644 src/SPC/builder/macos/library/net_snmp.php create mode 100644 src/SPC/builder/unix/library/net_snmp.php create mode 100644 src/globals/extra/snmp-ext-config-old.m4 diff --git a/config/ext.json b/config/ext.json index 615be72ba..303e0ddee 100644 --- a/config/ext.json +++ b/config/ext.json @@ -756,6 +756,18 @@ "apcu" ] }, + "snmp": { + "support": { + "Windows": "wip", + "BSD": "wip" + }, + "type": "builtin", + "arg-type-unix": "with", + "arg-type-windows": "with", + "lib-depends": [ + "net-snmp" + ] + }, "soap": { "support": { "BSD": "wip" diff --git a/config/lib.json b/config/lib.json index c3d864f4c..f40a8181d 100644 --- a/config/lib.json +++ b/config/lib.json @@ -697,6 +697,17 @@ "libncurses.a" ] }, + "net-snmp": { + "source": "net-snmp", + "pkg-configs": [ + "netsnmp", + "netsnmp-agent" + ], + "lib-depends": [ + "openssl", + "zlib" + ] + }, "nghttp2": { "source": "nghttp2", "static-libs-unix": [ diff --git a/config/source.json b/config/source.json index 0ba328eb8..ee3f8948b 100644 --- a/config/source.json +++ b/config/source.json @@ -820,6 +820,14 @@ "path": "COPYING" } }, + "net-snmp": { + "type": "ghtagtar", + "repo": "net-snmp/net-snmp", + "license": { + "type": "file", + "path": "COPYING" + } + }, "nghttp2": { "type": "ghrel", "repo": "nghttp2/nghttp2", diff --git a/src/SPC/builder/extension/snmp.php b/src/SPC/builder/extension/snmp.php new file mode 100644 index 000000000..488fc81ec --- /dev/null +++ b/src/SPC/builder/extension/snmp.php @@ -0,0 +1,29 @@ +builder->getPHPVersionID() < 80400) { + FileSystem::copy(ROOT_DIR . '/src/globals/extra/snmp-ext-config-old.m4', "{$this->source_dir}/config.m4"); + } + $libs = implode(' ', PkgConfigUtil::getLibsArray('netsnmp')); + FileSystem::replaceFileStr( + "{$this->source_dir}/config.m4", + 'PHP_EVAL_LIBLINE([$SNMP_LIBS], [SNMP_SHARED_LIBADD])', + "SNMP_LIBS=\"{$libs}\"\nPHP_EVAL_LIBLINE([\$SNMP_LIBS], [SNMP_SHARED_LIBADD])" + ); + return true; + } +} diff --git a/src/SPC/builder/linux/library/net_snmp.php b/src/SPC/builder/linux/library/net_snmp.php new file mode 100644 index 000000000..249b28aaf --- /dev/null +++ b/src/SPC/builder/linux/library/net_snmp.php @@ -0,0 +1,12 @@ +source_dir}/configure", 'LIBS="-lssl ${OPENSSL_LIBS}"', 'LIBS="-lssl ${OPENSSL_LIBS} -lpthread -ldl"'); + return true; + } + return false; + } + + protected function build(): void + { + // use --static for PKG_CONFIG + UnixAutoconfExecutor::create($this) + ->setEnv(['PKG_CONFIG' => getenv('PKG_CONFIG') . ' --static']) + ->configure( + '--disable-mibs', + '--without-nl', + '--disable-agent', + '--disable-applications', + '--disable-manuals', + '--disable-scripts', + '--disable-embedded-perl', + '--without-perl-modules', + '--with-out-mib-modules="if-mib host disman/event-mib ucd-snmp/diskio mibII"', + '--with-out-transports="Unix"', + '--with-mib-modules=""', + '--enable-mini-agent', + '--with-default-snmp-version="3"', + '--with-sys-contact="@@no.where"', + '--with-sys-location="Unknown"', + '--with-logfile="/var/log/snmpd.log"', + '--with-persistent-directory="/var/lib/net-snmp"', + '--with-openssl=' . BUILD_ROOT_PATH, + '--with-zlib=' . BUILD_ROOT_PATH, + )->make(with_install: 'installheaders installlibs install_pkgconfig'); + $this->patchPkgconfPrefix(); + } +} diff --git a/src/SPC/doctor/item/LinuxToolCheckList.php b/src/SPC/doctor/item/LinuxToolCheckList.php index a23ad6d57..ab8144a21 100644 --- a/src/SPC/doctor/item/LinuxToolCheckList.php +++ b/src/SPC/doctor/item/LinuxToolCheckList.php @@ -40,7 +40,7 @@ class LinuxToolCheckList 'tar', 'unzip', 'gzip', 'gcc', 'g++', 'bzip2', 'cmake', 'patch', 'which', 'xz', 'libtool', 'gettext-devel', - 'patchelf', + 'patchelf', 'file', ]; public const TOOLS_ARCH = [ diff --git a/src/SPC/util/executor/UnixAutoconfExecutor.php b/src/SPC/util/executor/UnixAutoconfExecutor.php index f196cb1ce..e04fe4f9c 100644 --- a/src/SPC/util/executor/UnixAutoconfExecutor.php +++ b/src/SPC/util/executor/UnixAutoconfExecutor.php @@ -115,6 +115,12 @@ public function removeConfigureArgs(...$args): static return $this; } + public function setEnv(array $env): static + { + $this->shell->setEnv($env); + return $this; + } + public function appendEnv(array $env): static { $this->shell->appendEnv($env); diff --git a/src/globals/extra/snmp-ext-config-old.m4 b/src/globals/extra/snmp-ext-config-old.m4 new file mode 100644 index 000000000..22cab40ad --- /dev/null +++ b/src/globals/extra/snmp-ext-config-old.m4 @@ -0,0 +1,92 @@ +PHP_ARG_WITH([snmp], + [for SNMP support], + [AS_HELP_STRING([[--with-snmp[=DIR]]], + [Include SNMP support. Use PKG_CONFIG_PATH (or SNMP_CFLAGS and SNMP_LIBS) + environment variables, or alternatively the optional DIR argument to + customize where to look for the net-snmp-config utility of the NET-SNMP + library.])]) + +if test "$PHP_SNMP" != "no"; then + snmp_found=no + AS_VAR_IF([PHP_SNMP], [yes], + [PKG_CHECK_MODULES([SNMP], [netsnmp >= 5.3], [snmp_found=yes], [:])]) + + AS_VAR_IF([snmp_found], [no], [ + AS_VAR_IF([PHP_SNMP], [yes], + [AC_PATH_PROG([SNMP_CONFIG], [net-snmp-config],, [/usr/local/bin:$PATH])], + [SNMP_CONFIG="$PHP_SNMP/bin/net-snmp-config"]) + + AS_IF([test ! -x "$SNMP_CONFIG"], + [AC_MSG_ERROR(m4_text_wrap([ + Could not find net-snmp-config binary. Please check your net-snmp + installation. + ]))]) + + snmp_version=$($SNMP_CONFIG --version) + AS_VERSION_COMPARE([$snmp_version], [5.3], + [AC_MSG_ERROR(m4_text_wrap([ + Net-SNMP version 5.3 or greater required (detected $snmp_version). + ]))]) + + SNMP_PREFIX=$($SNMP_CONFIG --prefix) + SNMP_CFLAGS="-I${SNMP_PREFIX}/include" + SNMP_LIBS=$($SNMP_CONFIG --netsnmp-libs) + SNMP_LIBS="$SNMP_LIBS $($SNMP_CONFIG --external-libs)" + + AS_IF([test -z "$SNMP_LIBS" || test -z "$SNMP_PREFIX"], + [AC_MSG_ERROR(m4_text_wrap([ + Could not find the required paths. Please check your net-snmp + installation. + ]))]) + ]) + + PHP_EVAL_INCLINE([$SNMP_CFLAGS]) + PHP_EVAL_LIBLINE([$SNMP_LIBS], [SNMP_SHARED_LIBADD]) + SNMP_LIBNAME=netsnmp + + dnl Test build. + PHP_CHECK_LIBRARY([$SNMP_LIBNAME], [init_snmp], + [AC_DEFINE([HAVE_SNMP], [1], + [Define to 1 if the PHP extension 'snmp' is available.])], + [AC_MSG_FAILURE([SNMP sanity check failed.])], + [$SNMP_SHARED_LIBADD]) + + dnl Check whether shutdown_snmp_logging() exists. + PHP_CHECK_LIBRARY([$SNMP_LIBNAME], [shutdown_snmp_logging], + [AC_DEFINE([HAVE_SHUTDOWN_SNMP_LOGGING], [1], + [Define to 1 if SNMP library has the 'shutdown_snmp_logging' function.])], + [], + [$SNMP_SHARED_LIBADD]) + + CFLAGS_SAVE=$CFLAGS + LIBS_SAVE=$LIBS + CFLAGS="$CFLAGS $SNMP_CFLAGS" + LIBS="$LIBS $SNMP_LIBS" + + AC_CHECK_DECL([usmHMAC192SHA256AuthProtocol], + [AC_DEFINE([HAVE_SNMP_SHA256], [1], + [Define to 1 if SNMP library has the 'usmHMAC192SHA256AuthProtocol' + array.])], + [], + [ + #include + #include + ]) + + AC_CHECK_DECL([usmHMAC384SHA512AuthProtocol], + [AC_DEFINE([HAVE_SNMP_SHA512], [1], + [Define to 1 if SNMP library has the 'usmHMAC384SHA512AuthProtocol' + array.])], + [], + [ + #include + #include + ]) + + CFLAGS=$CFLAGS_SAVE + LIBS=$LIBS_SAVE + + PHP_NEW_EXTENSION([snmp], [snmp.c], [$ext_shared]) + PHP_ADD_EXTENSION_DEP(snmp, spl) + PHP_SUBST([SNMP_SHARED_LIBADD]) +fi From b88a68dab840e74cadd5b64957a71c07733258ff Mon Sep 17 00:00:00 2001 From: henderkes Date: Wed, 29 Oct 2025 18:55:26 +0100 Subject: [PATCH 142/207] fix postgresql libraries when --with-suggested-libs is false --- config/lib.json | 4 ++-- src/SPC/builder/unix/library/postgresql.php | 2 +- src/SPC/util/DependencyUtil.php | 19 ++++++++++++++++++- src/SPC/util/SPCConfigUtil.php | 3 ++- 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/config/lib.json b/config/lib.json index c3d864f4c..4f1dd601e 100644 --- a/config/lib.json +++ b/config/lib.json @@ -607,8 +607,8 @@ }, "libxml2": { "source": "libxml2", - "static-libs-unix": [ - "libxml2.a" + "pkg-configs": [ + "libxml-2.0" ], "static-libs-windows": [ "libxml2s.lib", diff --git a/src/SPC/builder/unix/library/postgresql.php b/src/SPC/builder/unix/library/postgresql.php index 67935d14c..a81f93de4 100644 --- a/src/SPC/builder/unix/library/postgresql.php +++ b/src/SPC/builder/unix/library/postgresql.php @@ -46,7 +46,7 @@ public function patchBeforeBuild(): bool protected function build(): void { $libs = array_map(fn ($x) => $x->getName(), $this->getDependencies()); - $spc = new SPCConfigUtil($this->getBuilder(), ['no_php' => true, 'libs_only_deps' => true]); + $spc = new SPCConfigUtil($this->builder, ['no_php' => true, 'libs_only_deps' => true]); $config = $spc->config(libraries: $libs, include_suggest_lib: $this->builder->getOption('with-suggested-libs')); $env_vars = [ diff --git a/src/SPC/util/DependencyUtil.php b/src/SPC/util/DependencyUtil.php index 83123f65a..c300832de 100644 --- a/src/SPC/util/DependencyUtil.php +++ b/src/SPC/util/DependencyUtil.php @@ -105,7 +105,7 @@ public static function getLibs(array $libs, bool $include_suggested_libs = false * @param array $additional_libs Array of additional libraries * @return array Ordered array of extension names */ - public static function getExtsAndLibs(array $exts, array $additional_libs = [], bool $include_suggested_exts = false, bool $include_suggested_libs = false): array + public static function getExtsAndLibs(array $exts, array $additional_libs = [], bool $include_suggested_exts = false, bool $include_suggested_libs = false, array $extra_libraries_from_builder = []): array { $dep_list = self::platExtToLibs(); @@ -144,6 +144,23 @@ public static function getExtsAndLibs(array $exts, array $additional_libs = [], $dep_list[$name]['suggests'] = array_values($dep_list[$name]['suggests']); } } + // include suggested libraries + if ($extra_libraries_from_builder) { + // check every deps suggests + foreach ($dep_list as $name => $obj) { + $del_list = []; + foreach ($obj['suggests'] as $id => $suggest) { + if (!str_starts_with($suggest, 'ext@') && in_array($suggest, $extra_libraries_from_builder)) { + $dep_list[$name]['depends'][] = $suggest; + $del_list[] = $id; + } + } + foreach ($del_list as $id) { + unset($dep_list[$name]['suggests'][$id]); + } + $dep_list[$name]['suggests'] = array_values($dep_list[$name]['suggests']); + } + } // convert ext_name to ext@ext_name $origin_exts = $exts; diff --git a/src/SPC/util/SPCConfigUtil.php b/src/SPC/util/SPCConfigUtil.php index f321ca102..d7f35efbd 100644 --- a/src/SPC/util/SPCConfigUtil.php +++ b/src/SPC/util/SPCConfigUtil.php @@ -62,7 +62,8 @@ public function config(array $extensions = [], array $libraries = [], bool $incl $extensions[] = $ext; } } - [$extensions, $libraries] = DependencyUtil::getExtsAndLibs($extensions, $libraries, $include_suggest_ext, $include_suggest_lib); + $extra_builder_libs = $this->builder?->getLibs() ?? []; + [$extensions, $libraries] = DependencyUtil::getExtsAndLibs($extensions, $libraries, $include_suggest_ext, $include_suggest_lib, array_map(fn ($l) => $l->getName(), $extra_builder_libs)); ob_start(); if ($this->builder === null) { From ff15973a255736d59ec893c5043fc462be5010cd Mon Sep 17 00:00:00 2001 From: henderkes Date: Fri, 31 Oct 2025 09:08:15 +0100 Subject: [PATCH 143/207] suggestions --- src/SPC/builder/unix/library/postgresql.php | 2 +- src/SPC/util/DependencyUtil.php | 19 +------------------ src/SPC/util/SPCConfigUtil.php | 3 +-- 3 files changed, 3 insertions(+), 21 deletions(-) diff --git a/src/SPC/builder/unix/library/postgresql.php b/src/SPC/builder/unix/library/postgresql.php index a81f93de4..e55b6e93a 100644 --- a/src/SPC/builder/unix/library/postgresql.php +++ b/src/SPC/builder/unix/library/postgresql.php @@ -45,7 +45,7 @@ public function patchBeforeBuild(): bool protected function build(): void { - $libs = array_map(fn ($x) => $x->getName(), $this->getDependencies()); + $libs = array_map(fn ($x) => $x->getName(), $this->getDependencies(true)); $spc = new SPCConfigUtil($this->builder, ['no_php' => true, 'libs_only_deps' => true]); $config = $spc->config(libraries: $libs, include_suggest_lib: $this->builder->getOption('with-suggested-libs')); diff --git a/src/SPC/util/DependencyUtil.php b/src/SPC/util/DependencyUtil.php index c300832de..83123f65a 100644 --- a/src/SPC/util/DependencyUtil.php +++ b/src/SPC/util/DependencyUtil.php @@ -105,7 +105,7 @@ public static function getLibs(array $libs, bool $include_suggested_libs = false * @param array $additional_libs Array of additional libraries * @return array Ordered array of extension names */ - public static function getExtsAndLibs(array $exts, array $additional_libs = [], bool $include_suggested_exts = false, bool $include_suggested_libs = false, array $extra_libraries_from_builder = []): array + public static function getExtsAndLibs(array $exts, array $additional_libs = [], bool $include_suggested_exts = false, bool $include_suggested_libs = false): array { $dep_list = self::platExtToLibs(); @@ -144,23 +144,6 @@ public static function getExtsAndLibs(array $exts, array $additional_libs = [], $dep_list[$name]['suggests'] = array_values($dep_list[$name]['suggests']); } } - // include suggested libraries - if ($extra_libraries_from_builder) { - // check every deps suggests - foreach ($dep_list as $name => $obj) { - $del_list = []; - foreach ($obj['suggests'] as $id => $suggest) { - if (!str_starts_with($suggest, 'ext@') && in_array($suggest, $extra_libraries_from_builder)) { - $dep_list[$name]['depends'][] = $suggest; - $del_list[] = $id; - } - } - foreach ($del_list as $id) { - unset($dep_list[$name]['suggests'][$id]); - } - $dep_list[$name]['suggests'] = array_values($dep_list[$name]['suggests']); - } - } // convert ext_name to ext@ext_name $origin_exts = $exts; diff --git a/src/SPC/util/SPCConfigUtil.php b/src/SPC/util/SPCConfigUtil.php index d7f35efbd..f321ca102 100644 --- a/src/SPC/util/SPCConfigUtil.php +++ b/src/SPC/util/SPCConfigUtil.php @@ -62,8 +62,7 @@ public function config(array $extensions = [], array $libraries = [], bool $incl $extensions[] = $ext; } } - $extra_builder_libs = $this->builder?->getLibs() ?? []; - [$extensions, $libraries] = DependencyUtil::getExtsAndLibs($extensions, $libraries, $include_suggest_ext, $include_suggest_lib, array_map(fn ($l) => $l->getName(), $extra_builder_libs)); + [$extensions, $libraries] = DependencyUtil::getExtsAndLibs($extensions, $libraries, $include_suggest_ext, $include_suggest_lib); ob_start(); if ($this->builder === null) { From 5a6a33303c5242032a3bbe0211786b2e762a3811 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Fri, 31 Oct 2025 16:48:21 +0800 Subject: [PATCH 144/207] Export php binary debug symbols for mac, linux and windows --- src/SPC/builder/linux/LinuxBuilder.php | 89 +++++----------------- src/SPC/builder/macos/MacOSBuilder.php | 48 +++++------- src/SPC/builder/unix/UnixBuilderBase.php | 71 +++++++++++++---- src/SPC/builder/windows/WindowsBuilder.php | 78 ++++++++++++------- src/SPC/store/FileSystem.php | 3 + 5 files changed, 151 insertions(+), 138 deletions(-) diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index 3995c3a85..5ffa6a4d6 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -5,7 +5,6 @@ namespace SPC\builder\linux; use SPC\builder\unix\UnixBuilderBase; -use SPC\exception\PatchException; use SPC\exception\WrongUsageException; use SPC\store\Config; use SPC\store\FileSystem; @@ -194,14 +193,6 @@ protected function buildCli(): void 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'); - } - if ($this->getOption('with-upx-pack')) { - shell()->cd(SOURCE_PATH . '/php-src/sapi/cli') - ->exec(getenv('UPX_EXEC') . ' --best php'); - } - $this->deployBinary(BUILD_TARGET_CLI); } @@ -213,14 +204,6 @@ protected function buildCgi(): void ->exec('sed -i "s|//lib|/lib|g" Makefile') ->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'); - } - if ($this->getOption('with-upx-pack')) { - shell()->cd(SOURCE_PATH . '/php-src/sapi/cgi') - ->exec(getenv('UPX_EXEC') . ' --best php-cgi'); - } - $this->deployBinary(BUILD_TARGET_CGI); } @@ -232,29 +215,29 @@ protected function buildMicro(): void if ($this->getPHPVersionID() < 80000) { throw new WrongUsageException('phpmicro only support PHP >= 8.0!'); } - if ($this->getExt('phar')) { - $this->phar_patched = true; - SourcePatcher::patchMicroPhar($this->getPHPVersionID()); - } - - $enable_fake_cli = $this->getOption('with-micro-fake-cli', false) ? ' -DPHP_MICRO_FAKE_CLI' : ''; - $vars = $this->getMakeExtraVars(); - - // patch fake cli for micro - $vars['EXTRA_CFLAGS'] .= $enable_fake_cli; - $vars = SystemUtil::makeEnvVarString($vars); - $concurrency = getenv('SPC_CONCURRENCY') ? '-j' . getenv('SPC_CONCURRENCY') : ''; + try { + if ($this->getExt('phar')) { + $this->phar_patched = true; + SourcePatcher::patchMicroPhar($this->getPHPVersionID()); + } - shell()->cd(SOURCE_PATH . '/php-src') - ->exec('sed -i "s|//lib|/lib|g" Makefile') - ->exec("make {$concurrency} {$vars} micro"); + $enable_fake_cli = $this->getOption('with-micro-fake-cli', false) ? ' -DPHP_MICRO_FAKE_CLI' : ''; + $vars = $this->getMakeExtraVars(); - $this->processMicroUPX(); + // patch fake cli for micro + $vars['EXTRA_CFLAGS'] .= $enable_fake_cli; + $vars = SystemUtil::makeEnvVarString($vars); + $concurrency = getenv('SPC_CONCURRENCY') ? '-j' . getenv('SPC_CONCURRENCY') : ''; - $this->deployBinary(BUILD_TARGET_MICRO); + shell()->cd(SOURCE_PATH . '/php-src') + ->exec('sed -i "s|//lib|/lib|g" Makefile') + ->exec("make {$concurrency} {$vars} micro"); - if ($this->phar_patched) { - SourcePatcher::unpatchMicroPhar(); + $this->deployBinary(BUILD_TARGET_MICRO); + } finally { + if ($this->phar_patched) { + SourcePatcher::unpatchMicroPhar(); + } } } @@ -269,13 +252,6 @@ protected function buildFpm(): void ->exec('sed -i "s|//lib|/lib|g" Makefile') ->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'); - } - if ($this->getOption('with-upx-pack')) { - shell()->cd(SOURCE_PATH . '/php-src/sapi/fpm') - ->exec(getenv('UPX_EXEC') . ' --best php-fpm'); - } $this->deployBinary(BUILD_TARGET_FPM); } @@ -390,31 +366,4 @@ private function getMakeExtraVars(): array 'EXTRA_LDFLAGS_PROGRAM' => "-L{$lib} {$static} -pie", ]); } - - /** - * Strip micro.sfx for Linux. - * The micro.sfx does not support UPX directly, but we can remove UPX-info segment to adapt. - * This will also make micro.sfx with upx-packed more like a malware fore antivirus :( - */ - private function processMicroUPX(): void - { - if (version_compare($this->getMicroVersion(), '0.2.0') >= 0 && !$this->getOption('no-strip', false)) { - shell()->exec('strip --strip-unneeded ' . SOURCE_PATH . '/php-src/sapi/micro/micro.sfx'); - - if ($this->getOption('with-upx-pack')) { - // strip first - shell()->exec(getenv('UPX_EXEC') . ' --best ' . SOURCE_PATH . '/php-src/sapi/micro/micro.sfx'); - // cut binary with readelf - [$ret, $out] = shell()->execWithResult('readelf -l ' . SOURCE_PATH . '/php-src/sapi/micro/micro.sfx | awk \'/LOAD|GNU_STACK/ {getline; print $1, $2, $3, $4, $6, $7}\''); - $out[1] = explode(' ', $out[1]); - $offset = $out[1][0]; - if ($ret !== 0 || !str_starts_with($offset, '0x')) { - throw new PatchException('phpmicro UPX patcher', 'Cannot find offset in readelf output'); - } - $offset = hexdec($offset); - // remove upx extra wastes - file_put_contents(SOURCE_PATH . '/php-src/sapi/micro/micro.sfx', substr(file_get_contents(SOURCE_PATH . '/php-src/sapi/micro/micro.sfx'), 0, $offset)); - } - } - } } diff --git a/src/SPC/builder/macos/MacOSBuilder.php b/src/SPC/builder/macos/MacOSBuilder.php index bcfaf6cf0..d3bc5d194 100644 --- a/src/SPC/builder/macos/MacOSBuilder.php +++ b/src/SPC/builder/macos/MacOSBuilder.php @@ -189,9 +189,6 @@ protected function buildCli(): void $shell = shell()->cd(SOURCE_PATH . '/php-src'); $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'); - } $this->deployBinary(BUILD_TARGET_CLI); } @@ -202,9 +199,6 @@ protected function buildCgi(): void $shell = shell()->cd(SOURCE_PATH . '/php-src'); $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'); - } $this->deployBinary(BUILD_TARGET_CGI); } @@ -216,31 +210,30 @@ protected function buildMicro(): void if ($this->getPHPVersionID() < 80000) { throw new WrongUsageException('phpmicro only support PHP >= 8.0!'); } - if ($this->getExt('phar')) { - $this->phar_patched = true; - SourcePatcher::patchMicroPhar($this->getPHPVersionID()); - } - $enable_fake_cli = $this->getOption('with-micro-fake-cli', false) ? ' -DPHP_MICRO_FAKE_CLI' : ''; - $vars = $this->getMakeExtraVars(); + try { + if ($this->getExt('phar')) { + $this->phar_patched = true; + SourcePatcher::patchMicroPhar($this->getPHPVersionID()); + } - // patch fake cli for micro - $vars['EXTRA_CFLAGS'] .= $enable_fake_cli; - $vars = SystemUtil::makeEnvVarString($vars); + $enable_fake_cli = $this->getOption('with-micro-fake-cli', false) ? ' -DPHP_MICRO_FAKE_CLI' : ''; + $vars = $this->getMakeExtraVars(); - $shell = shell()->cd(SOURCE_PATH . '/php-src'); - // build - $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'); - } + // patch fake cli for micro + $vars['EXTRA_CFLAGS'] .= $enable_fake_cli; + $vars = SystemUtil::makeEnvVarString($vars); - $this->deployBinary(BUILD_TARGET_MICRO); + $shell = shell()->cd(SOURCE_PATH . '/php-src'); + // build + $concurrency = getenv('SPC_CONCURRENCY') ? '-j' . getenv('SPC_CONCURRENCY') : ''; + $shell->exec("make {$concurrency} {$vars} micro"); - if ($this->phar_patched) { - SourcePatcher::unpatchMicroPhar(); + $this->deployBinary(BUILD_TARGET_MICRO); + } finally { + if ($this->phar_patched) { + SourcePatcher::unpatchMicroPhar(); + } } } @@ -254,9 +247,6 @@ protected function buildFpm(): void $shell = shell()->cd(SOURCE_PATH . '/php-src'); $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'); - } $this->deployBinary(BUILD_TARGET_FPM); } diff --git a/src/SPC/builder/unix/UnixBuilderBase.php b/src/SPC/builder/unix/UnixBuilderBase.php index 0d123d1f0..8122bf2c8 100644 --- a/src/SPC/builder/unix/UnixBuilderBase.php +++ b/src/SPC/builder/unix/UnixBuilderBase.php @@ -6,6 +6,7 @@ use SPC\builder\BuilderBase; use SPC\builder\linux\SystemUtil as LinuxSystemUtil; +use SPC\exception\PatchException; use SPC\exception\SPCException; use SPC\exception\SPCInternalException; use SPC\exception\ValidationException; @@ -210,21 +211,71 @@ protected function sanityCheck(int $build_target): void /** * Deploy the binary file to the build bin path. * - * @param int $type Type integer, one of BUILD_TARGET_CLI, BUILD_TARGET_MICRO, BUILD_TARGET_FPM + * @param int $type Type integer, one of BUILD_TARGET_CLI, BUILD_TARGET_MICRO, BUILD_TARGET_FPM, BUILD_TARGET_CGI, BUILD_TARGET_FRANKENPHP */ - protected function deployBinary(int $type): bool + protected function deployBinary(int $type): void { + FileSystem::createDir(BUILD_BIN_PATH); + $copy_files = []; $src = match ($type) { BUILD_TARGET_CLI => SOURCE_PATH . '/php-src/sapi/cli/php', BUILD_TARGET_MICRO => SOURCE_PATH . '/php-src/sapi/micro/micro.sfx', BUILD_TARGET_FPM => SOURCE_PATH . '/php-src/sapi/fpm/php-fpm', BUILD_TARGET_CGI => SOURCE_PATH . '/php-src/sapi/cgi/php-cgi', + BUILD_TARGET_FRANKENPHP => BUILD_BIN_PATH . '/frankenphp', default => throw new SPCInternalException("Deployment does not accept type {$type}"), }; - logger()->info('Deploying ' . $this->getBuildTypeName($type) . ' file'); - FileSystem::createDir(BUILD_BIN_PATH); - shell()->exec('cp ' . escapeshellarg($src) . ' ' . escapeshellarg(BUILD_BIN_PATH)); - return true; + $no_strip_option = (bool) $this->getOption('no-strip', false); + $upx_option = (bool) $this->getOption('with-upx-pack', false); + + // Generate debug symbols if needed + $copy_files[] = $src; + if (!$no_strip_option && PHP_OS_FAMILY === 'Darwin') { + shell() + ->exec("dsymutil -f {$src}") // generate .dwarf file + ->exec("strip -S {$src}"); // strip unneeded symbols + $copy_files[] = "{$src}.dwarf"; + } elseif (!$no_strip_option && PHP_OS_FAMILY === 'Linux') { + shell() + ->exec("objcopy --only-keep-debug {$src} {$src}.debug") // extract debug symbols + ->exec("objcopy --strip-debug --add-gnu-debuglink={$src}.debug {$src}") // link debug symbols + ->exec("strip --strip-unneeded {$src}"); // strip unneeded symbols + $copy_files[] = "{$src}.debug"; + } + + // Compress binary with UPX if needed (only for Linux) + if ($upx_option && PHP_OS_FAMILY === 'Linux') { + if ($no_strip_option) { + logger()->warning('UPX compression is not recommended when --no-strip is enabled.'); + } + logger()->info("Compressing {$src} with UPX"); + shell()->exec(getenv('UPX_EXEC') . " --best {$src}"); + + // micro needs special section handling in LinuxBuilder. + // The micro.sfx does not support UPX directly, but we can remove UPX-info segment to adapt. + // This will also make micro.sfx with upx-packed more like a malware fore antivirus :( + if ($type === BUILD_TARGET_MICRO && version_compare($this->getMicroVersion(), '0.2.0') >= 0) { + // strip first + // cut binary with readelf + [$ret, $out] = shell()->execWithResult("readelf -l {$src} | awk '/LOAD|GNU_STACK/ {getline; print \$1, \$2, \$3, \$4, \$6, \$7}'"); + $out[1] = explode(' ', $out[1]); + $offset = $out[1][0]; + if ($ret !== 0 || !str_starts_with($offset, '0x')) { + throw new PatchException('phpmicro UPX patcher', 'Cannot find offset in readelf output'); + } + $offset = hexdec($offset); + // remove upx extra wastes + file_put_contents($src, substr(file_get_contents($src), 0, $offset)); + } + } + + // Copy files + foreach ($copy_files as $file) { + if (!file_exists($file)) { + throw new SPCInternalException("Deploy failed. Cannot find file: {$file}"); + } + FileSystem::copy($file, BUILD_BIN_PATH . '/' . basename($file)); + } } /** @@ -325,13 +376,7 @@ protected function buildFrankenphp(): void ->setEnv($env) ->exec("xcaddy build --output frankenphp {$xcaddyModules}"); - if (!$this->getOption('no-strip', false) && file_exists(BUILD_BIN_PATH . '/frankenphp')) { - if (PHP_OS_FAMILY === 'Linux') { - shell()->cd(BUILD_BIN_PATH)->exec('strip --strip-unneeded frankenphp'); - } else { // macOS doesn't understand strip-unneeded - shell()->cd(BUILD_BIN_PATH)->exec('strip -S frankenphp'); - } - } + $this->deployBinary(BUILD_TARGET_FRANKENPHP); } /** diff --git a/src/SPC/builder/windows/WindowsBuilder.php b/src/SPC/builder/windows/WindowsBuilder.php index 1892d8014..35b1623df 100644 --- a/src/SPC/builder/windows/WindowsBuilder.php +++ b/src/SPC/builder/windows/WindowsBuilder.php @@ -67,21 +67,6 @@ public function buildPHP(int $build_target = BUILD_TARGET_NONE): void $zts = $this->zts ? '--enable-zts=yes ' : '--enable-zts=no '; - // with-upx-pack for phpmicro - if ($enableMicro && version_compare($this->getMicroVersion(), '0.2.0') < 0) { - $makefile = FileSystem::convertPath(SOURCE_PATH . '/php-src/sapi/micro/Makefile.frag.w32'); - if ($this->getOption('with-upx-pack', false)) { - if (!file_exists($makefile . '.originfile')) { - copy($makefile, $makefile . '.originfile'); - FileSystem::replaceFileStr($makefile, '$(MICRO_SFX):', '_MICRO_UPX = ' . getenv('UPX_EXEC') . " --best $(MICRO_SFX)\n$(MICRO_SFX):"); - FileSystem::replaceFileStr($makefile, '@$(_MICRO_MT)', "@$(_MICRO_MT)\n\t@$(_MICRO_UPX)"); - } - } elseif (file_exists($makefile . '.originfile')) { - copy($makefile . '.originfile', $makefile); - unlink($makefile . '.originfile'); - } - } - $opcache_jit = !$this->getOption('disable-opcache-jit', false); $opcache_jit_arg = $opcache_jit ? '--enable-opcache-jit=yes ' : '--enable-opcache-jit=no '; @@ -145,7 +130,7 @@ public function buildPHP(int $build_target = BUILD_TARGET_NONE): void } } - public function testPHP(int $build_target = BUILD_TARGET_NONE) + public function testPHP(int $build_target = BUILD_TARGET_NONE): void { $this->sanityCheck($build_target); } @@ -156,8 +141,23 @@ public function buildCli(): void $extra_libs = getenv('SPC_EXTRA_LIBS') ?: ''; + // Add debug symbols for release build if --no-strip is specified + // We need to modify CFLAGS to replace /Ox with /Zi and add /DEBUG to LDFLAGS + $debug_overrides = ''; + if ($this->getOption('no-strip', false)) { + // Read current CFLAGS from Makefile and replace optimization flags + $makefile_content = file_get_contents(SOURCE_PATH . '\php-src\Makefile'); + if (preg_match('/^CFLAGS=(.+?)$/m', $makefile_content, $matches)) { + $cflags = $matches[1]; + // Replace /Ox (full optimization) with /Zi (debug info) and /Od (disable optimization) + // Keep optimization for speed: /O2 /Zi instead of /Od /Zi + $cflags = str_replace('/Ox ', '/O2 /Zi ', $cflags); + $debug_overrides = '"CFLAGS=' . $cflags . '" "LDFLAGS=/DEBUG /LTCG /INCREMENTAL:NO" "LDFLAGS_CLI=/DEBUG" '; + } + } + // add nmake wrapper - FileSystem::writeFile(SOURCE_PATH . '\php-src\nmake_cli_wrapper.bat', "nmake /nologo LIBS_CLI=\"ws2_32.lib shell32.lib {$extra_libs}\" EXTRA_LD_FLAGS_PROGRAM= %*"); + FileSystem::writeFile(SOURCE_PATH . '\php-src\nmake_cli_wrapper.bat', "nmake /nologo {$debug_overrides}LIBS_CLI=\"ws2_32.lib shell32.lib {$extra_libs}\" EXTRA_LD_FLAGS_PROGRAM= %*"); cmd()->cd(SOURCE_PATH . '\php-src')->exec("{$this->sdk_prefix} nmake_cli_wrapper.bat --task-args php.exe"); @@ -170,8 +170,19 @@ public function buildCgi(): void $extra_libs = getenv('SPC_EXTRA_LIBS') ?: ''; + // Add debug symbols for release build if --no-strip is specified + $debug_overrides = ''; + if ($this->getOption('no-strip', false)) { + $makefile_content = file_get_contents(SOURCE_PATH . '\php-src\Makefile'); + if (preg_match('/^CFLAGS=(.+?)$/m', $makefile_content, $matches)) { + $cflags = $matches[1]; + $cflags = str_replace('/Ox ', '/O2 /Zi ', $cflags); + $debug_overrides = '"CFLAGS=' . $cflags . '" "LDFLAGS=/DEBUG /LTCG /INCREMENTAL:NO" "LDFLAGS_CGI=/DEBUG" '; + } + } + // add nmake wrapper - FileSystem::writeFile(SOURCE_PATH . '\php-src\nmake_cgi_wrapper.bat', "nmake /nologo LIBS_CGI=\"ws2_32.lib kernel32.lib advapi32.lib {$extra_libs}\" EXTRA_LD_FLAGS_PROGRAM= %*"); + FileSystem::writeFile(SOURCE_PATH . '\php-src\nmake_cgi_wrapper.bat', "nmake /nologo {$debug_overrides}LIBS_CGI=\"ws2_32.lib kernel32.lib advapi32.lib {$extra_libs}\" EXTRA_LD_FLAGS_PROGRAM= %*"); cmd()->cd(SOURCE_PATH . '\php-src')->exec("{$this->sdk_prefix} nmake_cgi_wrapper.bat --task-args php-cgi.exe"); @@ -202,9 +213,20 @@ public function buildMicro(): void $extra_libs = getenv('SPC_EXTRA_LIBS') ?: ''; + // Add debug symbols for release build if --no-strip is specified + $debug_overrides = ''; + if ($this->getOption('no-strip', false) && !$this->getOption('debug', false)) { + $makefile_content = file_get_contents(SOURCE_PATH . '\php-src\Makefile'); + if (preg_match('/^CFLAGS=(.+?)$/m', $makefile_content, $matches)) { + $cflags = $matches[1]; + $cflags = str_replace('/Ox ', '/O2 /Zi ', $cflags); + $debug_overrides = '"CFLAGS=' . $cflags . '" "LDFLAGS=/DEBUG /LTCG /INCREMENTAL:NO" "LDFLAGS_MICRO=/DEBUG" '; + } + } + // add nmake wrapper $fake_cli = $this->getOption('with-micro-fake-cli', false) ? ' /DPHP_MICRO_FAKE_CLI" ' : ''; - $wrapper = "nmake /nologo LIBS_MICRO=\"ws2_32.lib shell32.lib {$extra_libs}\" CFLAGS_MICRO=\"/DZEND_ENABLE_STATIC_TSRMLS_CACHE=1{$fake_cli}\" %*"; + $wrapper = "nmake /nologo {$debug_overrides}LIBS_MICRO=\"ws2_32.lib shell32.lib {$extra_libs}\" CFLAGS_MICRO=\"/DZEND_ENABLE_STATIC_TSRMLS_CACHE=1{$fake_cli}\" %*"; FileSystem::writeFile(SOURCE_PATH . '\php-src\nmake_micro_wrapper.bat', $wrapper); // phar patch for micro @@ -335,28 +357,32 @@ public function sanityCheck(mixed $build_target): void * * @param int $type Deploy type */ - public function deployBinary(int $type): bool + public function deployBinary(int $type): void { + $rel_type = 'Release'; // TODO: Debug build support $ts = $this->zts ? '_TS' : ''; $src = match ($type) { - BUILD_TARGET_CLI => SOURCE_PATH . "\\php-src\\x64\\Release{$ts}\\php.exe", - BUILD_TARGET_MICRO => SOURCE_PATH . "\\php-src\\x64\\Release{$ts}\\micro.sfx", - BUILD_TARGET_CGI => SOURCE_PATH . "\\php-src\\x64\\Release{$ts}\\php-cgi.exe", + BUILD_TARGET_CLI => [SOURCE_PATH . "\\php-src\\x64\\{$rel_type}{$ts}", 'php.exe', 'php.pdb'], + BUILD_TARGET_MICRO => [SOURCE_PATH . "\\php-src\\x64\\{$rel_type}{$ts}", 'micro.sfx', 'micro.pdb'], + BUILD_TARGET_CGI => [SOURCE_PATH . "\\php-src\\x64\\{$rel_type}{$ts}", 'php-cgi.exe', 'php-cgi.pdb'], default => throw new SPCInternalException("Deployment does not accept type {$type}"), }; // with-upx-pack for cli and micro if ($this->getOption('with-upx-pack', false)) { if ($type === BUILD_TARGET_CLI || $type === BUILD_TARGET_CGI || ($type === BUILD_TARGET_MICRO && version_compare($this->getMicroVersion(), '0.2.0') >= 0)) { - cmd()->exec(getenv('UPX_EXEC') . ' --best ' . escapeshellarg($src)); + cmd()->exec(getenv('UPX_EXEC') . ' --best ' . escapeshellarg("{$src[0]}\\{$src[1]}")); } } logger()->info('Deploying ' . $this->getBuildTypeName($type) . ' file'); FileSystem::createDir(BUILD_BIN_PATH); - cmd()->exec('copy ' . escapeshellarg($src) . ' ' . escapeshellarg(BUILD_BIN_PATH . '\\')); - return true; + cmd()->exec('copy ' . escapeshellarg("{$src[0]}\\{$src[1]}") . ' ' . escapeshellarg(BUILD_BIN_PATH . '\\')); + if ($this->getOption('no-strip', false) && file_exists("{$src[0]}\\{$src[2]}")) { + logger()->info('Deploying ' . $this->getBuildTypeName($type) . ' debug symbols'); + cmd()->exec('copy ' . escapeshellarg("{$src[0]}\\{$src[2]}") . ' ' . escapeshellarg(BUILD_BIN_PATH . '\\')); + } } /** diff --git a/src/SPC/store/FileSystem.php b/src/SPC/store/FileSystem.php index f6ce371e0..86daefc43 100644 --- a/src/SPC/store/FileSystem.php +++ b/src/SPC/store/FileSystem.php @@ -174,6 +174,9 @@ public static function copy(string $from, string $to): void logger()->debug("Copying file from {$from} to {$to}"); $dst_path = FileSystem::convertPath($to); $src_path = FileSystem::convertPath($from); + if ($src_path === $dst_path) { + return; + } if (!copy($src_path, $dst_path)) { throw new FileSystemException('Cannot copy file from ' . $src_path . ' to ' . $dst_path); } From 9738fcd6cd75827ec21d8462957b077fc69f742e Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Fri, 31 Oct 2025 16:48:36 +0800 Subject: [PATCH 145/207] Update env.ini docs --- config/env.ini | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/config/env.ini b/config/env.ini index a1f149c59..1047c3f70 100644 --- a/config/env.ini +++ b/config/env.ini @@ -1,40 +1,41 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; static-php-cli (spc) env configuration ; ; This file is used to set default env vars for static-php-cli build. ; As dynamic build process, some of these vars can be overwritten by CLI options. ; And you can also overwrite these vars by setting them in your shell environment. +; The value should be changed only if you know what you are doing. Otherwise, please leave them as default. ; ; We need to use some pre-defined internal env vars, like `BUILD_ROOT_PATH`, `DOWNLOAD_PATH`, etc. -; Please note that these vars cannot be defined in this file, they are only be defined before static-php-cli running. +; Please note that these vars cannot be defined in this file, they should only be defined before static-php-cli running. ; -; Here's a list of env vars, these value cannot be changed anywhere: +; Here's a list of env vars, these variables will be defined if not defined: ; -; SPC_VERSION: the version of static-php-cli. -; WORKING_DIR: the working directory of the build process. (default: `$(pwd)`) -; ROOT_DIR: the root directory of static-php-cli. (default: `/path/to/static-php-cli`, when running in phar or micro mode: `phar://path/to/spc.phar`) ; BUILD_ROOT_PATH: the root path of the build process. (default: `$(pwd)/buildroot`) ; BUILD_INCLUDE_PATH: the path of the include files. (default: `$BUILD_ROOT_PATH/include`) ; BUILD_LIB_PATH: the path of the lib files. (default: `$BUILD_ROOT_PATH/lib`) ; BUILD_BIN_PATH: the path of the bin files. (default: `$BUILD_ROOT_PATH/bin`) -; PKG_ROOT_PATH: the root path of the package files. (default: `$(pwd)/pkgroot`) +; BUILD_MODULES_PATH: the path of the php modules (shared extensions) files. (default: `$BUILD_ROOT_PATH/modules`) +; PKG_ROOT_PATH: the root path of the package files. (default: `$(pwd)/pkgroot/$GNU_ARCH-{darwin|linux|windows}`) ; SOURCE_PATH: the path of the source files. (default: `$(pwd)/source`) ; DOWNLOAD_PATH: the path of the download files. (default: `$(pwd)/downloads`) -; CPU_COUNT: the count of the CPU cores. (default: `$(nproc)`) -; SPC_ARCH: the arch of the current system, for some libraries needed `--host=XXX` args. (default: `$(uname -m)`, e.g. `x86_64`, `aarch64`, `arm64`) -; GNU_ARCH: the GNU arch of the current system. (default: `$(uname -m)`, e.g. `x86_64`, `aarch64`) -; MAC_ARCH: the MAC arch of the current system. (default: `$(uname -m)`, e.g. `x86_64`, `arm64`) +; PATH: (*nix only) static-php-cli will add `$BUILD_BIN_PATH` to PATH. +; PKG_CONFIG_PATH: (*nix only) static-php-cli will set `$BUILD_LIB_PATH/pkgconfig` to PKG_CONFIG_PATH. ; -; * These vars are only be defined in Unix (macOS, Linux, FreeBSD)Builder and cannot be changed anywhere: -; PATH: static-php-cli will add `$BUILD_BIN_PATH` to PATH. -; PKG_CONFIG: static-php-cli will set `$BUILD_BIN_PATH/pkg-config` to PKG_CONFIG. -; PKG_CONFIG_PATH: static-php-cli will set `$BUILD_LIB_PATH/pkgconfig` to PKG_CONFIG_PATH. +; Here's a list of env vars, these variables is defined in SPC and cannot be changed anywhere: ; -; * These vars are only be defined in LinuxBuilder and cannot be changed anywhere: -; SPC_LINUX_DEFAULT_CC: the default compiler for linux. (For alpine linux: `gcc`, default: `$GNU_ARCH-linux-musl-gcc`) -; SPC_LINUX_DEFAULT_CXX: the default c++ compiler for linux. (For alpine linux: `g++`, default: `$GNU_ARCH-linux-musl-g++`) -; SPC_LINUX_DEFAULT_AR: the default archiver for linux. (For alpine linux: `ar`, default: `$GNU_ARCH-linux-musl-ar`) -; SPC_EXTRA_PHP_VARS: the extra vars for building php, used in `configure` and `make` command. +; SPC_VERSION: the version of static-php-cli. +; WORKING_DIR: the working directory of the build process. (default: `$(pwd)`) +; ROOT_DIR: the root directory of static-php-cli. (default: `/path/to/static-php-cli`, when running in phar or micro mode: `phar://path/to/spc.phar`) +; CPU_COUNT: the count of the CPU cores. (default: `$(nproc)`) +; SPC_ARCH: the arch of the current system, for some libraries needed `--host=XXX` args. (default: `$(uname -m)`, e.g. `x86_64`, `aarch64`, `arm64`) +; GNU_ARCH: the GNU arch of the current system. (default: `$(uname -m)`, e.g. `x86_64`, `aarch64`) +; MAC_ARCH: the MAC arch of the current system. (default: `$(uname -m)`, e.g. `x86_64`, `arm64`) +; PKG_CONFIG: (*nix only) static-php-cli will set `$BUILD_BIN_PATH/pkg-config` to PKG_CONFIG. +; SPC_LINUX_DEFAULT_CC: (linux only) the default compiler for linux. (For alpine linux: `gcc`, default: `$GNU_ARCH-linux-musl-gcc`) +; SPC_LINUX_DEFAULT_CXX: (linux only) the default c++ compiler for linux. (For alpine linux: `g++`, default: `$GNU_ARCH-linux-musl-g++`) +; SPC_LINUX_DEFAULT_AR: (linux only) the default archiver for linux. (For alpine linux: `ar`, default: `$GNU_ARCH-linux-musl-ar`) +; SPC_EXTRA_PHP_VARS: (linux only) the extra vars for building php, used in `configure` and `make` command. [global] ; Build concurrency for make -jN, default is CPU_COUNT, this value are used in every libs. From 5e3e7eccbfe2b8c6d72089b01a43f122a481a1b1 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Fri, 31 Oct 2025 16:48:55 +0800 Subject: [PATCH 146/207] Update version to 2.7.7 --- src/SPC/ConsoleApplication.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/ConsoleApplication.php b/src/SPC/ConsoleApplication.php index da143de1a..9a957223c 100644 --- a/src/SPC/ConsoleApplication.php +++ b/src/SPC/ConsoleApplication.php @@ -34,7 +34,7 @@ */ final class ConsoleApplication extends Application { - public const string VERSION = '2.7.6'; + public const string VERSION = '2.7.7'; public function __construct() { From 757af25d8fca4a68124ec9960b056c39b8e0a0a2 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Sat, 1 Nov 2025 00:49:50 +0800 Subject: [PATCH 147/207] Suggestions --- src/SPC/builder/unix/UnixBuilderBase.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/SPC/builder/unix/UnixBuilderBase.php b/src/SPC/builder/unix/UnixBuilderBase.php index 8122bf2c8..5d4abbfcc 100644 --- a/src/SPC/builder/unix/UnixBuilderBase.php +++ b/src/SPC/builder/unix/UnixBuilderBase.php @@ -238,7 +238,7 @@ protected function deployBinary(int $type): void } elseif (!$no_strip_option && PHP_OS_FAMILY === 'Linux') { shell() ->exec("objcopy --only-keep-debug {$src} {$src}.debug") // extract debug symbols - ->exec("objcopy --strip-debug --add-gnu-debuglink={$src}.debug {$src}") // link debug symbols + ->exec("objcopy --add-gnu-debuglink={$src}.debug {$src}") // link debug symbols ->exec("strip --strip-unneeded {$src}"); // strip unneeded symbols $copy_files[] = "{$src}.debug"; } @@ -274,7 +274,10 @@ protected function deployBinary(int $type): void if (!file_exists($file)) { throw new SPCInternalException("Deploy failed. Cannot find file: {$file}"); } - FileSystem::copy($file, BUILD_BIN_PATH . '/' . basename($file)); + // ignore copy to self + if (realpath($file) !== realpath(BUILD_BIN_PATH . '/' . basename($file))) { + shell()->exec('cp ' . escapeshellarg($file) . ' ' . escapeshellarg(BUILD_BIN_PATH . '/')); + } } } From 5cb6a75e7d651f7dfeef821c6cf321a05a3af521 Mon Sep 17 00:00:00 2001 From: henderkes Date: Mon, 3 Nov 2025 20:29:15 +0100 Subject: [PATCH 148/207] add extra features to librdkafka (curl, ssl, sasl --- config/lib.json | 4 ++++ src/SPC/builder/extension/rdkafka.php | 4 ++++ src/SPC/builder/unix/library/librdkafka.php | 16 ++++++++++++---- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/config/lib.json b/config/lib.json index c3d864f4c..4a01ad496 100644 --- a/config/lib.json +++ b/config/lib.json @@ -513,6 +513,10 @@ ], "cpp-library": true, "lib-suggests": [ + "curl", + "liblz4", + "openssl", + "zlib", "zstd" ] }, diff --git a/src/SPC/builder/extension/rdkafka.php b/src/SPC/builder/extension/rdkafka.php index 575ab3092..283bad46b 100644 --- a/src/SPC/builder/extension/rdkafka.php +++ b/src/SPC/builder/extension/rdkafka.php @@ -15,6 +15,7 @@ public function patchBeforeBuildconf(): bool { FileSystem::replaceFileStr("{$this->source_dir}/config.m4", "-L\$RDKAFKA_DIR/\$PHP_LIBDIR -lm\n", "-L\$RDKAFKA_DIR/\$PHP_LIBDIR -lm \$RDKAFKA_LIBS\n"); FileSystem::replaceFileStr("{$this->source_dir}/config.m4", "-L\$RDKAFKA_DIR/\$PHP_LIBDIR -lm\"\n", '-L$RDKAFKA_DIR/$PHP_LIBDIR -lm $RDKAFKA_LIBS"'); + FileSystem::replaceFileStr("{$this->source_dir}/config.m4", 'PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,', 'AC_CHECK_LIB([$LIBNAME], [$LIBSYMBOL],'); return true; } @@ -39,6 +40,9 @@ public function getUnixConfigureArg(bool $shared = false): string { $pkgconf_libs = shell()->execWithResult('pkg-config --libs --static rdkafka')[1]; $pkgconf_libs = trim(implode('', $pkgconf_libs)); + $pkgconf_libs = str_replace(BUILD_LIB_PATH . '/lib', '-l', $pkgconf_libs); + $pkgconf_libs = str_replace('.a', '', $pkgconf_libs); + $pkgconf_libs = deduplicate_flags($pkgconf_libs); return '--with-rdkafka=' . ($shared ? 'shared,' : '') . BUILD_ROOT_PATH . ' RDKAFKA_LIBS="' . $pkgconf_libs . '"'; } } diff --git a/src/SPC/builder/unix/library/librdkafka.php b/src/SPC/builder/unix/library/librdkafka.php index f2bea09f1..b654eaaac 100644 --- a/src/SPC/builder/unix/library/librdkafka.php +++ b/src/SPC/builder/unix/library/librdkafka.php @@ -32,20 +32,28 @@ protected function build(): void 'zstd', function ($lib) { putenv("STATIC_LIB_libzstd={$lib->getLibDir()}/libzstd.a"); - return ''; + return '--enable-zstd'; }, '--disable-zstd' ) + ->optionalLib( + 'curl', + function () { + $pkg_libs = shell()->execWithResult('pkg-config --libs --static libcurl')[1]; + putenv("STATIC_LIB_libcurl={$pkg_libs}"); + return '--enable-curl'; + }, + '--disable-curl' + ) + ->optionalLib('openssl', '--enable-ssl', '--disable-ssl') + ->optionalLib('zlib', '--enable-zlib', '--disable-zlib') ->removeConfigureArgs( '--with-pic', '--enable-pic', ) ->configure( - '--disable-curl', '--disable-sasl', '--disable-valgrind', - '--disable-zlib', - '--disable-ssl', ) ->make(); From 7a4f28e939674571698d7d88c18886d4d7b7ddc7 Mon Sep 17 00:00:00 2001 From: henderkes Date: Mon, 3 Nov 2025 20:39:26 +0100 Subject: [PATCH 149/207] add frankenphp version --- src/SPC/builder/unix/UnixBuilderBase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/builder/unix/UnixBuilderBase.php b/src/SPC/builder/unix/UnixBuilderBase.php index 0d123d1f0..f3f073d91 100644 --- a/src/SPC/builder/unix/UnixBuilderBase.php +++ b/src/SPC/builder/unix/UnixBuilderBase.php @@ -301,7 +301,7 @@ protected function buildFrankenphp(): void } $config = (new SPCConfigUtil($this))->config($this->ext_list, $this->lib_list); - $cflags = "{$this->arch_c_flags} {$config['cflags']} " . getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS'); + $cflags = "{$this->arch_c_flags} {$config['cflags']} " . getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS') . ' -DFRANKENPHP_VERSION=' . $frankenPhpVersion; $libs = $config['libs']; // Go's gcc driver doesn't automatically link against -lgcov or -lrt. Ugly, but necessary fix. if ((str_contains((string) getenv('SPC_DEFAULT_C_FLAGS'), '-fprofile') || From ed4978bb893bfc67109157f1b7c89a072d750a2c Mon Sep 17 00:00:00 2001 From: henderkes Date: Mon, 3 Nov 2025 20:40:50 +0100 Subject: [PATCH 150/207] add frankenphp version --- src/SPC/builder/unix/UnixBuilderBase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/builder/unix/UnixBuilderBase.php b/src/SPC/builder/unix/UnixBuilderBase.php index 6249274c6..46f4cb433 100644 --- a/src/SPC/builder/unix/UnixBuilderBase.php +++ b/src/SPC/builder/unix/UnixBuilderBase.php @@ -350,7 +350,7 @@ protected function buildFrankenphp(): void } $config = (new SPCConfigUtil($this))->config($this->ext_list, $this->lib_list); - $cflags = "{$this->arch_c_flags} {$config['cflags']} " . getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS'); + $cflags = "{$this->arch_c_flags} {$config['cflags']} " . getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS') . ' -DFRANKENPHP_VERSION=' . $frankenPhpVersion; $libs = $config['libs']; // Go's gcc driver doesn't automatically link against -lgcov or -lrt. Ugly, but necessary fix. if ((str_contains((string) getenv('SPC_DEFAULT_C_FLAGS'), '-fprofile') || From 0b17ce9e612773dab334324ef3245186ec3f253a Mon Sep 17 00:00:00 2001 From: henderkes Date: Mon, 3 Nov 2025 20:47:42 +0100 Subject: [PATCH 151/207] test rdkafka with all suggested libs --- src/globals/test-extensions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index 5aef4bd86..7797367d2 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -49,7 +49,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' => 'gettext', + 'Linux', 'Darwin' => 'rdkafka', '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 589a4a9803c2b31be9da632160ffdaeae920b4d0 Mon Sep 17 00:00:00 2001 From: henderkes Date: Mon, 3 Nov 2025 21:13:47 +0100 Subject: [PATCH 152/207] test rdkafka with all suggested libs --- src/globals/test-extensions.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index 391c401b0..43ce5d152 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -13,11 +13,11 @@ // test php version (8.1 ~ 8.4 available, multiple for matrix) $test_php_version = [ - '8.1', - '8.2', - '8.3', + // '8.1', + // '8.2', + // '8.3', '8.4', - '8.5', + // '8.5', // 'git', ]; @@ -62,7 +62,7 @@ }; // If you want to test lib-suggests for all extensions and libraries, set it to true. -$with_suggested_libs = false; +$with_suggested_libs = true; // If you want to test extra libs for extensions, add them below (comma separated, example `libwebp,libavif`). Unnecessary, when $with_suggested_libs is true. $with_libs = match (PHP_OS_FAMILY) { From fc118d709e3219c42e2c459c9b82930a7709e69b Mon Sep 17 00:00:00 2001 From: Marc Date: Mon, 3 Nov 2025 21:58:46 +0100 Subject: [PATCH 153/207] Remove deduplication of pkg-config libraries Removed deduplication of pkg-config libraries. --- src/SPC/builder/extension/rdkafka.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/SPC/builder/extension/rdkafka.php b/src/SPC/builder/extension/rdkafka.php index 283bad46b..644b475a5 100644 --- a/src/SPC/builder/extension/rdkafka.php +++ b/src/SPC/builder/extension/rdkafka.php @@ -42,7 +42,6 @@ public function getUnixConfigureArg(bool $shared = false): string $pkgconf_libs = trim(implode('', $pkgconf_libs)); $pkgconf_libs = str_replace(BUILD_LIB_PATH . '/lib', '-l', $pkgconf_libs); $pkgconf_libs = str_replace('.a', '', $pkgconf_libs); - $pkgconf_libs = deduplicate_flags($pkgconf_libs); return '--with-rdkafka=' . ($shared ? 'shared,' : '') . BUILD_ROOT_PATH . ' RDKAFKA_LIBS="' . $pkgconf_libs . '"'; } } From aa5c829fae13f0ab0c1ae92b83a9e8f68c4ea619 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Tue, 4 Nov 2025 13:35:15 +0800 Subject: [PATCH 154/207] Add missing file and line for Unhandled exception --- src/SPC/exception/ExceptionHandler.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/SPC/exception/ExceptionHandler.php b/src/SPC/exception/ExceptionHandler.php index d784be717..df5e4bf0c 100644 --- a/src/SPC/exception/ExceptionHandler.php +++ b/src/SPC/exception/ExceptionHandler.php @@ -159,7 +159,9 @@ public static function handleSPCException(SPCException $e): void public static function handleDefaultException(\Throwable $e): void { $class = get_class($e); - self::logError("✗ Unhandled exception {$class}:\n\t{$e->getMessage()}\n"); + $file = $e->getFile(); + $line = $e->getLine(); + self::logError("✗ Unhandled exception {$class} on {$file} line {$line}:\n\t{$e->getMessage()}\n"); self::logError('Stack trace:'); self::logError(ConsoleColor::gray($e->getTraceAsString()) . PHP_EOL, 4); self::logError('⚠ Please report this exception to: https://github.com/crazywhalecc/static-php-cli/issues'); From f34ecf9468bca0c976102b2f933b72ca583014da Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Tue, 4 Nov 2025 13:35:31 +0800 Subject: [PATCH 155/207] Use pkg-configs for librdkafka --- config/lib.json | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/config/lib.json b/config/lib.json index 8d1da4641..528777e17 100644 --- a/config/lib.json +++ b/config/lib.json @@ -506,10 +506,9 @@ }, "librdkafka": { "source": "librdkafka", - "static-libs-unix": [ - "librdkafka.a", - "librdkafka++.a", - "librdkafka-static.a" + "pkg-configs": [ + "rdkafka++-static", + "rdkafka-static" ], "cpp-library": true, "lib-suggests": [ From 4d5641f6ec11265ebe396b6ca1f672fe09226950 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Tue, 4 Nov 2025 13:35:43 +0800 Subject: [PATCH 156/207] Change librdkafka to cmake --- src/SPC/builder/unix/library/librdkafka.php | 50 ++++++--------------- 1 file changed, 13 insertions(+), 37 deletions(-) diff --git a/src/SPC/builder/unix/library/librdkafka.php b/src/SPC/builder/unix/library/librdkafka.php index b654eaaac..49b0962bd 100644 --- a/src/SPC/builder/unix/library/librdkafka.php +++ b/src/SPC/builder/unix/library/librdkafka.php @@ -5,7 +5,7 @@ namespace SPC\builder\unix\library; use SPC\store\FileSystem; -use SPC\util\executor\UnixAutoconfExecutor; +use SPC\util\executor\UnixCMakeExecutor; trait librdkafka { @@ -26,42 +26,18 @@ public function patchBeforeBuild(): bool protected function build(): void { - UnixAutoconfExecutor::create($this) - ->appendEnv(['CFLAGS' => '-Wno-int-conversion -Wno-unused-but-set-variable -Wno-unused-variable']) - ->optionalLib( - 'zstd', - function ($lib) { - putenv("STATIC_LIB_libzstd={$lib->getLibDir()}/libzstd.a"); - return '--enable-zstd'; - }, - '--disable-zstd' + UnixCMakeExecutor::create($this) + ->optionalLib('zstd', ...cmake_boolean_args('WITH_ZSTD')) + ->optionalLib('curl', ...cmake_boolean_args('WITH_CURL')) + ->optionalLib('openssl', ...cmake_boolean_args('WITH_SSL')) + ->optionalLib('zlib', ...cmake_boolean_args('WITH_ZLIB')) + ->addConfigureArgs( + '-DWITH_SASL=OFF', + '-DRDKAFKA_BUILD_STATIC=ON', + '-DRDKAFKA_BUILD_EXAMPLES=OFF', + '-DRDKAFKA_BUILD_TESTS=OFF', + '-DENABLE_LZ4_EXT=OFF', ) - ->optionalLib( - 'curl', - function () { - $pkg_libs = shell()->execWithResult('pkg-config --libs --static libcurl')[1]; - putenv("STATIC_LIB_libcurl={$pkg_libs}"); - return '--enable-curl'; - }, - '--disable-curl' - ) - ->optionalLib('openssl', '--enable-ssl', '--disable-ssl') - ->optionalLib('zlib', '--enable-zlib', '--disable-zlib') - ->removeConfigureArgs( - '--with-pic', - '--enable-pic', - ) - ->configure( - '--disable-sasl', - '--disable-valgrind', - ) - ->make(); - - $this->patchPkgconfPrefix(['rdkafka.pc', 'rdkafka-static.pc', 'rdkafka++.pc', 'rdkafka++-static.pc']); - // remove dynamic libs - shell() - ->exec("rm -rf {$this->getLibDir()}/*.so.*") - ->exec("rm -rf {$this->getLibDir()}/*.so") - ->exec("rm -rf {$this->getLibDir()}/*.dylib"); + ->build(); } } From 08362fb6e5976e9f5b21af41956b962b6673ff61 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Tue, 4 Nov 2025 13:36:29 +0800 Subject: [PATCH 157/207] Add helper function for SPCConfigUtil --- src/SPC/builder/Extension.php | 75 ++++++++++----------- src/SPC/builder/extension/grpc.php | 2 +- src/SPC/builder/extension/rdkafka.php | 8 +-- src/SPC/builder/extension/swoole.php | 2 +- src/SPC/builder/unix/library/postgresql.php | 2 +- src/SPC/util/SPCConfigUtil.php | 59 ++++++++++++++++ 6 files changed, 100 insertions(+), 48 deletions(-) diff --git a/src/SPC/builder/Extension.php b/src/SPC/builder/Extension.php index 5b6a33293..0bdb36d24 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -220,7 +220,7 @@ public function patchBeforeSharedConfigure(): bool */ public function patchBeforeSharedMake(): bool { - $config = (new SPCConfigUtil($this->builder))->config([$this->getName()], array_map(fn ($l) => $l->getName(), $this->builder->getLibs())); + $config = (new SPCConfigUtil($this->builder))->getExtensionConfig($this); [$staticLibs, $sharedLibs] = $this->splitLibsIntoStaticAndShared($config['libs']); $lstdcpp = str_contains($sharedLibs, '-l:libstdc++.a') ? '-l:libstdc++.a' : null; $lstdcpp ??= str_contains($sharedLibs, '-lstdc++') ? '-lstdc++' : ''; @@ -486,18 +486,46 @@ public function isBuildStatic(): bool return $this->build_static; } + public function getLibraryDependencies(bool $recursive = false): array + { + $ret = array_filter($this->dependencies, fn ($x) => $x instanceof LibraryBase); + if (!$recursive) { + return $ret; + } + + $deps = []; + + $added = 1; + while ($added !== 0) { + $added = 0; + foreach ($ret as $depName => $dep) { + foreach ($dep->getDependencies(true) as $depdepName => $depdep) { + if (!array_key_exists($depdepName, $deps)) { + $deps[$depdepName] = $depdep; + ++$added; + } + } + if (!array_key_exists($depName, $deps)) { + $deps[$depName] = $dep; + } + } + } + + if (array_key_exists(0, $deps)) { + $zero = [0 => $deps[0]]; + unset($deps[0]); + return $zero + $deps; + } + return $deps; + } + /** * Returns the environment variables a shared extension needs to be built. * CFLAGS, CXXFLAGS, LDFLAGS and so on. */ protected function getSharedExtensionEnv(): array { - $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'), - ); + $config = (new SPCConfigUtil($this->builder))->getExtensionConfig($this); [$staticLibs, $sharedLibs] = $this->splitLibsIntoStaticAndShared($config['libs']); $preStatic = PHP_OS_FAMILY === 'Darwin' ? '' : '-Wl,--start-group '; $postStatic = PHP_OS_FAMILY === 'Darwin' ? '' : ' -Wl,--end-group '; @@ -567,37 +595,4 @@ protected function splitLibsIntoStaticAndShared(string $allLibs): array } return [trim($staticLibString), trim($sharedLibString)]; } - - private function getLibraryDependencies(bool $recursive = false): array - { - $ret = array_filter($this->dependencies, fn ($x) => $x instanceof LibraryBase); - if (!$recursive) { - return $ret; - } - - $deps = []; - - $added = 1; - while ($added !== 0) { - $added = 0; - foreach ($ret as $depName => $dep) { - foreach ($dep->getDependencies(true) as $depdepName => $depdep) { - if (!array_key_exists($depdepName, $deps)) { - $deps[$depdepName] = $depdep; - ++$added; - } - } - if (!array_key_exists($depName, $deps)) { - $deps[$depName] = $dep; - } - } - } - - if (array_key_exists(0, $deps)) { - $zero = [0 => $deps[0]]; - unset($deps[0]); - return $zero + $deps; - } - return $deps; - } } diff --git a/src/SPC/builder/extension/grpc.php b/src/SPC/builder/extension/grpc.php index 7388eaffd..fb31c85fe 100644 --- a/src/SPC/builder/extension/grpc.php +++ b/src/SPC/builder/extension/grpc.php @@ -43,7 +43,7 @@ public function patchBeforeBuildconf(): bool public function patchBeforeConfigure(): bool { $util = new SPCConfigUtil($this->builder, ['libs_only_deps' => true]); - $config = $util->config(['grpc']); + $config = $util->getExtensionConfig($this); $libs = $config['libs']; FileSystem::replaceFileStr(SOURCE_PATH . '/php-src/configure', '-lgrpc', $libs); return true; diff --git a/src/SPC/builder/extension/rdkafka.php b/src/SPC/builder/extension/rdkafka.php index 644b475a5..58af50ffe 100644 --- a/src/SPC/builder/extension/rdkafka.php +++ b/src/SPC/builder/extension/rdkafka.php @@ -7,6 +7,7 @@ use SPC\builder\Extension; use SPC\store\FileSystem; use SPC\util\CustomExt; +use SPC\util\SPCConfigUtil; #[CustomExt('rdkafka')] class rdkafka extends Extension @@ -38,10 +39,7 @@ public function patchBeforeMake(): bool public function getUnixConfigureArg(bool $shared = false): string { - $pkgconf_libs = shell()->execWithResult('pkg-config --libs --static rdkafka')[1]; - $pkgconf_libs = trim(implode('', $pkgconf_libs)); - $pkgconf_libs = str_replace(BUILD_LIB_PATH . '/lib', '-l', $pkgconf_libs); - $pkgconf_libs = str_replace('.a', '', $pkgconf_libs); - return '--with-rdkafka=' . ($shared ? 'shared,' : '') . BUILD_ROOT_PATH . ' RDKAFKA_LIBS="' . $pkgconf_libs . '"'; + $pkgconf_libs = (new SPCConfigUtil($this->builder, ['no_php' => true, 'libs_only_deps' => true]))->getExtensionConfig($this); + return '--with-rdkafka=' . ($shared ? 'shared,' : '') . BUILD_ROOT_PATH . " RDKAFKA_LIBS=\"{$pkgconf_libs['libs']}\""; } } diff --git a/src/SPC/builder/extension/swoole.php b/src/SPC/builder/extension/swoole.php index 7ff4b3314..f6ff5931d 100644 --- a/src/SPC/builder/extension/swoole.php +++ b/src/SPC/builder/extension/swoole.php @@ -70,7 +70,7 @@ public function getUnixConfigureArg(bool $shared = false): string $arg .= $this->builder->getExt('swoole-hook-mysql') ? ' --enable-mysqlnd' : ' --disable-mysqlnd'; $arg .= $this->builder->getExt('swoole-hook-sqlite') ? ' --enable-swoole-sqlite' : ' --disable-swoole-sqlite'; if ($this->builder->getExt('swoole-hook-odbc')) { - $config = (new SPCConfigUtil($this->builder, ['libs_only_deps' => true]))->config([], ['unixodbc']); + $config = (new SPCConfigUtil($this->builder))->getLibraryConfig($this->builder->getLib('unixodbc')); $arg .= ' --with-swoole-odbc=unixODBC,' . BUILD_ROOT_PATH . ' SWOOLE_ODBC_LIBS="' . $config['libs'] . '"'; } diff --git a/src/SPC/builder/unix/library/postgresql.php b/src/SPC/builder/unix/library/postgresql.php index e55b6e93a..6e0cb606e 100644 --- a/src/SPC/builder/unix/library/postgresql.php +++ b/src/SPC/builder/unix/library/postgresql.php @@ -47,7 +47,7 @@ protected function build(): void { $libs = array_map(fn ($x) => $x->getName(), $this->getDependencies(true)); $spc = new SPCConfigUtil($this->builder, ['no_php' => true, 'libs_only_deps' => true]); - $config = $spc->config(libraries: $libs, include_suggest_lib: $this->builder->getOption('with-suggested-libs')); + $config = $spc->config(libraries: $libs, include_suggest_lib: $this->builder->getOption('with-suggested-libs', false)); $env_vars = [ 'CFLAGS' => $config['cflags'], diff --git a/src/SPC/util/SPCConfigUtil.php b/src/SPC/util/SPCConfigUtil.php index f321ca102..51b0b2d75 100644 --- a/src/SPC/util/SPCConfigUtil.php +++ b/src/SPC/util/SPCConfigUtil.php @@ -7,6 +7,7 @@ use SPC\builder\BuilderBase; use SPC\builder\BuilderProvider; use SPC\builder\Extension; +use SPC\builder\LibraryBase; use SPC\exception\WrongUsageException; use SPC\store\Config; use Symfony\Component\Console\Input\ArgvInput; @@ -53,6 +54,9 @@ public function __construct(?BuilderBase $builder = null, array $options = []) */ public function config(array $extensions = [], array $libraries = [], bool $include_suggest_ext = false, bool $include_suggest_lib = false): array { + logger()->debug('config extensions: ' . implode(',', $extensions)); + logger()->debug('config libs: ' . implode(',', $libraries)); + logger()->debug('config suggest for [ext, lib]: ' . ($include_suggest_ext ? 'true' : 'false') . ',' . ($include_suggest_lib ? 'true' : 'false')); $extra_exts = []; foreach ($extensions as $ext) { $extra_exts = array_merge($extra_exts, Config::getExt($ext, 'ext-suggests', [])); @@ -124,6 +128,61 @@ public function config(array $extensions = [], array $libraries = [], bool $incl ]; } + /** + * [Helper function] + * Get configuration for a specific extension(s) dependencies. + * + * @param Extension|Extension[] $extension Extension instance or list + * @param bool $include_suggest_ext Whether to include suggested extensions + * @param bool $include_suggest_lib Whether to include suggested libraries + * @return array{ + * cflags: string, + * ldflags: string, + * libs: string + * } + */ + public function getExtensionConfig(array|Extension $extension, bool $include_suggest_ext = false, bool $include_suggest_lib = false): array + { + if (!is_array($extension)) { + $extension = [$extension]; + } + return $this->config( + extensions: array_map(fn ($x) => $x->getName(), $extension), + include_suggest_ext: $include_suggest_ext ?: $this->builder?->getOption('with-suggested-exts') ?? false, + include_suggest_lib: $include_suggest_lib ?: $this->builder?->getOption('with-suggested-libs') ?? false, + ); + } + + /** + * [Helper function] + * Get configuration for a specific library(s) dependencies. + * + * @param LibraryBase|LibraryBase[] $lib Library instance or list + * @param bool $include_suggest_lib Whether to include suggested libraries + * @return array{ + * cflags: string, + * ldflags: string, + * libs: string + * } + */ + public function getLibraryConfig(array|LibraryBase $lib, bool $include_suggest_lib = false): array + { + if (!is_array($lib)) { + $lib = [$lib]; + } + $save_no_php = $this->no_php; + $this->no_php = true; + $save_libs_only_deps = $this->libs_only_deps; + $this->libs_only_deps = true; + $ret = $this->config( + libraries: array_map(fn ($x) => $x->getName(), $lib), + include_suggest_lib: $include_suggest_lib ?: $this->builder?->getOption('with-suggested-libs') ?? false, + ); + $this->no_php = $save_no_php; + $this->libs_only_deps = $save_libs_only_deps; + return $ret; + } + private function hasCpp(array $extensions, array $libraries): bool { // judge cpp-extension From 6d1c6d7f615aa770e359ca1ddf596dc8fae93f2d Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Tue, 4 Nov 2025 13:38:11 +0800 Subject: [PATCH 158/207] Add PHPDocs --- src/SPC/builder/Extension.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/SPC/builder/Extension.php b/src/SPC/builder/Extension.php index 0bdb36d24..a6c6ab94a 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -486,6 +486,11 @@ public function isBuildStatic(): bool return $this->build_static; } + /** + * Get the library dependencies that current extension depends on. + * + * @param bool $recursive Whether it includes dependencies recursively + */ public function getLibraryDependencies(bool $recursive = false): array { $ret = array_filter($this->dependencies, fn ($x) => $x instanceof LibraryBase); From 463a98b1bf8cf681eb658b43f6213d3ff5853db4 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Tue, 4 Nov 2025 13:51:11 +0800 Subject: [PATCH 159/207] Support suggested libs not specified by with-suggested-libs --- src/SPC/builder/unix/library/librdkafka.php | 2 +- src/SPC/util/SPCConfigUtil.php | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/SPC/builder/unix/library/librdkafka.php b/src/SPC/builder/unix/library/librdkafka.php index 49b0962bd..222760d0b 100644 --- a/src/SPC/builder/unix/library/librdkafka.php +++ b/src/SPC/builder/unix/library/librdkafka.php @@ -31,12 +31,12 @@ protected function build(): void ->optionalLib('curl', ...cmake_boolean_args('WITH_CURL')) ->optionalLib('openssl', ...cmake_boolean_args('WITH_SSL')) ->optionalLib('zlib', ...cmake_boolean_args('WITH_ZLIB')) + ->optionalLib('liblz4', ...cmake_boolean_args('ENABLE_LZ4_EXT')) ->addConfigureArgs( '-DWITH_SASL=OFF', '-DRDKAFKA_BUILD_STATIC=ON', '-DRDKAFKA_BUILD_EXAMPLES=OFF', '-DRDKAFKA_BUILD_TESTS=OFF', - '-DENABLE_LZ4_EXT=OFF', ) ->build(); } diff --git a/src/SPC/util/SPCConfigUtil.php b/src/SPC/util/SPCConfigUtil.php index 51b0b2d75..a74d6a24c 100644 --- a/src/SPC/util/SPCConfigUtil.php +++ b/src/SPC/util/SPCConfigUtil.php @@ -146,8 +146,10 @@ public function getExtensionConfig(array|Extension $extension, bool $include_sug if (!is_array($extension)) { $extension = [$extension]; } + $libs = array_map(fn ($y) => $y->getName(), array_merge(...array_map(fn ($x) => $x->getLibraryDependencies(true), $extension))); return $this->config( extensions: array_map(fn ($x) => $x->getName(), $extension), + libraries: $libs, include_suggest_ext: $include_suggest_ext ?: $this->builder?->getOption('with-suggested-exts') ?? false, include_suggest_lib: $include_suggest_lib ?: $this->builder?->getOption('with-suggested-libs') ?? false, ); From 2c590e58959832d20ca82a93924e9c32d627149f Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Tue, 4 Nov 2025 15:52:52 +0800 Subject: [PATCH 160/207] Define dependencies with kv array --- src/SPC/builder/Extension.php | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/SPC/builder/Extension.php b/src/SPC/builder/Extension.php index a6c6ab94a..c9cd06577 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -516,11 +516,6 @@ public function getLibraryDependencies(bool $recursive = false): array } } - if (array_key_exists(0, $deps)) { - $zero = [0 => $deps[0]]; - unset($deps[0]); - return $zero + $deps; - } return $deps; } @@ -552,7 +547,7 @@ protected function addLibraryDependency(string $name, bool $optional = false): v } logger()->info("enabling {$this->name} without library {$name}"); } else { - $this->dependencies[] = $depLib; + $this->dependencies[$name] = $depLib; } } @@ -565,7 +560,7 @@ protected function addExtensionDependency(string $name, bool $optional = false): } logger()->info("enabling {$this->name} without extension {$name}"); } else { - $this->dependencies[] = $depExt; + $this->dependencies[$name] = $depExt; } } From f09c18e78f694a0a0653effbe5a59a6364426591 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Thu, 6 Nov 2025 16:24:59 +0800 Subject: [PATCH 161/207] Use separated deploy functions --- src/SPC/builder/Extension.php | 7 + src/SPC/builder/freebsd/BSDBuilder.php | 6 +- src/SPC/builder/linux/LinuxBuilder.php | 95 ++++++++++---- src/SPC/builder/macos/MacOSBuilder.php | 8 +- src/SPC/builder/unix/UnixBuilderBase.php | 143 ++++++++++++--------- src/SPC/builder/windows/WindowsBuilder.php | 49 +++++-- src/globals/test-extensions.php | 8 +- 7 files changed, 201 insertions(+), 115 deletions(-) diff --git a/src/SPC/builder/Extension.php b/src/SPC/builder/Extension.php index c9cd06577..321537646 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -448,6 +448,13 @@ public function buildUnixShared(): void ->exec('make clean') ->exec('make -j' . $this->builder->concurrency) ->exec('make install'); + + // process *.so file + $soFile = BUILD_MODULES_PATH . '/' . $this->getName() . '.so'; + if (!file_exists($soFile)) { + throw new ValidationException("extension {$this->getName()} build failed: {$soFile} not found", validation_module: "Extension {$this->getName()} build"); + } + $this->builder->deployBinary($soFile, $soFile, false); } /** diff --git a/src/SPC/builder/freebsd/BSDBuilder.php b/src/SPC/builder/freebsd/BSDBuilder.php index 0c1d1ee44..b746dff56 100644 --- a/src/SPC/builder/freebsd/BSDBuilder.php +++ b/src/SPC/builder/freebsd/BSDBuilder.php @@ -153,7 +153,7 @@ protected function buildCli(): void if (!$this->getOption('no-strip', false)) { $shell->exec('strip sapi/cli/php'); } - $this->deployBinary(BUILD_TARGET_CLI); + $this->deploySAPIBinary(BUILD_TARGET_CLI); } /** @@ -184,7 +184,7 @@ protected function buildMicro(): void if (!$this->getOption('no-strip', false)) { shell()->cd(SOURCE_PATH . '/php-src/sapi/micro')->exec('strip --strip-unneeded micro.sfx'); } - $this->deployBinary(BUILD_TARGET_MICRO); + $this->deploySAPIBinary(BUILD_TARGET_MICRO); if ($this->phar_patched) { SourcePatcher::unpatchMicroPhar(); @@ -206,7 +206,7 @@ protected function buildFpm(): void if (!$this->getOption('no-strip', false)) { $shell->exec('strip sapi/fpm/php-fpm'); } - $this->deployBinary(BUILD_TARGET_FPM); + $this->deploySAPIBinary(BUILD_TARGET_FPM); } /** diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index 5ffa6a4d6..3f5d3b3c6 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -5,6 +5,7 @@ namespace SPC\builder\linux; use SPC\builder\unix\UnixBuilderBase; +use SPC\exception\PatchException; use SPC\exception\WrongUsageException; use SPC\store\Config; use SPC\store\FileSystem; @@ -193,7 +194,7 @@ protected function buildCli(): void SourcePatcher::patchFile('musl_static_readline.patch', SOURCE_PATH . '/php-src', true); } - $this->deployBinary(BUILD_TARGET_CLI); + $this->deploySAPIBinary(BUILD_TARGET_CLI); } protected function buildCgi(): void @@ -204,7 +205,7 @@ protected function buildCgi(): void ->exec('sed -i "s|//lib|/lib|g" Makefile') ->exec("make {$concurrency} {$vars} cgi"); - $this->deployBinary(BUILD_TARGET_CGI); + $this->deploySAPIBinary(BUILD_TARGET_CGI); } /** @@ -233,7 +234,11 @@ protected function buildMicro(): void ->exec('sed -i "s|//lib|/lib|g" Makefile') ->exec("make {$concurrency} {$vars} micro"); - $this->deployBinary(BUILD_TARGET_MICRO); + // deploy micro.sfx + $dst = $this->deploySAPIBinary(BUILD_TARGET_MICRO); + + // patch after UPX-ed micro.sfx + $this->processUpxedMicroSfx($dst); } finally { if ($this->phar_patched) { SourcePatcher::unpatchMicroPhar(); @@ -252,7 +257,7 @@ protected function buildFpm(): void ->exec('sed -i "s|//lib|/lib|g" Makefile') ->exec("make {$concurrency} {$vars} fpm"); - $this->deployBinary(BUILD_TARGET_FPM); + $this->deploySAPIBinary(BUILD_TARGET_FPM); } /** @@ -272,10 +277,48 @@ protected function buildEmbed(): void ->exec('sed -i "s|^EXTENSION_DIR = .*|EXTENSION_DIR = /' . basename(BUILD_MODULES_PATH) . '|" Makefile') ->exec("make {$concurrency} INSTALL_ROOT=" . BUILD_ROOT_PATH . " {$vars} install-sapi {$install_modules} install-build install-headers install-programs"); + // process libphp.so for shared embed + $libphpSo = BUILD_LIB_PATH . '/libphp.so'; + if (file_exists($libphpSo)) { + // deploy libphp.so + $this->deployBinary($libphpSo, $libphpSo, false); + // post actions: rename libphp.so to libphp-.so if -release is set in LDFLAGS + $this->processLibphpSoFile($libphpSo); + } + + // process libphp.a for static embed + if (getenv('SPC_CMD_VAR_PHP_EMBED_TYPE') === 'static') { + $AR = getenv('AR') ?: 'ar'; + f_passthru("{$AR} -t " . BUILD_LIB_PATH . "/libphp.a | grep '\\.a$' | xargs -n1 {$AR} d " . BUILD_LIB_PATH . '/libphp.a'); + // export dynamic symbols + SystemUtil::exportDynamicSymbols(BUILD_LIB_PATH . '/libphp.a'); + } + + // patch embed php scripts + $this->patchPhpScripts(); + } + + /** + * Return extra variables for php make command. + */ + private function getMakeExtraVars(): array + { + $config = (new SPCConfigUtil($this, ['libs_only_deps' => true, 'absolute_libs' => true]))->config($this->ext_list, $this->lib_list, $this->getOption('with-suggested-exts'), $this->getOption('with-suggested-libs')); + $static = SPCTarget::isStatic() ? '-all-static' : ''; + $lib = BUILD_LIB_PATH; + return array_filter([ + 'EXTRA_CFLAGS' => getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS'), + 'EXTRA_LIBS' => $config['libs'], + 'EXTRA_LDFLAGS' => getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_LDFLAGS'), + 'EXTRA_LDFLAGS_PROGRAM' => "-L{$lib} {$static} -pie", + ]); + } + + private function processLibphpSoFile(string $libphpSo): void + { $ldflags = getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_LDFLAGS') ?: ''; $libDir = BUILD_LIB_PATH; $modulesDir = BUILD_MODULES_PATH; - $libphpSo = "{$libDir}/libphp.so"; $realLibName = 'libphp.so'; $cwd = getcwd(); @@ -337,33 +380,29 @@ protected function buildEmbed(): void } } } - - if (getenv('SPC_CMD_VAR_PHP_EMBED_TYPE') === 'static') { - $AR = getenv('AR') ?: 'ar'; - f_passthru("{$AR} -t " . BUILD_LIB_PATH . "/libphp.a | grep '\\.a$' | xargs -n1 {$AR} d " . BUILD_LIB_PATH . '/libphp.a'); - // export dynamic symbols - SystemUtil::exportDynamicSymbols(BUILD_LIB_PATH . '/libphp.a'); - } - - if (!$this->getOption('no-strip', false) && file_exists(BUILD_LIB_PATH . '/' . $realLibName)) { - shell()->cd(BUILD_LIB_PATH)->exec("strip --strip-unneeded {$realLibName}"); - } - $this->patchPhpScripts(); } /** - * Return extra variables for php make command. + * Patch micro.sfx after UPX compression. + * micro needs special section handling in LinuxBuilder. + * The micro.sfx does not support UPX directly, but we can remove UPX + * info segment to adapt. + * This will also make micro.sfx with upx-packed more like a malware fore antivirus */ - private function getMakeExtraVars(): array + private function processUpxedMicroSfx(string $dst): void { - $config = (new SPCConfigUtil($this, ['libs_only_deps' => true, 'absolute_libs' => true]))->config($this->ext_list, $this->lib_list, $this->getOption('with-suggested-exts'), $this->getOption('with-suggested-libs')); - $static = SPCTarget::isStatic() ? '-all-static' : ''; - $lib = BUILD_LIB_PATH; - return array_filter([ - 'EXTRA_CFLAGS' => getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS'), - 'EXTRA_LIBS' => $config['libs'], - 'EXTRA_LDFLAGS' => getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_LDFLAGS'), - 'EXTRA_LDFLAGS_PROGRAM' => "-L{$lib} {$static} -pie", - ]); + if ($this->getOption('with-upx-pack') && version_compare($this->getMicroVersion(), '0.2.0') >= 0) { + // strip first + // cut binary with readelf + [$ret, $out] = shell()->execWithResult("readelf -l {$dst} | awk '/LOAD|GNU_STACK/ {getline; print \$1, \$2, \$3, \$4, \$6, \$7}'"); + $out[1] = explode(' ', $out[1]); + $offset = $out[1][0]; + if ($ret !== 0 || !str_starts_with($offset, '0x')) { + throw new PatchException('phpmicro UPX patcher', 'Cannot find offset in readelf output'); + } + $offset = hexdec($offset); + // remove upx extra wastes + file_put_contents($dst, substr(file_get_contents($dst), 0, $offset)); + } } } diff --git a/src/SPC/builder/macos/MacOSBuilder.php b/src/SPC/builder/macos/MacOSBuilder.php index d3bc5d194..204a712d0 100644 --- a/src/SPC/builder/macos/MacOSBuilder.php +++ b/src/SPC/builder/macos/MacOSBuilder.php @@ -189,7 +189,7 @@ protected function buildCli(): void $shell = shell()->cd(SOURCE_PATH . '/php-src'); $concurrency = getenv('SPC_CONCURRENCY') ? '-j' . getenv('SPC_CONCURRENCY') : ''; $shell->exec("make {$concurrency} {$vars} cli"); - $this->deployBinary(BUILD_TARGET_CLI); + $this->deploySAPIBinary(BUILD_TARGET_CLI); } protected function buildCgi(): void @@ -199,7 +199,7 @@ protected function buildCgi(): void $shell = shell()->cd(SOURCE_PATH . '/php-src'); $concurrency = getenv('SPC_CONCURRENCY') ? '-j' . getenv('SPC_CONCURRENCY') : ''; $shell->exec("make {$concurrency} {$vars} cgi"); - $this->deployBinary(BUILD_TARGET_CGI); + $this->deploySAPIBinary(BUILD_TARGET_CGI); } /** @@ -229,7 +229,7 @@ protected function buildMicro(): void $concurrency = getenv('SPC_CONCURRENCY') ? '-j' . getenv('SPC_CONCURRENCY') : ''; $shell->exec("make {$concurrency} {$vars} micro"); - $this->deployBinary(BUILD_TARGET_MICRO); + $this->deploySAPIBinary(BUILD_TARGET_MICRO); } finally { if ($this->phar_patched) { SourcePatcher::unpatchMicroPhar(); @@ -247,7 +247,7 @@ protected function buildFpm(): void $shell = shell()->cd(SOURCE_PATH . '/php-src'); $concurrency = getenv('SPC_CONCURRENCY') ? '-j' . getenv('SPC_CONCURRENCY') : ''; $shell->exec("make {$concurrency} {$vars} fpm"); - $this->deployBinary(BUILD_TARGET_FPM); + $this->deploySAPIBinary(BUILD_TARGET_FPM); } /** diff --git a/src/SPC/builder/unix/UnixBuilderBase.php b/src/SPC/builder/unix/UnixBuilderBase.php index 4c90ebdb9..570d8093f 100644 --- a/src/SPC/builder/unix/UnixBuilderBase.php +++ b/src/SPC/builder/unix/UnixBuilderBase.php @@ -6,7 +6,6 @@ use SPC\builder\BuilderBase; use SPC\builder\linux\SystemUtil as LinuxSystemUtil; -use SPC\exception\PatchException; use SPC\exception\SPCException; use SPC\exception\SPCInternalException; use SPC\exception\ValidationException; @@ -79,6 +78,82 @@ public function proveLibs(array $sorted_libraries): void $this->lib_list = $sorted_libraries; } + /** + * Strip unneeded symbols from binary file. + */ + public function stripBinary(string $binary_path): void + { + shell()->exec(match (PHP_OS_FAMILY) { + 'Darwin' => "strip -S {$binary_path}", + 'Linux' => "strip --strip-unneeded {$binary_path}", + default => throw new SPCInternalException('stripBinary is only supported on Linux and macOS'), + }); + } + + /** + * Extract debug information from binary file. + * + * @param string $binary_path the path to the binary file, including executables, shared libraries, etc + */ + public function extractDebugInfo(string $binary_path): string + { + $target_dir = BUILD_ROOT_PATH . '/debug'; + FileSystem::createDir($target_dir); + $basename = basename($binary_path); + $debug_file = "{$target_dir}/{$basename}" . (PHP_OS_FAMILY === 'Darwin' ? '.dwarf' : '.debug'); + shell()->exec(match (PHP_OS_FAMILY) { + 'Darwin' => "dsymutil -f {$binary_path} -o {$debug_file}", + 'Linux' => "objcopy ---only-keep-debug {$binary_path} {$debug_file}", + default => throw new SPCInternalException('extractDebugInfo is only supported on Linux and macOS'), + }); + return $debug_file; + } + + /** + * Deploy the binary file from src to dst. + */ + public function deployBinary(string $src, string $dst, bool $executable = true): string + { + // UPX for linux + $upx_option = (bool) $this->getOption('with-upx-pack', false); + + // file must exists + if (!file_exists($src)) { + throw new SPCInternalException("Deploy failed. Cannot find file: {$src}"); + } + // dst dir must exists + FileSystem::createDir(dirname($dst)); + + // ignore copy to self + if (realpath($src) !== realpath($dst)) { + shell()->exec('cp ' . escapeshellarg($src) . ' ' . escapeshellarg($dst)); + } + + // file exist + if (!file_exists($dst)) { + throw new SPCInternalException("Deploy failed. Cannot find file after copy: {$dst}"); + } + + // extract debug info + $this->extractDebugInfo($dst); + + // strip + if (!$this->getOption('no-strip', false)) { + $this->stripBinary($dst); + } + + // Compress binary with UPX if needed (only for Linux) + if ($upx_option && PHP_OS_FAMILY === 'Linux' && $executable) { + if ($this->getOption('no-strip', false)) { + logger()->warning('UPX compression is not recommended when --no-strip is enabled.'); + } + logger()->info("Compressing {$dst} with UPX"); + shell()->exec(getenv('UPX_EXEC') . " --best {$dst}"); + } + + return $dst; + } + /** * Sanity check after build complete. */ @@ -209,14 +284,10 @@ protected function sanityCheck(int $build_target): void } /** - * Deploy the binary file to the build bin path. - * - * @param int $type Type integer, one of BUILD_TARGET_CLI, BUILD_TARGET_MICRO, BUILD_TARGET_FPM, BUILD_TARGET_CGI, BUILD_TARGET_FRANKENPHP + * Deploy binaries that produces executable SAPI */ - protected function deployBinary(int $type): void + protected function deploySAPIBinary(int $type): string { - FileSystem::createDir(BUILD_BIN_PATH); - $copy_files = []; $src = match ($type) { BUILD_TARGET_CLI => SOURCE_PATH . '/php-src/sapi/cli/php', BUILD_TARGET_MICRO => SOURCE_PATH . '/php-src/sapi/micro/micro.sfx', @@ -225,60 +296,8 @@ protected function deployBinary(int $type): void BUILD_TARGET_FRANKENPHP => BUILD_BIN_PATH . '/frankenphp', default => throw new SPCInternalException("Deployment does not accept type {$type}"), }; - $no_strip_option = (bool) $this->getOption('no-strip', false); - $upx_option = (bool) $this->getOption('with-upx-pack', false); - - // Generate debug symbols if needed - $copy_files[] = $src; - if (!$no_strip_option && PHP_OS_FAMILY === 'Darwin') { - shell() - ->exec("dsymutil -f {$src}") // generate .dwarf file - ->exec("strip -S {$src}"); // strip unneeded symbols - $copy_files[] = "{$src}.dwarf"; - } elseif (!$no_strip_option && PHP_OS_FAMILY === 'Linux') { - shell() - ->exec("objcopy --only-keep-debug {$src} {$src}.debug") // extract debug symbols - ->exec("objcopy --add-gnu-debuglink={$src}.debug {$src}") // link debug symbols - ->exec("strip --strip-unneeded {$src}"); // strip unneeded symbols - $copy_files[] = "{$src}.debug"; - } - - // Compress binary with UPX if needed (only for Linux) - if ($upx_option && PHP_OS_FAMILY === 'Linux') { - if ($no_strip_option) { - logger()->warning('UPX compression is not recommended when --no-strip is enabled.'); - } - logger()->info("Compressing {$src} with UPX"); - shell()->exec(getenv('UPX_EXEC') . " --best {$src}"); - - // micro needs special section handling in LinuxBuilder. - // The micro.sfx does not support UPX directly, but we can remove UPX-info segment to adapt. - // This will also make micro.sfx with upx-packed more like a malware fore antivirus :( - if ($type === BUILD_TARGET_MICRO && version_compare($this->getMicroVersion(), '0.2.0') >= 0) { - // strip first - // cut binary with readelf - [$ret, $out] = shell()->execWithResult("readelf -l {$src} | awk '/LOAD|GNU_STACK/ {getline; print \$1, \$2, \$3, \$4, \$6, \$7}'"); - $out[1] = explode(' ', $out[1]); - $offset = $out[1][0]; - if ($ret !== 0 || !str_starts_with($offset, '0x')) { - throw new PatchException('phpmicro UPX patcher', 'Cannot find offset in readelf output'); - } - $offset = hexdec($offset); - // remove upx extra wastes - file_put_contents($src, substr(file_get_contents($src), 0, $offset)); - } - } - - // Copy files - foreach ($copy_files as $file) { - if (!file_exists($file)) { - throw new SPCInternalException("Deploy failed. Cannot find file: {$file}"); - } - // ignore copy to self - if (realpath($file) !== realpath(BUILD_BIN_PATH . '/' . basename($file))) { - shell()->exec('cp ' . escapeshellarg($file) . ' ' . escapeshellarg(BUILD_BIN_PATH . '/')); - } - } + $dst = BUILD_BIN_PATH . '/' . basename($src); + return $this->deployBinary($src, $dst); } /** @@ -379,7 +398,7 @@ protected function buildFrankenphp(): void ->setEnv($env) ->exec("xcaddy build --output frankenphp {$xcaddyModules}"); - $this->deployBinary(BUILD_TARGET_FRANKENPHP); + $this->deploySAPIBinary(BUILD_TARGET_FRANKENPHP); } /** diff --git a/src/SPC/builder/windows/WindowsBuilder.php b/src/SPC/builder/windows/WindowsBuilder.php index 35b1623df..e4f1578c4 100644 --- a/src/SPC/builder/windows/WindowsBuilder.php +++ b/src/SPC/builder/windows/WindowsBuilder.php @@ -161,7 +161,7 @@ public function buildCli(): void cmd()->cd(SOURCE_PATH . '\php-src')->exec("{$this->sdk_prefix} nmake_cli_wrapper.bat --task-args php.exe"); - $this->deployBinary(BUILD_TARGET_CLI); + $this->deploySAPIBinary(BUILD_TARGET_CLI); } public function buildCgi(): void @@ -186,7 +186,7 @@ public function buildCgi(): void cmd()->cd(SOURCE_PATH . '\php-src')->exec("{$this->sdk_prefix} nmake_cgi_wrapper.bat --task-args php-cgi.exe"); - $this->deployBinary(BUILD_TARGET_CGI); + $this->deploySAPIBinary(BUILD_TARGET_CGI); } public function buildEmbed(): void @@ -243,7 +243,7 @@ public function buildMicro(): void } } - $this->deployBinary(BUILD_TARGET_MICRO); + $this->deploySAPIBinary(BUILD_TARGET_MICRO); } public function proveLibs(array $sorted_libraries): void @@ -357,8 +357,18 @@ public function sanityCheck(mixed $build_target): void * * @param int $type Deploy type */ - public function deployBinary(int $type): void + public function deploySAPIBinary(int $type): void { + logger()->info('Deploying ' . $this->getBuildTypeName($type) . ' file'); + + $debug_dir = BUILD_ROOT_PATH . '\debug'; + $bin_path = BUILD_BIN_PATH; + + // create dirs + FileSystem::createDir($debug_dir); + FileSystem::createDir($bin_path); + + // determine source path for different SAPI $rel_type = 'Release'; // TODO: Debug build support $ts = $this->zts ? '_TS' : ''; $src = match ($type) { @@ -368,20 +378,31 @@ public function deployBinary(int $type): void default => throw new SPCInternalException("Deployment does not accept type {$type}"), }; - // with-upx-pack for cli and micro - if ($this->getOption('with-upx-pack', false)) { - if ($type === BUILD_TARGET_CLI || $type === BUILD_TARGET_CGI || ($type === BUILD_TARGET_MICRO && version_compare($this->getMicroVersion(), '0.2.0') >= 0)) { - cmd()->exec(getenv('UPX_EXEC') . ' --best ' . escapeshellarg("{$src[0]}\\{$src[1]}")); - } + $src = "{$src[0]}\\{$src[1]}"; + $dst = BUILD_BIN_PATH . '\\' . basename($src); + + // file must exists + if (!file_exists($src)) { + throw new SPCInternalException("Deploy failed. Cannot find file: {$src}"); } + // dst dir must exists + FileSystem::createDir(dirname($dst)); - logger()->info('Deploying ' . $this->getBuildTypeName($type) . ' file'); - FileSystem::createDir(BUILD_BIN_PATH); + // copy file + if (realpath($src) !== realpath($dst)) { + cmd()->exec('copy ' . escapeshellarg($src) . ' ' . escapeshellarg($dst)); + } - cmd()->exec('copy ' . escapeshellarg("{$src[0]}\\{$src[1]}") . ' ' . escapeshellarg(BUILD_BIN_PATH . '\\')); + // extract debug info in buildroot/debug if ($this->getOption('no-strip', false) && file_exists("{$src[0]}\\{$src[2]}")) { - logger()->info('Deploying ' . $this->getBuildTypeName($type) . ' debug symbols'); - cmd()->exec('copy ' . escapeshellarg("{$src[0]}\\{$src[2]}") . ' ' . escapeshellarg(BUILD_BIN_PATH . '\\')); + cmd()->exec('copy ' . escapeshellarg("{$src[0]}\\{$src[2]}") . ' ' . escapeshellarg($debug_dir)); + } + + // with-upx-pack for cli and micro + if ($this->getOption('with-upx-pack', false)) { + if ($type === BUILD_TARGET_CLI || $type === BUILD_TARGET_CGI || ($type === BUILD_TARGET_MICRO && version_compare($this->getMicroVersion(), '0.2.0') >= 0)) { + cmd()->exec(getenv('UPX_EXEC') . ' --best ' . escapeshellarg($dst)); + } } } diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index 43ce5d152..2caf56b00 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -31,7 +31,7 @@ 'ubuntu-22.04-arm', // bin/spc-gnu-docker for arm64 'ubuntu-24.04-arm', // bin/spc for arm64 // 'windows-2022', // .\bin\spc.ps1 - // 'windows-2025', + 'windows-2025', ]; // whether enable thread safe @@ -51,13 +51,13 @@ // If you want to test your added extensions and libs, add below (comma separated, example `bcmath,openssl`). $extensions = match (PHP_OS_FAMILY) { 'Linux', 'Darwin' => 'rdkafka', - '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', + 'Windows' => 'bcmath,bz2,calendar,ctype,zlib,zip', }; // If you want to test shared extensions, add them below (comma separated, example `bcmath,openssl`). $shared_extensions = match (PHP_OS_FAMILY) { - 'Linux' => '', - 'Darwin' => '', + 'Linux' => 'snmp', + 'Darwin' => 'snmp', 'Windows' => '', }; From 8c8cb701743c90ca3be1f501fea87339d853efe7 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Thu, 6 Nov 2025 16:27:11 +0800 Subject: [PATCH 162/207] phpstan fix --- src/SPC/builder/Extension.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/SPC/builder/Extension.php b/src/SPC/builder/Extension.php index 321537646..08b403e61 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -4,6 +4,7 @@ namespace SPC\builder; +use SPC\builder\unix\UnixBuilderBase; use SPC\exception\EnvironmentException; use SPC\exception\SPCException; use SPC\exception\ValidationException; @@ -454,7 +455,9 @@ public function buildUnixShared(): void if (!file_exists($soFile)) { throw new ValidationException("extension {$this->getName()} build failed: {$soFile} not found", validation_module: "Extension {$this->getName()} build"); } - $this->builder->deployBinary($soFile, $soFile, false); + /** @var UnixBuilderBase $builder */ + $builder = $this->builder; + $builder->deployBinary($soFile, $soFile, false); } /** From a45f314447a7004f5fb346a9b89332062248c060 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Thu, 6 Nov 2025 16:31:24 +0800 Subject: [PATCH 163/207] Remove for pure test --- src/globals/test-extensions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index 2caf56b00..62d7d4112 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -51,7 +51,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' => 'rdkafka', - 'Windows' => 'bcmath,bz2,calendar,ctype,zlib,zip', + 'Windows' => 'bcmath', }; // If you want to test shared extensions, add them below (comma separated, example `bcmath,openssl`). From f6b091498f51db2798f13f578c3be56f849453a9 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Thu, 6 Nov 2025 16:51:46 +0800 Subject: [PATCH 164/207] Fix missing debug link and debug option --- src/SPC/builder/unix/UnixBuilderBase.php | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/SPC/builder/unix/UnixBuilderBase.php b/src/SPC/builder/unix/UnixBuilderBase.php index 570d8093f..941b3f47f 100644 --- a/src/SPC/builder/unix/UnixBuilderBase.php +++ b/src/SPC/builder/unix/UnixBuilderBase.php @@ -101,11 +101,15 @@ public function extractDebugInfo(string $binary_path): string FileSystem::createDir($target_dir); $basename = basename($binary_path); $debug_file = "{$target_dir}/{$basename}" . (PHP_OS_FAMILY === 'Darwin' ? '.dwarf' : '.debug'); - shell()->exec(match (PHP_OS_FAMILY) { - 'Darwin' => "dsymutil -f {$binary_path} -o {$debug_file}", - 'Linux' => "objcopy ---only-keep-debug {$binary_path} {$debug_file}", - default => throw new SPCInternalException('extractDebugInfo is only supported on Linux and macOS'), - }); + if (PHP_OS_FAMILY === 'Darwin') { + shell()->exec("dsymutil -f {$binary_path} -o {$debug_file}"); + } elseif (PHP_OS_FAMILY === 'Linux') { + shell() + ->exec("objcopy --only-keep-debug {$binary_path} {$debug_file}") + ->exec("objcopy --add-gnu-debuglink={$debug_file} {$binary_path}"); + } else { + throw new SPCInternalException('extractDebugInfo is only supported on Linux and macOS'); + } return $debug_file; } From 4198ddd5d1ae8f41fe036354a0a4209a8ce603b9 Mon Sep 17 00:00:00 2001 From: henderkes Date: Fri, 7 Nov 2025 11:06:50 +0100 Subject: [PATCH 165/207] make --with-frankenphp-app=dir work with docker scripts --- bin/spc-alpine-docker | 43 ++++++++++++++++++++++++++++++++++++++++++- bin/spc-gnu-docker | 43 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 84 insertions(+), 2 deletions(-) diff --git a/bin/spc-alpine-docker b/bin/spc-alpine-docker index 6365233c5..0d618743e 100755 --- a/bin/spc-alpine-docker +++ b/bin/spc-alpine-docker @@ -162,6 +162,47 @@ if [ ! -z "$GITHUB_TOKEN" ]; then ENV_LIST="$ENV_LIST -e GITHUB_TOKEN=$GITHUB_TOKEN" fi +# Intercept and rewrite --with-frankenphp-app option, and mount host path to /app/app +FRANKENPHP_APP_PATH="" +NEW_ARGS=() +while [ $# -gt 0 ]; do + case "$1" in + --with-frankenphp-app=*) + FRANKENPHP_APP_PATH="${1#*=}" + NEW_ARGS+=("--with-frankenphp-app=/app/app") + shift + ;; + --with-frankenphp-app) + if [ -n "${2:-}" ]; then + FRANKENPHP_APP_PATH="$2" + NEW_ARGS+=("--with-frankenphp-app=/app/app") + shift 2 + else + NEW_ARGS+=("$1") + shift + fi + ;; + *) + NEW_ARGS+=("$1") + shift + ;; + esac +done + +# Normalize the path and add mount if provided +if [ -n "$FRANKENPHP_APP_PATH" ]; then + # expand ~ to $HOME + if [ "${FRANKENPHP_APP_PATH#~}" != "$FRANKENPHP_APP_PATH" ]; then + FRANKENPHP_APP_PATH="$HOME${FRANKENPHP_APP_PATH#~}" + fi + # make absolute if relative + case "$FRANKENPHP_APP_PATH" in + /*) ABS_APP_PATH="$FRANKENPHP_APP_PATH" ;; + *) ABS_APP_PATH="$(pwd)/$FRANKENPHP_APP_PATH" ;; + esac + MOUNT_LIST="$MOUNT_LIST -v \"$ABS_APP_PATH\":/app/app" +fi + # Run docker # shellcheck disable=SC2068 # shellcheck disable=SC2086 @@ -183,5 +224,5 @@ if [ "$SPC_DOCKER_DEBUG" = "yes" ]; then set -ex $DOCKER_EXECUTABLE run $PLATFORM_ARG --rm $INTERACT $ENV_LIST $MOUNT_LIST cwcc-spc-$SPC_USE_ARCH-$SPC_DOCKER_VERSION /bin/bash else - $DOCKER_EXECUTABLE run $PLATFORM_ARG --rm $INTERACT $ENV_LIST $MOUNT_LIST cwcc-spc-$SPC_USE_ARCH-$SPC_DOCKER_VERSION bin/spc $@ + $DOCKER_EXECUTABLE run $PLATFORM_ARG --rm $INTERACT $ENV_LIST $MOUNT_LIST cwcc-spc-$SPC_USE_ARCH-$SPC_DOCKER_VERSION bin/spc "${NEW_ARGS[@]}" fi diff --git a/bin/spc-gnu-docker b/bin/spc-gnu-docker index 7fcf5d410..29c68adef 100755 --- a/bin/spc-gnu-docker +++ b/bin/spc-gnu-docker @@ -174,6 +174,47 @@ if [ ! -z "$GITHUB_TOKEN" ]; then ENV_LIST="$ENV_LIST -e GITHUB_TOKEN=$GITHUB_TOKEN" fi +# Intercept and rewrite --with-frankenphp-app option, and mount host path to /app/app +FRANKENPHP_APP_PATH="" +NEW_ARGS=() +while [ $# -gt 0 ]; do + case "$1" in + --with-frankenphp-app=*) + FRANKENPHP_APP_PATH="${1#*=}" + NEW_ARGS+=("--with-frankenphp-app=/app/app") + shift + ;; + --with-frankenphp-app) + if [ -n "${2:-}" ]; then + FRANKENPHP_APP_PATH="$2" + NEW_ARGS+=("--with-frankenphp-app=/app/app") + shift 2 + else + NEW_ARGS+=("$1") + shift + fi + ;; + *) + NEW_ARGS+=("$1") + shift + ;; + esac +done + +# Normalize the path and add mount if provided +if [ -n "$FRANKENPHP_APP_PATH" ]; then + # expand ~ to $HOME + if [ "${FRANKENPHP_APP_PATH#~}" != "$FRANKENPHP_APP_PATH" ]; then + FRANKENPHP_APP_PATH="$HOME${FRANKENPHP_APP_PATH#~}" + fi + # make absolute if relative + case "$FRANKENPHP_APP_PATH" in + /*) ABS_APP_PATH="$FRANKENPHP_APP_PATH" ;; + *) ABS_APP_PATH="$(pwd)/$FRANKENPHP_APP_PATH" ;; + esac + MOUNT_LIST="$MOUNT_LIST -v \"$ABS_APP_PATH\":/app/app" +fi + # Run docker # shellcheck disable=SC2068 # shellcheck disable=SC2086 @@ -196,5 +237,5 @@ if [ "$SPC_DOCKER_DEBUG" = "yes" ]; then set -ex $DOCKER_EXECUTABLE run $PLATFORM_ARG --privileged --rm -it $INTERACT $ENV_LIST --env-file /tmp/spc-gnu-docker.env $MOUNT_LIST cwcc-spc-gnu-$SPC_USE_ARCH-$SPC_DOCKER_VERSION /bin/bash else - $DOCKER_EXECUTABLE run $PLATFORM_ARG --rm $INTERACT $ENV_LIST --env-file /tmp/spc-gnu-docker.env $MOUNT_LIST cwcc-spc-gnu-$SPC_USE_ARCH-$SPC_DOCKER_VERSION bin/spc $@ + $DOCKER_EXECUTABLE run $PLATFORM_ARG --rm $INTERACT $ENV_LIST --env-file /tmp/spc-gnu-docker.env $MOUNT_LIST cwcc-spc-gnu-$SPC_USE_ARCH-$SPC_DOCKER_VERSION bin/spc "${NEW_ARGS[@]}" fi From 09b7159119e15ed6fb68b216f71a77ce9fc5923c Mon Sep 17 00:00:00 2001 From: henderkes Date: Sat, 8 Nov 2025 09:40:16 +0100 Subject: [PATCH 166/207] update freetype download to get latest version --- config/source.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config/source.json b/config/source.json index 4a1990815..ca1edfb02 100644 --- a/config/source.json +++ b/config/source.json @@ -302,9 +302,9 @@ } }, "freetype": { - "type": "git", - "rev": "VER-2-13-2", - "url": "https://github.com/freetype/freetype", + "type": "ghtagtar", + "repo": "freetype/freetype", + "match": "VER-2-\\d+-\\d+", "license": { "type": "file", "path": "LICENSE.TXT" From d6de01d05c2eeb26d3693a7bf79916fbbc225acd Mon Sep 17 00:00:00 2001 From: henderkes Date: Sun, 9 Nov 2025 10:01:19 +0100 Subject: [PATCH 167/207] update to rc4 --- src/SPC/store/source/PhpSource.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/store/source/PhpSource.php b/src/SPC/store/source/PhpSource.php index 1c0be85fb..e0b3ba279 100644 --- a/src/SPC/store/source/PhpSource.php +++ b/src/SPC/store/source/PhpSource.php @@ -16,7 +16,7 @@ public function fetch(bool $force = false, ?array $config = null, int $lock_as = { $major = defined('SPC_BUILD_PHP_VERSION') ? SPC_BUILD_PHP_VERSION : '8.4'; if ($major === '8.5') { - Downloader::downloadSource('php-src', ['type' => 'url', 'url' => 'https://downloads.php.net/~daniels/php-8.5.0RC3.tar.xz'], $force); + Downloader::downloadSource('php-src', ['type' => 'url', 'url' => 'https://downloads.php.net/~edorian/php-8.5.0RC4.tar.xz'], $force); } elseif ($major === 'git') { Downloader::downloadSource('php-src', ['type' => 'git', 'url' => 'https://github.com/php/php-src.git', 'rev' => 'master'], $force); } else { From f4b03ae8356dbd099ee3f5db20e4b10bbd64e002 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Sun, 9 Nov 2025 17:12:22 +0800 Subject: [PATCH 168/207] Introduce standalone DirDiff util class --- src/SPC/store/DirDiff.php | 95 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 src/SPC/store/DirDiff.php diff --git a/src/SPC/store/DirDiff.php b/src/SPC/store/DirDiff.php new file mode 100644 index 000000000..8cd5c1d40 --- /dev/null +++ b/src/SPC/store/DirDiff.php @@ -0,0 +1,95 @@ +reset(); + } + + /** + * Reset the baseline to current state. + */ + public function reset(): void + { + $this->before = FileSystem::scanDirFiles($this->dir, relative: true) ?: []; + + if ($this->track_content_changes) { + $this->before_file_hashes = []; + foreach ($this->before as $file) { + $this->before_file_hashes[$file] = md5_file($this->dir . DIRECTORY_SEPARATOR . $file); + } + } + } + + /** + * Get the list of incremented files. + * + * @param bool $relative Return relative paths or absolute paths + * @return array List of incremented files + */ + public function getIncrementFiles(bool $relative = false): array + { + $after = FileSystem::scanDirFiles($this->dir, relative: true) ?: []; + $diff = array_diff($after, $this->before); + if ($relative) { + return $diff; + } + return array_map(fn ($f) => $this->dir . DIRECTORY_SEPARATOR . $f, $diff); + } + + /** + * Get the list of changed files (including new files). + * + * @param bool $relative Return relative paths or absolute paths + * @param bool $include_new_files Include new files as changed files + * @return array List of changed files + */ + public function getChangedFiles(bool $relative = false, bool $include_new_files = true): array + { + $after = FileSystem::scanDirFiles($this->dir, relative: true) ?: []; + $changed = []; + foreach ($after as $file) { + if (isset($this->before_file_hashes[$file])) { + $after_hash = md5_file($this->dir . DIRECTORY_SEPARATOR . $file); + if ($after_hash !== $this->before_file_hashes[$file]) { + $changed[] = $file; + } + } elseif ($include_new_files) { + // New file, consider as changed + $changed[] = $file; + } + } + if ($relative) { + return $changed; + } + return array_map(fn ($f) => $this->dir . DIRECTORY_SEPARATOR . $f, $changed); + } + + /** + * Get the list of removed files. + * + * @param bool $relative Return relative paths or absolute paths + * @return array List of removed files + */ + public function getRemovedFiles(bool $relative = false): array + { + $after = FileSystem::scanDirFiles($this->dir, relative: true) ?: []; + $removed = array_diff($this->before, $after); + if ($relative) { + return $removed; + } + return array_map(fn ($f) => $this->dir . DIRECTORY_SEPARATOR . $f, $removed); + } +} From 987ad4b8461fbe3f04e3a11688dc8cadaa7288a9 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Sun, 9 Nov 2025 17:13:41 +0800 Subject: [PATCH 169/207] Use diff to detect and deploy-patch new shared extensions that built with php --- src/SPC/builder/linux/LinuxBuilder.php | 10 ++++++++++ src/SPC/builder/macos/MacOSBuilder.php | 17 +++++++++++++++++ src/SPC/builder/unix/UnixBuilderBase.php | 2 ++ 3 files changed, 29 insertions(+) diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index 3f5d3b3c6..68db5688c 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -8,6 +8,7 @@ use SPC\exception\PatchException; use SPC\exception\WrongUsageException; use SPC\store\Config; +use SPC\store\DirDiff; use SPC\store\FileSystem; use SPC\store\SourcePatcher; use SPC\util\GlobalEnvManager; @@ -270,6 +271,9 @@ protected function buildEmbed(): void return Config::getExt($ext->getName(), 'build-with-php') === true; }); $install_modules = $sharedExts ? 'install-modules' : ''; + + // detect changes in module path + $diff = new DirDiff(BUILD_MODULES_PATH, true); $vars = SystemUtil::makeEnvVarString($this->getMakeExtraVars()); $concurrency = getenv('SPC_CONCURRENCY') ? '-j' . getenv('SPC_CONCURRENCY') : ''; shell()->cd(SOURCE_PATH . '/php-src') @@ -286,6 +290,12 @@ protected function buildEmbed(): void $this->processLibphpSoFile($libphpSo); } + // process shared extensions build-with-php + $increment_files = $diff->getChangedFiles(); + foreach ($increment_files as $increment_file) { + $this->deployBinary($increment_file, $increment_file, false); + } + // process libphp.a for static embed if (getenv('SPC_CMD_VAR_PHP_EMBED_TYPE') === 'static') { $AR = getenv('AR') ?: 'ar'; diff --git a/src/SPC/builder/macos/MacOSBuilder.php b/src/SPC/builder/macos/MacOSBuilder.php index 204a712d0..849b350f9 100644 --- a/src/SPC/builder/macos/MacOSBuilder.php +++ b/src/SPC/builder/macos/MacOSBuilder.php @@ -8,6 +8,7 @@ use SPC\builder\unix\UnixBuilderBase; use SPC\exception\WrongUsageException; use SPC\store\Config; +use SPC\store\DirDiff; use SPC\store\FileSystem; use SPC\store\SourcePatcher; use SPC\util\GlobalEnvManager; @@ -262,9 +263,25 @@ protected function buildEmbed(): void $install_modules = $sharedExts ? 'install-modules' : ''; $vars = SystemUtil::makeEnvVarString($this->getMakeExtraVars()); $concurrency = getenv('SPC_CONCURRENCY') ? '-j' . getenv('SPC_CONCURRENCY') : ''; + + $diff = new DirDiff(BUILD_MODULES_PATH, true); + shell()->cd(SOURCE_PATH . '/php-src') + ->exec('sed -i "" "s|^EXTENSION_DIR = .*|EXTENSION_DIR = /' . basename(BUILD_MODULES_PATH) . '|" Makefile') ->exec("make {$concurrency} INSTALL_ROOT=" . BUILD_ROOT_PATH . " {$vars} install-sapi {$install_modules} install-build install-headers install-programs"); + $libphp = BUILD_LIB_PATH . '/libphp.dylib'; + if (file_exists($libphp)) { + $this->deployBinary($libphp, $libphp, false); + // macOS currently have no -release option for dylib, so we just rename it here + } + + // process shared extensions build-with-php + $increment_files = $diff->getChangedFiles(); + foreach ($increment_files as $increment_file) { + $this->deployBinary($increment_file, $increment_file, false); + } + if (getenv('SPC_CMD_VAR_PHP_EMBED_TYPE') === 'static') { $AR = getenv('AR') ?: 'ar'; f_passthru("{$AR} -t " . BUILD_LIB_PATH . "/libphp.a | grep '\\.a$' | xargs -n1 {$AR} d " . BUILD_LIB_PATH . '/libphp.a'); diff --git a/src/SPC/builder/unix/UnixBuilderBase.php b/src/SPC/builder/unix/UnixBuilderBase.php index 941b3f47f..15488a67e 100644 --- a/src/SPC/builder/unix/UnixBuilderBase.php +++ b/src/SPC/builder/unix/UnixBuilderBase.php @@ -118,6 +118,8 @@ public function extractDebugInfo(string $binary_path): string */ public function deployBinary(string $src, string $dst, bool $executable = true): string { + logger()->debug('Deploying binary from ' . $src . ' to ' . $dst); + // UPX for linux $upx_option = (bool) $this->getOption('with-upx-pack', false); From 1575016885b7bede22cd4255567478a2afe3a6d8 Mon Sep 17 00:00:00 2001 From: henderkes Date: Sun, 9 Nov 2025 23:35:49 +0100 Subject: [PATCH 170/207] simplify regex --- src/SPC/builder/unix/UnixBuilderBase.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/SPC/builder/unix/UnixBuilderBase.php b/src/SPC/builder/unix/UnixBuilderBase.php index 46f4cb433..2a9bcb9bb 100644 --- a/src/SPC/builder/unix/UnixBuilderBase.php +++ b/src/SPC/builder/unix/UnixBuilderBase.php @@ -320,8 +320,7 @@ protected function buildFrankenphp(): void $xcaddyModules = getenv('SPC_CMD_VAR_FRANKENPHP_XCADDY_MODULES'); $frankenphpSourceDir = SOURCE_PATH . '/frankenphp'; - $xcaddyModules = preg_replace('#--with github.com/dunglas/frankenphp(=\S+)?#', '', $xcaddyModules); - $xcaddyModules = preg_replace('#--with github.com/dunglas/frankenphp/caddy(=\S+)?#', '', $xcaddyModules); + $xcaddyModules = preg_replace('#--with github.com/dunglas/frankenphp\S*#', '', $xcaddyModules); $xcaddyModules = "--with github.com/dunglas/frankenphp={$frankenphpSourceDir} " . "--with github.com/dunglas/frankenphp/caddy={$frankenphpSourceDir}/caddy {$xcaddyModules}"; if ($this->getLib('brotli') === null && str_contains($xcaddyModules, '--with github.com/dunglas/caddy-cbrotli')) { From e441a575eaedf1cfc4f9084878bd5306134fcb30 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Mon, 10 Nov 2025 13:26:17 +0800 Subject: [PATCH 171/207] Remove escape backslashes --- bin/spc-alpine-docker | 2 +- bin/spc-gnu-docker | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/spc-alpine-docker b/bin/spc-alpine-docker index 0d618743e..2790a5c34 100755 --- a/bin/spc-alpine-docker +++ b/bin/spc-alpine-docker @@ -200,7 +200,7 @@ if [ -n "$FRANKENPHP_APP_PATH" ]; then /*) ABS_APP_PATH="$FRANKENPHP_APP_PATH" ;; *) ABS_APP_PATH="$(pwd)/$FRANKENPHP_APP_PATH" ;; esac - MOUNT_LIST="$MOUNT_LIST -v \"$ABS_APP_PATH\":/app/app" + MOUNT_LIST="$MOUNT_LIST -v $ABS_APP_PATH:/app/app" fi # Run docker diff --git a/bin/spc-gnu-docker b/bin/spc-gnu-docker index 29c68adef..68f85109f 100755 --- a/bin/spc-gnu-docker +++ b/bin/spc-gnu-docker @@ -212,7 +212,7 @@ if [ -n "$FRANKENPHP_APP_PATH" ]; then /*) ABS_APP_PATH="$FRANKENPHP_APP_PATH" ;; *) ABS_APP_PATH="$(pwd)/$FRANKENPHP_APP_PATH" ;; esac - MOUNT_LIST="$MOUNT_LIST -v \"$ABS_APP_PATH\":/app/app" + MOUNT_LIST="$MOUNT_LIST -v $ABS_APP_PATH:/app/app" fi # Run docker From 9edb9417a125c52239fc9038779a1d15ca667f4d Mon Sep 17 00:00:00 2001 From: DubbleClick Date: Fri, 5 Sep 2025 21:36:25 +0700 Subject: [PATCH 172/207] add --with-frankenphp-app option to embed an app # Conflicts: # config/lib.json # src/SPC/builder/unix/UnixBuilderBase.php --- config/env.ini | 2 +- config/lib.json | 10 +++- config/source.json | 10 ++++ src/SPC/builder/unix/UnixBuilderBase.php | 61 +++++++++++++++++++++--- src/SPC/command/BuildPHPCommand.php | 1 + 5 files changed, 75 insertions(+), 9 deletions(-) diff --git a/config/env.ini b/config/env.ini index 1047c3f70..cfda622e7 100644 --- a/config/env.ini +++ b/config/env.ini @@ -45,7 +45,7 @@ SPC_SKIP_PHP_VERSION_CHECK="no" ; Ignore some check item for bin/spc doctor command, comma separated (e.g. SPC_SKIP_DOCTOR_CHECK_ITEMS="if homebrew has installed") SPC_SKIP_DOCTOR_CHECK_ITEMS="" ; extra modules that xcaddy will include in the FrankenPHP build -SPC_CMD_VAR_FRANKENPHP_XCADDY_MODULES="--with github.com/dunglas/frankenphp/caddy --with github.com/dunglas/mercure/caddy --with github.com/dunglas/vulcain/caddy --with github.com/dunglas/caddy-cbrotli" +SPC_CMD_VAR_FRANKENPHP_XCADDY_MODULES="--with github.com/dunglas/mercure/caddy --with github.com/dunglas/vulcain/caddy --with github.com/dunglas/caddy-cbrotli" ; The display message for php version output (PHP >= 8.4 available) PHP_BUILD_PROVIDER="static-php-cli ${SPC_VERSION}" diff --git a/config/lib.json b/config/lib.json index 528777e17..640d4ea92 100644 --- a/config/lib.json +++ b/config/lib.json @@ -7,12 +7,14 @@ "source": "php-src", "lib-depends": [ "lib-base", - "micro" + "micro", + "frankenphp" ], "lib-depends-macos": [ "lib-base", "micro", - "libxml2" + "libxml2", + "frankenphp" ], "lib-suggests-linux": [ "libacl", @@ -968,5 +970,9 @@ "zstd.h", "zstd_errors.h" ] + }, + "frankenphp": { + "source": "frankenphp", + "type": "target" } } diff --git a/config/source.json b/config/source.json index ee3f8948b..4a1990815 100644 --- a/config/source.json +++ b/config/source.json @@ -363,6 +363,16 @@ "path": "LICENSE" } }, + "frankenphp": { + "type": "ghtar", + "repo": "php/frankenphp", + "prefer-stable": true, + "provide-pre-build": false, + "license": { + "type": "file", + "path": "LICENSE" + } + }, "icu-static-win": { "type": "url", "url": "https://dl.static-php.dev/static-php-cli/deps/icu-static-windows-x64/icu-static-windows-x64.zip", diff --git a/src/SPC/builder/unix/UnixBuilderBase.php b/src/SPC/builder/unix/UnixBuilderBase.php index 15488a67e..0692d4a37 100644 --- a/src/SPC/builder/unix/UnixBuilderBase.php +++ b/src/SPC/builder/unix/UnixBuilderBase.php @@ -13,6 +13,7 @@ use SPC\store\Config; use SPC\store\FileSystem; use SPC\store\pkg\GoXcaddy; +use SPC\store\SourceManager; use SPC\toolchain\GccNativeToolchain; use SPC\toolchain\ToolchainManager; use SPC\util\DependencyUtil; @@ -344,22 +345,70 @@ protected function patchPhpScripts(): void } } + /** + * Process the --with-frankenphp-app option + * Creates app.tar and app.checksum in source/frankenphp directory + */ + protected function processFrankenphpApp(): void + { + $frankenphpSourceDir = SOURCE_PATH . '/frankenphp'; + SourceManager::initSource(['frankenphp'], ['frankenphp']); + $frankenphpAppPath = $this->getOption('with-frankenphp-app'); + + if ($frankenphpAppPath) { + if (!is_dir($frankenphpAppPath)) { + throw new WrongUsageException("The path provided to --with-frankenphp-app is not a valid directory: {$frankenphpAppPath}"); + } + $appTarPath = $frankenphpSourceDir . '/app.tar'; + logger()->info("Creating app.tar from {$frankenphpAppPath}"); + + shell()->exec('tar -cf ' . escapeshellarg($appTarPath) . ' -C ' . escapeshellarg($frankenphpAppPath) . ' .'); + + $checksum = hash_file('md5', $appTarPath); + file_put_contents($frankenphpSourceDir . '/app_checksum.txt', $checksum); + } else { + FileSystem::removeFileIfExists($frankenphpSourceDir . '/app.tar'); + FileSystem::removeFileIfExists($frankenphpSourceDir . '/app_checksum.txt'); + file_put_contents($frankenphpSourceDir . '/app.tar', ''); + file_put_contents($frankenphpSourceDir . '/app_checksum.txt', ''); + } + } + + protected function getFrankenPHPVersion(): string + { + $goModPath = SOURCE_PATH . '/frankenphp/caddy/go.mod'; + + if (!file_exists($goModPath)) { + throw new SPCInternalException("FrankenPHP caddy/go.mod file not found at {$goModPath}, why did we not download FrankenPHP?"); + } + + $content = file_get_contents($goModPath); + if (preg_match('/github\.com\/dunglas\/frankenphp\s+v?(\d+\.\d+\.\d+)/', $content, $matches)) { + return $matches[1]; + } + + throw new SPCInternalException('Could not find FrankenPHP version in caddy/go.mod'); + } + protected function buildFrankenphp(): void { GlobalEnvManager::addPathIfNotExists(GoXcaddy::getPath()); + $this->processFrankenphpApp(); $nobrotli = $this->getLib('brotli') === null ? ',nobrotli' : ''; $nowatcher = $this->getLib('watcher') === null ? ',nowatcher' : ''; $xcaddyModules = getenv('SPC_CMD_VAR_FRANKENPHP_XCADDY_MODULES'); - // make it possible to build from a different frankenphp directory! - if (!str_contains($xcaddyModules, '--with github.com/dunglas/frankenphp')) { - $xcaddyModules = '--with github.com/dunglas/frankenphp ' . $xcaddyModules; - } + $frankenphpSourceDir = SOURCE_PATH . '/frankenphp'; + + $xcaddyModules = preg_replace('#--with github.com/dunglas/frankenphp(=\S+)?#', '', $xcaddyModules); + $xcaddyModules = preg_replace('#--with github.com/dunglas/frankenphp/caddy(=\S+)?#', '', $xcaddyModules); + $xcaddyModules = "--with github.com/dunglas/frankenphp={$frankenphpSourceDir} " . + "--with github.com/dunglas/frankenphp/caddy={$frankenphpSourceDir}/caddy {$xcaddyModules}"; if ($this->getLib('brotli') === null && str_contains($xcaddyModules, '--with github.com/dunglas/caddy-cbrotli')) { logger()->warning('caddy-cbrotli module is enabled, but brotli library is not built. Disabling caddy-cbrotli.'); $xcaddyModules = str_replace('--with github.com/dunglas/caddy-cbrotli', '', $xcaddyModules); } - [, $out] = shell()->execWithResult('go list -m github.com/dunglas/frankenphp@latest'); - $frankenPhpVersion = str_replace('github.com/dunglas/frankenphp v', '', $out[0]); + + $frankenPhpVersion = $this->getFrankenPHPVersion(); $libphpVersion = $this->getPHPVersion(); $dynamic_exports = ''; if (getenv('SPC_CMD_VAR_PHP_EMBED_TYPE') === 'shared') { diff --git a/src/SPC/command/BuildPHPCommand.php b/src/SPC/command/BuildPHPCommand.php index b608b8f06..ad884b3ba 100644 --- a/src/SPC/command/BuildPHPCommand.php +++ b/src/SPC/command/BuildPHPCommand.php @@ -48,6 +48,7 @@ public function configure(): void $this->addOption('with-upx-pack', null, null, 'Compress / pack binary using UPX tool (linux/windows only)'); $this->addOption('with-micro-logo', null, InputOption::VALUE_REQUIRED, 'Use custom .ico for micro.sfx (windows only)'); $this->addOption('enable-micro-win32', null, null, 'Enable win32 mode for phpmicro (Windows only)'); + $this->addOption('with-frankenphp-app', null, InputOption::VALUE_REQUIRED, 'Path to a folder to be embedded in FrankenPHP'); } public function handle(): int From 081e2d284609f81821c825650394e2af6e429452 Mon Sep 17 00:00:00 2001 From: henderkes Date: Tue, 28 Oct 2025 18:50:16 +0100 Subject: [PATCH 173/207] fix debugflags being backwards --- src/SPC/builder/unix/UnixBuilderBase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/builder/unix/UnixBuilderBase.php b/src/SPC/builder/unix/UnixBuilderBase.php index 0692d4a37..0888f66e9 100644 --- a/src/SPC/builder/unix/UnixBuilderBase.php +++ b/src/SPC/builder/unix/UnixBuilderBase.php @@ -418,7 +418,7 @@ protected function buildFrankenphp(): void $dynamic_exports = ' ' . $dynamicSymbolsArgument; } } - $debugFlags = $this->getOption('no-strip') ? '-w -s ' : ''; + $debugFlags = $this->getOption('no-strip') ? '' : '-w -s '; $extLdFlags = "-extldflags '-pie{$dynamic_exports} {$this->arch_ld_flags}'"; $muslTags = ''; $staticFlags = ''; From fd2b7af1dcb24939dd203de37dd1487fa9031318 Mon Sep 17 00:00:00 2001 From: henderkes Date: Fri, 7 Nov 2025 11:06:50 +0100 Subject: [PATCH 174/207] make --with-frankenphp-app=dir work with docker scripts --- bin/spc-alpine-docker | 43 ++++++++++++++++++++++++++++++++++++++++++- bin/spc-gnu-docker | 43 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 84 insertions(+), 2 deletions(-) diff --git a/bin/spc-alpine-docker b/bin/spc-alpine-docker index 6365233c5..0d618743e 100755 --- a/bin/spc-alpine-docker +++ b/bin/spc-alpine-docker @@ -162,6 +162,47 @@ if [ ! -z "$GITHUB_TOKEN" ]; then ENV_LIST="$ENV_LIST -e GITHUB_TOKEN=$GITHUB_TOKEN" fi +# Intercept and rewrite --with-frankenphp-app option, and mount host path to /app/app +FRANKENPHP_APP_PATH="" +NEW_ARGS=() +while [ $# -gt 0 ]; do + case "$1" in + --with-frankenphp-app=*) + FRANKENPHP_APP_PATH="${1#*=}" + NEW_ARGS+=("--with-frankenphp-app=/app/app") + shift + ;; + --with-frankenphp-app) + if [ -n "${2:-}" ]; then + FRANKENPHP_APP_PATH="$2" + NEW_ARGS+=("--with-frankenphp-app=/app/app") + shift 2 + else + NEW_ARGS+=("$1") + shift + fi + ;; + *) + NEW_ARGS+=("$1") + shift + ;; + esac +done + +# Normalize the path and add mount if provided +if [ -n "$FRANKENPHP_APP_PATH" ]; then + # expand ~ to $HOME + if [ "${FRANKENPHP_APP_PATH#~}" != "$FRANKENPHP_APP_PATH" ]; then + FRANKENPHP_APP_PATH="$HOME${FRANKENPHP_APP_PATH#~}" + fi + # make absolute if relative + case "$FRANKENPHP_APP_PATH" in + /*) ABS_APP_PATH="$FRANKENPHP_APP_PATH" ;; + *) ABS_APP_PATH="$(pwd)/$FRANKENPHP_APP_PATH" ;; + esac + MOUNT_LIST="$MOUNT_LIST -v \"$ABS_APP_PATH\":/app/app" +fi + # Run docker # shellcheck disable=SC2068 # shellcheck disable=SC2086 @@ -183,5 +224,5 @@ if [ "$SPC_DOCKER_DEBUG" = "yes" ]; then set -ex $DOCKER_EXECUTABLE run $PLATFORM_ARG --rm $INTERACT $ENV_LIST $MOUNT_LIST cwcc-spc-$SPC_USE_ARCH-$SPC_DOCKER_VERSION /bin/bash else - $DOCKER_EXECUTABLE run $PLATFORM_ARG --rm $INTERACT $ENV_LIST $MOUNT_LIST cwcc-spc-$SPC_USE_ARCH-$SPC_DOCKER_VERSION bin/spc $@ + $DOCKER_EXECUTABLE run $PLATFORM_ARG --rm $INTERACT $ENV_LIST $MOUNT_LIST cwcc-spc-$SPC_USE_ARCH-$SPC_DOCKER_VERSION bin/spc "${NEW_ARGS[@]}" fi diff --git a/bin/spc-gnu-docker b/bin/spc-gnu-docker index 7fcf5d410..29c68adef 100755 --- a/bin/spc-gnu-docker +++ b/bin/spc-gnu-docker @@ -174,6 +174,47 @@ if [ ! -z "$GITHUB_TOKEN" ]; then ENV_LIST="$ENV_LIST -e GITHUB_TOKEN=$GITHUB_TOKEN" fi +# Intercept and rewrite --with-frankenphp-app option, and mount host path to /app/app +FRANKENPHP_APP_PATH="" +NEW_ARGS=() +while [ $# -gt 0 ]; do + case "$1" in + --with-frankenphp-app=*) + FRANKENPHP_APP_PATH="${1#*=}" + NEW_ARGS+=("--with-frankenphp-app=/app/app") + shift + ;; + --with-frankenphp-app) + if [ -n "${2:-}" ]; then + FRANKENPHP_APP_PATH="$2" + NEW_ARGS+=("--with-frankenphp-app=/app/app") + shift 2 + else + NEW_ARGS+=("$1") + shift + fi + ;; + *) + NEW_ARGS+=("$1") + shift + ;; + esac +done + +# Normalize the path and add mount if provided +if [ -n "$FRANKENPHP_APP_PATH" ]; then + # expand ~ to $HOME + if [ "${FRANKENPHP_APP_PATH#~}" != "$FRANKENPHP_APP_PATH" ]; then + FRANKENPHP_APP_PATH="$HOME${FRANKENPHP_APP_PATH#~}" + fi + # make absolute if relative + case "$FRANKENPHP_APP_PATH" in + /*) ABS_APP_PATH="$FRANKENPHP_APP_PATH" ;; + *) ABS_APP_PATH="$(pwd)/$FRANKENPHP_APP_PATH" ;; + esac + MOUNT_LIST="$MOUNT_LIST -v \"$ABS_APP_PATH\":/app/app" +fi + # Run docker # shellcheck disable=SC2068 # shellcheck disable=SC2086 @@ -196,5 +237,5 @@ if [ "$SPC_DOCKER_DEBUG" = "yes" ]; then set -ex $DOCKER_EXECUTABLE run $PLATFORM_ARG --privileged --rm -it $INTERACT $ENV_LIST --env-file /tmp/spc-gnu-docker.env $MOUNT_LIST cwcc-spc-gnu-$SPC_USE_ARCH-$SPC_DOCKER_VERSION /bin/bash else - $DOCKER_EXECUTABLE run $PLATFORM_ARG --rm $INTERACT $ENV_LIST --env-file /tmp/spc-gnu-docker.env $MOUNT_LIST cwcc-spc-gnu-$SPC_USE_ARCH-$SPC_DOCKER_VERSION bin/spc $@ + $DOCKER_EXECUTABLE run $PLATFORM_ARG --rm $INTERACT $ENV_LIST --env-file /tmp/spc-gnu-docker.env $MOUNT_LIST cwcc-spc-gnu-$SPC_USE_ARCH-$SPC_DOCKER_VERSION bin/spc "${NEW_ARGS[@]}" fi From c91128995d63e5533c2ad40b5b203c5f656b15bb Mon Sep 17 00:00:00 2001 From: henderkes Date: Sat, 8 Nov 2025 09:40:16 +0100 Subject: [PATCH 175/207] update freetype download to get latest version --- config/source.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config/source.json b/config/source.json index 4a1990815..ca1edfb02 100644 --- a/config/source.json +++ b/config/source.json @@ -302,9 +302,9 @@ } }, "freetype": { - "type": "git", - "rev": "VER-2-13-2", - "url": "https://github.com/freetype/freetype", + "type": "ghtagtar", + "repo": "freetype/freetype", + "match": "VER-2-\\d+-\\d+", "license": { "type": "file", "path": "LICENSE.TXT" From 541889d17b2147508f0a947aa7215772c23c1b1f Mon Sep 17 00:00:00 2001 From: henderkes Date: Sun, 9 Nov 2025 10:01:19 +0100 Subject: [PATCH 176/207] update to rc4 --- src/SPC/store/source/PhpSource.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/store/source/PhpSource.php b/src/SPC/store/source/PhpSource.php index 1c0be85fb..e0b3ba279 100644 --- a/src/SPC/store/source/PhpSource.php +++ b/src/SPC/store/source/PhpSource.php @@ -16,7 +16,7 @@ public function fetch(bool $force = false, ?array $config = null, int $lock_as = { $major = defined('SPC_BUILD_PHP_VERSION') ? SPC_BUILD_PHP_VERSION : '8.4'; if ($major === '8.5') { - Downloader::downloadSource('php-src', ['type' => 'url', 'url' => 'https://downloads.php.net/~daniels/php-8.5.0RC3.tar.xz'], $force); + Downloader::downloadSource('php-src', ['type' => 'url', 'url' => 'https://downloads.php.net/~edorian/php-8.5.0RC4.tar.xz'], $force); } elseif ($major === 'git') { Downloader::downloadSource('php-src', ['type' => 'git', 'url' => 'https://github.com/php/php-src.git', 'rev' => 'master'], $force); } else { From 64079d93311d7cddf5a84f82b6ef46389a53955c Mon Sep 17 00:00:00 2001 From: henderkes Date: Sun, 9 Nov 2025 23:35:49 +0100 Subject: [PATCH 177/207] simplify regex --- src/SPC/builder/unix/UnixBuilderBase.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/SPC/builder/unix/UnixBuilderBase.php b/src/SPC/builder/unix/UnixBuilderBase.php index 0888f66e9..429dace51 100644 --- a/src/SPC/builder/unix/UnixBuilderBase.php +++ b/src/SPC/builder/unix/UnixBuilderBase.php @@ -399,8 +399,7 @@ protected function buildFrankenphp(): void $xcaddyModules = getenv('SPC_CMD_VAR_FRANKENPHP_XCADDY_MODULES'); $frankenphpSourceDir = SOURCE_PATH . '/frankenphp'; - $xcaddyModules = preg_replace('#--with github.com/dunglas/frankenphp(=\S+)?#', '', $xcaddyModules); - $xcaddyModules = preg_replace('#--with github.com/dunglas/frankenphp/caddy(=\S+)?#', '', $xcaddyModules); + $xcaddyModules = preg_replace('#--with github.com/dunglas/frankenphp\S*#', '', $xcaddyModules); $xcaddyModules = "--with github.com/dunglas/frankenphp={$frankenphpSourceDir} " . "--with github.com/dunglas/frankenphp/caddy={$frankenphpSourceDir}/caddy {$xcaddyModules}"; if ($this->getLib('brotli') === null && str_contains($xcaddyModules, '--with github.com/dunglas/caddy-cbrotli')) { From cff6ec17ea4dfa6de6dbfb4464855d67ff13d094 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Mon, 10 Nov 2025 13:26:17 +0800 Subject: [PATCH 178/207] Remove escape backslashes --- bin/spc-alpine-docker | 2 +- bin/spc-gnu-docker | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/spc-alpine-docker b/bin/spc-alpine-docker index 0d618743e..2790a5c34 100755 --- a/bin/spc-alpine-docker +++ b/bin/spc-alpine-docker @@ -200,7 +200,7 @@ if [ -n "$FRANKENPHP_APP_PATH" ]; then /*) ABS_APP_PATH="$FRANKENPHP_APP_PATH" ;; *) ABS_APP_PATH="$(pwd)/$FRANKENPHP_APP_PATH" ;; esac - MOUNT_LIST="$MOUNT_LIST -v \"$ABS_APP_PATH\":/app/app" + MOUNT_LIST="$MOUNT_LIST -v $ABS_APP_PATH:/app/app" fi # Run docker diff --git a/bin/spc-gnu-docker b/bin/spc-gnu-docker index 29c68adef..68f85109f 100755 --- a/bin/spc-gnu-docker +++ b/bin/spc-gnu-docker @@ -212,7 +212,7 @@ if [ -n "$FRANKENPHP_APP_PATH" ]; then /*) ABS_APP_PATH="$FRANKENPHP_APP_PATH" ;; *) ABS_APP_PATH="$(pwd)/$FRANKENPHP_APP_PATH" ;; esac - MOUNT_LIST="$MOUNT_LIST -v \"$ABS_APP_PATH\":/app/app" + MOUNT_LIST="$MOUNT_LIST -v $ABS_APP_PATH:/app/app" fi # Run docker From 09073c5517dbabd71bdec5e132201339d5f84e18 Mon Sep 17 00:00:00 2001 From: henderkes Date: Tue, 11 Nov 2025 15:51:28 +0100 Subject: [PATCH 179/207] sort config and remove lonesome configure cflags --- config/env.ini | 10 +++------- config/lib.json | 8 ++++---- config/source.json | 20 ++++++++++---------- src/SPC/builder/linux/LinuxBuilder.php | 6 +++--- src/SPC/builder/macos/MacOSBuilder.php | 2 +- 5 files changed, 21 insertions(+), 25 deletions(-) diff --git a/config/env.ini b/config/env.ini index cfda622e7..7448cc373 100644 --- a/config/env.ini +++ b/config/env.ini @@ -110,9 +110,7 @@ SPC_CMD_PREFIX_PHP_CONFIGURE="./configure --prefix= --with-valgrind=no --disable ; *** default build vars for building php *** ; embed type for php, static (libphp.a) or shared (libphp.so) SPC_CMD_VAR_PHP_EMBED_TYPE="static" -; CFLAGS for configuring php -SPC_CMD_VAR_PHP_CONFIGURE_CFLAGS="${SPC_DEFAULT_C_FLAGS} -fPIE" -; EXTRA_CFLAGS for `make` php +; EXTRA_CFLAGS for `configure` and `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 SPC_CMD_VAR_PHP_MAKE_EXTRA_LDFLAGS="" @@ -142,10 +140,8 @@ SPC_CMD_PREFIX_PHP_CONFIGURE="./configure --prefix= --with-valgrind=no --enable- ; *** default build vars for building php *** ; embed type for php, static (libphp.a) or shared (libphp.dylib) 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" -; EXTRA_CFLAGS for `make` php -SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS="-g -fstack-protector-strong -fpic -fpie ${SPC_DEFAULT_C_FLAGS}" +; EXTRA_CFLAGS for `configure` and `make` php +SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS="-g -fstack-protector-strong -fpic -fpie -Werror=unknown-warning-option ${SPC_DEFAULT_C_FLAGS}" [freebsd] ; compiler environments diff --git a/config/lib.json b/config/lib.json index 640d4ea92..aa7eb4996 100644 --- a/config/lib.json +++ b/config/lib.json @@ -26,6 +26,10 @@ "watcher" ] }, + "frankenphp": { + "source": "frankenphp", + "type": "target" + }, "micro": { "type": "target", "source": "micro" @@ -970,9 +974,5 @@ "zstd.h", "zstd_errors.h" ] - }, - "frankenphp": { - "source": "frankenphp", - "type": "target" } } diff --git a/config/source.json b/config/source.json index ca1edfb02..fa16651cd 100644 --- a/config/source.json +++ b/config/source.json @@ -301,6 +301,16 @@ "path": "LICENSE.MIT" } }, + "frankenphp": { + "type": "ghtar", + "repo": "php/frankenphp", + "prefer-stable": true, + "provide-pre-built": false, + "license": { + "type": "file", + "path": "LICENSE" + } + }, "freetype": { "type": "ghtagtar", "repo": "freetype/freetype", @@ -363,16 +373,6 @@ "path": "LICENSE" } }, - "frankenphp": { - "type": "ghtar", - "repo": "php/frankenphp", - "prefer-stable": true, - "provide-pre-build": false, - "license": { - "type": "file", - "path": "LICENSE" - } - }, "icu-static-win": { "type": "url", "url": "https://dl.static-php.dev/static-php-cli/deps/icu-static-windows-x64/icu-static-windows-x64.zip", diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index 68db5688c..0d6f77fba 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -91,7 +91,7 @@ public function buildPHP(int $build_target = BUILD_TARGET_NONE): void // prepare build php envs // $musl_flag = SPCTarget::getLibc() === 'musl' ? ' -D__MUSL__' : ' -U__MUSL__'; $php_configure_env = SystemUtil::makeEnvVarString([ - 'CFLAGS' => getenv('SPC_CMD_VAR_PHP_CONFIGURE_CFLAGS'), + 'CFLAGS' => getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS'), 'CPPFLAGS' => '-I' . BUILD_INCLUDE_PATH, // . ' -Dsomethinghere', // . $musl_flag, 'LDFLAGS' => '-L' . BUILD_LIB_PATH, // 'LIBS' => SPCTarget::getRuntimeLibs(), // do not pass static libraries here yet, they may contain polyfills for libc functions! @@ -284,10 +284,10 @@ protected function buildEmbed(): void // process libphp.so for shared embed $libphpSo = BUILD_LIB_PATH . '/libphp.so'; if (file_exists($libphpSo)) { - // deploy libphp.so - $this->deployBinary($libphpSo, $libphpSo, false); // post actions: rename libphp.so to libphp-.so if -release is set in LDFLAGS $this->processLibphpSoFile($libphpSo); + // deploy libphp.so + $this->deployBinary($libphpSo, $libphpSo, false); } // process shared extensions build-with-php diff --git a/src/SPC/builder/macos/MacOSBuilder.php b/src/SPC/builder/macos/MacOSBuilder.php index 849b350f9..07ef275d6 100644 --- a/src/SPC/builder/macos/MacOSBuilder.php +++ b/src/SPC/builder/macos/MacOSBuilder.php @@ -106,7 +106,7 @@ public function buildPHP(int $build_target = BUILD_TARGET_NONE): void // prepare build php envs $envs_build_php = SystemUtil::makeEnvVarString([ - 'CFLAGS' => getenv('SPC_CMD_VAR_PHP_CONFIGURE_CFLAGS'), + 'CFLAGS' => getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_CFLAGS'), 'CPPFLAGS' => '-I' . BUILD_INCLUDE_PATH, 'LDFLAGS' => '-L' . BUILD_LIB_PATH, ]); From e2b80e7f03439a8f2eb180133bc671019f56812c Mon Sep 17 00:00:00 2001 From: henderkes Date: Tue, 11 Nov 2025 15:53:44 +0100 Subject: [PATCH 180/207] update building of frankenphp --- src/SPC/builder/unix/UnixBuilderBase.php | 30 +++++++++++++++++------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/SPC/builder/unix/UnixBuilderBase.php b/src/SPC/builder/unix/UnixBuilderBase.php index 429dace51..fac3ca40e 100644 --- a/src/SPC/builder/unix/UnixBuilderBase.php +++ b/src/SPC/builder/unix/UnixBuilderBase.php @@ -105,9 +105,16 @@ public function extractDebugInfo(string $binary_path): string if (PHP_OS_FAMILY === 'Darwin') { shell()->exec("dsymutil -f {$binary_path} -o {$debug_file}"); } elseif (PHP_OS_FAMILY === 'Linux') { - shell() - ->exec("objcopy --only-keep-debug {$binary_path} {$debug_file}") - ->exec("objcopy --add-gnu-debuglink={$debug_file} {$binary_path}"); + $has_eu_strip = shell()->execWithResult('which eu-strip')[0] === 0; + if ($has_eu_strip) { + shell() + ->exec("eu-strip -f {$debug_file} {$binary_path}") + ->exec("objcopy --add-gnu-debuglink={$debug_file} {$binary_path}"); + } else { + shell() + ->exec("objcopy --only-keep-debug {$binary_path} {$debug_file}") + ->exec("objcopy --add-gnu-debuglink={$debug_file} {$binary_path}"); + } } else { throw new SPCInternalException('extractDebugInfo is only supported on Linux and macOS'); } @@ -351,8 +358,10 @@ protected function patchPhpScripts(): void */ protected function processFrankenphpApp(): void { - $frankenphpSourceDir = SOURCE_PATH . '/frankenphp'; - SourceManager::initSource(['frankenphp'], ['frankenphp']); + $frankenphpSourceDir = getenv('FRANKENPHP_SOURCE_PATH') ?: SOURCE_PATH . '/frankenphp'; + if (!is_dir($frankenphpSourceDir)) { + SourceManager::initSource(['frankenphp'], ['frankenphp']); + } $frankenphpAppPath = $this->getOption('with-frankenphp-app'); if ($frankenphpAppPath) { @@ -376,7 +385,11 @@ protected function processFrankenphpApp(): void protected function getFrankenPHPVersion(): string { - $goModPath = SOURCE_PATH . '/frankenphp/caddy/go.mod'; + if ($version = getenv('FRANKENPHP_VERSION')) { + return $version; + } + $frankenphpSourceDir = getenv('FRANKENPHP_SOURCE_PATH') ?: SOURCE_PATH . '/frankenphp'; + $goModPath = $frankenphpSourceDir . '/caddy/go.mod'; if (!file_exists($goModPath)) { throw new SPCInternalException("FrankenPHP caddy/go.mod file not found at {$goModPath}, why did we not download FrankenPHP?"); @@ -397,7 +410,7 @@ protected function buildFrankenphp(): void $nobrotli = $this->getLib('brotli') === null ? ',nobrotli' : ''; $nowatcher = $this->getLib('watcher') === null ? ',nowatcher' : ''; $xcaddyModules = getenv('SPC_CMD_VAR_FRANKENPHP_XCADDY_MODULES'); - $frankenphpSourceDir = SOURCE_PATH . '/frankenphp'; + $frankenphpSourceDir = getenv('FRANKENPHP_SOURCE_PATH') ?: SOURCE_PATH . '/frankenphp'; $xcaddyModules = preg_replace('#--with github.com/dunglas/frankenphp\S*#', '', $xcaddyModules); $xcaddyModules = "--with github.com/dunglas/frankenphp={$frankenphpSourceDir} " . @@ -417,7 +430,6 @@ protected function buildFrankenphp(): void $dynamic_exports = ' ' . $dynamicSymbolsArgument; } } - $debugFlags = $this->getOption('no-strip') ? '' : '-w -s '; $extLdFlags = "-extldflags '-pie{$dynamic_exports} {$this->arch_ld_flags}'"; $muslTags = ''; $staticFlags = ''; @@ -442,7 +454,7 @@ protected function buildFrankenphp(): void 'CGO_CFLAGS' => clean_spaces($cflags), 'CGO_LDFLAGS' => "{$this->arch_ld_flags} {$staticFlags} {$config['ldflags']} {$libs}", 'XCADDY_GO_BUILD_FLAGS' => '-buildmode=pie ' . - '-ldflags \"-linkmode=external ' . $extLdFlags . ' ' . $debugFlags . + '-ldflags \"-linkmode=external ' . $extLdFlags . ' ' . '-X \'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP ' . "v{$frankenPhpVersion} PHP {$libphpVersion} Caddy'\\\" " . "-tags={$muslTags}nobadger,nomysql,nopgx{$nobrotli}{$nowatcher}", From 8e4d4b7be53adcf942ed1a034f7f8d1502252886 Mon Sep 17 00:00:00 2001 From: henderkes Date: Tue, 11 Nov 2025 16:51:30 +0100 Subject: [PATCH 181/207] suggestion --- src/SPC/builder/unix/UnixBuilderBase.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/SPC/builder/unix/UnixBuilderBase.php b/src/SPC/builder/unix/UnixBuilderBase.php index fac3ca40e..d8f3ae2b1 100644 --- a/src/SPC/builder/unix/UnixBuilderBase.php +++ b/src/SPC/builder/unix/UnixBuilderBase.php @@ -5,6 +5,7 @@ namespace SPC\builder\unix; use SPC\builder\BuilderBase; +use SPC\builder\linux\SystemUtil; use SPC\builder\linux\SystemUtil as LinuxSystemUtil; use SPC\exception\SPCException; use SPC\exception\SPCInternalException; @@ -105,10 +106,9 @@ public function extractDebugInfo(string $binary_path): string if (PHP_OS_FAMILY === 'Darwin') { shell()->exec("dsymutil -f {$binary_path} -o {$debug_file}"); } elseif (PHP_OS_FAMILY === 'Linux') { - $has_eu_strip = shell()->execWithResult('which eu-strip')[0] === 0; - if ($has_eu_strip) { + if ($eu_strip = SystemUtil::findCommand('eu-strip')) { shell() - ->exec("eu-strip -f {$debug_file} {$binary_path}") + ->exec("{$eu_strip} -f {$debug_file} {$binary_path}") ->exec("objcopy --add-gnu-debuglink={$debug_file} {$binary_path}"); } else { shell() From 23c0d6f4aa88034286c5eef51dc16b4b39a607f1 Mon Sep 17 00:00:00 2001 From: henderkes Date: Wed, 12 Nov 2025 10:11:29 +0100 Subject: [PATCH 182/207] simplify deployBinary a little bit --- src/SPC/builder/unix/UnixBuilderBase.php | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/SPC/builder/unix/UnixBuilderBase.php b/src/SPC/builder/unix/UnixBuilderBase.php index d8f3ae2b1..d98059cb0 100644 --- a/src/SPC/builder/unix/UnixBuilderBase.php +++ b/src/SPC/builder/unix/UnixBuilderBase.php @@ -128,9 +128,6 @@ public function deployBinary(string $src, string $dst, bool $executable = true): { logger()->debug('Deploying binary from ' . $src . ' to ' . $dst); - // UPX for linux - $upx_option = (bool) $this->getOption('with-upx-pack', false); - // file must exists if (!file_exists($src)) { throw new SPCInternalException("Deploy failed. Cannot find file: {$src}"); @@ -152,13 +149,14 @@ public function deployBinary(string $src, string $dst, bool $executable = true): $this->extractDebugInfo($dst); // strip - if (!$this->getOption('no-strip', false)) { + if (!$this->getOption('no-strip')) { $this->stripBinary($dst); } - // Compress binary with UPX if needed (only for Linux) + // UPX for linux + $upx_option = $this->getOption('with-upx-pack'); if ($upx_option && PHP_OS_FAMILY === 'Linux' && $executable) { - if ($this->getOption('no-strip', false)) { + if ($this->getOption('no-strip')) { logger()->warning('UPX compression is not recommended when --no-strip is enabled.'); } logger()->info("Compressing {$dst} with UPX"); From d69826eb4a19170662fc0cde02bfce4f938e07e6 Mon Sep 17 00:00:00 2001 From: henderkes Date: Sun, 16 Nov 2025 11:30:40 +0100 Subject: [PATCH 183/207] update php 8.5 to RC5 --- src/SPC/store/source/PhpSource.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/store/source/PhpSource.php b/src/SPC/store/source/PhpSource.php index e0b3ba279..80d99c9b9 100644 --- a/src/SPC/store/source/PhpSource.php +++ b/src/SPC/store/source/PhpSource.php @@ -16,7 +16,7 @@ public function fetch(bool $force = false, ?array $config = null, int $lock_as = { $major = defined('SPC_BUILD_PHP_VERSION') ? SPC_BUILD_PHP_VERSION : '8.4'; if ($major === '8.5') { - Downloader::downloadSource('php-src', ['type' => 'url', 'url' => 'https://downloads.php.net/~edorian/php-8.5.0RC4.tar.xz'], $force); + Downloader::downloadSource('php-src', ['type' => 'url', 'url' => 'https://downloads.php.net/~daniels/php-8.5.0RC5.tar.xz'], $force); } elseif ($major === 'git') { Downloader::downloadSource('php-src', ['type' => 'git', 'url' => 'https://github.com/php/php-src.git', 'rev' => 'master'], $force); } else { From 54ceca8680e8243a8bd2c86bdc1a4c9f559e0ad6 Mon Sep 17 00:00:00 2001 From: Marc Henderkes Date: Tue, 18 Nov 2025 11:17:12 +0100 Subject: [PATCH 184/207] add extra libs for curl (psl, krb5, unistring, idn2) --- composer.lock | 176 +++++++++--------- config/lib.json | 84 +++++++-- config/source.json | 40 ++++ src/SPC/builder/linux/library/idn2.php | 12 ++ src/SPC/builder/linux/library/krb5.php | 12 ++ .../builder/linux/library/libunistring.php | 12 ++ src/SPC/builder/linux/library/psl.php | 12 ++ src/SPC/builder/unix/library/curl.php | 2 + src/SPC/builder/unix/library/idn2.php | 27 +++ src/SPC/builder/unix/library/krb5.php | 30 +++ src/SPC/builder/unix/library/libunistring.php | 18 ++ src/SPC/builder/unix/library/psl.php | 20 ++ 12 files changed, 342 insertions(+), 103 deletions(-) create mode 100644 src/SPC/builder/linux/library/idn2.php create mode 100644 src/SPC/builder/linux/library/krb5.php create mode 100644 src/SPC/builder/linux/library/libunistring.php create mode 100644 src/SPC/builder/linux/library/psl.php create mode 100644 src/SPC/builder/unix/library/idn2.php create mode 100644 src/SPC/builder/unix/library/krb5.php create mode 100644 src/SPC/builder/unix/library/libunistring.php create mode 100644 src/SPC/builder/unix/library/psl.php diff --git a/composer.lock b/composer.lock index 4b28fc613..e8f320c7c 100644 --- a/composer.lock +++ b/composer.lock @@ -416,16 +416,16 @@ }, { "name": "symfony/console", - "version": "v7.3.4", + "version": "v7.3.6", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "2b9c5fafbac0399a20a2e82429e2bd735dcfb7db" + "reference": "c28ad91448f86c5f6d9d2c70f0cf68bf135f252a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/2b9c5fafbac0399a20a2e82429e2bd735dcfb7db", - "reference": "2b9c5fafbac0399a20a2e82429e2bd735dcfb7db", + "url": "https://api.github.com/repos/symfony/console/zipball/c28ad91448f86c5f6d9d2c70f0cf68bf135f252a", + "reference": "c28ad91448f86c5f6d9d2c70f0cf68bf135f252a", "shasum": "" }, "require": { @@ -490,7 +490,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.3.4" + "source": "https://github.com/symfony/console/tree/v7.3.6" }, "funding": [ { @@ -510,7 +510,7 @@ "type": "tidelift" } ], - "time": "2025-09-22T15:31:00+00:00" + "time": "2025-11-04T01:21:42+00:00" }, { "name": "symfony/deprecation-contracts", @@ -981,16 +981,16 @@ }, { "name": "symfony/service-contracts", - "version": "v3.6.0", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4" + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43", "shasum": "" }, "require": { @@ -1044,7 +1044,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.6.1" }, "funding": [ { @@ -1055,12 +1055,16 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-04-25T09:37:31+00:00" + "time": "2025-07-15T11:30:57+00:00" }, { "name": "symfony/string", @@ -1154,16 +1158,16 @@ }, { "name": "symfony/yaml", - "version": "v7.3.3", + "version": "v7.3.5", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "d4f4a66866fe2451f61296924767280ab5732d9d" + "reference": "90208e2fc6f68f613eae7ca25a2458a931b1bacc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/d4f4a66866fe2451f61296924767280ab5732d9d", - "reference": "d4f4a66866fe2451f61296924767280ab5732d9d", + "url": "https://api.github.com/repos/symfony/yaml/zipball/90208e2fc6f68f613eae7ca25a2458a931b1bacc", + "reference": "90208e2fc6f68f613eae7ca25a2458a931b1bacc", "shasum": "" }, "require": { @@ -1206,7 +1210,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.3.3" + "source": "https://github.com/symfony/yaml/tree/v7.3.5" }, "funding": [ { @@ -1226,20 +1230,20 @@ "type": "tidelift" } ], - "time": "2025-08-27T11:34:33+00:00" + "time": "2025-09-27T09:00:46+00:00" }, { "name": "zhamao/logger", - "version": "1.1.3", + "version": "1.1.4", "source": { "type": "git", "url": "https://github.com/zhamao-robot/zhamao-logger.git", - "reference": "2551b3e1dbbb1db81794d5c3a666c66804a9dca9" + "reference": "b28c0c26d59d58f153c764f224c21c5901213e25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zhamao-robot/zhamao-logger/zipball/2551b3e1dbbb1db81794d5c3a666c66804a9dca9", - "reference": "2551b3e1dbbb1db81794d5c3a666c66804a9dca9", + "url": "https://api.github.com/repos/zhamao-robot/zhamao-logger/zipball/b28c0c26d59d58f153c764f224c21c5901213e25", + "reference": "b28c0c26d59d58f153c764f224c21c5901213e25", "shasum": "" }, "require": { @@ -1293,9 +1297,9 @@ "description": "Another Console Logger for CLI Applications", "support": { "issues": "https://github.com/zhamao-robot/zhamao-logger/issues", - "source": "https://github.com/zhamao-robot/zhamao-logger/tree/1.1.3" + "source": "https://github.com/zhamao-robot/zhamao-logger/tree/1.1.4" }, - "time": "2025-08-02T13:44:27+00:00" + "time": "2025-11-08T15:38:01+00:00" } ], "packages-dev": [ @@ -2860,16 +2864,16 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.89.0", + "version": "v3.89.2", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "4dd6768cb7558440d27d18f54909eee417317ce9" + "reference": "7569658f91e475ec93b99bd5964b059ad1336dcf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/4dd6768cb7558440d27d18f54909eee417317ce9", - "reference": "4dd6768cb7558440d27d18f54909eee417317ce9", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/7569658f91e475ec93b99bd5964b059ad1336dcf", + "reference": "7569658f91e475ec93b99bd5964b059ad1336dcf", "shasum": "" }, "require": { @@ -2905,7 +2909,7 @@ "justinrainbow/json-schema": "^6.5", "keradus/cli-executor": "^2.2", "mikey179/vfsstream": "^1.6.12", - "php-coveralls/php-coveralls": "^2.8", + "php-coveralls/php-coveralls": "^2.9", "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6", "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6", "phpunit/phpunit": "^9.6.25 || ^10.5.53 || ^11.5.34", @@ -2951,7 +2955,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.89.0" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.89.2" }, "funding": [ { @@ -2959,20 +2963,20 @@ "type": "github" } ], - "time": "2025-10-18T19:30:16+00:00" + "time": "2025-11-06T21:12:50+00:00" }, { "name": "humbug/box", - "version": "4.6.8", + "version": "4.6.10", "source": { "type": "git", "url": "https://github.com/box-project/box.git", - "reference": "05d205d99ddb72f3729658a0115db02cfc08912e" + "reference": "6dc6a1314d63e9d75c8195c996e1081e68514c36" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/box-project/box/zipball/05d205d99ddb72f3729658a0115db02cfc08912e", - "reference": "05d205d99ddb72f3729658a0115db02cfc08912e", + "url": "https://api.github.com/repos/box-project/box/zipball/6dc6a1314d63e9d75c8195c996e1081e68514c36", + "reference": "6dc6a1314d63e9d75c8195c996e1081e68514c36", "shasum": "" }, "require": { @@ -3001,7 +3005,7 @@ "symfony/process": "^6.4.0 || ^7.0.0", "symfony/var-dumper": "^6.4.0 || ^7.0.0", "thecodingmachine/safe": "^2.5 || ^3.0", - "webmozart/assert": "^1.11" + "webmozart/assert": "^1.12" }, "conflict": { "marc-mabe/php-enum": "<4.4" @@ -3071,9 +3075,9 @@ ], "support": { "issues": "https://github.com/box-project/box/issues", - "source": "https://github.com/box-project/box/tree/4.6.8" + "source": "https://github.com/box-project/box/tree/4.6.10" }, - "time": "2025-10-13T17:13:17+00:00" + "time": "2025-10-31T18:38:02+00:00" }, { "name": "humbug/php-scoper", @@ -3208,16 +3212,16 @@ }, { "name": "justinrainbow/json-schema", - "version": "6.6.0", + "version": "6.6.1", "source": { "type": "git", "url": "https://github.com/jsonrainbow/json-schema.git", - "reference": "68ba7677532803cc0c5900dd5a4d730537f2b2f3" + "reference": "fd8e5c6b1badb998844ad34ce0abcd71a0aeb396" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/68ba7677532803cc0c5900dd5a4d730537f2b2f3", - "reference": "68ba7677532803cc0c5900dd5a4d730537f2b2f3", + "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/fd8e5c6b1badb998844ad34ce0abcd71a0aeb396", + "reference": "fd8e5c6b1badb998844ad34ce0abcd71a0aeb396", "shasum": "" }, "require": { @@ -3277,9 +3281,9 @@ ], "support": { "issues": "https://github.com/jsonrainbow/json-schema/issues", - "source": "https://github.com/jsonrainbow/json-schema/tree/6.6.0" + "source": "https://github.com/jsonrainbow/json-schema/tree/6.6.1" }, - "time": "2025-10-10T11:34:09+00:00" + "time": "2025-11-07T18:30:29+00:00" }, { "name": "kelunik/certificate", @@ -3700,16 +3704,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.6.1", + "version": "v5.6.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2" + "reference": "3a454ca033b9e06b63282ce19562e892747449bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2", - "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/3a454ca033b9e06b63282ce19562e892747449bb", + "reference": "3a454ca033b9e06b63282ce19562e892747449bb", "shasum": "" }, "require": { @@ -3752,9 +3756,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.2" }, - "time": "2025-08-13T20:13:15+00:00" + "time": "2025-10-21T19:32:17+00:00" }, { "name": "phar-io/composer-distributor", @@ -6776,16 +6780,16 @@ }, { "name": "symfony/filesystem", - "version": "v7.3.2", + "version": "v7.3.6", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "edcbb768a186b5c3f25d0643159a787d3e63b7fd" + "reference": "e9bcfd7837928ab656276fe00464092cc9e1826a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/edcbb768a186b5c3f25d0643159a787d3e63b7fd", - "reference": "edcbb768a186b5c3f25d0643159a787d3e63b7fd", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/e9bcfd7837928ab656276fe00464092cc9e1826a", + "reference": "e9bcfd7837928ab656276fe00464092cc9e1826a", "shasum": "" }, "require": { @@ -6822,7 +6826,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.3.2" + "source": "https://github.com/symfony/filesystem/tree/v7.3.6" }, "funding": [ { @@ -6842,20 +6846,20 @@ "type": "tidelift" } ], - "time": "2025-07-07T08:17:47+00:00" + "time": "2025-11-05T09:52:27+00:00" }, { "name": "symfony/finder", - "version": "v7.3.2", + "version": "v7.3.5", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe" + "reference": "9f696d2f1e340484b4683f7853b273abff94421f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/2a6614966ba1074fa93dae0bc804227422df4dfe", - "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe", + "url": "https://api.github.com/repos/symfony/finder/zipball/9f696d2f1e340484b4683f7853b273abff94421f", + "reference": "9f696d2f1e340484b4683f7853b273abff94421f", "shasum": "" }, "require": { @@ -6890,7 +6894,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.3.2" + "source": "https://github.com/symfony/finder/tree/v7.3.5" }, "funding": [ { @@ -6910,7 +6914,7 @@ "type": "tidelift" } ], - "time": "2025-07-15T13:41:35+00:00" + "time": "2025-10-15T18:45:57+00:00" }, { "name": "symfony/options-resolver", @@ -7211,16 +7215,16 @@ }, { "name": "symfony/var-dumper", - "version": "v7.3.4", + "version": "v7.3.5", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "b8abe7daf2730d07dfd4b2ee1cecbf0dd2fbdabb" + "reference": "476c4ae17f43a9a36650c69879dcf5b1e6ae724d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b8abe7daf2730d07dfd4b2ee1cecbf0dd2fbdabb", - "reference": "b8abe7daf2730d07dfd4b2ee1cecbf0dd2fbdabb", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/476c4ae17f43a9a36650c69879dcf5b1e6ae724d", + "reference": "476c4ae17f43a9a36650c69879dcf5b1e6ae724d", "shasum": "" }, "require": { @@ -7274,7 +7278,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.3.4" + "source": "https://github.com/symfony/var-dumper/tree/v7.3.5" }, "funding": [ { @@ -7294,7 +7298,7 @@ "type": "tidelift" } ], - "time": "2025-09-11T10:12:26+00:00" + "time": "2025-09-27T09:00:46+00:00" }, { "name": "thecodingmachine/safe", @@ -7437,16 +7441,16 @@ }, { "name": "theseer/tokenizer", - "version": "1.2.3", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + "reference": "d74205c497bfbca49f34d4bc4c19c17e22db4ebb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/d74205c497bfbca49f34d4bc4c19c17e22db4ebb", + "reference": "d74205c497bfbca49f34d4bc4c19c17e22db4ebb", "shasum": "" }, "require": { @@ -7475,7 +7479,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + "source": "https://github.com/theseer/tokenizer/tree/1.3.0" }, "funding": [ { @@ -7483,32 +7487,32 @@ "type": "github" } ], - "time": "2024-03-03T12:36:25+00:00" + "time": "2025-11-13T13:44:09+00:00" }, { "name": "webmozart/assert", - "version": "1.11.0", + "version": "1.12.1", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + "reference": "9be6926d8b485f55b9229203f962b51ed377ba68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/9be6926d8b485f55b9229203f962b51ed377ba68", + "reference": "9be6926d8b485f55b9229203f962b51ed377ba68", "shasum": "" }, "require": { "ext-ctype": "*", + "ext-date": "*", + "ext-filter": "*", "php": "^7.2 || ^8.0" }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" + "suggest": { + "ext-intl": "", + "ext-simplexml": "", + "ext-spl": "" }, "type": "library", "extra": { @@ -7539,9 +7543,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" + "source": "https://github.com/webmozarts/assert/tree/1.12.1" }, - "time": "2022-06-03T18:03:27+00:00" + "time": "2025-10-29T15:56:20+00:00" } ], "aliases": [], diff --git a/config/lib.json b/config/lib.json index d74658a6d..ac0b88957 100644 --- a/config/lib.json +++ b/config/lib.json @@ -91,7 +91,20 @@ "libssh2", "nghttp2" ], - "lib-suggests-unix": [ + "lib-suggests-linux": [ + "libssh2", + "brotli", + "nghttp2", + "nghttp3", + "ngtcp2", + "zstd", + "libcares", + "ldap", + "krb5", + "idn2", + "psl" + ], + "lib-suggests-macos": [ "libssh2", "brotli", "nghttp2", @@ -99,7 +112,9 @@ "ngtcp2", "zstd", "libcares", - "ldap" + "ldap", + "idn2", + "psl" ], "lib-suggests-windows": [ "brotli", @@ -936,6 +951,56 @@ "libiconv" ] }, + "krb5": { + "source": "krb5", + "pkg-configs": [ + "krb5-gssapi" + ], + "headers": [ + "krb5.h", + "gssapi/gssapi.h" + ] + }, + "libunistring": { + "source": "libunistring", + "static-libs-unix": [ + "libunistring.a" + ], + "headers": [ + "unistring.h", + "unistring/" + ] + }, + "idn2": { + "source": "libidn2", + "pkg-configs": [ + "libidn2" + ], + "headers": [ + "idn2.h" + ], + "lib-suggests-linux": [ + "libiconv", + "libunistring", + "gettext" + ], + "lib-depends-macos": [ + "libiconv", + "gettext" + ] + }, + "psl": { + "source": "libpsl", + "pkg-configs": [ + "libpsl" + ], + "headers": [ + "libpsl.h" + ], + "lib-depends": [ + "idn2" + ] + }, "zlib": { "source": "zlib", "static-libs-unix": [ @@ -970,21 +1035,6 @@ "zstd_errors.h" ] }, - "liburing": { - "source": "liburing", - "pkg-configs": [ - "liburing", - "liburing-ffi" - ], - "static-libs-linux": [ - "liburing.a", - "liburing-ffi.a" - ], - "headers-linux": [ - "liburing/", - "liburing.h" - ] - }, "frankenphp": { "source": "frankenphp", "type": "target" diff --git a/config/source.json b/config/source.json index ca1edfb02..ac699c0e4 100644 --- a/config/source.json +++ b/config/source.json @@ -1171,6 +1171,46 @@ "path": "LICENSE" } }, + "krb5": { + "type": "ghtagtar", + "repo": "krb5/krb5", + "match": "krb5.+-final", + "prefer-stable": true, + "license": { + "type": "file", + "path": "NOTICE" + } + }, + "libunistring": { + "type": "filelist", + "url": "https://ftp.gnu.org/gnu/libunistring/", + "regex": "/href=\"(?libunistring-(?[^\"]+)\\.tar\\.gz)\"/", + "prefer-stable": true, + "license": { + "type": "file", + "path": "COPYING.LIB" + } + }, + "libidn2": { + "type": "filelist", + "url": "https://ftp.gnu.org/gnu/libidn/", + "regex": "/href=\"(?libidn2-(?[^\"]+)\\.tar\\.gz)\"/", + "prefer-stable": true, + "license": { + "type": "file", + "path": "COPYING" + } + }, + "libpsl": { + "type": "ghrel", + "repo": "rockdaboot/libpsl", + "match": "libpsl.+\\.tar\\.gz", + "prefer-stable": true, + "license": { + "type": "file", + "path": "COPYING" + } + }, "zlib": { "type": "ghrel", "repo": "madler/zlib", diff --git a/src/SPC/builder/linux/library/idn2.php b/src/SPC/builder/linux/library/idn2.php new file mode 100644 index 000000000..a271760d2 --- /dev/null +++ b/src/SPC/builder/linux/library/idn2.php @@ -0,0 +1,12 @@ +optionalLib('zstd', ...cmake_boolean_args('CURL_ZSTD')) ->optionalLib('idn2', ...cmake_boolean_args('USE_LIBIDN2')) ->optionalLib('psl', ...cmake_boolean_args('CURL_USE_LIBPSL')) + ->optionalLib('krb5', ...cmake_boolean_args('CURL_USE_GSSAPI')) + ->optionalLib('idn2', ...cmake_boolean_args('CURL_USE_IDN2')) ->optionalLib('libcares', '-DENABLE_ARES=ON') ->addConfigureArgs( '-DBUILD_CURL_EXE=OFF', diff --git a/src/SPC/builder/unix/library/idn2.php b/src/SPC/builder/unix/library/idn2.php new file mode 100644 index 000000000..829565340 --- /dev/null +++ b/src/SPC/builder/unix/library/idn2.php @@ -0,0 +1,27 @@ +configure( + '--disable-nls', + '--disable-doc', + '--enable-year2038', + '--disable-rpath' + ) + ->optionalLib('libiconv', "--with-libiconv-prefix={$this->getBuildRootPath()}") + ->optionalLib('libunistring', "--with-libunistring-prefix={$this->getBuildRootPath()}") + ->optionalLib('gettext', "--with-libnintl-prefix={$this->getBuildRootPath()}") + ->make(); + $this->patchPkgconfPrefix(['libidn2.pc']); + $this->patchLaDependencyPrefix(); + } +} diff --git a/src/SPC/builder/unix/library/krb5.php b/src/SPC/builder/unix/library/krb5.php new file mode 100644 index 000000000..8e5cdfe28 --- /dev/null +++ b/src/SPC/builder/unix/library/krb5.php @@ -0,0 +1,30 @@ +source_dir .= '/src'; + shell()->cd($this->source_dir)->exec('autoreconf -if'); + UnixAutoconfExecutor::create($this) + ->appendEnv(['LDFLAGS' => '-Wl,--allow-multiple-definition']) + ->configure() + ->make(); + $this->patchPkgconfPrefix([ + 'krb5-gssapi.pc', + 'krb5.pc', + 'kadm-server.pc', + 'kadm-client.pc', + 'kdb.pc', + 'mit-krb5-gssapi.pc', + 'mit-krb5.pc', + 'gssrpc.pc', + ]); + } +} diff --git a/src/SPC/builder/unix/library/libunistring.php b/src/SPC/builder/unix/library/libunistring.php new file mode 100644 index 000000000..1d410a8c5 --- /dev/null +++ b/src/SPC/builder/unix/library/libunistring.php @@ -0,0 +1,18 @@ +configure('--disable-nls') + ->make(); + $this->patchLaDependencyPrefix(); + } +} diff --git a/src/SPC/builder/unix/library/psl.php b/src/SPC/builder/unix/library/psl.php new file mode 100644 index 000000000..11c1777c6 --- /dev/null +++ b/src/SPC/builder/unix/library/psl.php @@ -0,0 +1,20 @@ +optionalLib('idn2', ...ac_with_args('libidn2', true)) + ->configure('--disable-nls') + ->make(); + $this->patchPkgconfPrefix(['libpsl.pc']); + $this->patchLaDependencyPrefix(); + } +} From a33ca44ca9fb95f9d009fa672b7a988286f8f4e8 Mon Sep 17 00:00:00 2001 From: Marc Henderkes Date: Tue, 18 Nov 2025 11:28:25 +0100 Subject: [PATCH 185/207] test curl --- config/lib.json | 104 +++++++++++++++----------------- config/source.json | 89 ++++++++++++--------------- src/globals/test-extensions.php | 8 +-- 3 files changed, 92 insertions(+), 109 deletions(-) diff --git a/config/lib.json b/config/lib.json index 11272f263..b0520fc53 100644 --- a/config/lib.json +++ b/config/lib.json @@ -249,6 +249,24 @@ "unicode" ] }, + "idn2": { + "source": "libidn2", + "pkg-configs": [ + "libidn2" + ], + "headers": [ + "idn2.h" + ], + "lib-suggests-unix": [ + "libiconv", + "libunistring", + "gettext" + ], + "lib-depends-macos": [ + "libiconv", + "gettext" + ] + }, "imagemagick": { "source": "imagemagick", "cpp-library": true, @@ -296,6 +314,16 @@ "jbig_ar.h" ] }, + "krb5": { + "source": "krb5", + "pkg-configs": [ + "krb5-gssapi" + ], + "headers": [ + "krb5.h", + "gssapi/gssapi.h" + ] + }, "ldap": { "source": "ldap", "pkg-configs": [ @@ -583,6 +611,16 @@ "zstd" ] }, + "libunistring": { + "source": "libunistring", + "static-libs-unix": [ + "libunistring.a" + ], + "headers": [ + "unistring.h", + "unistring/" + ] + }, "liburing": { "source": "liburing", "pkg-configs": [ @@ -847,6 +885,18 @@ "libpgcommon.lib" ] }, + "psl": { + "source": "libpsl", + "pkg-configs": [ + "libpsl" + ], + "headers": [ + "libpsl.h" + ], + "lib-depends": [ + "idn2" + ] + }, "pthreads4w": { "source": "pthreads4w", "static-libs-windows": [ @@ -956,56 +1006,6 @@ "libiconv" ] }, - "krb5": { - "source": "krb5", - "pkg-configs": [ - "krb5-gssapi" - ], - "headers": [ - "krb5.h", - "gssapi/gssapi.h" - ] - }, - "libunistring": { - "source": "libunistring", - "static-libs-unix": [ - "libunistring.a" - ], - "headers": [ - "unistring.h", - "unistring/" - ] - }, - "idn2": { - "source": "libidn2", - "pkg-configs": [ - "libidn2" - ], - "headers": [ - "idn2.h" - ], - "lib-suggests-linux": [ - "libiconv", - "libunistring", - "gettext" - ], - "lib-depends-macos": [ - "libiconv", - "gettext" - ] - }, - "psl": { - "source": "libpsl", - "pkg-configs": [ - "libpsl" - ], - "headers": [ - "libpsl.h" - ], - "lib-depends": [ - "idn2" - ] - }, "zlib": { "source": "zlib", "static-libs-unix": [ @@ -1039,9 +1039,5 @@ "zstd.h", "zstd_errors.h" ] - }, - "frankenphp": { - "source": "frankenphp", - "type": "target" } } diff --git a/config/source.json b/config/source.json index d10ecc5eb..ba3b15d36 100644 --- a/config/source.json +++ b/config/source.json @@ -305,7 +305,6 @@ "type": "ghtar", "repo": "php/frankenphp", "prefer-stable": true, - "provide-pre-built": false, "license": { "type": "file", "path": "LICENSE" @@ -373,16 +372,6 @@ "path": "LICENSE" } }, - "frankenphp": { - "type": "ghtar", - "repo": "php/frankenphp", - "prefer-stable": true, - "provide-pre-build": false, - "license": { - "type": "file", - "path": "LICENSE" - } - }, "icu-static-win": { "type": "url", "url": "https://dl.static-php.dev/static-php-cli/deps/icu-static-windows-x64/icu-static-windows-x64.zip", @@ -441,6 +430,16 @@ "path": "COPYING" } }, + "krb5": { + "type": "ghtagtar", + "repo": "krb5/krb5", + "match": "krb5.+-final", + "prefer-stable": true, + "license": { + "type": "file", + "path": "NOTICE" + } + }, "ldap": { "type": "filelist", "url": "https://www.openldap.org/software/download/OpenLDAP/openldap-release/", @@ -599,6 +598,15 @@ "path": "source/COPYING" } }, + "libidn2": { + "type": "filelist", + "url": "https://ftp.gnu.org/gnu/libidn/", + "regex": "/href=\"(?libidn2-(?[^\"]+)\\.tar\\.gz)\"/", + "license": { + "type": "file", + "path": "COPYING" + } + }, "libjpeg": { "type": "ghtar", "repo": "libjpeg-turbo/libjpeg-turbo", @@ -652,6 +660,16 @@ "path": "LICENSE" } }, + "libpsl": { + "type": "ghrel", + "repo": "rockdaboot/libpsl", + "match": "libpsl.+\\.tar\\.gz", + "prefer-stable": true, + "license": { + "type": "file", + "path": "COPYING" + } + }, "librabbitmq": { "type": "git", "url": "https://github.com/alanxz/rabbitmq-c.git", @@ -700,6 +718,15 @@ "path": "LICENSE.md" } }, + "libunistring": { + "type": "filelist", + "url": "https://ftp.gnu.org/gnu/libunistring/", + "regex": "/href=\"(?libunistring-(?[^\"]+)\\.tar\\.gz)\"/", + "license": { + "type": "file", + "path": "COPYING.LIB" + } + }, "liburing": { "type": "ghtar", "repo": "axboe/liburing", @@ -1181,46 +1208,6 @@ "path": "LICENSE" } }, - "krb5": { - "type": "ghtagtar", - "repo": "krb5/krb5", - "match": "krb5.+-final", - "prefer-stable": true, - "license": { - "type": "file", - "path": "NOTICE" - } - }, - "libunistring": { - "type": "filelist", - "url": "https://ftp.gnu.org/gnu/libunistring/", - "regex": "/href=\"(?libunistring-(?[^\"]+)\\.tar\\.gz)\"/", - "prefer-stable": true, - "license": { - "type": "file", - "path": "COPYING.LIB" - } - }, - "libidn2": { - "type": "filelist", - "url": "https://ftp.gnu.org/gnu/libidn/", - "regex": "/href=\"(?libidn2-(?[^\"]+)\\.tar\\.gz)\"/", - "prefer-stable": true, - "license": { - "type": "file", - "path": "COPYING" - } - }, - "libpsl": { - "type": "ghrel", - "repo": "rockdaboot/libpsl", - "match": "libpsl.+\\.tar\\.gz", - "prefer-stable": true, - "license": { - "type": "file", - "path": "COPYING" - } - }, "zlib": { "type": "ghrel", "repo": "madler/zlib", diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index 62d7d4112..dddcc0f2d 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -31,7 +31,7 @@ 'ubuntu-22.04-arm', // bin/spc-gnu-docker for arm64 'ubuntu-24.04-arm', // bin/spc for arm64 // 'windows-2022', // .\bin\spc.ps1 - 'windows-2025', + // 'windows-2025', ]; // whether enable thread safe @@ -50,14 +50,14 @@ // If you want to test your added extensions and libs, add below (comma separated, example `bcmath,openssl`). $extensions = match (PHP_OS_FAMILY) { - 'Linux', 'Darwin' => 'rdkafka', + 'Linux', 'Darwin' => 'curl', 'Windows' => 'bcmath', }; // If you want to test shared extensions, add them below (comma separated, example `bcmath,openssl`). $shared_extensions = match (PHP_OS_FAMILY) { - 'Linux' => 'snmp', - 'Darwin' => 'snmp', + 'Linux' => '', + 'Darwin' => '', 'Windows' => '', }; From 81dce024311e75cf89edc78b7883c783d97f7f6f Mon Sep 17 00:00:00 2001 From: Marc Henderkes Date: Tue, 18 Nov 2025 14:06:15 +0100 Subject: [PATCH 186/207] use lgpl --- config/source.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/source.json b/config/source.json index ba3b15d36..b300e284a 100644 --- a/config/source.json +++ b/config/source.json @@ -604,7 +604,7 @@ "regex": "/href=\"(?libidn2-(?[^\"]+)\\.tar\\.gz)\"/", "license": { "type": "file", - "path": "COPYING" + "path": "COPYING.LESSERv3" } }, "libjpeg": { From ecea6c12cd30ffaee76e79805e004d33641615b0 Mon Sep 17 00:00:00 2001 From: Marc Henderkes Date: Tue, 18 Nov 2025 14:35:58 +0100 Subject: [PATCH 187/207] libs for macos too --- config/lib.json | 7 +++++++ src/SPC/builder/macos/library/idn2.php | 12 ++++++++++++ src/SPC/builder/macos/library/libunistring.php | 12 ++++++++++++ src/SPC/builder/macos/library/psl.php | 12 ++++++++++++ src/SPC/builder/unix/library/krb5.php | 11 +++++++++-- 5 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 src/SPC/builder/macos/library/idn2.php create mode 100644 src/SPC/builder/macos/library/libunistring.php create mode 100644 src/SPC/builder/macos/library/psl.php diff --git a/config/lib.json b/config/lib.json index b0520fc53..394649f38 100644 --- a/config/lib.json +++ b/config/lib.json @@ -322,6 +322,13 @@ "headers": [ "krb5.h", "gssapi/gssapi.h" + ], + "lib-depends": [ + "openssl" + ], + "lib-suggests": [ + "ldap", + "libedit" ] }, "ldap": { diff --git a/src/SPC/builder/macos/library/idn2.php b/src/SPC/builder/macos/library/idn2.php new file mode 100644 index 000000000..a41eeeb15 --- /dev/null +++ b/src/SPC/builder/macos/library/idn2.php @@ -0,0 +1,12 @@ +source_dir .= '/src'; shell()->cd($this->source_dir)->exec('autoreconf -if'); UnixAutoconfExecutor::create($this) - ->appendEnv(['LDFLAGS' => '-Wl,--allow-multiple-definition']) - ->configure() + ->appendEnv([ + 'LDFLAGS' => '-Wl,--allow-multiple-definition', + ]) + ->optionalLib('ldap', '--with-ldap', '--without-ldap') + ->optionalLib('libedit', '--with-readline', '--without-readline') + ->configure( + '--disable-nls', + '--disable-rpath', + ) ->make(); $this->patchPkgconfPrefix([ 'krb5-gssapi.pc', From 1fed8f28022a85ad0631e6270574b2a6e26d80f9 Mon Sep 17 00:00:00 2001 From: Marc Henderkes Date: Tue, 18 Nov 2025 17:22:27 +0100 Subject: [PATCH 188/207] add required libs to krb5 --- config/source.json | 2 ++ src/SPC/builder/unix/library/krb5.php | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/config/source.json b/config/source.json index b300e284a..d4793c35b 100644 --- a/config/source.json +++ b/config/source.json @@ -722,6 +722,7 @@ "type": "filelist", "url": "https://ftp.gnu.org/gnu/libunistring/", "regex": "/href=\"(?libunistring-(?[^\"]+)\\.tar\\.gz)\"/", + "provide-pre-built": true, "license": { "type": "file", "path": "COPYING.LIB" @@ -740,6 +741,7 @@ "type": "git", "url": "https://github.com/static-php/libuuid.git", "rev": "master", + "provide-pre-built": true, "license": { "type": "file", "path": "COPYING" diff --git a/src/SPC/builder/unix/library/krb5.php b/src/SPC/builder/unix/library/krb5.php index 97c3d2339..03c071f5c 100644 --- a/src/SPC/builder/unix/library/krb5.php +++ b/src/SPC/builder/unix/library/krb5.php @@ -5,6 +5,7 @@ namespace SPC\builder\unix\library; use SPC\util\executor\UnixAutoconfExecutor; +use SPC\util\SPCConfigUtil; trait krb5 { @@ -12,8 +13,12 @@ protected function build(): void { $this->source_dir .= '/src'; shell()->cd($this->source_dir)->exec('autoreconf -if'); + $libs = array_map(fn ($x) => $x->getName(), $this->getDependencies(true)); + $spc = new SPCConfigUtil($this->builder, ['no_php' => true, 'libs_only_deps' => true]); + $config = $spc->config(libraries: $libs, include_suggest_lib: $this->builder->getOption('with-suggested-libs', false)); UnixAutoconfExecutor::create($this) ->appendEnv([ + 'LIBS' => $config['libs'], 'LDFLAGS' => '-Wl,--allow-multiple-definition', ]) ->optionalLib('ldap', '--with-ldap', '--without-ldap') From a1b8d201aee74cfeb57d7b78fc7440e1c9a89a48 Mon Sep 17 00:00:00 2001 From: Marc Henderkes Date: Tue, 18 Nov 2025 17:47:26 +0100 Subject: [PATCH 189/207] add gsasl --- config/lib.json | 18 +++++++++++++++++- config/source.json | 10 ++++++++++ src/SPC/builder/linux/library/gsasl.php | 12 ++++++++++++ src/SPC/builder/unix/library/curl.php | 1 + src/SPC/builder/unix/library/gsasl.php | 25 +++++++++++++++++++++++++ src/SPC/builder/unix/library/krb5.php | 2 +- 6 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 src/SPC/builder/linux/library/gsasl.php create mode 100644 src/SPC/builder/unix/library/gsasl.php diff --git a/config/lib.json b/config/lib.json index 394649f38..558357c85 100644 --- a/config/lib.json +++ b/config/lib.json @@ -107,7 +107,8 @@ "ldap", "krb5", "idn2", - "psl" + "psl", + "gsasl" ], "lib-suggests-macos": [ "libssh2", @@ -904,6 +905,21 @@ "idn2" ] }, + "gsasl": { + "source": "gsasl", + "pkg-configs": [ + "libgsasl" + ], + "headers": [ + "gsasl.h" + ], + "lib-depends": [ + "idn2" + ], + "lib-suggests": [ + "krb5" + ] + }, "pthreads4w": { "source": "pthreads4w", "static-libs-windows": [ diff --git a/config/source.json b/config/source.json index d4793c35b..de249ad13 100644 --- a/config/source.json +++ b/config/source.json @@ -1200,6 +1200,16 @@ "path": "LICENSE" } }, + "gsasl": { + "type": "filelist", + "url": "https://ftp.gnu.org/gnu/gsasl/", + "regex": "/href=\\\"(?gsasl-(?[^\\\"]+)\\.tar\\.gz)\\\"/", + "prefer-stable": true, + "license": { + "type": "file", + "path": "COPYING.LESSER" + } + }, "yaml": { "type": "git", "path": "php-src/ext/yaml", diff --git a/src/SPC/builder/linux/library/gsasl.php b/src/SPC/builder/linux/library/gsasl.php new file mode 100644 index 000000000..34a8ca640 --- /dev/null +++ b/src/SPC/builder/linux/library/gsasl.php @@ -0,0 +1,12 @@ +optionalLib('idn2', ...cmake_boolean_args('USE_LIBIDN2')) ->optionalLib('psl', ...cmake_boolean_args('CURL_USE_LIBPSL')) ->optionalLib('krb5', ...cmake_boolean_args('CURL_USE_GSSAPI')) + ->optionalLib('gsasl', ...cmake_boolean_args('USE_GSASL')) ->optionalLib('idn2', ...cmake_boolean_args('CURL_USE_IDN2')) ->optionalLib('libcares', '-DENABLE_ARES=ON') ->addConfigureArgs( diff --git a/src/SPC/builder/unix/library/gsasl.php b/src/SPC/builder/unix/library/gsasl.php new file mode 100644 index 000000000..74b9950db --- /dev/null +++ b/src/SPC/builder/unix/library/gsasl.php @@ -0,0 +1,25 @@ +optionalLib('idn2', ...ac_with_args('libidn2', true)) + ->optionalLib('krb5', ...ac_with_args('gssapi', true)) + ->configure( + '--disable-nls', + '--disable-rpath', + '--disable-doc', + ) + ->make(); + $this->patchPkgconfPrefix(['libgsasl.pc']); + $this->patchLaDependencyPrefix(); + } +} diff --git a/src/SPC/builder/unix/library/krb5.php b/src/SPC/builder/unix/library/krb5.php index 03c071f5c..1834e494d 100644 --- a/src/SPC/builder/unix/library/krb5.php +++ b/src/SPC/builder/unix/library/krb5.php @@ -22,7 +22,7 @@ protected function build(): void 'LDFLAGS' => '-Wl,--allow-multiple-definition', ]) ->optionalLib('ldap', '--with-ldap', '--without-ldap') - ->optionalLib('libedit', '--with-readline', '--without-readline') + ->optionalLib('libedit', '--with-libedit', '--without-libedit') ->configure( '--disable-nls', '--disable-rpath', From 9382161b6f243d78cb299803be7870e04ec4e1b2 Mon Sep 17 00:00:00 2001 From: Marc Henderkes Date: Tue, 18 Nov 2025 17:49:10 +0100 Subject: [PATCH 190/207] Revert "add gsasl" This reverts commit a1b8d201aee74cfeb57d7b78fc7440e1c9a89a48. --- config/lib.json | 18 +----------------- config/source.json | 10 ---------- src/SPC/builder/linux/library/gsasl.php | 12 ------------ src/SPC/builder/unix/library/curl.php | 1 - src/SPC/builder/unix/library/gsasl.php | 25 ------------------------- src/SPC/builder/unix/library/krb5.php | 2 +- 6 files changed, 2 insertions(+), 66 deletions(-) delete mode 100644 src/SPC/builder/linux/library/gsasl.php delete mode 100644 src/SPC/builder/unix/library/gsasl.php diff --git a/config/lib.json b/config/lib.json index 558357c85..394649f38 100644 --- a/config/lib.json +++ b/config/lib.json @@ -107,8 +107,7 @@ "ldap", "krb5", "idn2", - "psl", - "gsasl" + "psl" ], "lib-suggests-macos": [ "libssh2", @@ -905,21 +904,6 @@ "idn2" ] }, - "gsasl": { - "source": "gsasl", - "pkg-configs": [ - "libgsasl" - ], - "headers": [ - "gsasl.h" - ], - "lib-depends": [ - "idn2" - ], - "lib-suggests": [ - "krb5" - ] - }, "pthreads4w": { "source": "pthreads4w", "static-libs-windows": [ diff --git a/config/source.json b/config/source.json index de249ad13..d4793c35b 100644 --- a/config/source.json +++ b/config/source.json @@ -1200,16 +1200,6 @@ "path": "LICENSE" } }, - "gsasl": { - "type": "filelist", - "url": "https://ftp.gnu.org/gnu/gsasl/", - "regex": "/href=\\\"(?gsasl-(?[^\\\"]+)\\.tar\\.gz)\\\"/", - "prefer-stable": true, - "license": { - "type": "file", - "path": "COPYING.LESSER" - } - }, "yaml": { "type": "git", "path": "php-src/ext/yaml", diff --git a/src/SPC/builder/linux/library/gsasl.php b/src/SPC/builder/linux/library/gsasl.php deleted file mode 100644 index 34a8ca640..000000000 --- a/src/SPC/builder/linux/library/gsasl.php +++ /dev/null @@ -1,12 +0,0 @@ -optionalLib('idn2', ...cmake_boolean_args('USE_LIBIDN2')) ->optionalLib('psl', ...cmake_boolean_args('CURL_USE_LIBPSL')) ->optionalLib('krb5', ...cmake_boolean_args('CURL_USE_GSSAPI')) - ->optionalLib('gsasl', ...cmake_boolean_args('USE_GSASL')) ->optionalLib('idn2', ...cmake_boolean_args('CURL_USE_IDN2')) ->optionalLib('libcares', '-DENABLE_ARES=ON') ->addConfigureArgs( diff --git a/src/SPC/builder/unix/library/gsasl.php b/src/SPC/builder/unix/library/gsasl.php deleted file mode 100644 index 74b9950db..000000000 --- a/src/SPC/builder/unix/library/gsasl.php +++ /dev/null @@ -1,25 +0,0 @@ -optionalLib('idn2', ...ac_with_args('libidn2', true)) - ->optionalLib('krb5', ...ac_with_args('gssapi', true)) - ->configure( - '--disable-nls', - '--disable-rpath', - '--disable-doc', - ) - ->make(); - $this->patchPkgconfPrefix(['libgsasl.pc']); - $this->patchLaDependencyPrefix(); - } -} diff --git a/src/SPC/builder/unix/library/krb5.php b/src/SPC/builder/unix/library/krb5.php index 1834e494d..03c071f5c 100644 --- a/src/SPC/builder/unix/library/krb5.php +++ b/src/SPC/builder/unix/library/krb5.php @@ -22,7 +22,7 @@ protected function build(): void 'LDFLAGS' => '-Wl,--allow-multiple-definition', ]) ->optionalLib('ldap', '--with-ldap', '--without-ldap') - ->optionalLib('libedit', '--with-libedit', '--without-libedit') + ->optionalLib('libedit', '--with-readline', '--without-readline') ->configure( '--disable-nls', '--disable-rpath', From 875e1d05cd3f2be99a9593ea1664a9f1ee8e7836 Mon Sep 17 00:00:00 2001 From: Marc Henderkes Date: Tue, 18 Nov 2025 17:50:49 +0100 Subject: [PATCH 191/207] libedit instead of readline --- src/SPC/builder/unix/library/krb5.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/builder/unix/library/krb5.php b/src/SPC/builder/unix/library/krb5.php index 03c071f5c..1834e494d 100644 --- a/src/SPC/builder/unix/library/krb5.php +++ b/src/SPC/builder/unix/library/krb5.php @@ -22,7 +22,7 @@ protected function build(): void 'LDFLAGS' => '-Wl,--allow-multiple-definition', ]) ->optionalLib('ldap', '--with-ldap', '--without-ldap') - ->optionalLib('libedit', '--with-readline', '--without-readline') + ->optionalLib('libedit', '--with-libedit', '--without-libedit') ->configure( '--disable-nls', '--disable-rpath', From 376b8e7569d1fb6074a5cc1804e2022d27e90050 Mon Sep 17 00:00:00 2001 From: henderkes Date: Wed, 19 Nov 2025 10:48:24 +0100 Subject: [PATCH 192/207] remove psl --- config/lib.json | 35 ++++---------------------- config/source.json | 10 -------- src/SPC/builder/linux/library/psl.php | 12 --------- src/SPC/builder/macos/library/krb5.php | 12 +++++++++ src/SPC/builder/macos/library/psl.php | 12 --------- src/SPC/builder/unix/library/krb5.php | 2 +- src/SPC/builder/unix/library/psl.php | 20 --------------- 7 files changed, 18 insertions(+), 85 deletions(-) delete mode 100644 src/SPC/builder/linux/library/psl.php create mode 100644 src/SPC/builder/macos/library/krb5.php delete mode 100644 src/SPC/builder/macos/library/psl.php delete mode 100644 src/SPC/builder/unix/library/psl.php diff --git a/config/lib.json b/config/lib.json index 394649f38..462f4a55b 100644 --- a/config/lib.json +++ b/config/lib.json @@ -96,20 +96,7 @@ "libssh2", "nghttp2" ], - "lib-suggests-linux": [ - "libssh2", - "brotli", - "nghttp2", - "nghttp3", - "ngtcp2", - "zstd", - "libcares", - "ldap", - "krb5", - "idn2", - "psl" - ], - "lib-suggests-macos": [ + "lib-suggests-unix": [ "libssh2", "brotli", "nghttp2", @@ -119,7 +106,7 @@ "libcares", "ldap", "idn2", - "psl" + "krb5" ], "lib-suggests-windows": [ "brotli", @@ -259,8 +246,8 @@ ], "lib-suggests-unix": [ "libiconv", - "libunistring", - "gettext" + "gettext", + "libunistring" ], "lib-depends-macos": [ "libiconv", @@ -624,7 +611,7 @@ "libunistring.a" ], "headers": [ - "unistring.h", + "unistr.h", "unistring/" ] }, @@ -892,18 +879,6 @@ "libpgcommon.lib" ] }, - "psl": { - "source": "libpsl", - "pkg-configs": [ - "libpsl" - ], - "headers": [ - "libpsl.h" - ], - "lib-depends": [ - "idn2" - ] - }, "pthreads4w": { "source": "pthreads4w", "static-libs-windows": [ diff --git a/config/source.json b/config/source.json index d4793c35b..76bf18358 100644 --- a/config/source.json +++ b/config/source.json @@ -660,16 +660,6 @@ "path": "LICENSE" } }, - "libpsl": { - "type": "ghrel", - "repo": "rockdaboot/libpsl", - "match": "libpsl.+\\.tar\\.gz", - "prefer-stable": true, - "license": { - "type": "file", - "path": "COPYING" - } - }, "librabbitmq": { "type": "git", "url": "https://github.com/alanxz/rabbitmq-c.git", diff --git a/src/SPC/builder/linux/library/psl.php b/src/SPC/builder/linux/library/psl.php deleted file mode 100644 index 1d42d9ba0..000000000 --- a/src/SPC/builder/linux/library/psl.php +++ /dev/null @@ -1,12 +0,0 @@ -config(libraries: $libs, include_suggest_lib: $this->builder->getOption('with-suggested-libs', false)); UnixAutoconfExecutor::create($this) ->appendEnv([ + 'CFLAGS' => '-fcommon', 'LIBS' => $config['libs'], - 'LDFLAGS' => '-Wl,--allow-multiple-definition', ]) ->optionalLib('ldap', '--with-ldap', '--without-ldap') ->optionalLib('libedit', '--with-libedit', '--without-libedit') diff --git a/src/SPC/builder/unix/library/psl.php b/src/SPC/builder/unix/library/psl.php deleted file mode 100644 index 11c1777c6..000000000 --- a/src/SPC/builder/unix/library/psl.php +++ /dev/null @@ -1,20 +0,0 @@ -optionalLib('idn2', ...ac_with_args('libidn2', true)) - ->configure('--disable-nls') - ->make(); - $this->patchPkgconfPrefix(['libpsl.pc']); - $this->patchLaDependencyPrefix(); - } -} From 6861e9c2c720b3d246b8095af4583aaaea93a44c Mon Sep 17 00:00:00 2001 From: henderkes Date: Wed, 19 Nov 2025 11:59:09 +0100 Subject: [PATCH 193/207] append ld_library_path for musl toolchain --- src/SPC/builder/unix/library/krb5.php | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/SPC/builder/unix/library/krb5.php b/src/SPC/builder/unix/library/krb5.php index 0875da0c8..00ddd6d95 100644 --- a/src/SPC/builder/unix/library/krb5.php +++ b/src/SPC/builder/unix/library/krb5.php @@ -16,16 +16,25 @@ protected function build(): void $libs = array_map(fn ($x) => $x->getName(), $this->getDependencies(true)); $spc = new SPCConfigUtil($this->builder, ['no_php' => true, 'libs_only_deps' => true]); $config = $spc->config(libraries: $libs, include_suggest_lib: $this->builder->getOption('with-suggested-libs', false)); - UnixAutoconfExecutor::create($this) + $make = UnixAutoconfExecutor::create($this) ->appendEnv([ 'CFLAGS' => '-fcommon', 'LIBS' => $config['libs'], - ]) + ]); + if (getenv('SPC_LD_LIBRARY_PATH') && getenv('SPC_LIBRARY_PATH')) { + $make->appendEnv([ + 'LD_LIBRARY_PATH' => getenv('SPC_LD_LIBRARY_PATH'), + 'LIBRARY_PATH' => getenv('SPC_LIBRARY_PATH'), + ]); + } + $make ->optionalLib('ldap', '--with-ldap', '--without-ldap') ->optionalLib('libedit', '--with-libedit', '--without-libedit') ->configure( '--disable-nls', '--disable-rpath', + '--disable-silent-rules', + '--without-system-verto', ) ->make(); $this->patchPkgconfPrefix([ From e8d1970f55fca1bc064e132fb129e3f922c51db4 Mon Sep 17 00:00:00 2001 From: henderkes Date: Wed, 19 Nov 2025 13:54:17 +0100 Subject: [PATCH 194/207] secure_getenv not available on macos --- src/SPC/builder/unix/library/krb5.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/SPC/builder/unix/library/krb5.php b/src/SPC/builder/unix/library/krb5.php index 00ddd6d95..0f499530b 100644 --- a/src/SPC/builder/unix/library/krb5.php +++ b/src/SPC/builder/unix/library/krb5.php @@ -27,15 +27,17 @@ protected function build(): void 'LIBRARY_PATH' => getenv('SPC_LIBRARY_PATH'), ]); } + $args = [ + '--disable-nls', + '--disable-rpath', + '--without-system-verto']; + if (PHP_OS_FAMILY === 'Darwin') { + $args[] = 'ac_cv_func_secure_getenv=no'; + } $make ->optionalLib('ldap', '--with-ldap', '--without-ldap') ->optionalLib('libedit', '--with-libedit', '--without-libedit') - ->configure( - '--disable-nls', - '--disable-rpath', - '--disable-silent-rules', - '--without-system-verto', - ) + ->configure(...$args) ->make(); $this->patchPkgconfPrefix([ 'krb5-gssapi.pc', From 2b0a0bdad9f63b436f560c0424e885f908e9d423 Mon Sep 17 00:00:00 2001 From: henderkes Date: Wed, 19 Nov 2025 13:54:45 +0100 Subject: [PATCH 195/207] fix cs --- src/SPC/builder/unix/library/krb5.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/SPC/builder/unix/library/krb5.php b/src/SPC/builder/unix/library/krb5.php index 0f499530b..f3cf1dc6a 100644 --- a/src/SPC/builder/unix/library/krb5.php +++ b/src/SPC/builder/unix/library/krb5.php @@ -30,7 +30,8 @@ protected function build(): void $args = [ '--disable-nls', '--disable-rpath', - '--without-system-verto']; + '--without-system-verto', + ]; if (PHP_OS_FAMILY === 'Darwin') { $args[] = 'ac_cv_func_secure_getenv=no'; } From 84e9f13688afd163baf8954ce63cc7a46dd18b31 Mon Sep 17 00:00:00 2001 From: henderkes Date: Wed, 19 Nov 2025 14:48:10 +0100 Subject: [PATCH 196/207] framework? --- src/SPC/builder/unix/library/krb5.php | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/SPC/builder/unix/library/krb5.php b/src/SPC/builder/unix/library/krb5.php index f3cf1dc6a..33523d75e 100644 --- a/src/SPC/builder/unix/library/krb5.php +++ b/src/SPC/builder/unix/library/krb5.php @@ -16,16 +16,15 @@ protected function build(): void $libs = array_map(fn ($x) => $x->getName(), $this->getDependencies(true)); $spc = new SPCConfigUtil($this->builder, ['no_php' => true, 'libs_only_deps' => true]); $config = $spc->config(libraries: $libs, include_suggest_lib: $this->builder->getOption('with-suggested-libs', false)); - $make = UnixAutoconfExecutor::create($this) - ->appendEnv([ - 'CFLAGS' => '-fcommon', - 'LIBS' => $config['libs'], - ]); + $extraEnv = [ + 'CFLAGS' => '-fcommon', + 'LIBS' => $config['libs'], + ]; if (getenv('SPC_LD_LIBRARY_PATH') && getenv('SPC_LIBRARY_PATH')) { - $make->appendEnv([ + $extraEnv = [...$extraEnv, ...[ 'LD_LIBRARY_PATH' => getenv('SPC_LD_LIBRARY_PATH'), 'LIBRARY_PATH' => getenv('SPC_LIBRARY_PATH'), - ]); + ]]; } $args = [ '--disable-nls', @@ -33,9 +32,11 @@ protected function build(): void '--without-system-verto', ]; if (PHP_OS_FAMILY === 'Darwin') { + $extraEnv['LDFLAGS'] = '-framework Kerberos'; $args[] = 'ac_cv_func_secure_getenv=no'; } - $make + UnixAutoconfExecutor::create($this) + ->appendEnv($extraEnv) ->optionalLib('ldap', '--with-ldap', '--without-ldap') ->optionalLib('libedit', '--with-libedit', '--without-libedit') ->configure(...$args) From 1e09017549f22c053babbff97787cc248cd06195 Mon Sep 17 00:00:00 2001 From: henderkes Date: Wed, 19 Nov 2025 14:49:37 +0100 Subject: [PATCH 197/207] frameworks? --- src/SPC/builder/unix/library/krb5.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/builder/unix/library/krb5.php b/src/SPC/builder/unix/library/krb5.php index 33523d75e..68e16274f 100644 --- a/src/SPC/builder/unix/library/krb5.php +++ b/src/SPC/builder/unix/library/krb5.php @@ -32,7 +32,7 @@ protected function build(): void '--without-system-verto', ]; if (PHP_OS_FAMILY === 'Darwin') { - $extraEnv['LDFLAGS'] = '-framework Kerberos'; + $extraEnv['LDFLAGS'] = '-framework Kerberos -framework Security -framework CoreFoundation'; $args[] = 'ac_cv_func_secure_getenv=no'; } UnixAutoconfExecutor::create($this) From 1662ac4cf8b5bdbbea2a43e9612a35a1d9bc2e5e Mon Sep 17 00:00:00 2001 From: henderkes Date: Wed, 19 Nov 2025 15:20:05 +0100 Subject: [PATCH 198/207] framework! --- config/lib.json | 3 +++ src/SPC/builder/unix/library/krb5.php | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/config/lib.json b/config/lib.json index 462f4a55b..48a674c7e 100644 --- a/config/lib.json +++ b/config/lib.json @@ -316,6 +316,9 @@ "lib-suggests": [ "ldap", "libedit" + ], + "frameworks": [ + "Kerberos" ] }, "ldap": { diff --git a/src/SPC/builder/unix/library/krb5.php b/src/SPC/builder/unix/library/krb5.php index 68e16274f..33523d75e 100644 --- a/src/SPC/builder/unix/library/krb5.php +++ b/src/SPC/builder/unix/library/krb5.php @@ -32,7 +32,7 @@ protected function build(): void '--without-system-verto', ]; if (PHP_OS_FAMILY === 'Darwin') { - $extraEnv['LDFLAGS'] = '-framework Kerberos -framework Security -framework CoreFoundation'; + $extraEnv['LDFLAGS'] = '-framework Kerberos'; $args[] = 'ac_cv_func_secure_getenv=no'; } UnixAutoconfExecutor::create($this) From 3069b51c0966caad2c14e0a8404efde2f0ae8d9f Mon Sep 17 00:00:00 2001 From: Marc Date: Thu, 20 Nov 2025 18:19:41 +0100 Subject: [PATCH 199/207] we have 8.5! --- src/SPC/store/source/PhpSource.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/SPC/store/source/PhpSource.php b/src/SPC/store/source/PhpSource.php index 80d99c9b9..23dbb4188 100644 --- a/src/SPC/store/source/PhpSource.php +++ b/src/SPC/store/source/PhpSource.php @@ -14,10 +14,8 @@ class PhpSource extends CustomSourceBase public function fetch(bool $force = false, ?array $config = null, int $lock_as = SPC_DOWNLOAD_SOURCE): void { - $major = defined('SPC_BUILD_PHP_VERSION') ? SPC_BUILD_PHP_VERSION : '8.4'; - if ($major === '8.5') { - Downloader::downloadSource('php-src', ['type' => 'url', 'url' => 'https://downloads.php.net/~daniels/php-8.5.0RC5.tar.xz'], $force); - } elseif ($major === 'git') { + $major = defined('SPC_BUILD_PHP_VERSION') ? SPC_BUILD_PHP_VERSION : '8.5'; + if ($major === 'git') { Downloader::downloadSource('php-src', ['type' => 'git', 'url' => 'https://github.com/php/php-src.git', 'rev' => 'master'], $force); } else { Downloader::downloadSource('php-src', $this->getLatestPHPInfo($major), $force); From e21b0ec89d9b59bf85c93aff770487ec8d5fad7e Mon Sep 17 00:00:00 2001 From: Marc Date: Thu, 20 Nov 2025 18:21:39 +0100 Subject: [PATCH 200/207] Apply suggestion from @henderkes --- src/SPC/store/source/PhpSource.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/store/source/PhpSource.php b/src/SPC/store/source/PhpSource.php index 23dbb4188..b6ceb6eb0 100644 --- a/src/SPC/store/source/PhpSource.php +++ b/src/SPC/store/source/PhpSource.php @@ -14,7 +14,7 @@ class PhpSource extends CustomSourceBase public function fetch(bool $force = false, ?array $config = null, int $lock_as = SPC_DOWNLOAD_SOURCE): void { - $major = defined('SPC_BUILD_PHP_VERSION') ? SPC_BUILD_PHP_VERSION : '8.5'; +$major = defined('SPC_BUILD_PHP_VERSION') ? SPC_BUILD_PHP_VERSION : '8.4'; if ($major === 'git') { Downloader::downloadSource('php-src', ['type' => 'git', 'url' => 'https://github.com/php/php-src.git', 'rev' => 'master'], $force); } else { From af614cd7ce39011120ebc6399df8524b41ad53c5 Mon Sep 17 00:00:00 2001 From: Marc Date: Fri, 21 Nov 2025 08:51:30 +0100 Subject: [PATCH 201/207] Fix indentation in PhpSource.php --- src/SPC/store/source/PhpSource.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/store/source/PhpSource.php b/src/SPC/store/source/PhpSource.php index b6ceb6eb0..27e8bb891 100644 --- a/src/SPC/store/source/PhpSource.php +++ b/src/SPC/store/source/PhpSource.php @@ -14,7 +14,7 @@ class PhpSource extends CustomSourceBase public function fetch(bool $force = false, ?array $config = null, int $lock_as = SPC_DOWNLOAD_SOURCE): void { -$major = defined('SPC_BUILD_PHP_VERSION') ? SPC_BUILD_PHP_VERSION : '8.4'; + $major = defined('SPC_BUILD_PHP_VERSION') ? SPC_BUILD_PHP_VERSION : '8.4'; if ($major === 'git') { Downloader::downloadSource('php-src', ['type' => 'git', 'url' => 'https://github.com/php/php-src.git', 'rev' => 'master'], $force); } else { From f14df1925c2ba9166e0ba64843ad3bac0bb039dc Mon Sep 17 00:00:00 2001 From: Jerry Ma Date: Fri, 21 Nov 2025 22:03:41 +0800 Subject: [PATCH 202/207] Store original source directory before modification --- src/SPC/builder/unix/library/krb5.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/SPC/builder/unix/library/krb5.php b/src/SPC/builder/unix/library/krb5.php index 33523d75e..798346459 100644 --- a/src/SPC/builder/unix/library/krb5.php +++ b/src/SPC/builder/unix/library/krb5.php @@ -11,6 +11,7 @@ trait krb5 { protected function build(): void { + $origin_source_dir = $this->source_dir; $this->source_dir .= '/src'; shell()->cd($this->source_dir)->exec('autoreconf -if'); $libs = array_map(fn ($x) => $x->getName(), $this->getDependencies(true)); @@ -51,5 +52,6 @@ protected function build(): void 'mit-krb5.pc', 'gssrpc.pc', ]); + $this->source_dir = $origin_source_dir; } } From 5606b70c1cd259c0526904aeeab6cbb1a9b96881 Mon Sep 17 00:00:00 2001 From: henderkes Date: Sat, 22 Nov 2025 09:04:17 +0100 Subject: [PATCH 203/207] don't download musl if zig isn't building for musl --- src/SPC/doctor/item/LinuxMuslCheck.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/doctor/item/LinuxMuslCheck.php b/src/SPC/doctor/item/LinuxMuslCheck.php index 76d59e230..c11bd4c41 100644 --- a/src/SPC/doctor/item/LinuxMuslCheck.php +++ b/src/SPC/doctor/item/LinuxMuslCheck.php @@ -22,7 +22,7 @@ class LinuxMuslCheck public static function optionalCheck(): bool { return getenv('SPC_TOOLCHAIN') === MuslToolchain::class || - (getenv('SPC_TOOLCHAIN') === ZigToolchain::class && !SystemUtil::isMuslDist()); + (getenv('SPC_TOOLCHAIN') === ZigToolchain::class && !SystemUtil::isMuslDist() && !str_contains((string) getenv('SPC_TARGET'), 'gnu')); } /** @noinspection PhpUnused */ From 76a07c32baa4517fb85bff735ea24396377f018b Mon Sep 17 00:00:00 2001 From: henderkes Date: Mon, 24 Nov 2025 14:24:12 +0100 Subject: [PATCH 204/207] fix silly mistake in trader config.m4 --- src/SPC/builder/extension/trader.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/SPC/builder/extension/trader.php diff --git a/src/SPC/builder/extension/trader.php b/src/SPC/builder/extension/trader.php new file mode 100644 index 000000000..030215297 --- /dev/null +++ b/src/SPC/builder/extension/trader.php @@ -0,0 +1,19 @@ + Date: Wed, 26 Nov 2025 15:32:26 +0800 Subject: [PATCH 205/207] Add extension maxminddb support for macOS and Linux (#975) --- config/ext.json | 12 +++++++++ config/lib.json | 10 +++++++ config/source.json | 19 ++++++++++++++ src/SPC/ConsoleApplication.php | 2 +- src/SPC/builder/extension/maxminddb.php | 26 +++++++++++++++++++ .../builder/linux/library/libmaxminddb.php | 12 +++++++++ .../builder/macos/library/libmaxminddb.php | 12 +++++++++ src/SPC/builder/unix/library/libmaxminddb.php | 20 ++++++++++++++ src/globals/test-extensions.php | 16 ++++++------ 9 files changed, 120 insertions(+), 9 deletions(-) create mode 100644 src/SPC/builder/extension/maxminddb.php create mode 100644 src/SPC/builder/linux/library/libmaxminddb.php create mode 100644 src/SPC/builder/macos/library/libmaxminddb.php create mode 100644 src/SPC/builder/unix/library/libmaxminddb.php diff --git a/config/ext.json b/config/ext.json index 303e0ddee..e8f69339e 100644 --- a/config/ext.json +++ b/config/ext.json @@ -358,6 +358,18 @@ "liblz4" ] }, + "maxminddb": { + "support": { + "BSD": "wip", + "Windows": "wip" + }, + "type": "external", + "source": "ext-maxminddb", + "arg-type": "with", + "lib-depends": [ + "libmaxminddb" + ] + }, "mbregex": { "type": "builtin", "arg-type": "custom", diff --git a/config/lib.json b/config/lib.json index 48a674c7e..47f3c7b89 100644 --- a/config/lib.json +++ b/config/lib.json @@ -506,6 +506,16 @@ "liblz4.a" ] }, + "libmaxminddb": { + "source": "libmaxminddb", + "static-libs-unix": [ + "libmaxminddb.a" + ], + "headers": [ + "maxminddb.h", + "maxminddb_config.h" + ] + }, "libmemcached": { "source": "libmemcached", "cpp-library": true, diff --git a/config/source.json b/config/source.json index 76bf18358..06aa5c6f5 100644 --- a/config/source.json +++ b/config/source.json @@ -184,6 +184,15 @@ ] } }, + "ext-maxminddb": { + "type": "url", + "url": "https://pecl.php.net/get/maxminddb", + "filename": "ext-maxminddb.tgz", + "license": { + "type": "file", + "path": "LICENSE" + } + }, "ext-memcache": { "type": "url", "url": "https://pecl.php.net/get/memcache", @@ -641,6 +650,16 @@ "path": "LICENSE" } }, + "libmaxminddb": { + "type": "ghrel", + "repo": "maxmind/libmaxminddb", + "match": "libmaxminddb-.+\\.tar\\.gz", + "prefer-stable": true, + "license": { + "type": "file", + "path": "LICENSE" + } + }, "libmemcached": { "type": "ghtagtar", "repo": "awesomized/libmemcached", diff --git a/src/SPC/ConsoleApplication.php b/src/SPC/ConsoleApplication.php index 9a957223c..bbbed9b01 100644 --- a/src/SPC/ConsoleApplication.php +++ b/src/SPC/ConsoleApplication.php @@ -34,7 +34,7 @@ */ final class ConsoleApplication extends Application { - public const string VERSION = '2.7.7'; + public const string VERSION = '2.7.8'; public function __construct() { diff --git a/src/SPC/builder/extension/maxminddb.php b/src/SPC/builder/extension/maxminddb.php new file mode 100644 index 000000000..7d7ee096b --- /dev/null +++ b/src/SPC/builder/extension/maxminddb.php @@ -0,0 +1,26 @@ +source_dir; + if (PHP_OS_FAMILY === 'Windows') { + f_passthru('cd ' . SOURCE_PATH . '/php-src/ext && mklink /D maxminddb ' . $original . '\ext'); + } else { + f_passthru('cd ' . SOURCE_PATH . '/php-src/ext && ln -s ' . $original . '/ext maxminddb'); + } + return true; + } + return false; + } +} diff --git a/src/SPC/builder/linux/library/libmaxminddb.php b/src/SPC/builder/linux/library/libmaxminddb.php new file mode 100644 index 000000000..06e309c4c --- /dev/null +++ b/src/SPC/builder/linux/library/libmaxminddb.php @@ -0,0 +1,12 @@ +addConfigureArgs( + '-DBUILD_TESTING=OFF', + '-DMAXMINDDB_BUILD_BINARIES=OFF', + ) + ->build(); + } +} diff --git a/src/globals/test-extensions.php b/src/globals/test-extensions.php index dddcc0f2d..1d31d5202 100644 --- a/src/globals/test-extensions.php +++ b/src/globals/test-extensions.php @@ -13,11 +13,11 @@ // test php version (8.1 ~ 8.4 available, multiple for matrix) $test_php_version = [ - // '8.1', - // '8.2', - // '8.3', + '8.1', + '8.2', + '8.3', '8.4', - // '8.5', + '8.5', // 'git', ]; @@ -35,7 +35,7 @@ ]; // whether enable thread safe -$zts = true; +$zts = false; $no_strip = false; @@ -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' => 'curl', + 'Linux', 'Darwin' => 'maxminddb', 'Windows' => 'bcmath', }; @@ -62,7 +62,7 @@ }; // If you want to test lib-suggests for all extensions and libraries, set it to true. -$with_suggested_libs = true; +$with_suggested_libs = false; // If you want to test extra libs for extensions, add them below (comma separated, example `libwebp,libavif`). Unnecessary, when $with_suggested_libs is true. $with_libs = match (PHP_OS_FAMILY) { @@ -74,7 +74,7 @@ // You can use `common`, `bulk`, `minimal` or `none`. // note: combination is only available for *nix platform. Windows must use `none` combination $base_combination = match (PHP_OS_FAMILY) { - 'Linux', 'Darwin' => 'none', + 'Linux', 'Darwin' => 'minimal', 'Windows' => 'none', }; From 5b8c9e6f09a5f1467f77e553f445e76bd787f6e0 Mon Sep 17 00:00:00 2001 From: henderkes Date: Wed, 26 Nov 2025 09:37:21 +0100 Subject: [PATCH 206/207] we need to change source_path for shared build --- src/SPC/builder/extension/maxminddb.php | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/SPC/builder/extension/maxminddb.php b/src/SPC/builder/extension/maxminddb.php index 7d7ee096b..a84224164 100644 --- a/src/SPC/builder/extension/maxminddb.php +++ b/src/SPC/builder/extension/maxminddb.php @@ -5,6 +5,7 @@ namespace SPC\builder\extension; use SPC\builder\Extension; +use SPC\store\FileSystem; use SPC\util\CustomExt; #[CustomExt('maxminddb')] @@ -12,15 +13,13 @@ class maxminddb extends Extension { public function patchBeforeBuildconf(): bool { - if (!is_link(SOURCE_PATH . '/php-src/ext/maxminddb')) { + if (!is_dir(SOURCE_PATH . '/php-src/ext/maxminddb')) { $original = $this->source_dir; - if (PHP_OS_FAMILY === 'Windows') { - f_passthru('cd ' . SOURCE_PATH . '/php-src/ext && mklink /D maxminddb ' . $original . '\ext'); - } else { - f_passthru('cd ' . SOURCE_PATH . '/php-src/ext && ln -s ' . $original . '/ext maxminddb'); - } + FileSystem::copyDir($original . '/ext', SOURCE_PATH . '/php-src/ext/maxminddb'); + $this->source_dir = SOURCE_PATH . '/php-src/ext/maxminddb'; return true; } + $this->source_dir = SOURCE_PATH . '/php-src/ext/maxminddb'; return false; } } From cb7eca90494c5679d42753386683d95a3bf64cad Mon Sep 17 00:00:00 2001 From: Jerry Ma Date: Wed, 26 Nov 2025 17:08:49 +0800 Subject: [PATCH 207/207] Bump version from 2.7.8 to 2.7.9 --- src/SPC/ConsoleApplication.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/ConsoleApplication.php b/src/SPC/ConsoleApplication.php index bbbed9b01..1b1d3e199 100644 --- a/src/SPC/ConsoleApplication.php +++ b/src/SPC/ConsoleApplication.php @@ -34,7 +34,7 @@ */ final class ConsoleApplication extends Application { - public const string VERSION = '2.7.8'; + public const string VERSION = '2.7.9'; public function __construct() {