Add intl support for windows

This commit is contained in:
crazywhalecc 2025-06-10 19:06:07 +08:00
parent a48680c26f
commit 48cb87ada2
5 changed files with 66 additions and 8 deletions

View File

@ -297,12 +297,14 @@
},
"intl": {
"support": {
"Windows": "no",
"BSD": "wip"
},
"type": "builtin",
"lib-depends": [
"lib-depends-unix": [
"icu"
],
"lib-depends-windows": [
"icu-static-win"
]
},
"ldap": {

View File

@ -198,6 +198,18 @@
"libicudata.a"
]
},
"icu-static-win": {
"source": "icu-static-win",
"static-libs-windows": [
"icudt.lib",
"icuin.lib",
"icuio.lib",
"icuuc.lib"
],
"headers-windows": [
"unicode"
]
},
"imagemagick": {
"source": "imagemagick",
"static-libs-unix": [

View File

@ -312,6 +312,14 @@
"path": "LICENSE"
}
},
"icu-static-win": {
"type": "url",
"url": "https://dl.static-php.dev/static-php-cli/deps/icu-static-windows-x64/icu-static-windows-x64.zip",
"license": {
"type": "text",
"text": "none"
}
},
"igbinary": {
"type": "url",
"url": "https://pecl.php.net/get/igbinary",

View File

@ -5,6 +5,7 @@ declare(strict_types=1);
namespace SPC\builder\extension;
use SPC\builder\Extension;
use SPC\builder\windows\WindowsBuilder;
use SPC\store\FileSystem;
use SPC\util\CustomExt;
@ -13,13 +14,21 @@ class intl extends Extension
{
public function patchBeforeBuildconf(): bool
{
// TODO: remove the following line when https://github.com/php/php-src/pull/14002 will be released
FileSystem::replaceFileStr(SOURCE_PATH . '/php-src/ext/intl/config.m4', 'PHP_CXX_COMPILE_STDCXX(11', 'PHP_CXX_COMPILE_STDCXX(17');
// Also need to use clang++ -std=c++17 to force override the default C++ standard
if (is_string($env = getenv('CXX')) && !str_contains($env, 'std=c++17')) {
f_putenv('CXX=' . $env . ' -std=c++17');
if ($this->builder instanceof WindowsBuilder) {
FileSystem::replaceFileStr(
SOURCE_PATH . '/php-src/ext/intl/config.w32',
'EXTENSION("intl", "php_intl.c intl_convert.c intl_convertcpp.cpp intl_error.c ", true,',
'EXTENSION("intl", "php_intl.c intl_convert.c intl_convertcpp.cpp intl_error.c ", PHP_INTL_SHARED,'
);
} else {
f_putenv('CXX=clang++ -std=c++17');
// TODO: remove the following line when https://github.com/php/php-src/pull/14002 will be released
FileSystem::replaceFileStr(SOURCE_PATH . '/php-src/ext/intl/config.m4', 'PHP_CXX_COMPILE_STDCXX(11', 'PHP_CXX_COMPILE_STDCXX(17');
// Also need to use clang++ -std=c++17 to force override the default C++ standard
if (is_string($env = getenv('CXX')) && !str_contains($env, 'std=c++17')) {
f_putenv('CXX=' . $env . ' -std=c++17');
} else {
f_putenv('CXX=clang++ -std=c++17');
}
}
return true;
}

View File

@ -0,0 +1,27 @@
<?php
declare(strict_types=1);
namespace SPC\builder\windows\library;
use SPC\store\FileSystem;
class icu_static_win extends WindowsLibraryBase
{
public const NAME = 'icu-static-win';
protected function build(): void
{
copy("{$this->source_dir}\\x64-windows-static\lib\icudt.lib", "{$this->getLibDir()}\icudt.lib");
copy("{$this->source_dir}\\x64-windows-static\lib\icuin.lib", "{$this->getLibDir()}\icuin.lib");
copy("{$this->source_dir}\\x64-windows-static\lib\icuio.lib", "{$this->getLibDir()}\icuio.lib");
copy("{$this->source_dir}\\x64-windows-static\lib\icuuc.lib", "{$this->getLibDir()}\icuuc.lib");
// create libpq folder in buildroot/includes/libpq
if (!file_exists("{$this->getIncludeDir()}\unicode")) {
mkdir("{$this->getIncludeDir()}\unicode");
}
FileSystem::copyDir("{$this->source_dir}\\x64-windows-static\include\unicode", "{$this->getIncludeDir()}\unicode");
}
}