From 41f5948392e18df0c2d9eb053156b4f737bc1eb1 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Mon, 23 Mar 2026 17:11:47 +0800 Subject: [PATCH] Add libyaml --- config/pkg/lib/libyaml.yml | 2 ++ src/Package/Library/libyaml.php | 28 ++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/config/pkg/lib/libyaml.yml b/config/pkg/lib/libyaml.yml index 0d39e0b1..8cabd58f 100644 --- a/config/pkg/lib/libyaml.yml +++ b/config/pkg/lib/libyaml.yml @@ -13,3 +13,5 @@ libyaml: - yaml.h static-libs@unix: - libyaml.a + static-libs@windows: + - yaml.lib diff --git a/src/Package/Library/libyaml.php b/src/Package/Library/libyaml.php index 602c875c..5334079b 100644 --- a/src/Package/Library/libyaml.php +++ b/src/Package/Library/libyaml.php @@ -6,16 +6,44 @@ namespace Package\Library; use StaticPHP\Attribute\Package\BuildFor; use StaticPHP\Attribute\Package\Library; +use StaticPHP\Attribute\Package\PatchBeforeBuild; +use StaticPHP\Attribute\PatchDescription; use StaticPHP\Package\LibraryPackage; use StaticPHP\Runtime\Executor\UnixAutoconfExecutor; +use StaticPHP\Runtime\Executor\WindowsCMakeExecutor; +use StaticPHP\Runtime\SystemTarget; +use StaticPHP\Util\FileSystem; #[Library('libyaml')] class libyaml { + #[PatchBeforeBuild] + #[PatchDescription('Copy missing cmake helper files required for MSVC build (not included in libyaml git source)')] + public function patchBeforeBuild(LibraryPackage $lib): void + { + spc_skip_if(SystemTarget::getTargetOS() !== 'Windows', 'This patch is only for Windows builds.'); + // check missing files: cmake\config.h.in and .\YamlConfig.cmake.in + if (!file_exists($lib->getSourceDir() . '\cmake\config.h.in')) { + FileSystem::createDir($lib->getSourceDir() . '\cmake'); + FileSystem::copy(ROOT_DIR . '/src/globals/extra/libyaml_config.h.in', $lib->getSourceDir() . '\cmake\config.h.in'); + } + if (!file_exists($lib->getSourceDir() . '\YamlConfig.cmake.in')) { + FileSystem::copy(ROOT_DIR . '/src/globals/extra/libyaml_yamlConfig.cmake.in', $lib->getSourceDir() . '\YamlConfig.cmake.in'); + } + } + #[BuildFor('Darwin')] #[BuildFor('Linux')] public function buildUnix(LibraryPackage $lib): void { UnixAutoconfExecutor::create($lib)->configure()->make(); } + + #[BuildFor('Windows')] + public function buildWin(LibraryPackage $lib): void + { + WindowsCMakeExecutor::create($lib) + ->addConfigureArgs('-DBUILD_TESTING=OFF') + ->build(); + } }