From 869c9a06e37a4687a0b7f91f58b7b8b15fe3df21 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Fri, 10 Apr 2026 16:25:24 +0800 Subject: [PATCH] Add ext-maxminddb and libmaxminddb support on Windows --- config/pkg/lib/libmaxminddb.yml | 2 ++ src/Package/Extension/maxminddb.php | 1 + src/Package/Library/libmaxminddb.php | 16 ++++++++++++++++ 3 files changed, 19 insertions(+) diff --git a/config/pkg/lib/libmaxminddb.yml b/config/pkg/lib/libmaxminddb.yml index a0c3a307..1f67800e 100644 --- a/config/pkg/lib/libmaxminddb.yml +++ b/config/pkg/lib/libmaxminddb.yml @@ -14,3 +14,5 @@ libmaxminddb: - maxminddb_config.h static-libs@unix: - libmaxminddb.a + static-libs@windows: + - libmaxminddb.lib diff --git a/src/Package/Extension/maxminddb.php b/src/Package/Extension/maxminddb.php index bda8d34c..9d04fcb9 100644 --- a/src/Package/Extension/maxminddb.php +++ b/src/Package/Extension/maxminddb.php @@ -15,6 +15,7 @@ use StaticPHP\Util\FileSystem; class maxminddb extends PhpExtensionPackage { #[BeforeStage('php', [php::class, 'buildconfForUnix'], 'ext-maxminddb')] + #[BeforeStage('php', [php::class, 'buildconfForWindows'], 'ext-maxminddb')] #[PatchDescription('Patch maxminddb extension for buildconf to support new source structure')] public function patchBeforeBuildconf(): void { diff --git a/src/Package/Library/libmaxminddb.php b/src/Package/Library/libmaxminddb.php index a045e4f1..54c04518 100644 --- a/src/Package/Library/libmaxminddb.php +++ b/src/Package/Library/libmaxminddb.php @@ -8,6 +8,8 @@ use StaticPHP\Attribute\Package\BuildFor; use StaticPHP\Attribute\Package\Library; use StaticPHP\Package\LibraryPackage; use StaticPHP\Runtime\Executor\UnixCMakeExecutor; +use StaticPHP\Runtime\Executor\WindowsCMakeExecutor; +use StaticPHP\Util\FileSystem; #[Library('libmaxminddb')] class libmaxminddb @@ -23,4 +25,18 @@ class libmaxminddb ) ->build(); } + + #[BuildFor('Windows')] + public function buildWindows(LibraryPackage $lib): void + { + WindowsCMakeExecutor::create($lib) + ->addConfigureArgs( + '-DBUILD_TESTING=OFF', + '-DMAXMINDDB_BUILD_BINARIES=OFF', + ) + ->build(); + if (!file_exists($lib->getLibDir() . '\libmaxminddb.lib')) { + FileSystem::copy("{$lib->getLibDir()}\\maxminddb.lib", "{$lib->getLibDir()}\\libmaxminddb.lib"); + } + } }