diff --git a/config/pkg/lib/libxml2.yml b/config/pkg/lib/libxml2.yml index 7e86b5af..5ffdc8b2 100644 --- a/config/pkg/lib/libxml2.yml +++ b/config/pkg/lib/libxml2.yml @@ -12,7 +12,13 @@ libxml2: - libiconv - zlib - xz + depends@windows: + - zlib + - libiconv-win headers: - libxml2 pkg-configs: - libxml-2.0 + static-libs@windows: + - libxml2s.lib + - libxml2_a.lib diff --git a/src/Package/Library/libxml2.php b/src/Package/Library/libxml2.php index 3f8b3e71..108b9962 100644 --- a/src/Package/Library/libxml2.php +++ b/src/Package/Library/libxml2.php @@ -7,12 +7,33 @@ namespace Package\Library; use StaticPHP\Attribute\Package\BuildFor; use StaticPHP\Attribute\Package\Library; use StaticPHP\Package\LibraryPackage; +use StaticPHP\Package\PackageInstaller; use StaticPHP\Runtime\Executor\UnixCMakeExecutor; +use StaticPHP\Runtime\Executor\WindowsCMakeExecutor; use StaticPHP\Util\FileSystem; #[Library('libxml2')] class libxml2 { + #[BuildFor('Windows')] + public function buildForWindows(LibraryPackage $lib, PackageInstaller $installer): void + { + $iconv_win = $installer->getLibraryPackage('libiconv-win'); + WindowsCMakeExecutor::create($lib) + ->addConfigureArgs( + '-DLIBXML2_WITH_ICONV=ON', + "-DIconv_LIBRARY={$iconv_win->getLibDir()}", + "-DIconv_INCLUDE_DIR={$iconv_win->getIncludeDir()}", + '-DLIBXML2_WITH_ZLIB=ON', + '-DLIBXML2_WITH_PYTHON=OFF', + '-DLIBXML2_WITH_LZMA=OFF', + '-DLIBXML2_WITH_PROGRAMS=OFF', + '-DLIBXML2_WITH_TESTS=OFF', + ) + ->build(); + FileSystem::copy("{$lib->getLibDir()}\\libxml2s.lib", "{$lib->getLibDir()}\\libxml2_a.lib"); + } + #[BuildFor('Linux')] public function buildForLinux(LibraryPackage $lib): void {