diff --git a/config/env.ini b/config/env.ini index 95a3d946..b6713991 100644 --- a/config/env.ini +++ b/config/env.ini @@ -63,6 +63,8 @@ PHP_SDK_PATH="${WORKING_DIR}\php-sdk-binary-tools" 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 +; Windows static linking system libs +SPC_WINDOWS_EXEC_LIBS="ws2_32.lib shell32.lib" [linux] ; Linux can use different build toolchain, but the toolchain can not be changed in this file: diff --git a/src/SPC/builder/extension/curl.php b/src/SPC/builder/extension/curl.php index 0c5de6a5..6262f868 100644 --- a/src/SPC/builder/extension/curl.php +++ b/src/SPC/builder/extension/curl.php @@ -57,6 +57,17 @@ class curl extends Extension return true; } + public function patchBeforeMake(): bool + { + $extra_libs = getenv('SPC_WINDOWS_EXEC_LIBS'); + if (!str_contains($extra_libs, 'secur32.lib')) { + $extra_libs .= ' secur32.lib'; + putenv('SPC_WINDOWS_EXEC_LIBS=' . $extra_libs); + return true; + } + return false; + } + public function patchBeforeSharedConfigure(): bool { $file = $this->source_dir . '/config.m4'; diff --git a/src/SPC/builder/windows/WindowsBuilder.php b/src/SPC/builder/windows/WindowsBuilder.php index 25a503eb..4ce27bc2 100644 --- a/src/SPC/builder/windows/WindowsBuilder.php +++ b/src/SPC/builder/windows/WindowsBuilder.php @@ -162,8 +162,10 @@ class WindowsBuilder extends BuilderBase { SourcePatcher::patchWindowsCLITarget(); + $extra_libs = getenv('SPC_WINDOWS_EXEC_LIBS') ?: ''; + // add nmake wrapper - FileSystem::writeFile(SOURCE_PATH . '\php-src\nmake_cli_wrapper.bat', "nmake /nologo LIBS_CLI=\"{$this->getOption('extra-libs')} ws2_32.lib shell32.lib\" EXTRA_LD_FLAGS_PROGRAM= %*"); + FileSystem::writeFile(SOURCE_PATH . '\php-src\nmake_cli_wrapper.bat', "nmake /nologo LIBS_CLI=\"{$extra_libs}\" EXTRA_LD_FLAGS_PROGRAM= %*"); cmd()->cd(SOURCE_PATH . '\php-src')->exec("{$this->sdk_prefix} nmake_cli_wrapper.bat --task-args php.exe"); @@ -197,9 +199,11 @@ class WindowsBuilder extends BuilderBase } FileSystem::writeFile(SOURCE_PATH . '\php-src\Makefile', $makefile); + $extra_libs = getenv('SPC_WINDOWS_EXEC_LIBS') ?: ''; + // add nmake wrapper $fake_cli = $this->getOption('with-micro-fake-cli', false) ? ' /DPHP_MICRO_FAKE_CLI" ' : ''; - $wrapper = "nmake /nologo LIBS_MICRO=\"{$this->getOption('extra-libs')} ws2_32.lib shell32.lib\" CFLAGS_MICRO=\"/DZEND_ENABLE_STATIC_TSRMLS_CACHE=1{$fake_cli}\" %*"; + $wrapper = "nmake /nologo LIBS_MICRO=\"{$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 diff --git a/src/SPC/builder/windows/library/curl.php b/src/SPC/builder/windows/library/curl.php index a758bf05..1229dbd6 100644 --- a/src/SPC/builder/windows/library/curl.php +++ b/src/SPC/builder/windows/library/curl.php @@ -37,6 +37,7 @@ class curl extends WindowsLibraryBase '-DBUILD_EXAMPLES=OFF ' . // disable examples '-DUSE_LIBIDN2=OFF ' . // disable libidn2 '-DCURL_USE_LIBPSL=OFF ' . // disable libpsl + '-DUSE_WINDOWS_SSPI=ON ' . // use Schannel instead of OpenSSL '-DCURL_USE_SCHANNEL=ON ' . // use Schannel instead of OpenSSL '-DCURL_USE_OPENSSL=OFF ' . // disable openssl due to certificate issue '-DCURL_ENABLE_SSL=ON ' .