Skip to content

Commit 3198cc4

Browse files
authored
Remove icu backend from libxml2 (#903)
2 parents e35d6c2 + 0156f33 commit 3198cc4

File tree

6 files changed

+64
-13
lines changed

6 files changed

+64
-13
lines changed

config/ext.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -414,9 +414,17 @@
414414
"libmemcached",
415415
"fastlz"
416416
],
417+
"lib-suggests": [
418+
"zstd"
419+
],
417420
"ext-depends": [
418421
"session",
419422
"zlib"
423+
],
424+
"ext-suggests": [
425+
"igbinary",
426+
"msgpack",
427+
"session"
420428
]
421429
},
422430
"mongodb": {

config/lib.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,7 @@
452452
},
453453
"libmemcached": {
454454
"source": "libmemcached",
455+
"cpp-library": true,
455456
"static-libs-unix": [
456457
"libmemcached.a",
457458
"libmemcachedprotocol.a",
@@ -596,7 +597,6 @@
596597
],
597598
"lib-suggests-unix": [
598599
"xz",
599-
"icu",
600600
"zlib"
601601
],
602602
"lib-depends-windows": [

src/SPC/builder/Extension.php

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,14 @@
55
namespace SPC\builder;
66

77
use SPC\exception\EnvironmentException;
8+
use SPC\exception\FileSystemException;
89
use SPC\exception\SPCException;
910
use SPC\exception\ValidationException;
1011
use SPC\exception\WrongUsageException;
1112
use SPC\store\Config;
1213
use SPC\store\FileSystem;
14+
use SPC\toolchain\ClangNativeToolchain;
15+
use SPC\toolchain\GccNativeToolchain;
1316
use SPC\toolchain\ToolchainManager;
1417
use SPC\toolchain\ZigToolchain;
1518
use SPC\util\SPCConfigUtil;
@@ -418,8 +421,24 @@ public function buildUnixShared(): void
418421
'LIBS' => clean_spaces("{$preStatic} {$staticLibs} {$postStatic} {$sharedLibs}"),
419422
'LD_LIBRARY_PATH' => BUILD_LIB_PATH,
420423
];
421-
if (ToolchainManager::getToolchainClass() === ZigToolchain::class && SPCTarget::getTargetOS() === 'Linux') {
422-
$env['SPC_COMPILER_EXTRA'] = '-lstdc++';
424+
if (str_contains($env['LIBS'], '-lstdc++') && SPCTarget::getTargetOS() === 'Linux') {
425+
if (ToolchainManager::getToolchainClass() === ZigToolchain::class) {
426+
$env['SPC_COMPILER_EXTRA'] = '-lstdc++';
427+
} elseif (ToolchainManager::getToolchainClass() === GccNativeToolchain::class || ToolchainManager::getToolchainClass() === ClangNativeToolchain::class) {
428+
try {
429+
$content = FileSystem::readFile($this->source_dir . '/config.m4');
430+
if ($content && !str_contains($content, 'PHP_ADD_LIBRARY(stdc++')) {
431+
$pattern = '/(PHP_NEW_EXTENSION\(' . $this->name . ',.*\))/m';
432+
$replacement = "$1\nPHP_ADD_LIBRARY(stdc++, 1, " . strtoupper($this->name) . '_SHARED_LIBADD)';
433+
FileSystem::replaceFileRegex(
434+
$this->source_dir . '/config.m4',
435+
$pattern,
436+
$replacement
437+
);
438+
}
439+
} catch (FileSystemException) {
440+
}
441+
}
423442
}
424443

425444
if ($this->patchBeforeSharedPhpize()) {

src/SPC/builder/extension/memcached.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ public function getUnixConfigureArg(bool $shared = false): string
1717
'--with-libmemcached-dir=' . BUILD_ROOT_PATH . ' ' .
1818
'--disable-memcached-sasl ' .
1919
'--enable-memcached-json ' .
20+
($this->builder->getLib('zstd') ? '--with-zstd ' : '') .
21+
($this->builder->getExt('igbinary') ? '--enable-memcached-igbinary ' : '') .
22+
($this->builder->getExt('session') ? '--enable-memcached-session ' : '') .
23+
($this->builder->getExt('msgpack') ? '--enable-memcached-msgpack ' : '') .
2024
'--with-system-fastlz';
2125
}
2226
}

src/SPC/builder/unix/library/libxml2.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ public function build(): void
2020
"-DZLIB_INCLUDE_DIR={$this->getIncludeDir()}",
2121
'-DLIBXML2_WITH_ZLIB=OFF',
2222
)
23-
->optionalLib('icu', ...cmake_boolean_args('LIBXML2_WITH_ICU'))
2423
->optionalLib('xz', ...cmake_boolean_args('LIBXML2_WITH_LZMA'))
2524
->addConfigureArgs(
2625
'-DLIBXML2_WITH_ICONV=ON',
26+
'-DLIBXML2_WITH_ICU=OFF', // optional, but discouraged: https://gitlab.gnome.org/GNOME/libxml2/-/blob/master/README.md
2727
'-DLIBXML2_WITH_PYTHON=OFF',
2828
'-DLIBXML2_WITH_PROGRAMS=OFF',
2929
'-DLIBXML2_WITH_TESTS=OFF',

src/globals/ext-tests/gettext.php

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,40 @@
44

55
assert(function_exists('gettext'));
66
assert(function_exists('bindtextdomain'));
7+
assert(function_exists('bind_textdomain_codeset'));
78
assert(function_exists('textdomain'));
89

9-
if (!is_dir('locale/en_US/LC_MESSAGES/')) {
10-
mkdir('locale/en_US/LC_MESSAGES/', 0755, true);
10+
foreach (['en_US', 'en_GB'] as $lc) {
11+
$dir = "locale/{$lc}/LC_MESSAGES";
12+
if (!is_dir($dir)) {
13+
mkdir($dir, 0755, true);
14+
}
15+
$mo = '3hIElQAAAAACAAAAHAAAACwAAAAFAAAAPAAAAAAAAABQAAAABgAAAFEAAAAXAQAAWAAAAAcAAABwAQAAAQAAAAAAAAAAAAAAAgAAAAAAAAAA56S65L6LAFByb2plY3QtSWQtVmVyc2lvbjogUEFDS0FHRSBWRVJTSU9OClJlcG9ydC1Nc2dpZC1CdWdzLVRvOiAKUE8tUmV2aXNpb24tRGF0ZTogWUVBUi1NTy1EQSBITzpNSytaT05FCkxhc3QtVHJhbnNsYXRvcjogRlVMTCBOQU1FIDxFTUFJTEBBRERSRVNTPgpMYW5ndWFnZS1UZWFtOiBMQU5HVUFHRSA8TExAbGkub3JnPgpMYW5ndWFnZTogCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgBFeGFtcGxlAA==';
16+
$path = "{$dir}/test.mo";
17+
if (!file_exists($path)) {
18+
file_put_contents($path, base64_decode($mo));
19+
}
1120
}
12-
if (!file_exists('locale/en_US/LC_MESSAGES/test.mo')) {
13-
$mo = '3hIElQAAAAACAAAAHAAAACwAAAAFAAAAPAAAAAAAAABQAAAABgAAAFEAAAAXAQAAWAAAAAcAAABwAQAAAQAAAAAAAAAAAAAAAgAAAAAAAAAA56S65L6LAFByb2plY3QtSWQtVmVyc2lvbjogUEFDS0FHRSBWRVJTSU9OClJlcG9ydC1Nc2dpZC1CdWdzLVRvOiAKUE8tUmV2aXNpb24tRGF0ZTogWUVBUi1NTy1EQSBITzpNSStaT05FCkxhc3QtVHJhbnNsYXRvcjogRlVMTCBOQU1FIDxFTUFJTEBBRERSRVNTPgpMYW5ndWFnZS1UZWFtOiBMQU5HVUFHRSA8TExAbGkub3JnPgpMYW5ndWFnZTogCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgBFeGFtcGxlAA==';
14-
file_put_contents('locale/en_US/LC_MESSAGES/test.mo', base64_decode($mo));
15-
}
16-
putenv('LANG=en_US');
17-
assert(setlocale(LC_ALL, 'en_US.utf-8') === 'en_US.utf-8');
21+
22+
// Probe for an available English locale
23+
$candidates = [
24+
'en_US.UTF-8', 'en_US.utf8', 'en_US.utf-8', 'en_US',
25+
'en_GB.UTF-8', 'en_GB.utf8', 'en_GB.utf-8', 'en_GB',
26+
'English_United States.65001', 'English_United States.1252',
27+
'English_United Kingdom.65001', 'English_United Kingdom.1252',
28+
];
29+
30+
$locale = setlocale(LC_ALL, $candidates);
31+
assert($locale !== false);
32+
33+
putenv('LC_ALL=' . $locale);
34+
putenv('LANG=' . $locale);
35+
putenv('LANGUAGE=' . (stripos($locale, 'US') !== false ? 'en_US:en_GB' : 'en_GB:en_US'));
1836

1937
$domain = 'test';
2038
bindtextdomain($domain, 'locale/');
39+
bind_textdomain_codeset($domain, 'UTF-8');
2140
textdomain($domain);
2241

23-
assert(gettext(json_decode('"\u793a\u4f8b"', true)) === 'Example');
42+
$src = json_decode('"\u793a\u4f8b"', true);
43+
assert(gettext($src) === 'Example');

0 commit comments

Comments
 (0)