From 6b6a099a47fa3a5bcc41af3184de5f8a0b538eb1 Mon Sep 17 00:00:00 2001 From: henderkes Date: Thu, 9 Jul 2026 19:27:41 +0700 Subject: [PATCH] fix gmssl and event properly.. --- config/pkg/ext/ext-gmssl.yml | 2 ++ config/pkg/lib/gmssl.yml | 5 +++-- src/Package/Artifact/gmssl.php | 7 +++++++ src/Package/Extension/event.php | 13 ++++++++++--- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/config/pkg/ext/ext-gmssl.yml b/config/pkg/ext/ext-gmssl.yml index 7ed8981d..41a32fb9 100644 --- a/config/pkg/ext/ext-gmssl.yml +++ b/config/pkg/ext/ext-gmssl.yml @@ -10,3 +10,5 @@ ext-gmssl: license: PHP-3.01 depends: - gmssl + php-extension: + arg-type: with-path diff --git a/config/pkg/lib/gmssl.yml b/config/pkg/lib/gmssl.yml index 07623435..ff425087 100644 --- a/config/pkg/lib/gmssl.yml +++ b/config/pkg/lib/gmssl.yml @@ -2,8 +2,9 @@ gmssl: type: library artifact: source: - type: ghtar - repo: guanzhi/GmSSL + type: git + url: 'https://github.com/guanzhi/GmSSL.git' + rev: master metadata: license-files: [LICENSE] license: Apache-2.0 diff --git a/src/Package/Artifact/gmssl.php b/src/Package/Artifact/gmssl.php index 4caa4d1e..833c7b41 100644 --- a/src/Package/Artifact/gmssl.php +++ b/src/Package/Artifact/gmssl.php @@ -17,4 +17,11 @@ class gmssl FileSystem::replaceFileStr($target_path . '/src/hex.c', 'unsigned char *OPENSSL_hexstr2buf(const char *str, size_t *len)', 'unsigned char *GMSSL_hexstr2buf(const char *str, size_t *len)'); FileSystem::replaceFileStr($target_path . '/src/hex.c', 'OPENSSL_hexchar2int', 'GMSSL_hexchar2int'); } + + #[AfterSourceExtract('ext-gmssl')] + #[PatchDescription('Rename pbkdf2_hmac_sm3_genkey() to sm3_pbkdf2() (renamed upstream in GmSSL 3.2+; identical signature)')] + public function patchExt(string $target_path): void + { + FileSystem::replaceFileStr($target_path . '/gmssl.c', 'pbkdf2_hmac_sm3_genkey(', 'sm3_pbkdf2('); + } } diff --git a/src/Package/Extension/event.php b/src/Package/Extension/event.php index 9aca279f..2b9515cf 100644 --- a/src/Package/Extension/event.php +++ b/src/Package/Extension/event.php @@ -56,9 +56,16 @@ class event extends PhpExtensionPackage private function patchLibeventConstPeer(string $event_source_dir): bool { $file = "{$event_source_dir}/php8/classes/http_connection.c"; - if (is_file($file) && FileSystem::replaceFileRegex($file, '/^\tchar \*address;$/m', "\tconst char *address;")) { - return true; + if (!is_file($file)) { + return false; } - return false; + // libevent >= 2.2 changed evhttp_connection_get_peer()'s + // address arg to `const char **` + $header = $this->getBuilder()->getBuildRootPath() . '/include/event2/http.h'; + $isConst = is_file($header) + && preg_match('/evhttp_connection_get_peer\s*\([^;]*\bconst\s+char\s*\*\*\s*address/s', file_get_contents($header)) === 1; + return (bool) ($isConst + ? FileSystem::replaceFileRegex($file, '/^\tchar \*address;$/m', "\tconst char *address;") + : FileSystem::replaceFileRegex($file, '/^\tconst char \*address;$/m', "\tchar *address;")); } }