Use prebuilt icu on Windows
This commit is contained in:
parent
97d446642c
commit
00363fdc8c
|
@ -1,4 +1,10 @@
|
|||
from .base import Dependency, ReleaseDownload, MakeBuilder, MesonBuilder
|
||||
from .base import (
|
||||
Dependency,
|
||||
ReleaseDownload,
|
||||
MakeBuilder,
|
||||
MesonBuilder,
|
||||
Builder as BaseBuilder,
|
||||
)
|
||||
|
||||
from kiwixbuild.utils import pj, SkipCommand, Remotefile, extract_archive
|
||||
from kiwixbuild._global import get_target_step, neutralEnv
|
||||
|
@ -6,40 +12,123 @@ import os, shutil
|
|||
import fileinput
|
||||
import platform
|
||||
|
||||
if platform.system() == "Windows":
|
||||
|
||||
class Icu(Dependency):
|
||||
name = "icu4c"
|
||||
class Icu(Dependency):
|
||||
name = "icu4c"
|
||||
|
||||
class Source(ReleaseDownload):
|
||||
archive_src = Remotefile(
|
||||
"icu4c-73_2-src.tgz",
|
||||
"818a80712ed3caacd9b652305e01afc7fa167e6f2e94996da44b90c2ab604ce1",
|
||||
"https://github.com/unicode-org/icu/releases/download/release-73-2/icu4c-73_2-src.tgz",
|
||||
)
|
||||
archive_data = Remotefile(
|
||||
"icu4c-73_2-data.zip",
|
||||
"ca1ee076163b438461e484421a7679fc33a64cd0a54f9d4b401893fa1eb42701",
|
||||
"https://github.com/unicode-org/icu/releases/download/release-73-2/icu4c-73_2-data.zip",
|
||||
)
|
||||
meson_patch = Remotefile(
|
||||
"icu_73.2-2_patch.zip",
|
||||
"218a5f20b58b6b2372e636c2eb2d611a898fdc11be17d6c4f35a3cd54d472010",
|
||||
"https://wrapdb.mesonbuild.com/v2/icu_73.2-2/get_patch",
|
||||
)
|
||||
|
||||
archives = [archive_src, archive_data, meson_patch]
|
||||
|
||||
def _extract(self, context):
|
||||
context.try_skip(self.extract_path)
|
||||
if os.path.exists(self.extract_path):
|
||||
shutil.rmtree(self.extract_path)
|
||||
extract_archive(
|
||||
pj(neutralEnv("archive_dir"), self.archive_src.name),
|
||||
neutralEnv("source_dir"),
|
||||
topdir=None,
|
||||
name=self.source_dir,
|
||||
class Source(ReleaseDownload):
|
||||
archive = Remotefile(
|
||||
"icu4c-73_1-Win64-MSVC2019.zip",
|
||||
"",
|
||||
"https://github.com/unicode-org/icu/releases/download/release-73-1/icu4c-73_1-Win64-MSVC2019.zip",
|
||||
)
|
||||
if platform.system() != "Windows":
|
||||
|
||||
class Builder(BaseBuilder):
|
||||
def build(self):
|
||||
self.command("copy_headers", self._copy_headers)
|
||||
self.command("copy_bins", self._copy_bin)
|
||||
self.command("generate_pkg_config", self._generate_pkg_config)
|
||||
|
||||
def _copy_headers(self, context):
|
||||
context.try_skip(self.build_path)
|
||||
shutil.copytree(
|
||||
pj(self.source_path, "include", "unicode"),
|
||||
pj(self.buildEnv.install_dir, "include", "unicode"),
|
||||
)
|
||||
|
||||
def _copy_bin(self, context):
|
||||
context.try_skip(self.build_path)
|
||||
shutil.copytree(
|
||||
pj(self.source_path, "lib64"),
|
||||
pj(self.buildEnv.install_dir, "lib"),
|
||||
dirs_exist_ok=True,
|
||||
)
|
||||
|
||||
def ignore_non_dll(path, names):
|
||||
return [n for n in names if not n.endswith(".dll")]
|
||||
|
||||
shutil.copytree(
|
||||
pj(self.source_path, "bin64"),
|
||||
pj(self.buildEnv.install_dir, "bin"),
|
||||
ignore=ignore_non_dll,
|
||||
dirs_exist_ok=True,
|
||||
)
|
||||
|
||||
def _generate_pkg_config(self, context):
|
||||
context.try_skip(self.build_path)
|
||||
|
||||
pkg_config_template = """ Copyright (C) 2016 and later: Unicode, Inc. and others.
|
||||
# License & terms of use: http://www.unicode.org/copyright.html
|
||||
# Copyright (C) 2010-2013, International Business Machines Corporation. All Rights Reserved.
|
||||
|
||||
# CFLAGS contains only anything end users should set
|
||||
CFLAGS =
|
||||
# CXXFLAGS contains only anything end users should set
|
||||
CXXFLAGS = -std=c++11
|
||||
# DEFS only contains those UCONFIG_CPPFLAGS which are not auto-set by platform.h
|
||||
DEFS =
|
||||
prefix = {prefix}
|
||||
exec_prefix = ${{prefix}}
|
||||
libdir = ${{exec_prefix}}\\lib
|
||||
includedir = ${{prefix}}\\include
|
||||
baselibs = -lpthread -lm
|
||||
UNICODE_VERSION=15.0
|
||||
ICUPREFIX=icu
|
||||
ICULIBSUFFIX=
|
||||
LIBICU=lib${{ICUPREFIX}}
|
||||
pkglibdir=${{libdir}}/icu${{ICULIBSUFFIX}}/73.1
|
||||
ICUDATA_NAME = icudt73l
|
||||
ICUDESC=International Components for Unicode
|
||||
|
||||
Version: 73.1
|
||||
Cflags: -I${{includedir}}
|
||||
Description: International Components for Unicode: Internationalization library
|
||||
Name: icu-i18n
|
||||
Libs: -L&{{libdir}} -licuin -licuuc -licudt"""
|
||||
|
||||
pkg_config_content = pkg_config_template.format(
|
||||
prefix=self.buildEnv.install_dir
|
||||
)
|
||||
|
||||
os.makedirs(
|
||||
pj(self.buildEnv.install_dir, "lib", "pkgconfig"), exist_ok=True
|
||||
)
|
||||
with open(
|
||||
pj(self.buildEnv.install_dir, "lib", "pkgconfig", "icu-i18n.pc"),
|
||||
mode="w",
|
||||
) as f:
|
||||
f.write(pkg_config_content)
|
||||
|
||||
else:
|
||||
|
||||
class Icu(Dependency):
|
||||
name = "icu4c"
|
||||
|
||||
class Source(ReleaseDownload):
|
||||
archive_src = Remotefile(
|
||||
"icu4c-73_2-src.tgz",
|
||||
"818a80712ed3caacd9b652305e01afc7fa167e6f2e94996da44b90c2ab604ce1",
|
||||
"https://github.com/unicode-org/icu/releases/download/release-73-2/icu4c-73_2-src.tgz",
|
||||
)
|
||||
archive_data = Remotefile(
|
||||
"icu4c-73_2-data.zip",
|
||||
"ca1ee076163b438461e484421a7679fc33a64cd0a54f9d4b401893fa1eb42701",
|
||||
"https://github.com/unicode-org/icu/releases/download/release-73-2/icu4c-73_2-data.zip",
|
||||
)
|
||||
|
||||
archives = [archive_src, archive_data]
|
||||
|
||||
def _extract(self, context):
|
||||
context.try_skip(self.extract_path)
|
||||
if os.path.exists(self.extract_path):
|
||||
shutil.rmtree(self.extract_path)
|
||||
extract_archive(
|
||||
pj(neutralEnv("archive_dir"), self.archive_src.name),
|
||||
neutralEnv("source_dir"),
|
||||
topdir=None,
|
||||
name=self.source_dir,
|
||||
)
|
||||
shutil.rmtree(
|
||||
pj(neutralEnv("source_dir"), self.source_dir, "source", "data")
|
||||
)
|
||||
|
@ -49,29 +138,18 @@ class Icu(Dependency):
|
|||
topdir="data",
|
||||
name="data",
|
||||
)
|
||||
extract_archive(
|
||||
pj(neutralEnv("archive_dir"), self.meson_patch.name),
|
||||
neutralEnv("source_dir"),
|
||||
topdir="icu",
|
||||
name=self.source_dir,
|
||||
)
|
||||
|
||||
patches = [
|
||||
"icu4c_fix_static_lib_name_mingw.patch",
|
||||
"icu4c_rpath.patch",
|
||||
"icu4c_wasm.patch",
|
||||
]
|
||||
|
||||
if platform.system() == "Windows":
|
||||
|
||||
class Builder(MesonBuilder):
|
||||
def set_env(self, env):
|
||||
env["ICU_DATA_FILTER_FILE"] = pj(
|
||||
os.path.dirname(os.path.realpath(__file__)),
|
||||
"icu4c_data_filter.json",
|
||||
extract_archive(
|
||||
pj(neutralEnv("archive_dir"), self.meson_patch.name),
|
||||
neutralEnv("source_dir"),
|
||||
topdir="icu",
|
||||
name=self.source_dir,
|
||||
)
|
||||
|
||||
else:
|
||||
patches = [
|
||||
"icu4c_fix_static_lib_name_mingw.patch",
|
||||
"icu4c_rpath.patch",
|
||||
"icu4c_wasm.patch",
|
||||
]
|
||||
|
||||
class Builder(MakeBuilder):
|
||||
subsource_dir = "source"
|
||||
|
|
Loading…
Reference in New Issue