From 327bb8bc0f9c30a25c34dd4077349e9b48c08be6 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Sat, 21 Mar 2026 00:33:27 +0800 Subject: [PATCH] Add curl --- config/pkg/target/curl.yml | 9 +++++++++ src/Package/Target/curl.php | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/config/pkg/target/curl.yml b/config/pkg/target/curl.yml index 4daba8c1..78064510 100644 --- a/config/pkg/target/curl.yml +++ b/config/pkg/target/curl.yml @@ -12,6 +12,10 @@ curl: depends@unix: - openssl - zlib + depends@windows: + - zlib + - libssh2 + - nghttp2 suggests@unix: - libssh2 - brotli @@ -23,6 +27,9 @@ curl: - ldap - idn2 - krb5 + suggests@windows: + - brotli + - zstd frameworks: - CoreFoundation - CoreServices @@ -33,3 +40,5 @@ curl: - curl static-libs@unix: - libcurl.a + static-libs@windows: + - libcurl_a.lib diff --git a/src/Package/Target/curl.php b/src/Package/Target/curl.php index dbfa8f7a..43a2904b 100644 --- a/src/Package/Target/curl.php +++ b/src/Package/Target/curl.php @@ -10,6 +10,7 @@ use StaticPHP\Attribute\Package\Target; use StaticPHP\Attribute\PatchDescription; use StaticPHP\Package\LibraryPackage; use StaticPHP\Runtime\Executor\UnixCMakeExecutor; +use StaticPHP\Runtime\Executor\WindowsCMakeExecutor; use StaticPHP\Runtime\SystemTarget; use StaticPHP\Util\FileSystem; @@ -20,7 +21,9 @@ class curl #[PatchDescription('Remove CMAKE_C_IMPLICIT_LINK_LIBRARIES and fix macOS framework detection')] public function patchBeforeBuild(LibraryPackage $lib): bool { - shell()->cd($lib->getSourceDir())->exec('sed -i.save s@\${CMAKE_C_IMPLICIT_LINK_LIBRARIES}@@ ./CMakeLists.txt'); + if (SystemTarget::getTargetOS() !== 'Windows') { + shell()->cd($lib->getSourceDir())->exec('sed -i.save s@\${CMAKE_C_IMPLICIT_LINK_LIBRARIES}@@ ./CMakeLists.txt'); + } if (SystemTarget::getTargetOS() === 'Darwin') { FileSystem::replaceFileRegex("{$lib->getSourceDir()}/CMakeLists.txt", '/NOT COREFOUNDATION_FRAMEWORK/m', 'FALSE'); FileSystem::replaceFileRegex("{$lib->getSourceDir()}/CMakeLists.txt", '/NOT SYSTEMCONFIGURATION_FRAMEWORK/m', 'FALSE'); @@ -29,6 +32,34 @@ class curl return true; } + #[BuildFor('Windows')] + public function buildWin(LibraryPackage $lib): void + { + WindowsCMakeExecutor::create($lib) + ->optionalPackage('zstd', ...cmake_boolean_args('CURL_ZSTD')) + ->optionalPackage('brotli', ...cmake_boolean_args('CURL_BROTLI')) + ->addConfigureArgs( + '-DBUILD_CURL_EXE=OFF', + '-DZSTD_LIBRARY=zstd_static.lib', + '-DBUILD_TESTING=OFF', + '-DBUILD_EXAMPLES=OFF', + '-DUSE_LIBIDN2=OFF', + '-DCURL_USE_LIBPSL=OFF', + '-DUSE_WINDOWS_SSPI=ON', + '-DCURL_USE_SCHANNEL=ON', + '-DCURL_USE_OPENSSL=OFF', + '-DCURL_ENABLE_SSL=ON', + '-DUSE_NGHTTP2=ON', + '-DSHARE_LIB_OBJECT=OFF', + '-DCURL_USE_LIBSSH2=ON', + '-DENABLE_IPV6=ON', + ) + ->build(); + // move libcurl.lib to libcurl_a.lib + rename("{$lib->getLibDir()}\\libcurl.lib", "{$lib->getLibDir()}\\libcurl_a.lib"); + FileSystem::replaceFileStr("{$lib->getIncludeDir()}\\curl\\curl.h", '#ifdef CURL_STATICLIB', '#if 1'); + } + #[BuildFor('Linux')] #[BuildFor('Darwin')] public function build(LibraryPackage $lib): void