From 5c7ab48718fc3a0df2ef2cf5de063729e987a784 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Fri, 6 Feb 2026 16:38:03 +0800 Subject: [PATCH] Support define php extension arg-type in config --- src/Package/Artifact/gmssl.php | 20 ++++++++ src/Package/Artifact/libaom.php | 22 ++++++++ src/Package/Artifact/pkg_config.php | 19 +++++++ src/Package/Extension/openssl.php | 50 +++++++++++++++++++ src/StaticPHP/Package/PhpExtensionPackage.php | 17 +++++-- 5 files changed, 124 insertions(+), 4 deletions(-) create mode 100644 src/Package/Artifact/gmssl.php create mode 100644 src/Package/Artifact/libaom.php create mode 100644 src/Package/Artifact/pkg_config.php create mode 100644 src/Package/Extension/openssl.php diff --git a/src/Package/Artifact/gmssl.php b/src/Package/Artifact/gmssl.php new file mode 100644 index 00000000..4caa4d1e --- /dev/null +++ b/src/Package/Artifact/gmssl.php @@ -0,0 +1,20 @@ += 80400 ? '' : ' --with-openssl-dir=' . BUILD_ROOT_PATH; + $args = '--with-openssl=' . ($shared ? 'shared,' : '') . BUILD_ROOT_PATH . $openssl_dir; + if (php::getPHPVersionID() >= 80500 || (php::getPHPVersionID() >= 80400 && !$builder->getOption('enable-zts'))) { + $args .= ' --with-openssl-argon2 OPENSSL_LIBS="-lz"'; + } + return $args; + } + + #[CustomPhpConfigureArg('Windows')] + public function getWindowsConfigureArg(PackageBuilder $builder): string + { + $args = '--with-openssl'; + if (php::getPHPVersionID() >= 80500 || (php::getPHPVersionID() >= 80400 && !$builder->getOption('enable-zts'))) { + $args .= ' --with-openssl-argon2'; + } + return $args; + } +} diff --git a/src/StaticPHP/Package/PhpExtensionPackage.php b/src/StaticPHP/Package/PhpExtensionPackage.php index 84aa3020..3f2f18cf 100644 --- a/src/StaticPHP/Package/PhpExtensionPackage.php +++ b/src/StaticPHP/Package/PhpExtensionPackage.php @@ -79,7 +79,7 @@ class PhpExtensionPackage extends Package return ApplicationContext::invoke($callback, ['shared' => $shared, static::class => $this, Package::class => $this]); } $escapedPath = str_replace("'", '', escapeshellarg(BUILD_ROOT_PATH)) !== BUILD_ROOT_PATH || str_contains(BUILD_ROOT_PATH, ' ') ? escapeshellarg(BUILD_ROOT_PATH) : BUILD_ROOT_PATH; - $name = str_replace('_', '-', $this->getExtensionName()); + $name = str_replace('_', '-', $this->getName()); $ext_config = PackageConfig::get($name, 'php-extension', []); $arg_type = match (SystemTarget::getTargetOS()) { @@ -89,13 +89,22 @@ class PhpExtensionPackage extends Package default => $ext_config['arg-type'] ?? 'enable', }; - return match ($arg_type) { + $arg = match ($arg_type) { 'enable' => $shared ? "--enable-{$name}=shared" : "--enable-{$name}", 'enable-path' => $shared ? "--enable-{$name}=shared,{$escapedPath}" : "--enable-{$name}={$escapedPath}", 'with' => $shared ? "--with-{$name}=shared" : "--with-{$name}", 'with-path' => $shared ? "--with-{$name}=shared,{$escapedPath}" : "--with-{$name}={$escapedPath}", - default => throw new WrongUsageException("Unknown argument type '{$arg_type}' for PHP extension '{$name}'"), + 'custom' => '', + default => $arg_type, }; + // customize argument from config string + $replace = get_pack_replace(); + $arg = str_replace(array_values($replace), array_keys($replace), $arg); + $replace = [ + '@shared_suffix@' => $shared ? '=shared' : '', + '@shared_path_suffix@' => $shared ? "=shared,{$escapedPath}" : "={$escapedPath}", + ]; + return str_replace(array_keys($replace), array_values($replace), $arg); } public function setBuildShared(bool $build_shared = true): void @@ -233,7 +242,7 @@ class PhpExtensionPackage extends Package { // Add build stages for shared build on Unix-like systems // TODO: Windows shared build support - if ($this->build_shared && in_array(SystemTarget::getTargetOS(), ['Linux', 'Darwin'])) { + if ((PackageConfig::get($this->getName(), 'php-extension')['build-shared'] ?? true) && in_array(SystemTarget::getTargetOS(), ['Linux', 'Darwin'])) { if (!$this->hasStage('build')) { $this->addBuildFunction(SystemTarget::getTargetOS(), [$this, 'buildSharedForUnix']); }