From da45aa7f15445fc903ead83dcf525a0adfc20abf Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Tue, 10 Jun 2025 15:37:39 +0800 Subject: [PATCH] Fix ngtcp2 and libheif build missing lib bug --- src/SPC/builder/macos/library/libheif.php | 15 --------------- src/SPC/builder/unix/library/libheif.php | 14 ++++++++++++++ src/SPC/builder/unix/library/ngtcp2.php | 10 +++++++--- 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/SPC/builder/macos/library/libheif.php b/src/SPC/builder/macos/library/libheif.php index e785809d..af99740b 100644 --- a/src/SPC/builder/macos/library/libheif.php +++ b/src/SPC/builder/macos/library/libheif.php @@ -4,24 +4,9 @@ declare(strict_types=1); namespace SPC\builder\macos\library; -use SPC\store\FileSystem; - class libheif extends MacOSLibraryBase { use \SPC\builder\unix\library\libheif; public const NAME = 'libheif'; - - public function patchBeforeBuild(): bool - { - if (!str_contains(file_get_contents($this->source_dir . '/CMakeLists.txt'), 'libbrotlienc')) { - FileSystem::replaceFileStr( - $this->source_dir . '/CMakeLists.txt', - 'list(APPEND REQUIRES_PRIVATE "libbrotlidec")', - 'list(APPEND REQUIRES_PRIVATE "libbrotlidec")' . "\n" . ' list(APPEND REQUIRES_PRIVATE "libbrotlienc")' - ); - return true; - } - return false; - } } diff --git a/src/SPC/builder/unix/library/libheif.php b/src/SPC/builder/unix/library/libheif.php index 131a330d..680f3321 100644 --- a/src/SPC/builder/unix/library/libheif.php +++ b/src/SPC/builder/unix/library/libheif.php @@ -6,10 +6,24 @@ namespace SPC\builder\unix\library; use SPC\exception\FileSystemException; use SPC\exception\RuntimeException; +use SPC\store\FileSystem; use SPC\util\executor\UnixCMakeExecutor; trait libheif { + public function patchBeforeBuild(): bool + { + if (!str_contains(file_get_contents($this->source_dir . '/CMakeLists.txt'), 'libbrotlienc')) { + FileSystem::replaceFileStr( + $this->source_dir . '/CMakeLists.txt', + 'list(APPEND REQUIRES_PRIVATE "libbrotlidec")', + 'list(APPEND REQUIRES_PRIVATE "libbrotlidec")' . "\n" . ' list(APPEND REQUIRES_PRIVATE "libbrotlienc")' + ); + return true; + } + return false; + } + /** * @throws RuntimeException * @throws FileSystemException diff --git a/src/SPC/builder/unix/library/ngtcp2.php b/src/SPC/builder/unix/library/ngtcp2.php index 23c85e1e..2d0e8765 100644 --- a/src/SPC/builder/unix/library/ngtcp2.php +++ b/src/SPC/builder/unix/library/ngtcp2.php @@ -19,7 +19,11 @@ trait ngtcp2 protected function build(): void { UnixAutoconfExecutor::create($this) - ->optionalLib('openssl', ...ac_with_args('openssl', true)) + ->optionalLib('openssl', fn ($lib) => implode(' ', [ + '--with-openssl=yes', + "OPENSSL_LIBS=\"{$lib->getStaticLibFiles()}\"", + "OPENSSL_CFLAGS=\"-I{$lib->getIncludeDir()}\"", + ]), '--with-openssl=no') ->optionalLib('libev', ...ac_with_args('libev', true)) ->optionalLib('nghttp3', ...ac_with_args('libnghttp3', true)) ->optionalLib('jemalloc', ...ac_with_args('jemalloc', true)) @@ -34,6 +38,7 @@ trait ngtcp2 "LIBBROTLIENC_LIBS=\"{$lib->getStaticLibFiles()}\"", ]) ) + ->appendEnv(['PKG_CONFIG' => '$PKG_CONFIG --static']) ->configure('--enable-lib-only') ->make(); $this->patchPkgconfPrefix(['libngtcp2.pc', 'libngtcp2_crypto_ossl.pc']); @@ -41,7 +46,6 @@ trait ngtcp2 // on macOS, the static library may contain other static libraries? // ld: archive member 'libssl.a' not a mach-o file in libngtcp2_crypto_ossl.a - shell()->cd(BUILD_LIB_PATH) - ->exec("ar -t libngtcp2_crypto_ossl.a | grep '\\.a$' | xargs -n1 ar d libngtcp2_crypto_ossl.a"); + shell()->cd(BUILD_LIB_PATH)->exec("ar -t libngtcp2_crypto_ossl.a | grep '\\.a$' | xargs -n1 ar d libngtcp2_crypto_ossl.a"); } }