diff --git a/config/lib.json b/config/lib.json index bfe6ec6c..16ea45c8 100644 --- a/config/lib.json +++ b/config/lib.json @@ -460,5 +460,18 @@ "static-libs-unix": [ "libsodium.a" ] + }, + "icu": { + "source": "icu", + "static-libs-unix": [ + "libicudata.a", + "libicui18n.a", + "libicuio.a", + "libicutu.a", + "libicuuc.a" + ], + "headers": [ + + ] } } \ No newline at end of file diff --git a/config/source.json b/config/source.json index d74fd496..89238e39 100644 --- a/config/source.json +++ b/config/source.json @@ -419,5 +419,13 @@ "type": "file", "path": "LICENSE" } + }, + "icu": { + "type": "url", + "url": "https://github.com/unicode-org/icu/releases/download/release-73-1/icu4c-73_1-src.tgz", + "license": { + "type": "file", + "path": "LICENSE" + } } } \ No newline at end of file diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index b8d8757d..8aee51ce 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -139,7 +139,7 @@ class LinuxBuilder extends BuilderBase ) ); } - if ($this->getExt('swoole')) { + if ($this->getExt('swoole') || $this->getExt('intl')) { $extra_libs .= ' -lstdc++'; } if ($this->getExt('imagick')) { diff --git a/src/SPC/builder/linux/library/icu.php b/src/SPC/builder/linux/library/icu.php new file mode 100644 index 00000000..4e061dfc --- /dev/null +++ b/src/SPC/builder/linux/library/icu.php @@ -0,0 +1,20 @@ +cd($this->source_dir . '/source') + ->exec("{$this->builder->configure_env} ./runConfigureICU Linux --enable-static --disable-shared --prefix={$root}") + ->exec('make clean') + ->exec("make -j{$this->builder->concurrency}") + ->exec('make install'); + } +} diff --git a/src/SPC/builder/macos/MacOSBuilder.php b/src/SPC/builder/macos/MacOSBuilder.php index cb7f9f56..65b1a7f6 100644 --- a/src/SPC/builder/macos/MacOSBuilder.php +++ b/src/SPC/builder/macos/MacOSBuilder.php @@ -123,7 +123,7 @@ class MacOSBuilder extends BuilderBase */ public function buildPHP(int $build_target = BUILD_TARGET_NONE, bool $bloat = false): void { - $extra_libs = $this->getFrameworks(true) . ' ' . ($this->getExt('swoole') ? '-lc++ ' : ''); + $extra_libs = $this->getFrameworks(true) . ' ' . ($this->getExt('swoole') || $this->getExt('intl') ? '-lc++ ' : ''); if (!$bloat) { $extra_libs .= implode(' ', $this->getAllStaticLibFiles()); } else { diff --git a/src/SPC/builder/macos/library/icu.php b/src/SPC/builder/macos/library/icu.php new file mode 100644 index 00000000..dd7967a1 --- /dev/null +++ b/src/SPC/builder/macos/library/icu.php @@ -0,0 +1,20 @@ +cd($this->source_dir . '/source') + ->exec("{$this->builder->configure_env} ./runConfigureICU MacOSX --enable-static --disable-shared --prefix={$root}") + ->exec('make clean') + ->exec("make -j{$this->builder->concurrency}") + ->exec('make install'); + } +} diff --git a/src/globals/tests/intl.php b/src/globals/tests/intl.php new file mode 100644 index 00000000..32ccd568 --- /dev/null +++ b/src/globals/tests/intl.php @@ -0,0 +1,5 @@ +