From ee9c0b944c5e3778f863586aa797d72b08de12af Mon Sep 17 00:00:00 2001 From: Shane Carr Date: Fri, 24 Aug 2018 23:39:10 -0700 Subject: [PATCH] ICU-10923 Rewriting data build orchestration in Python. - Creates new Python package in icu4c/data/buildtool - Creates BUILRDULES.py in icu4c/data and icu4c/test/testdata, unified between Unix/Windows - Removes most data build orchestration rules from makedata.mak, testdata.mak, data/Makefile.in, and test/testdata/Makefile.in - Removes pool.res files and builds them on the fly instead --- .gitignore | 7 + icu4c/source/configure | 30 +- icu4c/source/configure.ac | 30 +- icu4c/source/data/BUILDRULES.py | 399 ++++++++++ icu4c/source/data/Makefile.in | 520 +----------- icu4c/source/data/buildtool/__init__.py | 82 ++ icu4c/source/data/buildtool/__main__.py | 176 +++++ .../data/buildtool/renderers/__init__.py | 10 + .../data/buildtool/renderers/makefile.py | 239 ++++++ .../data/buildtool/renderers/windirect.py | 78 ++ icu4c/source/data/buildtool/utils.py | 130 +++ icu4c/source/data/curr/pool.res | Bin 182692 -> 0 bytes icu4c/source/data/lang/pool.res | Bin 115932 -> 0 bytes icu4c/source/data/locales/pool.res | Bin 127644 -> 0 bytes icu4c/source/data/makedata.mak | 742 ++---------------- icu4c/source/data/region/pool.res | Bin 79168 -> 0 bytes icu4c/source/data/unit/pool.res | Bin 80072 -> 0 bytes icu4c/source/data/zone/pool.res | Bin 96608 -> 0 bytes icu4c/source/test/testdata/BUILDRULES.py | 227 ++++++ icu4c/source/test/testdata/Makefile.in | 101 +-- icu4c/source/test/testdata/testdata.mak | 153 +--- icu4c/source/tools/gencnval/gencnval.c | 27 +- icu4c/source/tools/genrb/genrb.cpp | 14 +- icu4c/source/tools/genrb/reslist.cpp | 7 +- icu4c/source/tools/makeconv/makeconv.cpp | 14 +- 25 files changed, 1528 insertions(+), 1458 deletions(-) create mode 100644 icu4c/source/data/BUILDRULES.py create mode 100644 icu4c/source/data/buildtool/__init__.py create mode 100644 icu4c/source/data/buildtool/__main__.py create mode 100644 icu4c/source/data/buildtool/renderers/__init__.py create mode 100644 icu4c/source/data/buildtool/renderers/makefile.py create mode 100644 icu4c/source/data/buildtool/renderers/windirect.py create mode 100644 icu4c/source/data/buildtool/utils.py delete mode 100644 icu4c/source/data/curr/pool.res delete mode 100644 icu4c/source/data/lang/pool.res delete mode 100644 icu4c/source/data/locales/pool.res delete mode 100644 icu4c/source/data/region/pool.res delete mode 100644 icu4c/source/data/unit/pool.res delete mode 100644 icu4c/source/data/zone/pool.res create mode 100644 icu4c/source/test/testdata/BUILDRULES.py diff --git a/.gitignore b/.gitignore index 37cd7b65cf5..3e39c5e8e22 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,8 @@ +# Global ignores +__pycache__/ +*.pyc + +# Specific file name ignores /.git icu4c/bin icu4c/bin32uwp @@ -77,6 +82,7 @@ icu4c/source/data/obj icu4c/source/data/out icu4c/source/data/packagedata icu4c/source/data/pkgdataMakefile +icu4c/source/data/rules.mk icu4c/source/data/uni-core-data icu4c/source/data/x64 icu4c/source/data/x86 @@ -621,6 +627,7 @@ icu4c/source/test/testdata/Makefile icu4c/source/test/testdata/out icu4c/source/test/testdata/pkgdata.inc icu4c/source/test/testdata/pkgdataMakefile +icu4c/source/test/testdata/rules.mk icu4c/source/test/testmap/*.d icu4c/source/test/testmap/Debug icu4c/source/test/testmap/Makefile diff --git a/icu4c/source/configure b/icu4c/source/configure index 1ed93bfcd78..0e354e2fcb1 100755 --- a/icu4c/source/configure +++ b/icu4c/source/configure @@ -4200,7 +4200,7 @@ fi #AC_CHECK_PROG(AUTOCONF, autoconf, autoconf, true) #AC_CHECK_PROG(STRIP, strip, strip, true) -for ac_prog in python3 +for ac_prog in python3 "py -3" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -9121,6 +9121,24 @@ $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi +if test -z "$PYTHON3"; +then + echo "" > data/rules.mk +else + echo "Spawning Python to generate data/rules.mk..." + PYTHONPATH="$srcdir/data" $PYTHON3 -m buildtool \ + --format gnumake \ + --seqmode parallel \ + --glob_dir "$srcdir/data" \ + > data/rules.mk + echo "Spawning Python to generate test/testdata/rules.mk..." + PYTHONPATH="$srcdir/test/testdata:$srcdir/data" $PYTHON3 -m buildtool \ + --format gnumake \ + --seqmode parallel \ + --glob_dir "$srcdir/test/testdata" \ + > test/testdata/rules.mk +fi + echo echo "ICU for C/C++ $VERSION is ready to be built." echo "=== Important Notes: ===" @@ -9205,15 +9223,7 @@ fi if test -z "$PYTHON3"; then - echo "" - echo "NOTICE: Unable to find Python 3. ICU versions 64 and later will require Python 3 to build." - echo "See ICU-10923 for more information: https://unicode-org.atlassian.net/browse/ICU-10923" - echo "" -else - echo "" - echo "Found Python 3. You are all set for ICU 64, which will require Python 3 to build." - echo "For more info on Python 3 requirement, see: https://unicode-org.atlassian.net/browse/ICU-10923" - echo "" + echo "** Note: Python 3 not found. You will not be able to build data from source." fi $as_unset _CXX_CXXSUFFIX diff --git a/icu4c/source/configure.ac b/icu4c/source/configure.ac index 3b01890996e..eeff53543e7 100644 --- a/icu4c/source/configure.ac +++ b/icu4c/source/configure.ac @@ -195,7 +195,7 @@ fi #AC_CHECK_PROG(AUTOCONF, autoconf, autoconf, true) #AC_CHECK_PROG(STRIP, strip, strip, true) -AC_CHECK_PROGS(PYTHON3, python3) +AC_CHECK_PROGS(PYTHON3, python3 "py -3") # Check for the platform make AC_PATH_PROGS(U_MAKE, gmake gnumake, make) @@ -1385,6 +1385,24 @@ AC_CONFIG_FILES([icudefs.mk \ samples/cal/Makefile samples/layout/Makefile]) AC_OUTPUT +if test -z "$PYTHON3"; +then + echo "" > data/rules.mk +else + echo "Spawning Python to generate data/rules.mk..." + PYTHONPATH="$srcdir/data" $PYTHON3 -m buildtool \ + --format gnumake \ + --seqmode parallel \ + --glob_dir "$srcdir/data" \ + > data/rules.mk + echo "Spawning Python to generate test/testdata/rules.mk..." + PYTHONPATH="$srcdir/test/testdata:$srcdir/data" $PYTHON3 -m buildtool \ + --format gnumake \ + --seqmode parallel \ + --glob_dir "$srcdir/test/testdata" \ + > test/testdata/rules.mk +fi + echo echo "ICU for C/C++ $VERSION is ready to be built." echo "=== Important Notes: ===" @@ -1466,15 +1484,7 @@ fi if test -z "$PYTHON3"; then - echo "" - echo "NOTICE: Unable to find Python 3. ICU versions 64 and later will require Python 3 to build." - echo "See ICU-10923 for more information: https://unicode-org.atlassian.net/browse/ICU-10923" - echo "" -else - echo "" - echo "Found Python 3. You are all set for ICU 64, which will require Python 3 to build." - echo "For more info on Python 3 requirement, see: https://unicode-org.atlassian.net/browse/ICU-10923" - echo "" + echo "** Note: Python 3 not found. You will not be able to build data from source." fi $as_unset _CXX_CXXSUFFIX diff --git a/icu4c/source/data/BUILDRULES.py b/icu4c/source/data/BUILDRULES.py new file mode 100644 index 00000000000..a0489414528 --- /dev/null +++ b/icu4c/source/data/BUILDRULES.py @@ -0,0 +1,399 @@ +# Copyright (C) 2018 and later: Unicode, Inc. and others. +# License & terms of use: http://www.unicode.org/copyright.html + +from distutils.sysconfig import parse_makefile + +from buildtool import * +from buildtool import utils + +import sys + + +def generate(config, glob, common_vars): + requests = [] + pkg_exclusions = set() + + if len(glob("misc/*")) == 0: + print("Error: Cannot find data directory; please specify --glob_dir", file=sys.stderr) + exit(1) + + # DIRECTORIES + build_dirs = [ + "{OUT_DIR}", + "{OUT_DIR}/curr", + "{OUT_DIR}/lang", + "{OUT_DIR}/region", + "{OUT_DIR}/zone", + "{OUT_DIR}/unit", + "{OUT_DIR}/brkitr", + "{OUT_DIR}/coll", + "{OUT_DIR}/rbnf", + "{OUT_DIR}/translit", + "{TMP_DIR}", + "{TMP_DIR}/curr", + "{TMP_DIR}/lang", + "{TMP_DIR}/locales", + "{TMP_DIR}/region", + "{TMP_DIR}/zone", + "{TMP_DIR}/unit", + "{TMP_DIR}/coll", + "{TMP_DIR}/rbnf", + "{TMP_DIR}/translit", + "{TMP_DIR}/brkitr" + ] + + # UConv Name Aliases + if config.has_feature("cnvalias"): + input_file = InFile("mappings/convrtrs.txt") + output_file = OutFile("cnvalias.icu") + requests += [ + SingleExecutionRequest( + name = "cnvalias", + input_files = [input_file], + output_files = [output_file], + tool = IcuTool("gencnval"), + args = "-s {IN_DIR} -d {OUT_DIR} " + "{INPUT_FILES[0]}", + format_with = {} + ) + ] + + # CONFUSABLES + if config.has_feature("confusables"): + txt1 = InFile("unidata/confusables.txt") + txt2 = InFile("unidata/confusablesWholeScript.txt") + cfu = OutFile("confusables.cfu") + requests += [ + SingleExecutionRequest( + name = "confusables", + input_files = [txt1, txt2, OutFile("cnvalias.icu")], + output_files = [cfu], + tool = IcuTool("gencfu"), + args = "-d {OUT_DIR} -i {OUT_DIR} " + "-c -r {IN_DIR}/{INPUT_FILES[0]} -w {IN_DIR}/{INPUT_FILES[1]} " + "-o {OUTPUT_FILES[0]}", + format_with = {} + ) + ] + + # UConv Conversion Table Files + if config.has_feature("uconv"): + input_files = [InFile(filename) for filename in glob("mappings/*.ucm")] + output_files = [OutFile("%s.cnv" % v.filename[9:-4]) for v in input_files] + # TODO: handle BUILD_SPECIAL_CNV_FILES? Means to add --ignore-siso-check flag to makeconv + requests += [ + RepeatedOrSingleExecutionRequest( + name = "uconv", + dep_files = [], + input_files = input_files, + output_files = output_files, + tool = IcuTool("makeconv"), + args = "-s {IN_DIR} -d {OUT_DIR} -c {INPUT_FILE_PLACEHOLDER}", + format_with = {}, + repeat_with = { + "INPUT_FILE_PLACEHOLDER": [file.filename for file in input_files] + }, + flatten_with = { + "INPUT_FILE_PLACEHOLDER": " ".join(file.filename for file in input_files) + } + ) + ] + + # BRK Files + brkitr_brk_files = [] + if config.has_feature("brkitr"): + input_files = [InFile(filename) for filename in glob("brkitr/rules/*.txt")] + output_files = [OutFile("brkitr/%s.brk" % v.filename[13:-4]) for v in input_files] + brkitr_brk_files += output_files + requests += [ + RepeatedExecutionRequest( + name = "brkitr_brk", + dep_files = [OutFile("cnvalias.icu")], + input_files = input_files, + output_files = output_files, + tool = IcuTool("genbrk"), + args = "-d {OUT_DIR} -i {OUT_DIR} " + "-c -r {IN_DIR}/{INPUT_FILE} " + "-o {OUTPUT_FILE}", + format_with = {}, + repeat_with = {} + ) + ] + + # SPP FILES + if config.has_feature("stringprep"): + input_files = [InFile(filename) for filename in glob("sprep/*.txt")] + output_files = [OutFile("%s.spp" % v.filename[6:-4]) for v in input_files] + bundle_names = [v.filename[6:-4] for v in input_files] + requests += [ + RepeatedExecutionRequest( + name = "stringprep", + dep_files = [], + input_files = input_files, + output_files = output_files, + tool = IcuTool("gensprep"), + args = "-s {IN_DIR}/sprep -d {OUT_DIR} -i {OUT_DIR} " + "-b {BUNDLE_NAME} -m {IN_DIR}/unidata -u 3.2.0 {BUNDLE_NAME}.txt", + format_with = {}, + repeat_with = { + "BUNDLE_NAME": bundle_names + } + ) + ] + + # Dict Files + dict_files = [] + if config.has_feature("dictionaries"): + input_files = [InFile(filename) for filename in glob("brkitr/dictionaries/*.txt")] + output_files = [OutFile("brkitr/%s.dict" % v.filename[20:-4]) for v in input_files] + dict_files += output_files + extra_options_map = { + "brkitr/dictionaries/burmesedict.txt": "--bytes --transform offset-0x1000", + "brkitr/dictionaries/cjdict.txt": "--uchars", + "brkitr/dictionaries/khmerdict.txt": "--bytes --transform offset-0x1780", + "brkitr/dictionaries/laodict.txt": "--bytes --transform offset-0x0e80", + "brkitr/dictionaries/thaidict.txt": "--bytes --transform offset-0x0e00" + } + extra_optionses = [extra_options_map[v.filename] for v in input_files] + requests += [ + RepeatedExecutionRequest( + name = "dictionaries", + dep_files = [], + input_files = input_files, + output_files = output_files, + tool = IcuTool("gendict"), + args = "-i {OUT_DIR} " + "-c {EXTRA_OPTIONS} " + "{IN_DIR}/{INPUT_FILE} {OUT_DIR}/{OUTPUT_FILE}", + format_with = {}, + repeat_with = { + "EXTRA_OPTIONS": extra_optionses + } + ) + ] + + # NRM Files + if config.has_feature("normalization"): + input_files = [InFile(filename) for filename in glob("in/*.nrm")] + input_files.remove(InFile("in/nfc.nrm")) # nfc.nrm is pre-compiled into C++ + output_files = [OutFile(v.filename[3:]) for v in input_files] + requests += [ + RepeatedExecutionRequest( + name = "normalization", + dep_files = [], + input_files = input_files, + output_files = output_files, + tool = IcuTool("icupkg"), + args = "-t{ICUDATA_CHAR} {IN_DIR}/{INPUT_FILE} {OUT_DIR}/{OUTPUT_FILE}", + format_with = {}, + repeat_with = {} + ) + ] + + # Collation Dependency File (ucadata.icu) + if config.has_feature("coll"): + input_file = InFile("in/coll/ucadata-%s.icu" % config.coll_han_type()) + output_file = OutFile("coll/ucadata.icu") + requests += [ + SingleExecutionRequest( + name = "coll_ucadata", + input_files = [input_file], + output_files = [output_file], + tool = IcuTool("icupkg"), + args = "-t{ICUDATA_CHAR} {IN_DIR}/{INPUT_FILES[0]} {OUT_DIR}/{OUTPUT_FILES[0]}", + format_with = {} + ) + ] + + # Unicode Character Names + if config.has_feature("unames"): + input_file = InFile("in/unames.icu") + output_file = OutFile("unames.icu") + requests += [ + SingleExecutionRequest( + name = "unames", + input_files = [input_file], + output_files = [output_file], + tool = IcuTool("icupkg"), + args = "-t{ICUDATA_CHAR} {IN_DIR}/{INPUT_FILES[0]} {OUT_DIR}/{OUTPUT_FILES[0]}", + format_with = {} + ) + ] + + # Misc Data Res Files + if config.has_feature("misc"): + # TODO: Treat each misc file separately + input_files = [InFile(filename) for filename in glob("misc/*.txt")] + input_basenames = [v.filename[5:] for v in input_files] + output_files = [OutFile("%s.res" % v[:-4]) for v in input_basenames] + requests += [ + RepeatedExecutionRequest( + name = "misc", + dep_files = [], + input_files = input_files, + output_files = output_files, + tool = IcuTool("genrb"), + args = "-s {IN_DIR}/misc -d {OUT_DIR} -i {OUT_DIR} " + "-k -q " + "{INPUT_BASENAME}", + format_with = {}, + repeat_with = { + "INPUT_BASENAME": input_basenames + } + ) + ] + + # Specialized Locale Data Res Files + specialized_sub_dirs = [ + # (input dirname, output dirname, resfiles.mk path, mk version var, mk source var, use pool file, dep files) + ("locales", None, "resfiles.mk", "GENRB_CLDR_VERSION", "GENRB_SOURCE", True, + []), + ("curr", "curr", "resfiles.mk", "CURR_CLDR_VERSION", "CURR_SOURCE", True, + []), + ("lang", "lang", "resfiles.mk", "LANG_CLDR_VERSION", "LANG_SOURCE", True, + []), + ("region", "region", "resfiles.mk", "REGION_CLDR_VERSION", "REGION_SOURCE", True, + []), + ("zone", "zone", "resfiles.mk", "ZONE_CLDR_VERSION", "ZONE_SOURCE", True, + []), + ("unit", "unit", "resfiles.mk", "UNIT_CLDR_VERSION", "UNIT_SOURCE", True, + []), + # TODO: We should not need timezoneTypes.res to build collation resource bundles. + # TODO: Maybe keyTypeData.res should be baked into the common library. + ("coll", "coll", "colfiles.mk", "COLLATION_CLDR_VERSION", "COLLATION_SOURCE", False, + [OutFile("coll/ucadata.icu"), OutFile("timezoneTypes.res"), OutFile("keyTypeData.res")]), + ("brkitr", "brkitr", "brkfiles.mk", "BRK_RES_CLDR_VERSION", "BRK_RES_SOURCE", False, + brkitr_brk_files + dict_files), + ("rbnf", "rbnf", "rbnffiles.mk", "RBNF_CLDR_VERSION", "RBNF_SOURCE", False, + []), + ("translit", "translit", "trnsfiles.mk", None, "TRANSLIT_SOURCE", False, + []) + ] + + for sub_dir, out_sub_dir, resfile_name, version_var, source_var, use_pool_bundle, dep_files in specialized_sub_dirs: + out_prefix = "%s/" % out_sub_dir if out_sub_dir else "" + if config.has_feature(sub_dir): + # TODO: Clean this up for translit + if sub_dir == "translit": + input_files = [ + InFile("translit/root.txt"), + InFile("translit/en.txt"), + InFile("translit/el.txt") + ] + else: + input_files = [InFile(filename) for filename in glob("%s/*.txt" % sub_dir)] + input_basenames = [v.filename[len(sub_dir)+1:] for v in input_files] + output_files = [ + OutFile("%s%s.res" % (out_prefix, v[:-4])) + for v in input_basenames + ] + if use_pool_bundle: + input_pool_files = [OutFile("%spool.res" % out_prefix)] + use_pool_bundle_option = "--usePoolBundle {OUT_DIR}/{OUT_PREFIX}".format( + OUT_PREFIX = out_prefix, + **common_vars + ) + requests += [ + SingleExecutionRequest( + name = "%s_pool_write" % sub_dir, + input_files = dep_files + input_files, + output_files = input_pool_files, + tool = IcuTool("genrb"), + args = "-s {IN_DIR}/{IN_SUB_DIR} -d {OUT_DIR}/{OUT_PREFIX} -i {OUT_DIR} " + "--writePoolBundle -k " + "{INPUT_BASENAMES_SPACED}", + format_with = { + "IN_SUB_DIR": sub_dir, + "OUT_PREFIX": out_prefix, + "INPUT_BASENAMES_SPACED": " ".join(input_basenames) + } + ), + ] + else: + input_pool_files = [] + use_pool_bundle_option = "" + requests += [ + RepeatedOrSingleExecutionRequest( + name = "%s_res" % sub_dir, + dep_files = dep_files + input_pool_files, + input_files = input_files, + output_files = output_files, + tool = IcuTool("genrb"), + args = "-s {IN_DIR}/{IN_SUB_DIR} -d {OUT_DIR}/{OUT_PREFIX} -i {OUT_DIR} " + "{EXTRA_OPTION} -k " + "{INPUT_BASENAME}", + format_with = { + "IN_SUB_DIR": sub_dir, + "OUT_PREFIX": out_prefix, + "EXTRA_OPTION": use_pool_bundle_option + }, + repeat_with = { + "INPUT_BASENAME": input_basenames, + }, + flatten_with = { + "INPUT_BASENAME": " ".join(input_basenames) + } + ) + ] + # Generate index txt file + if sub_dir != "translit": + # TODO: Change .mk files to .py files so they can be loaded directly. + # Alternatively, figure out a way to require reading this file altogether. + # Right now, it is required for the index list file. + # Reading these files as .py will be required for Bazel. + mk_values = parse_makefile("{GLOB_DIR}/{IN_SUB_DIR}/{RESFILE_NAME}".format( + IN_SUB_DIR = sub_dir, + RESFILE_NAME = resfile_name, + **common_vars + )) + cldr_version = mk_values[version_var] if version_var and sub_dir == "locales" else None + locales = [v[:-4] for v in mk_values[source_var].split()] + pkg_exclusions |= set(output_files) - set(OutFile("%s%s.res" % (out_prefix, locale)) for locale in locales) + index_file_txt = TmpFile("{IN_SUB_DIR}/{INDEX_NAME}.txt".format( + IN_SUB_DIR = sub_dir, + **common_vars + )) + requests += [ + PrintFileRequest( + name = "%s_index_txt" % sub_dir, + output_file = index_file_txt, + content = utils.generate_index_file(locales, cldr_version, common_vars) + ) + ] + # Generate index res file + index_res_file = OutFile("{OUT_PREFIX}{INDEX_NAME}.res".format( + OUT_PREFIX = out_prefix, + **common_vars + )) + requests += [ + SingleExecutionRequest( + name = "%s_index_res" % sub_dir, + input_files = [index_file_txt], + output_files = [index_res_file], + tool = IcuTool("genrb"), + args = "-s {TMP_DIR}/{IN_SUB_DIR} -d {OUT_DIR}/{OUT_PREFIX} -i {OUT_DIR} " + "-k " + "{INDEX_NAME}.txt", + format_with = { + "IN_SUB_DIR": sub_dir, + "OUT_PREFIX": out_prefix + } + ) + ] + + # Finally, make the package. + all_output_files = list(sorted(utils.get_all_output_files(requests))) + icudata_list_file = TmpFile("icudata.lst") + requests += [ + PrintFileRequest( + name = "icudata_list", + output_file = icudata_list_file, + content = "\n".join(file.filename for file in all_output_files) + ), + VariableRequest( + name = "icudata_all_output_files", + input_files = all_output_files + [icudata_list_file] + ) + ] + + return (build_dirs, requests) diff --git a/icu4c/source/data/Makefile.in b/icu4c/source/data/Makefile.in index 688bcae3f15..d96351164f9 100644 --- a/icu4c/source/data/Makefile.in +++ b/icu4c/source/data/Makefile.in @@ -112,6 +112,10 @@ COMINCDIR=$(top_srcdir)/common/unicode SRCLISTDEPS=Makefile $(srcdir)/Makefile.in BUILD_DIRS=$(OUTDIR) $(MAINBUILDDIR) $(BUILDDIR) $(CURRBLDDIR) $(LANGBLDDIR) $(REGIONBLDDIR) $(ZONEBLDDIR) $(UNITBLDDIR) $(BRKBLDDIR) $(COLBLDDIR) $(RBNFBLDDIR) $(TRANSLITBLDDIR) $(OUTTMPDIR) $(OUTTMPDIR_390STUB) $(OUTTMPDIR)/$(CURR_TREE) $(OUTTMPDIR)/$(LANG_TREE) $(OUTTMPDIR)/$(REGION_TREE) $(OUTTMPDIR)/$(ZONE_TREE) $(OUTTMPDIR)/$(UNIT_TREE) $(OUTTMPDIR)/$(COLLATION_TREE) $(OUTTMPDIR)/$(RBNF_TREE) $(OUTTMPDIR)/$(TRANSLIT_TREE) $(OUTTMPDIR)/$(BREAK_TREE) +# Variable names for rules.mk +OUT_DIR=$(BUILDDIR) +TMP_DIR=$(OUTTMPDIR) + # relative lib links from pkgdata are the same as for tmp TOOLDIR=$(top_builddir)/tools @@ -240,128 +244,9 @@ package390: $(OUTTMPDIR)/icudata390.lst $(PKGDATA_LIST) ./icupkg.inc packagedata cp $(ICUPKGDATA_OUTDIR)/$(LIB_ICUDATA_NAME)$(STUB_SUFFIX).$(SO) $(top_builddir)/stubdata/$(LIB_ICUDATA_NAME)$(STUB_SUFFIX).$(SO) -##### Define all the data files. the build rule that depends on them is below. -# X_FILES_SHORT = just the base names (for lists) -# X_FILES = full paths (for dependency) +## Include the main build rules for data files +include $(top_builddir)/$(subdir)/rules.mk -## DAT files - Misc. data files. -# 2005-may-05 Removed Unicode properties files (unorm.icu, uprops.icu, ucase.icu, ubidi.icu) -# from data build. See Jitterbug 4497. (makedata.mak revision 1.117) -# 2010-dec Removed pnames.icu. -# These are now hardcoded in ICU4C and only loaded in ICU4J. -# -DAT_FILES_SHORT=unames.icu cnvalias.icu coll/ucadata.icu nfkc.nrm nfkc_cf.nrm uts46.nrm -DAT_FILES=$(DAT_FILES_SHORT:%=$(BUILDDIR)/%) - -## BRK files -BREAK_TREE=brkitr --include $(BRKSRCDIR)/brkfiles.mk --include $(BRKSRCDIR)/brklocal.mk -ALL_BRK_SOURCE= $(BRK_SOURCE) $(BRK_SOURCE_LOCAL) -BRK_FILES_SHORT=$(ALL_BRK_SOURCE:%.txt=$(BREAK_TREE)/%.brk) -BRK_FILES=$(ALL_BRK_SOURCE:%.txt=$(BRKBLDDIR)/%.brk) -ifdef BRK_DICT_SOURCE -ALL_DICT_SOURCE=$(BRK_DICT_SOURCE) $(BRK_DICT_SOURCE_LOCAL) -DICT_FILES_SHORT=$(ALL_DICT_SOURCE:%.txt=$(BREAK_TREE)/%.dict) -DICT_FILES=$(ALL_DICT_SOURCE:%.txt=$(BRKBLDDIR)/%.dict) -endif -ifdef BRK_RES_SOURCE -BRS_SRC= root.txt $(BRK_RES_SOURCE) $(BRK_RES_SOURCE_LOCAL) -BRS_SRC_FILES = $(BRS_SRC:%=$(BRKSRCDIR)/%) -INSTALLED_BRS_FILES = $(BRK_RES_SOURCE:%.txt=%) $(BRK_RES_SOURCE_LOCAL:%.txt=%) -endif - -## Confusables (Spoofing) files -ALL_CFU_SOURCE=$(UNICODEDATADIR)/confusables.txt $(UNICODEDATADIR)/confusablesWholeScript.txt -CFU_FILES_SHORT=confusables.cfu -CFU_FILES=$(BUILDDIR)/$(CFU_FILES_SHORT) - -## UCM files --include $(UCMSRCDIR)/ucmcore.mk --include $(UCMSRCDIR)/ucmfiles.mk --include $(UCMSRCDIR)/ucmebcdic.mk --include $(UCMSRCDIR)/ucmlocal.mk -ALL_UCM_SOURCE=ibm-37_P100-1995.ucm ibm-1047_P100-1995.ucm $(UCM_SOURCE_CORE) $(UCM_SOURCE_FILES) $(UCM_SOURCE_EBCDIC) $(UCM_SOURCE_LOCAL) -UCM_FILES = $(ALL_UCM_SOURCE:%=$(SRCDATADIR)/%) -CNV_FILES = $(ALL_UCM_SOURCE:%.ucm=$(BUILDDIR)/%.cnv) -CNV_FILES_SHORT = $(ALL_UCM_SOURCE:%.ucm=%.cnv) -UCM_SOURCE_SPECIAL=$(UCM_SOURCE_EBCDIC_IGNORE_SISO) $(UCM_SOURCE_EBCDIC_IGNORE_SISO_LOCAL) -UCM_FILES_SPECIAL=$(UCM_SOURCE_SPECIAL:%=$(UCMSRCDIR)/%) -CNV_FILES_SPECIAL=$(UCM_SOURCE_SPECIAL:%.ucm=$(BUILDDIR)/%.cnv) -CNV_FILES_SHORT_SPECIAL=$(UCM_SOURCE_SPECIAL:%.ucm=%.cnv) - -## RES files --include $(LOCSRCDIR)/resfiles.mk --include $(CURRSRCDIR)/resfiles.mk --include $(LANGSRCDIR)/resfiles.mk --include $(REGIONSRCDIR)/resfiles.mk --include $(ZONESRCDIR)/resfiles.mk --include $(UNITSRCDIR)/resfiles.mk --include $(COLSRCDIR)/colfiles.mk --include $(RBNFSRCDIR)/rbnffiles.mk --include $(TRANSLITSRCDIR)/trnsfiles.mk --include $(LOCSRCDIR)/reslocal.mk --include $(CURRSRCDIR)/reslocal.mk --include $(LANGSRCDIR)/reslocal.mk --include $(REGIONSRCDIR)/reslocal.mk --include $(ZONESRCDIR)/reslocal.mk --include $(UNITSRCDIR)/reslocal.mk --include $(COLSRCDIR)/collocal.mk --include $(BRKSRCDIR)/brslocal.mk --include $(RBNFSRCDIR)/rbnflocal.mk --include $(TRANSLITSRCDIR)/trnslocal.mk -ifdef GENRB_SOURCE -RES_SRC= root.txt $(GENRB_SOURCE) $(GENRB_ALIAS_SOURCE) $(GENRB_SOURCE_LOCAL) $(GENRB_ALIAS_SOURCE_LOCAL) -RES_SRC_FILES = $(RES_SRC:%=$(LOCSRCDIR)/%) -INSTALLED_RB_FILES = $(GENRB_SOURCE:%.txt=%) $(GENRB_SOURCE_LOCAL:%.txt=%) -endif -ifdef CURR_SOURCE -CURR_SRC= root.txt supplementalData.txt $(CURR_SOURCE) $(CURR_ALIAS_SOURCE) $(CURR_SOURCE_LOCAL) -CURR_SRC_FILES = $(CURR_SRC:%=$(CURRSRCDIR)/%) -INSTALLED_CURR_FILES = $(CURR_SOURCE:%.txt=%) $(CURR_SOURCE_LOCAL:%.txt=%) -endif -ifdef LANG_SOURCE -LANG_SRC= root.txt $(LANG_SOURCE) $(LANG_ALIAS_SOURCE) $(LANG_SOURCE_LOCAL) -LANG_SRC_FILES = $(LANG_SRC:%=$(LANGSRCDIR)/%) -INSTALLED_LANG_FILES = $(LANG_SOURCE:%.txt=%) $(LANG_SOURCE_LOCAL:%.txt=%) -endif -ifdef REGION_SOURCE -REGION_SRC= root.txt $(REGION_SOURCE) $(REGION_ALIAS_SOURCE) $(REGION_SOURCE_LOCAL) -REGION_SRC_FILES = $(REGION_SRC:%=$(REGIONSRCDIR)/%) -INSTALLED_REGION_FILES = $(REGION_SOURCE:%.txt=%) $(REGION_SOURCE_LOCAL:%.txt=%) -endif -ifdef ZONE_SOURCE -ZONE_SRC= root.txt $(ZONE_SOURCE) $(ZONE_ALIAS_SOURCE) $(ZONE_SOURCE_LOCAL) tzdbNames.txt -ZONE_SRC_FILES = $(ZONE_SRC:%=$(ZONESRCDIR)/%) -INSTALLED_ZONE_FILES = $(ZONE_SOURCE:%.txt=%) $(ZONE_SOURCE_LOCAL:%.txt=%) -endif -ifdef UNIT_SOURCE -UNIT_SRC= root.txt $(UNIT_SOURCE) $(UNIT_ALIAS_SOURCE) $(UNIT_SOURCE_LOCAL) -UNIT_SRC_FILES = $(UNIT_SRC:%=$(UNITSRCDIR)/%) -INSTALLED_UNIT_FILES = $(UNIT_SOURCE:%.txt=%) $(UNIT_SOURCE_LOCAL:%.txt=%) -endif -ifdef COLLATION_SOURCE -COL_SRC= root.txt $(COLLATION_SOURCE) $(COLLATION_ALIAS_SOURCE) $(COLLATION_SOURCE_LOCAL) -COL_SRC_FILES = $(COL_SRC:%=$(COLSRCDIR)/%) -INSTALLED_COL_FILES = $(COLLATION_SOURCE:%.txt=%) $(COLLATION_SOURCE_LOCAL:%.txt=%) -endif -ifdef RBNF_SOURCE -RBNF_SRC= root.txt $(RBNF_SOURCE) $(RBNF_ALIAS_SOURCE) $(RBNF_SOURCE_LOCAL) -RBNF_SRC_FILES = $(RBNF_SRC:%=$(RBNFSRCDIR)/%) -INSTALLED_RBNF_FILES = $(RBNF_SOURCE:%.txt=%) $(RBNF_SOURCE_LOCAL:%.txt=%) -endif -ifdef TRANSLIT_SOURCE -TRANSLIT_SRC= $(TRANSLIT_SOURCE) $(TRANSLIT_ALIAS_SOURCE) $(TRANSLIT_SOURCE_LOCAL) -TRANSLIT_SRC_FILES = $(TRANSLIT_SRC:%=$(TRANSLITSRCDIR)/%) -INSTALLED_TRANSLIT_FILES = $(TRANSLIT_SOURCE:%.txt=%) $(TRANSLIT_SOURCE_LOCAL:%.txt=%) -endif -GENRBOPTS=-k - -## MISC files --include $(MISCSRCDIR)/miscfiles.mk --include $(MISCSRCDIR)/misclocal.mk -MSC_SOURCE= $(MISC_SOURCE) $(MISC_SOURCE_LOCAL) -MSC_SRC_FILES=$(MSC_SOURCE:%=$(MISCSRCDIR)/%) ifeq ($(ENABLE_SO_VERSION_DATA),1) ifeq ($(PKGDATA_MODE),dll) @@ -375,72 +260,21 @@ endif endif endif -INDEX_NAME=res_index -INDEX_FILE=$(OUTTMPDIR)/$(INDEX_NAME).txt +PKGDATA_LIST = $(TMP_DIR)/icudata.lst -ALL_RES_SRC= $(RES_SRC) $(TRNS_SOURCE) $(MSC_SOURCE) -RES_FILES = $(ALL_RES_SRC:%.txt=$(BUILDDIR)/%.res) $(BUILDDIR)/$(INDEX_NAME).res $(BUILDDIR)/pool.res -RES_FILES_SHORT = $(ALL_RES_SRC:%.txt=%.res) $(INDEX_NAME).res pool.res -PKGDATA_LIST = $(OUTTMPDIR)/icudata.lst -CURR_TREE=curr -CURR_INDEX_FILE=$(OUTTMPDIR)/$(CURR_TREE)/$(INDEX_NAME).txt -CURR_FILES = $(CURR_SRC:%.txt=$(CURRBLDDIR)/%.res) $(CURRBLDDIR)/$(INDEX_NAME).res $(CURRBLDDIR)/pool.res -CURR_FILES_SHORT = $(CURR_SRC:%.txt=$(CURR_TREE)/%.res) $(CURR_TREE)/$(INDEX_NAME).res $(CURR_TREE)/pool.res +##### Define all the data files. the build rule that depends on them is below. +# X_FILES_SHORT = just the base names (for lists) +# X_FILES = full paths (for dependency) -LANG_TREE=lang -LANG_INDEX_FILE=$(OUTTMPDIR)/$(LANG_TREE)/$(INDEX_NAME).txt -LANG_FILES = $(LANG_SRC:%.txt=$(LANGBLDDIR)/%.res) $(LANGBLDDIR)/$(INDEX_NAME).res $(LANGBLDDIR)/pool.res -LANG_FILES_SHORT = $(LANG_SRC:%.txt=$(LANG_TREE)/%.res) $(LANG_TREE)/$(INDEX_NAME).res $(LANG_TREE)/pool.res - -REGION_TREE=region -REGION_INDEX_FILE=$(OUTTMPDIR)/$(REGION_TREE)/$(INDEX_NAME).txt -REGION_FILES = $(REGION_SRC:%.txt=$(REGIONBLDDIR)/%.res) $(REGIONBLDDIR)/$(INDEX_NAME).res $(REGIONBLDDIR)/pool.res -REGION_FILES_SHORT = $(REGION_SRC:%.txt=$(REGION_TREE)/%.res) $(REGION_TREE)/$(INDEX_NAME).res $(REGION_TREE)/pool.res - -ZONE_TREE=zone -ZONE_INDEX_FILE=$(OUTTMPDIR)/$(ZONE_TREE)/$(INDEX_NAME).txt -ZONE_FILES = $(ZONE_SRC:%.txt=$(ZONEBLDDIR)/%.res) $(ZONEBLDDIR)/$(INDEX_NAME).res $(ZONEBLDDIR)/pool.res -ZONE_FILES_SHORT = $(ZONE_SRC:%.txt=$(ZONE_TREE)/%.res) $(ZONE_TREE)/$(INDEX_NAME).res $(ZONE_TREE)/pool.res - -UNIT_TREE=unit -UNIT_INDEX_FILE=$(OUTTMPDIR)/$(UNIT_TREE)/$(INDEX_NAME).txt -UNIT_FILES = $(UNIT_SRC:%.txt=$(UNITBLDDIR)/%.res) $(UNITBLDDIR)/$(INDEX_NAME).res $(UNITBLDDIR)/pool.res -UNIT_FILES_SHORT = $(UNIT_SRC:%.txt=$(UNIT_TREE)/%.res) $(UNIT_TREE)/$(INDEX_NAME).res $(UNIT_TREE)/pool.res - -COLLATION_TREE=coll -COLLATION_INDEX_FILE=$(OUTTMPDIR)/$(COLLATION_TREE)/$(INDEX_NAME).txt -COLLATION_INDEX_RES=$(COLBLDDIR)/$(INDEX_NAME).res -COLLATION_INDEX_RES_SHORT=$(COLLATION_TREE)/$(INDEX_NAME).res -COLLATION_FILES = $(COL_SRC:%.txt=$(COLBLDDIR)/%.res) $(COLLATION_INDEX_RES) -COLLATION_FILES_SHORT = $(COL_SRC:%.txt=$(COLLATION_TREE)/%.res) - -BRK_RES_INDEX_FILE=$(OUTTMPDIR)/$(BREAK_TREE)/$(INDEX_NAME).txt -BRK_RES_INDEX_RES=$(BRKBLDDIR)/$(INDEX_NAME).res -BRK_RES_INDEX_RES_SHORT=$(BREAK_TREE)/$(INDEX_NAME).res -BRK_RES_FILES = $(BRS_SRC:%.txt=$(BRKBLDDIR)/%.res) $(BRK_RES_INDEX_RES) -BRK_RES_FILES_SHORT = $(BRS_SRC:%.txt=$(BREAK_TREE)/%.res) - -RBNF_TREE=rbnf -RBNF_INDEX_FILE=$(OUTTMPDIR)/$(RBNF_TREE)/$(INDEX_NAME).txt -RBNF_INDEX_RES=$(RBNFBLDDIR)/$(INDEX_NAME).res -RBNF_INDEX_RES_SHORT=$(RBNF_TREE)/$(INDEX_NAME).res -RBNF_FILES = $(RBNF_SRC:%.txt=$(RBNFBLDDIR)/%.res) $(RBNF_INDEX_RES) -RBNF_FILES_SHORT = $(RBNF_SRC:%.txt=$(RBNF_TREE)/%.res) - -TRANSLIT_TREE=translit -#TRANSLIT_INDEX_FILE=$(OUTTMPDIR)/$(TRANSLIT_TREE)/$(INDEX_NAME).txt -#TRANSLIT_INDEX_RES=$(TRANSLITBLDDIR)/$(INDEX_NAME).res -#TRANSLIT_INDEX_RES_SHORT=$(TRANSLIT_TREE)/$(INDEX_NAME).res -TRANSLIT_FILES = $(TRANSLIT_SRC:%.txt=$(TRANSLITBLDDIR)/%.res) -TRANSLIT_FILES_SHORT = $(TRANSLIT_SRC:%.txt=$(TRANSLIT_TREE)/%.res) - -## SPP files --include $(SPREPSRCDIR)/sprepfiles.mk --include $(SPREPSRCDIR)/spreplocal.mk -ALL_SPREP_SOURCE=$(SPREP_SOURCE) $(SPREP_SOURCE_LOCAL) -SPREP_FILES = $(ALL_SPREP_SOURCE:%.txt=$(BUILDDIR)/%.spp) -SPREP_FILES_SHORT = $(ALL_SPREP_SOURCE:%.txt=%.spp) +## DAT files - Misc. data files. +# 2005-may-05 Removed Unicode properties files (unorm.icu, uprops.icu, ucase.icu, ubidi.icu) +# from data build. See Jitterbug 4497. (makedata.mak revision 1.117) +# 2010-dec Removed pnames.icu. +# These are now hardcoded in ICU4C and only loaded in ICU4J. +# +DAT_FILES_SHORT=unames.icu cnvalias.icu coll/ucadata.icu nfkc.nrm nfkc_cf.nrm uts46.nrm +DAT_FILES=$(DAT_FILES_SHORT:%=$(BUILDDIR)/%) ## All generated files ALL_FILES = $(DAT_FILES) $(CNV_FILES) $(CNV_FILES_SPECIAL) $(BRK_FILES) $(DICT_FILES) $(RES_FILES) $(INDEX_RES_FILE) $(CURR_FILES) $(LANG_FILES) $(REGION_FILES) $(ZONE_FILES) $(UNIT_FILES) $(COLLATION_FILES) $(BRK_RES_FILES) $(RBNF_FILES) $(TRANSLIT_FILES) $(SPREP_FILES) $(CFU_FILES) @@ -466,23 +300,8 @@ endif CLEANFILES = *~ icupkg.inc *.x ifeq ($(ICUDATA_SOURCE_ARCHIVE),) -build-local: build-dir $(SO_VERSION_DATA) $(ALL_FILES) $(PKGDATA_LIST) $(OS390LIST) +build-local: build-dir $(SO_VERSION_DATA) $(ICUDATA_ALL_OUTPUT_FILES) $(PKGDATA_LIST) $(OS390LIST) echo timestamp > $@ -$(PKGDATA_LIST): $(SRCLISTDEPS) - @echo "generating $@ (list of data files)" - @-$(RMV) $@ - @for file in $(COLL_FILES_LIST); do \ - echo $$file >> $@; \ - done; - @for file in $(BRK_FILES_LIST); do \ - echo $$file >> $@; \ - done; - @for file in $(LOCALE_FILES_LIST); do \ - echo $$file >> $@; \ - done; - @for file in $(MISC_FILES_LIST); do \ - echo $$file >> $@; \ - done; else build-local: build-dir $(SO_VERSION_DATA) $(PKGDATA_LIST) $(OS390LIST) echo timestamp > $@ @@ -517,279 +336,12 @@ ifneq ($(filter order-only,$(.FEATURES)),) $(ALL_FILES) $(ALL_INDEX_SRC_FILES): | build-dir endif -# Now, sections for building each kind of data. - -#################################################### DAT -# DAT FILES - -# cnvalias.icu -$(BUILDDIR)/cnvalias.icu: $(UCMSRCDIR)/convrtrs.txt $(TOOLBINDIR)/gencnval$(TOOLEXEEXT) - $(INVOKE) $(TOOLBINDIR)/gencnval -d $(BUILDDIR) $(UCMSRCDIR)/convrtrs.txt - -# Targets for prebuilt Unicode data -$(BUILDDIR)/%.icu: $(SRCDATADIR)/in/%.icu - $(INVOKE) $(TOOLBINDIR)/icupkg -t$(ICUDATA_CHAR) $< $@ - -$(BUILDDIR)/%.nrm: $(SRCDATADIR)/in/%.nrm - $(INVOKE) $(TOOLBINDIR)/icupkg -t$(ICUDATA_CHAR) $< $@ - -$(BUILDDIR)/coll/ucadata.icu: $(SRCDATADIR)/in/coll/ucadata-unihan.icu - $(INVOKE) $(TOOLBINDIR)/icupkg -t$(ICUDATA_CHAR) $< $@ - -#################################################### SPP -# SPP FILES - -$(BUILDDIR)/%.spp: $(SPREPSRCDIR)/%.txt $(TOOLBINDIR)/gensprep$(TOOLEXEEXT) $(BUILDDIR)/unames.icu - $(INVOKE) $(TOOLBINDIR)/gensprep -d $(BUILDDIR) -i $(BUILDDIR) -s $(SPREPSRCDIR) -b $(@F:%.spp=%) -m $(UNICODEDATADIR) -u 3.2.0 $( $@; \ - echo "$(INDEX_NAME):table(nofallback) {" >> $@; \ - echo " InstalledLocales {" >> $@; \ - for file in $(INSTALLED_CURR_FILES); do \ - echo " $$file {\"\"}" >> $@; \ - done; \ - echo " }" >> $@; \ - echo "}" >> $@; - -### lang res -$(LANGBLDDIR)/%.res: $(LANGSRCDIR)/%.txt $(TOOLBINDIR)/genrb$(TOOLEXEEXT) $(DAT_FILES) | $(BUILDDIR)/cnvalias.icu - $(INVOKE) $(TOOLBINDIR)/genrb --usePoolBundle $(GENRBOPTS) -i $(BUILDDIR) -s $(LANGSRCDIR) -d $(LANGBLDDIR) $( $@; \ - echo "$(INDEX_NAME):table(nofallback) {" >> $@; \ - echo " InstalledLocales {" >> $@; \ - for file in $(INSTALLED_LANG_FILES); do \ - echo " $$file {\"\"}" >> $@; \ - done; \ - echo " }" >> $@; \ - echo "}" >> $@; - -### region res -$(REGIONBLDDIR)/%.res: $(REGIONSRCDIR)/%.txt $(TOOLBINDIR)/genrb$(TOOLEXEEXT) $(DAT_FILES) | $(BUILDDIR)/cnvalias.icu - $(INVOKE) $(TOOLBINDIR)/genrb --usePoolBundle $(GENRBOPTS) -i $(BUILDDIR) -s $(REGIONSRCDIR) -d $(REGIONBLDDIR) $( $@; \ - echo "$(INDEX_NAME):table(nofallback) {" >> $@; \ - echo " InstalledLocales {" >> $@; \ - for file in $(INSTALLED_REGION_FILES); do \ - echo " $$file {\"\"}" >> $@; \ - done; \ - echo " }" >> $@; \ - echo "}" >> $@; - -### zone res -$(ZONEBLDDIR)/%.res: $(ZONESRCDIR)/%.txt $(TOOLBINDIR)/genrb$(TOOLEXEEXT) $(DAT_FILES) | $(BUILDDIR)/cnvalias.icu - $(INVOKE) $(TOOLBINDIR)/genrb --usePoolBundle $(GENRBOPTS) -i $(BUILDDIR) -s $(ZONESRCDIR) -d $(ZONEBLDDIR) $( $@; \ - echo "$(INDEX_NAME):table(nofallback) {" >> $@; \ - echo " InstalledLocales {" >> $@; \ - for file in $(INSTALLED_ZONE_FILES); do \ - echo " $$file {\"\"}" >> $@; \ - done; \ - echo " }" >> $@; \ - echo "}" >> $@; - -### unit res -$(UNITBLDDIR)/%.res: $(UNITSRCDIR)/%.txt $(TOOLBINDIR)/genrb$(TOOLEXEEXT) $(DAT_FILES) - $(INVOKE) $(TOOLBINDIR)/genrb --usePoolBundle $(GENRBOPTS) -i $(BUILDDIR) -s $(UNITSRCDIR) -d $(UNITBLDDIR) $( $@; \ - echo "$(INDEX_NAME):table(nofallback) {" >> $@; \ - echo " InstalledLocales {" >> $@; \ - for file in $(INSTALLED_UNIT_FILES); do \ - echo " $$file {\"\"}" >> $@; \ - done; \ - echo " }" >> $@; \ - echo "}" >> $@; - -### collation res -$(COLBLDDIR)/%.res: $(COLSRCDIR)/%.txt $(TOOLBINDIR)/genrb$(TOOLEXEEXT) $(DAT_FILES) | $(BUILDDIR)/cnvalias.icu - $(INVOKE) $(TOOLBINDIR)/genrb $(GENRBOPTS) -i $(BUILDDIR) -s $(COLSRCDIR) -d $(COLBLDDIR) $( $@; \ - echo "$(INDEX_NAME):table(nofallback) {" >> $@; \ - echo " InstalledLocales {" >> $@; \ - for file in $(INSTALLED_COL_FILES); do \ - echo " $$file {\"\"}" >> $@; \ - done; \ - echo " }" >> $@; \ - echo "}" >> $@; - -### brk res -$(BRKBLDDIR)/%.res: $(BRKSRCDIR)/%.txt $(TOOLBINDIR)/genrb$(TOOLEXEEXT) $(BRK_FILES) $(DICT_FILES) $(DAT_FILES) | $(BUILDDIR)/cnvalias.icu - $(INVOKE) $(TOOLBINDIR)/genrb $(GENRBOPTS) -i $(BUILDDIR) -s $(BRKSRCDIR) -d $(BRKBLDDIR) $( $@; \ - echo "$(INDEX_NAME):table(nofallback) {" >> $@; \ - echo " InstalledLocales {" >> $@; \ - for file in $(INSTALLED_BRS_FILES); do \ - echo " $$file {\"\"}" >> $@; \ - done; \ - echo " }" >> $@; \ - echo "}" >> $@; - -### RBNF res -$(RBNFBLDDIR)/%.res: $(RBNFSRCDIR)/%.txt $(TOOLBINDIR)/genrb$(TOOLEXEEXT) $(DAT_FILES) | $(BUILDDIR)/cnvalias.icu - $(INVOKE) $(TOOLBINDIR)/genrb $(GENRBOPTS) -i $(BUILDDIR) -s $(RBNFSRCDIR) -d $(RBNFBLDDIR) $( $@; \ - echo "$(INDEX_NAME):table(nofallback) {" >> $@; \ - echo " InstalledLocales {" >> $@; \ - for file in $(INSTALLED_RBNF_FILES); do \ - echo " $$file {\"\"}" >> $@; \ - done; \ - echo " }" >> $@; \ - echo "}" >> $@; - -### TRANSLIT res -$(TRANSLITBLDDIR)/%.res: $(TRANSLITSRCDIR)/%.txt $(TOOLBINDIR)/genrb$(TOOLEXEEXT) $(DAT_FILES) | $(BUILDDIR)/cnvalias.icu - $(INVOKE) $(TOOLBINDIR)/genrb $(GENRBOPTS) -i $(BUILDDIR) -s $(TRANSLITSRCDIR) -d $(TRANSLITBLDDIR) $( $@; \ - echo "$(INDEX_NAME):table(nofallback) {" >> $@; \ - echo " CLDRVersion { \"$(GENRB_CLDR_VERSION)\" }" >> $@; \ - echo " InstalledLocales {" >> $@; \ - for file in $(INSTALLED_RB_FILES); do \ - echo " $$file {\"\"}" >> $@; \ - done; \ - echo " }" >> $@; \ - echo "}" >> $@; - -clean-resindex: - -$(RMV) $(BUILDDIR)/$(INDEX_NAME).txt $(PKGDATA_LIST) - -$(BUILDDIR)/$(INDEX_NAME).res: $(INDEX_FILE) $(TOOLBINDIR)/genrb$(TOOLEXEEXT) | $(BUILDDIR)/cnvalias.icu - $(INVOKE) $(TOOLBINDIR)/genrb $(GENRBOPTS) -i $(BUILDDIR) -d $(BUILDDIR) $(INDEX_FILE) - # The core Unicode properties files (pnames.icu, uprops.icu, ucase.icu, ubidi.icu) # are hardcoded in the common DLL and therefore not included in the data package any more. # They are not built by default but need to be built for ICU4J data and for getting the .c source files @@ -857,6 +384,13 @@ ICU4J_TZDATA_FILES=zoneinfo64 metaZones timezoneTypes windowsZones ICU4J_DATA_DIRNAME=com/ibm/icu/impl/data/$(ICUDATA_BASENAME_VERSION)b ICU4J_TZDATA_PATHS=$(ICU4J_TZDATA_FILES:%="$(ICU4J_DATA_DIRNAME)/%.res") +# Targets for prebuilt Unicode data +$(BUILDDIR)/%.icu: $(SRCDATADIR)/in/%.icu | $(DIRS) + $(INVOKE) $(TOOLBINDIR)/icupkg -t$(ICUDATA_CHAR) $< $@ + +$(BUILDDIR)/nfc.nrm: $(SRCDATADIR)/in/nfc.nrm | $(DIRS) + $(INVOKE) $(TOOLBINDIR)/icupkg -t$(ICUDATA_CHAR) $< $@ + # generate icu4j-related data to $(OUTDIR)/icu4j/com/ibm/icu/impl/data/... generate-data: build-dir packagedata $(OUTTMPDIR)/$(ICUDATA_PLATFORM_NAME).dat uni-core-data mkdir -p $(OUTDIR)/icu4j/$(ICU4J_DATA_DIRNAME) diff --git a/icu4c/source/data/buildtool/__init__.py b/icu4c/source/data/buildtool/__init__.py new file mode 100644 index 00000000000..60855c07a08 --- /dev/null +++ b/icu4c/source/data/buildtool/__init__.py @@ -0,0 +1,82 @@ +# Copyright (C) 2018 and later: Unicode, Inc. and others. +# License & terms of use: http://www.unicode.org/copyright.html + +from collections import namedtuple + +AVAILABLE_FEATURES = [ + "confusables", + "cnvalias", + "uconv", + "brkitr", + "stringprep", + "dictionaries", + "normalization", + "coll", + "unames", + "misc", + "locales", + "curr", + "lang", + "region", + "zone", + "unit", + "rbnf", + "translit" +] + +InFile = namedtuple("InFile", ["filename"]) +TmpFile = namedtuple("TmpFile", ["filename"]) +OutFile = namedtuple("OutFile", ["filename"]) +PkgFile = namedtuple("PkgFile", ["filename"]) + +IcuTool = namedtuple("IcuTool", ["name"]) +SystemTool = namedtuple("SystemTool", ["name"]) + +SingleExecutionRequest = namedtuple("SingleExecutionRequest", [ + "name", + "input_files", + "output_files", + "tool", + "args", + "format_with" +]) + +RepeatedExecutionRequest = namedtuple("RepeatedExecutionRequest", [ + "name", + "dep_files", + "input_files", + "output_files", + "tool", + "args", + "format_with", + "repeat_with" +]) + +RepeatedOrSingleExecutionRequest = namedtuple("RepeatedOrSingleExecutionRequest", [ + "name", + "dep_files", + "input_files", + "output_files", + "tool", + "args", + "format_with", + "repeat_with", + "flatten_with" +]) + +PrintFileRequest = namedtuple("PrintFileRequest", [ + "name", + "output_file", + "content" +]) + +CopyRequest = namedtuple("CopyRequest", [ + "name", + "input_file", + "output_file" +]) + +VariableRequest = namedtuple("VariableRequest", [ + "name", + "input_files" +]) diff --git a/icu4c/source/data/buildtool/__main__.py b/icu4c/source/data/buildtool/__main__.py new file mode 100644 index 00000000000..95b7a0b3331 --- /dev/null +++ b/icu4c/source/data/buildtool/__main__.py @@ -0,0 +1,176 @@ +# Copyright (C) 2018 and later: Unicode, Inc. and others. +# License & terms of use: http://www.unicode.org/copyright.html + +import argparse +import glob as pyglob +import sys + +from . import * +from .renderers import makefile, windirect +from . import utils +import BUILDRULES + +flag_parser = argparse.ArgumentParser( + description = """Generates rules for building ICU binary data files from text +and other input files in source control. + +You can select features using either the --whitelist or --blacklist option. +Available features include: + +{AVAILABLE_FEATURES} +""".format(AVAILABLE_FEATURES = "\n".join(" %s" % v for v in AVAILABLE_FEATURES)), + formatter_class = argparse.RawDescriptionHelpFormatter +) +flag_parser.add_argument( + "--format", + help = "How to output the rules to run to build ICU data.", + choices = ["gnumake", "windirect"], + required = True +) +flag_parser.add_argument( + "--glob_dir", + help = "Path to data input folder (icu4c/source/data) when this script is being run.", + default = "." +) +flag_parser.add_argument( + "--in_dir", + help = "Path to data input folder (icu4c/source/data) for file processing. Not used in gnumake format.", + default = "." +) +flag_parser.add_argument( + "--out_dir", + help = "Path to where to save output data files. Not used in gnumake format.", + default = "icudata" +) +flag_parser.add_argument( + "--tmp_dir", + help = "Path to where to save temporary files. Not used in gnumake format.", + default = "icutmp" +) +flag_parser.add_argument( + "--tool_dir", + help = "Path to where to find binary tools (genrb, genbrk, etc). Used for 'windirect' format only.", + default = "../tool" +) +flag_parser.add_argument( + "--tool_cfg", + help = "The build configuration of the tools. Used for 'windirect' format only.", + default = "x86/Debug" +) +flag_parser.add_argument( + "--seqmode", + help = "Whether to optimize rules to be run sequentially (fewer threads) or in parallel (many threads).", + choices = ["sequential", "parallel"], + default = "parallel" +) +flag_parser.add_argument( + "--collation_ucadata", + help = "Which data set to use for ucadata in collation.", + choices = ["unihan", "implicithan"], + default = "unihan" +) +features_group = flag_parser.add_mutually_exclusive_group() +features_group.add_argument( + "--blacklist", + metavar = "FEATURE", + help = "A list of one or more features to disable; all others will be enabled by default. New users should favor a blacklist to ensure important data is not left out.", + nargs = "+", + choices = AVAILABLE_FEATURES +) +features_group.add_argument( + "--whitelist", + metavar = "FEATURE", + help = "A list of one or more features to enable; all others will be disabled by default.", + nargs = "+", + choices = AVAILABLE_FEATURES +) + + +class Config(object): + + def __init__(self, args): + if args.whitelist: + self._feature_set = set(args.whitelist) + elif args.blacklist: + self._feature_set = set(AVAILABLE_FEATURES) - set(args.blacklist) + else: + self._feature_set = set(AVAILABLE_FEATURES) + self._max_parallel = (args.seqmode == "parallel") + self._coll_han_type = args.collation_ucadata + + def has_feature(self, feature_name): + assert feature_name in AVAILABLE_FEATURES + return feature_name in self._feature_set + + def max_parallel(self): + return self._max_parallel + + def coll_han_type(self): + # Either "unihan" or "implicithan" + return self._coll_han_type + + +def main(): + args = flag_parser.parse_args() + config = Config(args) + + if args.format == "gnumake": + makefile_vars = { + "IN_DIR": "$(srcdir)", + "INDEX_NAME": "res_index" + } + makefile_env = ["ICUDATA_CHAR", "OUT_DIR", "TMP_DIR"] + common = { + key: "$(%s)" % key + for key in list(makefile_vars.keys()) + makefile_env + } + common["GLOB_DIR"] = args.glob_dir + else: + common = { + "GLOB_DIR": args.glob_dir, + "IN_DIR": args.in_dir, + "OUT_DIR": args.out_dir, + "TMP_DIR": args.tmp_dir, + "INDEX_NAME": "res_index", + # TODO: Pull this from configure script: + "ICUDATA_CHAR": "l" + } + + def glob(pattern): + result_paths = pyglob.glob("{IN_DIR}/{PATTERN}".format( + IN_DIR = args.glob_dir, + PATTERN = pattern + )) + # For the purposes of buildtool, force Unix-style directory separators. + return [v.replace("\\", "/")[len(args.glob_dir)+1:] for v in sorted(result_paths)] + + build_dirs, raw_requests = BUILDRULES.generate(config, glob, common) + requests = [] + for req in raw_requests: + if isinstance(req, RepeatedOrSingleExecutionRequest): + requests.append(utils.flatten(req, config.max_parallel())) + else: + requests.append(req) + + if args.format == "gnumake": + print(makefile.get_gnumake_rules( + build_dirs, + requests, + makefile_vars, + common_vars = common + )) + elif args.format == "windirect": + return windirect.run( + build_dirs, + requests, + common_vars = common, + tool_dir = args.tool_dir, + tool_cfg = args.tool_cfg + ) + else: + print("Format not supported: %s" % args.format) + return 1 + return 0 + +if __name__ == "__main__": + exit(main()) diff --git a/icu4c/source/data/buildtool/renderers/__init__.py b/icu4c/source/data/buildtool/renderers/__init__.py new file mode 100644 index 00000000000..7c402c2b78b --- /dev/null +++ b/icu4c/source/data/buildtool/renderers/__init__.py @@ -0,0 +1,10 @@ +# Copyright (C) 2018 and later: Unicode, Inc. and others. +# License & terms of use: http://www.unicode.org/copyright.html + +from collections import namedtuple + +MakeRule = namedtuple("MakeRule", ["name", "dep_literals", "dep_files", "output_file", "cmds"]) + +MakeFilesVar = namedtuple("MakeFilesVar", ["name", "files"]) + +MakeStringVar = namedtuple("MakeStringVar", ["name", "content"]) diff --git a/icu4c/source/data/buildtool/renderers/makefile.py b/icu4c/source/data/buildtool/renderers/makefile.py new file mode 100644 index 00000000000..6d028b58a2b --- /dev/null +++ b/icu4c/source/data/buildtool/renderers/makefile.py @@ -0,0 +1,239 @@ +# Copyright (C) 2018 and later: Unicode, Inc. and others. +# License & terms of use: http://www.unicode.org/copyright.html + +from . import * +from .. import * +from .. import utils + +def get_gnumake_rules(build_dirs, requests, makefile_vars, **kwargs): + makefile_string = "" + + # Common Variables + common_vars = kwargs["common_vars"] + for key, value in makefile_vars.items(): + makefile_string += "{KEY} = {VALUE}\n".format( + KEY = key, + VALUE = value + ) + makefile_string += "\n" + + # Directories + dirs_timestamp_file = "{TMP_DIR}/dirs.timestamp".format(**common_vars) + makefile_string += "DIRS = {TIMESTAMP_FILE}\n\n".format( + TIMESTAMP_FILE = dirs_timestamp_file + ) + makefile_string += "{TIMESTAMP_FILE}:\n\t$(MKINSTALLDIRS) {ALL_DIRS}\n\techo timestamp > {TIMESTAMP_FILE}\n\n".format( + TIMESTAMP_FILE = dirs_timestamp_file, + ALL_DIRS = " ".join(build_dirs).format(**common_vars) + ) + + # Generate Rules + make_rules = [] + for request in requests: + make_rules += get_gnumake_rules_helper(request, **kwargs) + + # Main Commands + for rule in make_rules: + if isinstance(rule, MakeFilesVar): + makefile_string += "{NAME} = {FILE_LIST}\n\n".format( + NAME = rule.name, + FILE_LIST = files_to_makefile(rule.files, wrap = True, **kwargs), + ) + continue + + if isinstance(rule, MakeStringVar): + makefile_string += "define {NAME}\n{CONTENT}\nendef\nexport {NAME}\n\n".format( + NAME = rule.name, + CONTENT = rule.content + ) + continue + + assert isinstance(rule, MakeRule) + header_line = "{OUT_FILE}: {DEP_FILES} {DEP_LITERALS} | $(DIRS)".format( + OUT_FILE = files_to_makefile([rule.output_file], **kwargs), + DEP_FILES = files_to_makefile(rule.dep_files, wrap = True, **kwargs), + DEP_LITERALS = " ".join(rule.dep_literals) + ) + + if len(rule.cmds) == 0: + makefile_string += "%s\n\n" % header_line + continue + + makefile_string += "{HEADER_LINE}\n{RULE_LINES}\n\n".format( + HEADER_LINE = header_line, + RULE_LINES = "\n".join("\t%s" % cmd for cmd in rule.cmds) + ) + + return makefile_string + +def files_to_makefile(files, common_vars, wrap = False, **kwargs): + if len(files) == 0: + return "" + dirnames = [utils.dir_for(file).format(**common_vars) for file in files] + join_str = " \\\n\t\t" if wrap and len(files) > 2 else " " + if len(files) == 1: + return "%s/%s" % (dirnames[0], files[0].filename) + elif len(set(dirnames)) == 1: + return "$(addprefix %s/,%s)" % (dirnames[0], join_str.join(file.filename for file in files)) + else: + return join_str.join("%s/%s" % (d, f.filename) for d,f in zip(dirnames, files)) + +def get_gnumake_rules_helper(request, common_vars, **kwargs): + + if isinstance(request, PrintFileRequest): + var_name = "%s_CONTENT" % request.name.upper() + return [ + MakeStringVar( + name = var_name, + content = request.content + ), + MakeRule( + name = request.name, + dep_literals = [], + dep_files = [], + output_file = request.output_file, + cmds = [ + "echo \"$${VAR_NAME}\" > {MAKEFILENAME}".format( + VAR_NAME = var_name, + MAKEFILENAME = files_to_makefile([request.output_file], common_vars), + **common_vars + ) + ] + ) + ] + + + if isinstance(request, CopyRequest): + return [ + MakeRule( + name = request.name, + dep_literals = [], + dep_files = [request.input_file], + output_file = request.output_file, + cmds = ["cp %s %s" % ( + files_to_makefile([request.input_file], common_vars), + files_to_makefile([request.output_file], common_vars)) + ] + ) + ] + + if isinstance(request, VariableRequest): + return [ + MakeFilesVar( + name = request.name.upper(), + files = request.input_files + ) + ] + + if request.tool.name == "make": + cmd_template = "$(MAKE) {ARGS}" + elif request.tool.name == "gentest": + cmd_template = "$(INVOKE) $(GENTEST) {ARGS}" + else: + assert isinstance(request.tool, IcuTool) + cmd_template = "$(INVOKE) $(TOOLBINDIR)/{TOOL} {{ARGS}}".format( + TOOL = request.tool.name + ) + + if isinstance(request, SingleExecutionRequest): + cmd = utils.format_single_request_command(request, cmd_template, common_vars) + + if len(request.output_files) > 1: + # Special case for multiple output files: Makefile rules should have only one + # output file apiece. More information: + # https://www.gnu.org/software/automake/manual/html_node/Multiple-Outputs.html + timestamp_var_name = "%s_ALL" % request.name.upper() + timestamp_file = TmpFile("%s.timestamp" % request.name) + rules = [ + MakeFilesVar( + name = timestamp_var_name, + files = [timestamp_file] + ), + MakeRule( + name = "%s_all" % request.name, + dep_literals = [], + dep_files = request.input_files, + output_file = timestamp_file, + cmds = [ + cmd, + "echo timestamp > {MAKEFILENAME}".format( + MAKEFILENAME = files_to_makefile([timestamp_file], common_vars) + ) + ] + ) + ] + for i, file in enumerate(request.output_files): + rules += [ + MakeRule( + name = "%s_%d" % (request.name, i), + dep_literals = ["$(%s)" % timestamp_var_name], + dep_files = [], + output_file = file, + cmds = [] + ) + ] + return rules + + elif len(request.input_files) > 5: + # For nicer printing, for long input lists, use a helper variable. + dep_var_name = "%s_DEPS" % request.name.upper() + return [ + MakeFilesVar( + name = dep_var_name, + files = request.input_files + ), + MakeRule( + name = request.name, + dep_literals = ["$(%s)" % dep_var_name], + dep_files = [], + output_file = request.output_files[0], + cmds = [cmd] + ) + ] + + else: + return [ + MakeRule( + name = request.name, + dep_literals = [], + dep_files = request.input_files, + output_file = request.output_files[0], + cmds = [cmd] + ) + ] + + if isinstance(request, RepeatedExecutionRequest): + rules = [] + dep_literals = [] + # To keep from repeating the same dep files many times, make a variable. + if len(request.dep_files) > 0: + dep_var_name = "%s_DEPS" % request.name.upper() + dep_literals = ["$(%s)" % dep_var_name] + rules += [ + MakeFilesVar( + name = dep_var_name, + files = request.dep_files + ) + ] + # Add a rule for each individual file. + for loop_vars in utils.repeated_execution_request_looper(request): + (_, input_file, output_file) = loop_vars + name_suffix = input_file[input_file.filename.rfind("/")+1:input_file.filename.rfind(".")] + cmd = utils.format_repeated_request_command( + request, + cmd_template, + loop_vars, + common_vars + ) + rules += [ + MakeRule( + name = "%s_%s" % (request.name, name_suffix), + dep_literals = dep_literals, + dep_files = [input_file], + output_file = output_file, + cmds = [cmd] + ) + ] + return rules + + assert False diff --git a/icu4c/source/data/buildtool/renderers/windirect.py b/icu4c/source/data/buildtool/renderers/windirect.py new file mode 100644 index 00000000000..b85243ef202 --- /dev/null +++ b/icu4c/source/data/buildtool/renderers/windirect.py @@ -0,0 +1,78 @@ +# Copyright (C) 2018 and later: Unicode, Inc. and others. +# License & terms of use: http://www.unicode.org/copyright.html + +from . import * +from .. import * +from .. import utils + +import os +import shutil +import subprocess + +def run(build_dirs, requests, common_vars, **kwargs): + for bd in build_dirs: + os.makedirs(bd.format(**common_vars), exist_ok=True) + for request in requests: + status = run_helper(request, common_vars, **kwargs) + if status != 0: + print("!!! ERROR executing above command line: exit code %d" % status) + return 1 + print("windirect: All data build commands executed") + return 0 + +def run_helper(request, common_vars, tool_dir, tool_cfg, **kwargs): + if isinstance(request, PrintFileRequest): + output_path = "{DIRNAME}/{FILENAME}".format( + DIRNAME = utils.dir_for(request.output_file).format(**common_vars), + FILENAME = request.output_file.filename, + ) + print("Printing to file: %s" % output_path) + with open(output_path, "w") as f: + f.write(request.content) + return 0 + if isinstance(request, CopyRequest): + input_path = "{DIRNAME}/{FILENAME}".format( + DIRNAME = utils.dir_for(request.input_file).format(**common_vars), + FILENAME = request.input_file.filename, + ) + output_path = "{DIRNAME}/{FILENAME}".format( + DIRNAME = utils.dir_for(request.output_file).format(**common_vars), + FILENAME = request.output_file.filename, + ) + print("Copying file to: %s" % output_path) + shutil.copyfile(input_path, output_path) + return 0 + if isinstance(request, VariableRequest): + # No-op + return 0 + + assert isinstance(request.tool, IcuTool) + cmd_template = "{TOOL_DIR}/{TOOL}/{TOOL_CFG}/{TOOL}.exe {{ARGS}}".format( + TOOL_DIR = tool_dir, + TOOL_CFG = tool_cfg, + TOOL = request.tool.name, + **common_vars + ) + if isinstance(request, RepeatedExecutionRequest): + for loop_vars in utils.repeated_execution_request_looper(request): + command_line = utils.format_repeated_request_command( + request, + cmd_template, + loop_vars, + common_vars + ) + # TODO: Is this / to \ substitution too aggressive? + command_line = command_line.replace("/", "\\") + print("Running: %s" % command_line) + res = subprocess.run(command_line) + if res.returncode != 0: + return res.returncode + return 0 + if isinstance(request, SingleExecutionRequest): + command_line = utils.format_single_request_command(request, cmd_template, common_vars) + # TODO: Is this / to \ substitution too aggressive? + command_line = command_line.replace("/", "\\") + print("Running: %s" % command_line) + res = subprocess.run(command_line) + return res.returncode + assert False diff --git a/icu4c/source/data/buildtool/utils.py b/icu4c/source/data/buildtool/utils.py new file mode 100644 index 00000000000..0ca3b811604 --- /dev/null +++ b/icu4c/source/data/buildtool/utils.py @@ -0,0 +1,130 @@ +# Copyright (C) 2018 and later: Unicode, Inc. and others. +# License & terms of use: http://www.unicode.org/copyright.html + +from . import * + + +def dir_for(file): + if isinstance(file, InFile): + return "{IN_DIR}" + if isinstance(file, TmpFile): + return "{TMP_DIR}" + if isinstance(file, OutFile): + return "{OUT_DIR}" + if isinstance(file, PkgFile): + return "{PKG_DIR}" + assert False + + +def concat_dicts(*dicts): + # There is not a super great way to do this in Python: + new_dict = {} + for dict in dicts: + new_dict.update(dict) + return new_dict + + +def repeated_execution_request_looper(request): + # dictionary of lists to list of dictionaries: + ld = [ + dict(zip(request.repeat_with, t)) + for t in zip(*request.repeat_with.values()) + ] + if not ld: + # No special options given in repeat_with + ld = [{} for _ in range(len(request.input_files))] + return zip(ld, request.input_files, request.output_files) + + +def format_single_request_command(request, cmd_template, common_vars): + return cmd_template.format( + ARGS = request.args.format( + INPUT_FILES = [file.filename for file in request.input_files], + OUTPUT_FILES = [file.filename for file in request.output_files], + **concat_dicts(common_vars, request.format_with) + ) + ) + + +def format_repeated_request_command(request, cmd_template, loop_vars, common_vars): + (iter_vars, input_file, output_file) = loop_vars + return cmd_template.format( + ARGS = request.args.format( + INPUT_FILE = input_file.filename, + OUTPUT_FILE = output_file.filename, + **concat_dicts(common_vars, request.format_with, iter_vars) + ) + ) + + +def flatten(request, max_parallel): + """Flatten a RepeatedOrSingleExecutionRequest + + Becomes either a SingleExecutionRequest or a RepeatedExecutionRequest. + """ + if max_parallel: + return RepeatedExecutionRequest( + name = request.name, + dep_files = request.dep_files, + input_files = request.input_files, + output_files = request.output_files, + tool = request.tool, + args = request.args, + format_with = request.format_with, + repeat_with = request.repeat_with + ) + else: + return SingleExecutionRequest( + name = request.name, + input_files = request.dep_files + request.input_files, + output_files = request.output_files, + tool = request.tool, + args = request.args, + format_with = concat_dicts(request.format_with, request.flatten_with) + ) + + +def generate_index_file(locales, cldr_version, common_vars): + formatted_version = " CLDRVersion { \"%s\" }\n" % cldr_version if cldr_version else "" + formatted_locales = "\n".join([" %s {\"\"}" % v for v in locales]) + # TODO: CLDRVersion is required only in the base file + return ("// Warning this file is automatically generated\n" + "{INDEX_NAME}:table(nofallback) {{\n" + "{FORMATTED_VERSION}" + " InstalledLocales {{\n" + "{FORMATTED_LOCALES}\n" + " }}\n" + "}}").format( + FORMATTED_VERSION = formatted_version, + FORMATTED_LOCALES = formatted_locales, + **common_vars + ) + + +def get_all_output_files(requests, include_tmp=False): + files = [] + for request in requests: + if isinstance(request, SingleExecutionRequest): + files += request.output_files + elif isinstance(request, RepeatedExecutionRequest): + files += request.output_files + elif isinstance(request, RepeatedOrSingleExecutionRequest): + files += request.output_files + elif isinstance(request, PrintFileRequest): + files += [request.output_file] + elif isinstance(request, CopyRequest): + files += [request.output_file] + elif isinstance(request, VariableRequest): + pass + else: + assert False + + # Filter out all files but those in OUT_DIR if necessary. + # It is also easy to filter for uniqueness; do it right now and return. + if not include_tmp: + files = (file for file in files if isinstance(file, OutFile)) + return list(set(files)) + + # Filter for unique values. NOTE: Cannot use set() because we need to accept same filename as + # OutFile and TmpFile as different, and by default they evaluate as equal. + return [f for _, f in set((type(f), f) for f in files)] diff --git a/icu4c/source/data/curr/pool.res b/icu4c/source/data/curr/pool.res deleted file mode 100644 index 20658a7a45331c1775a68f236705dee8642f0406..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182692 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 Wl(vcYE^2eOcYAi-$dPY$<^LaKjq?=% diff --git a/icu4c/source/data/lang/pool.res b/icu4c/source/data/lang/pool.res deleted file mode 100644 index 00b42ad7e1ec702198ff419e6e57e3afb2027d89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115932 zcmZ_136NdadEa?JK@{7uMzLj@(PFDblj34FiG>S5f&gDP8bG5ruwP>%DL}8gUw1$B z>xKPZ1877f9Z8f-d2C6pGG%#@RppEmc@e9UN~v7qa^muoW5#rBr|gU?GgB$0D8_Qi zql%?OvPv1v|9AfH!?~})khuNs{qDJE`OdeW@18rD{=;2Al=$zaG}G)1zeQ)ec4t8R z8N5Yj&%QOK2cGr84a#x7b@I+P&NMeWt@X7uzueet%y*lc6OFlM`&6T=Q$ZWu=F8APh)s05CHP>ply4$I_Hs4T|{AO#T+ew}7=K4yrqskVVy=FQ|MVGc3OU+)Xq{cT}s%ty7*XJAU=FwJX zqutn!Zml%8XSX-v@uW`W-gcTB8iXE8}Yi;Hc=8K8uyTo6WVQ?lR}?UV*Jm z!REKq@_cH~rM0cqIiWXoTdU1$>ub$4(HmwbHRhL7W1*pAJ2jS`O^vmU)Y!bZXU|^! ztm)8YN4M3d#+62zYpm($q`9X4t?Iaz=9ctN(B<_s*V3<``n!2G&8gUyZf-MuX}&p^ z=9iW-Gc8M+QPYc)dZz(nBwo-Gkm6}T;hn0p%;^OgP{+_ORd@nTl%M4m($XfR$5lymYbrp zwvKLEUR_Je>ezBezq;JoNXyq!Yp$VVF14De)m~4n^>nF`F3ss@NyqAZx^y|MH0E^7 z>$s$2HLc7oq?P%lw6f4lE6qk)SzJ#mx?I-j^0R5Bl~z_%vb~m8R`sNQbbnpY^_8@; zp=Z?HmCd$}t+b*Zt#lT3ETbbVi+TL2zv93eB zu(h35Rc=+NS#7j*bkgd=Vp?sk>DWxGi_NsUw5(%Yj3(GhT3u7Ib%EAZw3}8{WNcIvF^ z-z6Oatm^)npsGo7M(oq+Y^TnaAeU3;%3SJfZ%U%9>*$IXmr}RAoVvQ)Xr=Dv<4Y*f3Iw9rK`HWx}2^G zQQP92Z4ux0Rx@4GBwbs+c%re^>HT)owJrTyOV_SmP1mk9ia@xtv%J39tz2JjY_=L} z-Bj<1&Dy3$IxK;chSxXN)9|KxHL@*|JKDV5NTXdL=Xg`hb9}S8l8$d((%F`XQH{^> zXNfQj5KW9X)*5Mic~zoQA~TJzZz8SM*Y&5nmL}WV zt7&pwwM=fS$n@rRBh_1?joHR(JIyxRTWNM#+^j#XG~1f%rl(dV7@z8FH~F)gp1P_5 zKefHRou0aO?OF`#&Q7o0rgxy$Z<@(xbYpsW9SyjNCqT+l9azPpEkM|hiCYEYF1RcBph9wJeoQ!5!{uFBRbm_ zZrbVETw6m|*XK0M71(h!#< z`j=LhrS~~x3vAA5CN-t{U6E8-X-IdfofVlbE7EW)TT-4<9b#jVYFo#al%_PGC~0*; z3UW#6Z%tO{6-~41Thqj^$!J--)=KL#s@A)xE-|I(-B{PLk*;wF55uw`^{2a% zhGj-0x|h@Nmc-Za*78Ccfv!g+?bFDzIxvE*JkpXb7?Gq)BO9D;3sXlsIvZWuUf|C% ze>RZ#683GW;o~y05%KHk#45sGyqdy6WmahdsO8B|Yqkv~gmqPa1j zCR$Q;6JkvM=xlqwr9TU;G$|3SKVp-~rjRwcF04&8G&NHzVy)>V^?7=8WjRfERvYP5 zQ}cUjSsgmHymmF6YD-qmtn0Cvt+mZmmvG?ET&gc?PU~B$xxOtMt-dYl(;sPp?afR4 zS(9p6n$sVNSN)NGL4?dM@@J{Nluj>c9A{w0Gja{mxeclJbDgcL>3mDDr_fCy-#3>u z=W)@UYnO{H$+u^>)F(SOsxRx@PTG4=nqcq2hYr?8YDaZ)@ZnUO89g&PQOm!RM{8-g zHhy~V!F>;>@$r%AnKU^)H9b2$m8M3Ij@8qtv8nT8Q|Z+7#Cd?Hrt4$pk}4Rhj~-3+ zk?Glq+SJi>dW0uWkIe9MrZzD;H8NI9XKP1CkB?1^rbS5&NhE0snbFt4eM7cip*|V)v|+^=42taB|JsMOES77H)S6$rq;D(>9f^zNer_hLR?we5EF@+Wa+Jl z;8uj|_M$A$mVQOpZCL|t5kyF&3OeI)X zqQ2W%NZqc4tmN+H=0>{Q?xf4Bi|Mk)epSEMWSQ3%+N-IyC`X{SB(Ydq)|h1*wNmY} ztc2ml>X!aUmJTnkz*Z7TN4GZGX|ydNb9_@$=tQF{6R5p)C7s+7)r~K&UrOT}V)t=W z(?m;haYFh)B)@zK;)erNZc?r!9H6sxxI)Hkn(S&|lUwa>nwpbrn`+8an_3asPIZ>I z(sX-%MO-1L_EbZCKGo37oLUwN^k;)Vm(wYk0BPouh`Qd8PO3LFarLD&vBt6(r`}rN z4@@FMLu?>a&0@;UHZFH%W=Z^?g`>`{i%FWR>z7(GGq+Ia4X`3jl+}y$2WXIkuRmCf za+{V!7ZM386p`pnyMi{ILFt^^u5$P^3NdEFG1uCyYCmjsS-if>naIy+c zR>27xwj=eNPr7Y2w}!A-2P5mqi4G&}Fvt$$(;rzd46=hv=rU5tEl~u6l&RfFdmrBO z@YLAItWFL-7;O1qstr%ed^QfR&WLk|YxS{_ z(W&D)Ieql#2?56HBenCjDNe>m)A00(>6x(+{Z3EKrjhB1Vb%PQPG+V~r=zu#Q{&TV zbaMJARUDh18aq|v=d^#$)oYWd(uvVi!>4Da(uwKgQ`0l`@icaFbi8(kli9HowR$a` zteqa6Nhi;ro|TL^p2nv~#zxPMjizx)g_$%_J3T(84o|4^vuWb=RBi9Uy$90d=g3oNU7ns88&A{q>67&|eQtE>C|EjGo2;qmsnOY)y^riU zkWQVRRl74|$5nJ@`l;H*9{JhMf_4bSm$ptCU#VcufPipN+D|=G=O6u%M-9725?BB-4+A%5gi<6^h z!5nky+$sNKDIHx`sN*xqW6i~@TK53R2@WoQYZ%~ird zm&Ka#BTF-1ZpyaXw{MUB?w4t~w7$O7Zb~P$IxTgp-CSx&xVO7|_w9LzpN9_Y)9AVl zdHd^~t1`d3GQysftEBew&owdp!Gp4|H|1rx4F?9%GIPF7`S$tz=)_!Xkt4av%l z%?(eGq7a%s`AS44rElcZueSH@QHV~`dk%FX;#~r*t%Zidi;A1zI*2%AWXfM$@3gL_ z?6uzD%y*je>qH{A3(Z`Igwb(lDRk$ZwTZD>JzczbQIT2=Azjw*(cOo4Kd$KRp53+G zBl-aebs8{J=?=6drZuQd7n+{a$8^ZS>-@ai(ZFTC_8 zFY+tTTs`fm2aEcZ8=$kfw5jt;I+M4hk+m|6QVpHS3)YDBsLJwtEtiwuoyR@0`w3wP zOf3o@q7vObuzUaRy%}34GBz3Ks!Gc_(A`Hh?nm?8nlSZv#zIZk`}5h}>#)7T$m2SA z;;>o)`-gNFjQMOhKQXH7Bl%2Tm- zKCCm^rOarC4Xa)H2z`v~ek{Yrb6d>)Y#uq(FsHMn+=C^xe<@>#-XF^K9nx8?QZx1K z(YPPd{gfV2%^okMAIYt8OH$RZuy)V-;J$UQDLj!jWJR$nObzpqp{_AIZbd}P514jn# z&anFj4)plte*NyrFdzqWx%UoC4!n1urYCBmN=2yE(_!J+bULoygY}fA(z^y_0_jXn zN3R^zu$pHE8ehnFB}dcScR?Ep?y4O0vYzW$)fp7j*hMXuuVamC8GeE>Ym=HKW5ct` zY>f!YY`tsHG!BiL#wRt)d-J?a?mpVX+TAxFz4^79j|oF}=ik?K_HmuPl4tOX!s6bH z$y^WDi3>EZBhzyG>^g^l)`pc;*Qt(A_%JhW>(AFn)MoUw-1gf#brd zVaI#r?$dMc&(Gc`jPKF?lpfZ#YdN4Nd^Y}MYx=esq{_;ZKk}h(evq@*>;I{32{btS z#LNF8%bwYDFFpOMpXP4o{QItaqIve|l+HeV^~s-||I~$)E z?l?y+f7Om>>;LG`GvCP)^~lSw&UHS_-EY18mJ459;_UxA^Z$JCgIVs@uG7nuC__;v z&A9?7I)^soA&Tneb*8XorXJ1|32+nL{}{*E>T-Aj2NIPHS+jW!Xzo=nQ%Ixab&}Got_L-&3l?^7;0gzbMLup3!1= zXWG46H2j+A92!5Vd&s7Jf{o_0{VHQ>KdQ5RDk-_9v)A(7WBF{aVDQ3dzWdgJ9~Zsu z5ly~r06M-~XYUZ~h&UvrcZw6B=#+j~w0=C7yG=5~{P8}~v$^MP!QPSYQtEw~16+Ps z&!VkO;}7W!+L!#xwIF>C4h#?6o1Zv1Fp(verf}-MkC?K*Z|e5v-f{tI`g_;UhNfPx z|3w=ZXa7|tQ~KrUOYQ%Wx#B;cdVKoD7l4gF`FCf{QR7cO{1a1|CdZ$A?K9?z%>28VKVRXA+v-m)Us?6p?a!UdeAKAVo^uZx^*=aozHHR*c;*Y4D;o9xb}{b0 z?}~fXsQ=(c4BM!`UjJ9w!g#&@`)B`6wjl;)U!610{QlX${iypgdoH+k_T0d1z+U@| zpS^G{`tpwRyPkUFJpH@t{I9R=$((omeDK?o=ey_q>>r%JZ|Rvl-d#@}dd3oD_UT6b z&@(*y?q|OF!H^NJH2uU|F5EWba&NgXFdJvD&TZscK5?N@|G7L1U%v20cmGdh3|&0G zWy$d6i?7bT(FNA}&_CGvnRU+2&HeexFMf)%SLgn0dp66B@6G+E_G_O3_OlB=yWn;w zoA=CoK4a*W<{RDZP450)bM4b>i=6#0i}kr(PjU9$#a&Zh%{JP17k}=;OHTv)>{4Lu zt4qJ}(f8zeJG6Y;%u^Z9FD@@OJzGz;-sl>WA8r5XyxaX~`#q~ao-z5+_LnYS$i4q) z`&%zRpQ-6{?eCj*8|T))FynEYTfgZf3i}OF#^*AP|Hen({#p0=BOg1o z{H>R%`GuE)PG5NGg_n%ezy8!6&v;h<>@&aiY0v(Vm%nfN*K<#gyxgc;@*jEm{MP<0 zYB}=qUw>+M#_1Kw)3%O9v7VNGvlK3N&7AI_%drfQ*~o7BH~Ne8UXY|!oK9Dqqw#Gu za-RcR2x~%~V6F$-0IB`1LF`GbeXACp#pb6B=ja73eCyiJUeY<16#8MIS5HT!u)44_ z&?s7I$@Oa$U2QU+Vr@qsav;=kkc)uf~Voij$QLFo$n-WrNNQx8_D zBDLxT8U$<8k{(axap?qPJ(dzZp#NCe!0}@&*|A*doAnxY7Z_Ynz34kI2rj_wqk0O> zK%M9c^bqIhL?vP5@rI{BJsZO8#dJzGG&+)z*}vMS7O}*S>RI$!^b=oWPtO8Jqs3Uz zg;9nUv5V=m)(h23`z1=(Q2lsp_V=`4k@0p!&z_Jz98q~Jea^7R@yYf}vw;UiU(#ec zu3zI;D{^_f;FyCs#fOBJzNT}0i6>MGV?U5bVtWu<5TA**(3$j~eny{xpHsUJ>NuhE zQ)+iMjplainQEXv=3-erP=s0M&~uCt3go)6OPNRdUD99rb~(?k`Q@bS=hMA9=Y)ZU z^!zU4#P$fh1AT%yXc!*=yW^nxV|=*JkM>3~Dma!z%mt%{Zm>U~oJTbh@W6S@OHCfc z9$}g?*vJQTPMKPd6Ff#+RP+aqgJ+?);K$#&$$lkV1Rmf(adjTcTKaD0FZvHpE5Rny z9&<%aj28-lX6OTdAI}~l=Xj&;|D&>c9@6|l1B{XWQ=aqTo)^S;dDea!zN60htEqjA@HYq|-IRIz?h0yf!E`GmI5CetqYGM0O%R0a+KS7-Gb^KL5_ z>_PJiw`CeKy&)@rYkfpM)K)%cj;Ql*1lKZgK4^@SOKb zVsU=EW&%uu^Lusnn*3+*jE#Di&Vj!*`(gH--YJ~p&0-zmdEF$hDZHx#vNW+r?Li%v zx5XS01F~1kQ@5(jBZBXdJ;_{B{(ydO>iNp!PY%o;m&V6mx@V@fxw!h<&GboptXt~m zH$A_v*Rjs5sV|&cT>bh_+Y&mo{Oa6SXRT-d@)!1;y?5SL$%DHe)>tjik)Mno&tfHA z)tq>)PiVZyZoV(mVNHC)Oe5Qmss!?l`8uJ$3i;;qQ~Al3YCujR7b)fQ4zft+vzqmg zx18hq5Dg-BqAY?;pZ3wwX6U19DrH&r+hgzMcE6L`WrXeIJ`lHP>@wbn5TQTdmp#&$ zj&y|wxkuMNC+bkn9d{&Bht~+)9%A^2)>8O)kLD(Vl!5RoO3Q zDXaQ*epio=Zq9z9BVV@++$PQ^%97H6Hp4=e* z^KQuqyxv>&%hPw}b4P=aA;_X#l0`&`ZW|cWean{H)MA_y-?^<<=N&5l-d>qI;RlE~P1pFgzx+Gp$s<6X|4 zvw!rK3$K0V$jg?ox5;zlz#IAU#f#l<_28`!9a;`g=#}PsR{#FA`>?(F*`@EC^|N2P z{QGA=_p$J*UTJ>o<<^I&r}N>n^+x^u+2efvBaQmrB|rPZOaI^W*MItf+|MH~|H1h` zl%%&8^y=KL7vBEaIDez-@<(3&X!}<`Z9nhG%YV^s$g5;rugi;mqkA}es>u0>b#}81 z+sN|Avc)nP34Af_(f@lTnUKTCRm<7&bdR()mNb$RF9{3Ma@SYNTh90J7Vvn=JuFsa zB;Ha-Ej+0D59-Rc9a0+!jK<&`YtAj;=UGb90y@Wj)6x8kG^S)jR)|N2{5>Ym5G{aB zPA&Jy%E048w;)rI{%gG!?$MLjhdk#o;NAE+B_L(LWusTiHI<^pusqR%=oy|{6Wo%W zD`np4FZa+s%J9vjLM#69kK*~cFK!RNi=J^s3vQiwwGymUk{BW5M)!I|*Hi=A!z(yE zrxfs9g7%bf7kf1%kja{hS<~gz_5pX;FqFXAI-f)BQtK+O57eezbGDlNRomTC9O#3 zJM`Mt|5lHBo>gC<<>l-f(_h<^V35}Fma!7BHSpun>0DvSm!1(1csScDSge%7_V79t zK08;Ai656X$Gaxd&Dfb&T1CFt;#Bfro4=r$eLs~x`R?!iL(R~0Y7gnzN<)fcn2)M>;W=ct?e%e;Gb(fAl&%V| zFcN6Mo`B^Hya9I620Z7eRmd0DqP#WT@n2JF_t(!jaVW1bhJUnjJX@_%3+k#L5CGiHa2(d_0n$EcPYO}0kS!!5u$7H!tk~)|R z=0TYbqK@!c?L*@q;Tewi@e#45f)`Vr-e(cE7%kG0@iW?$j92CY4&WK(9IF**$yEJd zZ*Eyi*YAIbd>UV%rT97h%CGZ6dGqkYf4Lv|T9UM>5W_hw7$u&hh0Dl9U*Rj-h+ z%5kd>uM=Wrab|xPPul)9Tm>c^y#Nzj?GqMRyRlSkYi^OYtUpg^^*N$gXEa(QF;s#k zSyh>!rQ+RzCA>4D2F4&9ith7sU=A5+?SyoL6D|3WEnwTv`6_&+&_||7*5{D3E(yA)SzS=X5~j zjx?26(_zKUEWwypqLj!rs2qO=nx{Rk&@FDkyb$YgcWE|E+sq2S%YBMsINAig6YqE} z$2FeM9{*jMQKB5L^`3Lg37h^VQN@q-JPJIG<30c7zHEC3g|M1zzXiMe{(%$O-!Sz! zRuX;>6vx_{Eqgo#M@sO6Uaz06vpV}g&S-hdh1Q3#q8GRE3ny=1zjRs9YjKPrs`hw+)K4GS7nl08{kuT<>6TO@X zu8s@)%#1xSco2_{_3;;8YJ6<>$IfR^Cw5jXKNj*EEcyJPzLe)gzxARqwXsCXko7MB!{nl~TqS(x6ywiQHpH?kI zT5JoOx8WFU6jnXVSzz96QI>w%lYob@$U^%%-a*6=?0K~4U@%K>W9@|~HgzuMcGqQT z&}(dP$AY+Li2@$z3vvhUr$3GY>CHIZp(GN8n5VT9Fuf_GzhplF1GlydkaK8F*U1&7 zeT6ikk44TaAG_BxM&PJ4Qs40+ufjl|(5Yn~SJheJ3T=$_#XVDi@uE!b40r2b)!2mQ z@mtEQSb|X#weXbM*yXWf=OAfa%Vj-@)$@GLg<%b6L#1u`6T3x5I;ZFdMbD4zp6c0= zcZsKp4Q5T{h&vp2u44CK)1Yn9>_n>2cW7{|Jlk|3>wFb0AXgu|&bMAMijuTsZAhJ5 zq17!-$$p?Mq^2SXf|o1K;LIX-Ddm__S-&9KSPq#Dh6%?)KiAH3E?!WY$|H z9ghtBu#P))MZ^m0;sG68jZ2fThCyVAs1`cF@t}9-I1e#$Y!ot-khIPcd!I_8Wstwh zRTG?=oWnsZ3rzzA`RRxe(W{g`py!A!9n5u--+=~l%!$YwnN!Y4Bb$VXn0toA2V$uo z5&ie&Uf-|r0pF({q48>pc%dJy|Hzb@R3wgm5+y6Tai2>19wq4q5ig=$#I}g!rl;^#2-~w4DfBYFV$+2s%G(WpEd(Kg-+n>8_>B;54rwj|? zO27K)Kb?Pm>CiLQ%tv0n?c!^n`Th%Dml#*XrFip1ywN4?yf$RXiDW|VqVb?zRvjF> zcz&0C3Sv)4Nu(4qa$GWr=(=q;`?g3w)&jV)JpE3u&ik)xQCb*P?vZop;tFfktsm1p zY$2p6QV&njQ5LKOG@jSG-2=1*x*eHHkI)p9Vl3FTj4NV2?y)^@?pGx;nYY}x#Ku$d zH8r8N;+i_E^5#nC-VcwnU57ch31U;VbscU&wr_pm6$bYXlTYZKF?y++e!oA`juHMeB3 zRpYOW9BfAa7++{)$Fs0Qsnzwl4&$Hpz$}~thY=eX%_DLqi_7Z0*gPlB`XD9-)nGyK zJpCgZ0y`qE!CtiItP61N`*4<5-=aLN7y8^uf6S*XKbMC;o#WtZXy;mY=T%f#_JM`+N^wg<3R(AV5G3?Gg> z2bZ@kgKRjal{!n2e*9@`7-@fO1mYC-+MRhqjkXT3O~?h0Tu<;DE2GS}`P?%Aem!31 z@Jb#}T#rd!FrK(RnZ4z5J=3F)xIde548201%pFv!JTlclHWTIW?8&vTY_KJ6D~}j~ zqjLDVwyvDHtKzRo8v+0nH-splfhNoV7Y1 z6RNX{|1-L4dGI?oIWF2vWV2vLJI-c#N2JTPvEy50Lm0>LW(2mZ>5rHUlmrg3ld&fw zN0-PN_=@q@G=HH{;Z@6A?hk29<=XVe4B1y5mXE2|^z{D;o#A!P>fpSdug4{sV?1Qb zP2}==F;AGL{LGH=)m58bkJJ4Ly_*0&$#yE&Rj&{H5n;7Ixz>~4p=;5i=8`A0IMZ%tqK?5fJ6GaA*Huo2@!Qw*wfiNS-*BLCr3 zIAErjUt#ZHt2utY#|;`Nf0rnpEY zj%<58+Mq)B>8V~l%zwcLw5?Yibxq8{Sz{iHGZKl4uyRVof%5dEDsQ>AA7K2@b4xGA z8Cj1+EG+-Ag{c#}i#1iRi+sPAybIEe@^ z@|bJ<^myL;Jd zSx-KAy*+#T@Q!_-w`N|&llB``_^I}*YrVG=$vz|6h_{L-dQ)B-xOHG8`|lUJ|3&%X z|8C~X7wz+z|19C)mk&rTyq2R7d$YW-y^q!4d;!0$_``FZ3w~=6{+NJ%V=+;m z<%8uf*T@5MYL3cVL;gHH^Gi#ATYsbb{mRfF8=|J?(7ezD`hHk7L0#lULx0EQfoS^( zl_Oe;Jir>|3FwCQ;AC4>@CWS^_rvNY@;9z}$O|v_H`m3_^?j^W^Fv(6TCT65&B!+3 z`LaTdeM;|<|LErlwP$M!o^|XN`NMmd5zDRe^C>;)Rb9B!_6fLvPr*lBw2yay%?7{K zRf^mMv?lyDt1Ij!ox0=vrtg%KLrHs1JEso!@f(6+MML`3=>@^X?yB zHuYm&AWwXS_dqSkU)y{0z5X(G?nV1t6T65Qv)8b=&m4w5R_5RJf&t5C*H!2fN<;of zb|YE_YQv@he_U6`$2Br9BD>i0+I%jTX1+t-M}L`n`=ofq$n$=E2rWRlP zYE<d0C-)*)?BKXyMo4gG~?b7uTgDuMmT6GY*i zaXq5Zv8H}pQ2KLBe-9}JPTnc?O$yE!A66f*U#aC#)>)2fb4@0F^v7??LeZsL~x0?5`ktVlL)mV zy~M1E!`?3lnUs!D6KQs~BN^L7kl!r}_h#M4{@tU}HAT21PEF0ksmaQ}qu1Jfy>(8q zA|3H&{=7%AUE~Ln!+C&S&2o+#{soo;^UE5<&BB&5 z5FGg*7bk|b-qQ2Fjuk~;7oFkjB9ncM&FP4e=ttVtYr>BI1m)NUVkP?OlONSv#A}Pr zu(V};Qhk8y!+v};4a$}gXt)fx5*tvLP>PvPr33IZfn!nN^gmX@xE`M^)0PljMOp*u>X5IX^FW7$Z5 zv{j<6BYNf@B9HBJP!INvR}j4$0%hnQkrGDhw$M{}X21+V^H`SB=P{l4d*VobtbO8| zB{s~C2F?UQn!AUTK*xZwX|>>Y;liW8EbLJeb(kjI!)oh5cn6$uIgSQ|9%7q?rH9Vp zDssudIDI2l^_RC0Y#+wh9X+a!i+0c?Wp-8sp#^dzW2E4ZnZ{D2hfqE< zflhX;jCFl13%~ak){P_1;hz~Zraea>Y%hdO2oF2L9N9OtMaCESsP+(^=Gv5b&n_qf zOxV^OQ>^Khl}sR~43E$X`u?pq7!4nYe7n)~^ zlF-kXu|+&{|`d5&w6jt6xd=(SD`Fjg9z=hiI`9Q$H5 z9lOAuue0!CT;?#^GFFEaeT=MfmzmXwBEIi3XH>%PqdDRL-Dm^J%n9x@c!4rlnJhKq zJ$j_k)^Mf_=s6(TK~U#Nn}DDlptS-S7sL`f%8cv2r6|0>85Ct7ILg#iGgMaU8CKc; zGQ)bZKe9iSTW3zAp85@=sOu?9^(Zr|GR#|fYBuu%+0UoMpRm7vH3&vZ>odB-j`r-(4hPn^A@qQ_SbtQXl`H$r zQS;b!%@`2cfjUZC6N32df+#bY`-fZ&$dt~YkOFy1*J#IxDV&opUCWtNcw;%X+MQ(z6_}^0Z9%`mU&cJ#Z8?uc<$17_*q83tT-~p?D<0I}eQNz=I-ld} zr^MCBTX48@1|5l?REZgl18EE&!KY{R*L+H}dqV%$6!G>O$@tGiQ?IFiXvfm$nxJU( z0-4Oc??Ge;IyF2cAdOwv7HAMCfhgAVI(Wm1H?m9#=p1csn`?@;>KX6I zG_BC-4iRH!nKq-$P>$_7hd*W+*#;)5`JP?Hccq?TVWyt?g^|~J7m*_I0kB(6CCif8?R}aNOIU^z>+&8@j@e*`hrSJ}gOiZR1*_&o|Me)CPxEzP6^t`uNPWlMm~Xcn zH8Wq4|IKrbtpM|Efgk9Ck=mbuqJV&z(jVHeZ5A<~LZ{IdbTyP^4w?yyLcdW@iPYPw zf|i0>c$WcNu|#ti!KR*r!)6xMbFWq^DwQ@108(|XD=J~R{coDzgQ z>tg?$Qd?NURFKU_QnUg z5~)f{3%yZLwjY89fqDy`FNt>;6MeST4P7uZ)vR^uj{d=M@ESU!%thh8n6HRb&?Xv( zr_5IcLhry?=?@r3_q?IH2W1nX(W;Q)9t2MIsxTO%ey<=DOL(V^WUa?6ncZL$YeiU;<&B2-YNdt!Im(*^?5qLgR+aRM z4trVhR@s4pp+qJIJ8B%sD^mCB*Y7Rx{z1Gs;5Q4{X@j*Jzf<5$4OXnEC*Hi^y)o9U zSkt&wt+9Ka->JLhdtY7p^2LGgu{*TiE4bx*WOe{SDkGbjb=tb+@;BI{lLG@a%#8XIG*2lviWCZuBudKnbJBatY{+So{t-kQm-*o)m z8&)?G*=xfswGISHtM38n%vL4-v*Q9tZoeN;B9r8PV~?S?%IXnXz%nu{BF2m5f^Sr6 zUQx|x*=<=Sc(rI4df<{FwFcAOy;Y%mR4P1!{feO7pB~QpUIgsHgtzdp-lMOUJ1CgG zk5YlT+(E^4JZAc9E5UK*sLyTe&uxGk>t$O_Ut|oxXrcQvsH)+pxuHED)m@%XSIgpfkIp zFN_k4h4DtawCPwNvrwfLk2qFuyn;|NK~2+?0XNR(j`=kmc-IBW(JrH>EoePp;E=VX zz#rbdX$I`L9M56J8He#KISa-sV=L_vSKNP{{)jb&O+h((gXc2_V{M3x;^9oE(4kjZ z9S6d8gR|%r5eoPh+shVf^v_&wJQSGY`H>~-cB$ctc#^W!J`)A?%0tYrE$yQ-UMG~0ri6wz)^Saw`ee?z1a)bm}*h63$yubyKSxs5!ipUx{wvqi$oGs=J-z6;H zc$T#YQ(&oYR<+wxuEOkPLVxk>S+$7ewJ2EC%CYV&H>#vVy|b|ym#zd`~1TR8#HC@!SUdTFTKsIJ4T92|a7R zF6D?{poyyG&ZvJ;4%*-@S~%JzN)4@4Gseveb=797roIt9LkxUaWswF86`1GJ5u7MD zo#}viFZ~bdY@x$ZUo7q5H`b7UA^J&|;;=1i$p;zj0Zw2QM6 zi9Dk(qc1COQXeqW4l}|Pp5l%5IcsWAtDM;FP+6Iy2|ZPn#muL3%#b`~yvGEE`l_&T z!FH~R%?Jh!Rq1M0=Nh_>&upEv_X4(r>5HOd6j}M$+lyCXMFdd;_3K(JN2M#hN92WjSoqqGv~|;m;$%9 z4`RH`FLoPaV~%#xIK6bdphQ0mgDP0*H=Q~%XDtzU4!j_T;4gG{z@`KX8#7?w4_h4C z2pF=0*@PEpk(nlk!?O=8e1>=9vAV_2kQoXRQv@jP(38DKfkUvsmZ-$m73b=3AP$~ z7g)$ipnm_}Fh+0x3La#=#A_H|*BSi9iixFOwOn1JCl-s8bqv67AK0!gF!&q$rn(wt zo{!jpS4w8phAm=#EuUv|8-AxL`oavMyOB`Ll64AHfqX6U%Jk{gkl=l0$I;~yJ>R+7 z0iMgcSdlLQvsdAE!MCMTkuSD#jL(pX*tm|lmi|@W^oss59%^KU3JmQ6^%(<<7wp7Z zOOykKtOPfK7sGf*3_5k6fi-p^Q40=?PwaSfGtbio^le|&TnCJ&yc!Yp(KFjOqPShA zXQTt3I&@|XM#P^u6#ZoG3T#_h`o?6ykj!O%d(uWx{i5UTBd{+fTE=4owv!i-KJi9c z;0o=)8#}}m7%#dOec<=f${YcUb-}IP%1-PsM(<*Nt)ohepRu8LW5>zpUlkU8p`P#o z3JiYXbsPz7 zvWthKb<9$%B6tr!cDE}rUMxc1Z>vVrS%-H7x32+v?W^Hejd8_ksMhs^>N?(T^Cr1oI8Tf9^Am5P_L`{7v23>)_MD` z>tFI4{oRRDAANf~dq@Q@)wg(Kyw#n80>++ywoS^j$5kI5EV1$^#}|~)*hlgX&5mBb zPtoFA2L=^`CbCS_SUb;T{eF0$DvQ~Y@y6`3xX@7=T0y-P6BeS`o`o=|l)}Y8I%NJl( z83@1mSu&8R!+H7U9w->jK~njRLw3RQThM;1@jpJFrrvjU|4&?glCLqIefp0jWNA|$ z9afvx{MZ|RsCxfOyfCR6;|*iS{jr(6`_L`IRcqn!=DW|o(S7lS-~8O6XZ&rUejEJ} zMTfCp!uNvPXwfkE8tb6I!Un6t;9l#u(D5}rWxg-vh}H3amNVjkGnZrs11B5M{`9fj zA{KUemiPzP_)^iA6M71r`FbCW>`t#RFn6>u*3%Q!xP@UzEA)@&!}etO?4Do4`fVS> zm|G;KX~Qtiy%Nj(j%8^`-Pj#SK=LJ#q{PL`IDo}dF*aaO3qC}^#`Co;pTINp=QkA! zT>*RgrnWGOMrow4t6lq#8?s7D?t*>#?`BFaZQLV`46d#9O!xQfa%9c@0XCsB`WSF7 zX{iki%LkcX`V0*0F|)CjzZ1r4J}_p(tNErs(>70*`hdZs>~$JA4Oo>9ihoz0#hxTD z9;*&r%6yntZBgNcGB(5L18qBgWthDW>^@>QhB2F#6@~Yyr`Xgk*H1%+q1EU0yyLcp zZR$zv655J3f=;P3V3ElL?-ba2?hDo>Fn!lsXH^;khVHM@pCyaF;I7_K7I`|OUae*e z20HM36j;G&J!8mp5HyKBZkwo-n^iw}I|%<8n;P5$a~?Y7n192R3 z;M{6CW+KKM<-lH*CaG`!M_sO6t?x%^10KerbsU6o3~HAjFaw_P4ICe;j%_RVtBU8- zs&^+ZobEkY?aOJ6-2P{&@2q-2zrab1?Yv;DLR4Xay~eJ$?Fu?Yx`1i?7oN6HVpuiz z)a69mea{vh01mLPs=f={z`Rvq^a#Az;uq%o>SIL=TfFoS%EY2X3PDxSGcYnfkht~) zfME;csSvF*-NSWQ{Cw{u#%s>SUo}ND-YP8YSR($6&a%VxRrADR9Khfx@E69uVepcosgQM)Vjx?1u#oijU1`j6XCRG5@z$_zisen_tB@H68Zj1z7cs z0cbp6RXGG7gwIa?E%*aQ8}vE&7nza2mQm>oa-LoKOqZs=kp1}lF(1H?D`?cn?X-Sc z7Z1Rla5Mfs@~6j3`RRUG;Hp|K`iE5km1Cm=V}8*XNMdXa_A6&>=!m>aL1i4(oeF53 zIj_QE&an~6KBbI#o>+ltfGBkIr5Y=UIj_RDdYLsysc+|=S*y@L#t-cywW2R@7`5Z2 zGc({SU|z$i!c4u<7s?^O-AjIXmTzO*{~ye9qCbuveXhpV1NR+Ct{eOEZM8s4Md#5A zBp^Kxc?t|FK)Tz;AU7p)4beWHBgZYgqQLWvSI;UB(0`G>%u)3%%NTFOEvj_I`0)a( zvZUzE+e2<{hH@VSGJ;-QlX`zJ2+(pT6rue4{URxF|Si>>?jU znzSN|e_;1JcmIf167JS2Gw(p%qjuk|UdH+d5s?YC@ovQ&te*wr!05hHtCS+U?G#_N4dfR{D2 zoo@=UV|V{9CGH1G6wGH09~ccX%sH*zt!1E>6&pKgvs*Ubf9KiQ^TfNnkOOqVx9v83!?9?}Br;$~}-X zpkEsJ(!d`N{N}*#4g6F6{+fPM`c&`yj|M&`*k=cRSFqpG-!JQ^_T@{x`+qd>&j$YG zz$*j4qjH@6x{hkOe>U*12YzYb=X+&-SGA|~%+Q{py+e~jXY@NeG&c0iP{5{#PUd_4 zFv?B#m8wsbg=VX*#+;G@3AW$x!f1d zy*hW#%uU+6=1+cd>AcIm^z^TO`kbJ@FjaQ-3E1Z=uy20wwwd30?i0;hzW14{KmW6T z{tMJsU}t`!^~nPJ=JS;Mv9tf@Pt~U>ck6{eohOQ2efB+#!<$1NKl1Y7%~zV+o8CQ; zo#yX4|Bh$=%k}Z4^cU@+kB>h&l-3qseBnF#o(f}o?(+XJ{o)Ip|MOGNKKI=@a8O{k zeDCVh^`E5OKilqncqo1N;^EEChd)2%9eZwn?!^~AKlMuU%NNf#XFu&-0-t^E#`yiu zyztORhkC6?4E~ER?waC!D1Gt8FTUt!8Nt7)-!t?1smP{J>02+q@Y3g}{VzA$t9bJXz74@Mirfx~y?*O5%1j;>si_Ykoa*5mN}hGf+d zdB-~UN{cfrSP8+B7RqF?d#z+hQ463%BE33-r-g@rb&VHisNV>!zR?stvzJVyAacTY z`Z%tEXapV%UKVW{N?Zo-3SWuXW9b9-c^Mn6Q5OGz=m}4_tm9MFw~)DKKdzj4C7AlK z;vLI~{>Iy`Sgj@N7i{CzmT#U_{VIB552CDO;s?2ZF=DUi6VJq73Mg}f?}sPG3^6va z?Kdl^HK6?-5H(PW_{xO()xWP3bB0CF)Ao0$mv^D6@zhd7En~sdRfU4j*rz92tBF4B zfzz{qj%LbaH3ILYK&v|;1$0VvdRD46)b$h;$>>WBvw5C_)}w}5jr_(Mj;goBP{3!Y z;iyWM9i*ZL)|&9OOgjM`(;UN15&H`KI)Y+MM%gLV3I)SurL|dIQ78Q6*)01puzxpn z=C!Jwt31=0ONsC~8eo2NtnyT*Qz(kQu{XNE?l+XrxWZnoQlDwEy4%9Io{q?8>F>Cn zf->RU0-e$vgL7IeP;x<$B*gxzP>-ZYqY@8gyx?Ivj|rcj_yW22ZjEQ4e0)uN`=ws` z%NrfsuR@_o=7oA=E+zy6<4}EpPU;F;=%=VDL5M|Fca0)KN;~F$&zrx+NCt3x8!K9a z&fcsw_8(?NqsjrSojC4R?b%tCBd!GfIbKfB$*CmrVv5=s{qraoIkOni7R&0`9|?RC zGcg`URL<+_WG{iuCAAjNx*$j~e07f)DMviT@vth^88O*8;J)DZsGcl4jRkg2sElPQ z@q~a{L&P3r15mq69Vz^pviEmDm*hgmRb*M>J~rcPPKlPhU+tj1r#Y zN%Iz57h4+*}e?BUX1 zB$wxn*iekv?}K=~x6DONa(d@ZI{s29{N}xvVm4{Ne7my>y>VA2vhv_fq)ch;v|1~> zpH)W;r8u@dtI-91hxN2;s6vmcUh*6Jv4e~-zg5cu_1BBx4lI?9@Jnk@5Lt_i1M8#e zZxl+b$}@IyxhQ<{9$;H%e8WIKk>->L3$dM&wHsLXO#17&1rN@*FclZ*SZ~(gjRKui z56kzU1M4&Dv1h)@-Co;7rXY=~co-4HmRJ>vOe2;Xt<|$!Kt2^45nh1%z%4i|6ve7I z{BBHE>m62G);Rr8ID{RBtI%VDS)Rq%(2+$x)G|-4W%+ydjazVf4%D- zS42Qf%K<%-_oa767Ev(bXhi=WQ$MP-P7e7Ky3?P#b+jk@h#J;>cF*^}qN#mX2Cn2#-XQn=Q$15S> zp-kwEa}|18CBZo@GT-xABE}b;`nj;! z!p04J=&T3N(oU$yP^CVsNJ^OlgOA}>D3!HBaPE468e5DPu7=L$a!K-c@TibMSWJ-> z(O<)j`3}ejzF!Ld__k(QFYM11pdZkBKQ#Jl{_r{{emm{J0njWIT^$89;8omy=$5iN z=mi)KE1ofe8RT5)S^qc9q7T?_P`Le1m-ec0p@qniMz5Qm-IDPOZu_&sq2HiSBs2Bf zK4VNf<)_zn;j>s_{F=%GrDv@0S6hp3%JpY1W4+;lQIc7KV&Hj8EodU<$k52lR&RE> zXQm}M3vVQ{p9?gyX&4*0rC-b$Pa6+F(Zg@+qX)PFzp|fFP0`hCZt4xLbPOkOhAkcb zN?H4kH9+JBcBN%WK+DP{m?US{yS=f}5xT|SOasD!u0o6K)p{B$Fa0ZKtSYewJ!@5z zV}&YqAY|tgv`N%Uwlo@ql@-={LJy${d6SS8ugK_T2RcJpwTc>^5)8XcZ^Ej)H65!G z?;SX#X!m{kS~cGp^-kj@N7{RSc)#?w=`Oj?PblW?z17KeW*2t$=ordpT(LL&7iPXU zch~t}sZUS;K>OXFzI*HJ(|lbM%Z{CA;a|T`Q1y9hnHQ0ERXv2Y%{=sbRO6YBoncwk zZ_ujWE#Uh%&?iUpdd=Q%F8qsHw%X#&zLjkCMZC;9z!qTPS||#?1)0_#=NijYOY7(? z+cHHWI)@~n$nln}X0Iee>sY#m&Su^=2NY=RLu!AReaszwV~j--U}fVUkEng`d|teM}HIhI^$fF(&eviFbfsX0a=ojg0Yko=V>Lu=?Pg{=j5p zgV*&;|4t>&17?npH|PuYr2{jAI>U-(e6qRJG8l5KBy?d-Pmm#D3#LHP!*i-(GWQWV zLk$6)(%nnKA$S0aj>jed3$&pXP?d0$#4{04e`B1;w9o?KMgEj>OVE8bAFMb+LhrS6Q&1#hy?8de^5zO%u3 zvwWw|z$}Et5hET~FVV9*Eio)nY739oJjA@3f6Lgg#27QtyDF6L&Ou?-cs14)We4>Z z1A2hDwckQnY!GGi2ny{?>I^ywE$`WcHkkW<>k2=U-6!EMupc#4`8r07|BObp2TOaV z-^i*8-Af;!Wxhme>o01U7L0X`pesfcxzaml(`6%P*IF{l!WUsHV;i|F)CX6Y!vpGk zaN<5td_Y|e?M|dLpgXN%*Be$b_$@WyL04NlrFt9@vCoYiM5JM-Rbl9I`tP|vcmRPN zq7v9|_8|)tIU3pEf%Q|$l)Ev4fwj$;LdJRK>$-NVtx7wFT6>f})HDAv$5nnal+iB= zj!noY3@uVUT7#Cry5rda=Jweb{Q>Fl0GmGE>rCK6F`HhHk56fjOI-XQIDAd3Q&cuVBZ#;P^VStKT-N z3)^7MQ1pu9zSSClTFO;t9w<_eCrf+>PWL;({WVaEK10{^7kYrFE~zwoNO*TSB&|J5 z>O?}s*bIdO`|E{jvh=Hrn6lNqxT%ABp^}}LB));F#p0~C zhV{>y6*Uj4E=Sc&8PsB_>OL4s{yAd~4gl)@qUWN&5%cQrFMekE!Y9wc-ORb)g0QD- zEe-eEO0D)6PpW56SMUq|&EeEJq#lAZtmK8`Ltg{8n)FX`O9j{X9*uTX6bC`Z3U z#IE9fMxG6gNWIs6^h(d*M|>ePiEz;yaoK&n+S<-FKyVyiF@{sBWv{8ei~0ruHFopa zxXOm-Ui^9R5Kyp-eM6k3Kuaz%8a>LEY-D`&fRaajSN@z zn|0LP(S{O#AWznBpF2C*k&(xDziW`X`}2W`c92EtxJdMYIjHWq>fF*B_fjI_LIi|W z$EWpMqBB6x<(jKmw(M|5Ml*Ly*~o1@r@IAuROQI3rtJb9RX*%vI{Mc)*^!9;_K%I+ z?}u|8)wKgMU&$oBG57Ue<-9&B`Z`(3e&q|Wd&sfbF*BC9{eyW&95P<}GhE4fW%pRVLKyYlobx;Vy*}raPKpEGrp!&g zNJy3_*_6&Vz2!}#NyMAjS!YPOr|g4zZ+^#~-DSziJUlR%-ktMFz2~gIWJvBO8KLC8 z@>N21q4jqV*|nCh0{UBo>@-W>X_T)*$@_FIK-q(pH~ojzUVLqk-Dt^}qPuqCv z{vP~L&IM&JTW8Y}Q6n>zp552Wh-J@#QZHXc^xgyPr@K$}II4DJ;LaRNi!5L;2}an1 zV4t2Z5x9>l>-1%1l>Sm*Ug#&39r}9%Kc~FYUlIIQbp9)<;pcRIW1i|i*3-YOJO8+^ zhA-*rpX$y>RLk$Gjo%%3Ni{@Xs=tE~(#Tn;W6C5Y3$;FU{(9c%Ugd+%-jMxyNHFq2 z&+Bd}`-GmPhUuY4DjB8DV%@8I)%;P)7(yM9^-9}~8)`VOjMV9&xm>%;jz9U@XO_;B zrTP9#uYKl)mtJW)XY}yqZ#_r$(a|> z{vzb;x!?TUg>&0E6ZP?xr<9+1`*T-Thd%yCANvPWu7RA(FJJg*n=I7-clxGJI*apd zAMbp4{TDw!wQuVa&DmCbWzw0I`dV52*Dic>Vf0C7z5Z{Xr$_YSZx{c=b7!A+AC5_{ zIG$%496juBHema#OY_&zFw*w@`=cR859BvKZohetWDC4~N?G)Kl~YgtI^VY+7FUl7 zey`*NQbdt5LH0`Wyms^7A3Uftq-e=*sTRVuB&*DvI?IR9Q-(TSISSSceKt^%wBjTL?Z$}j5px3f@AsO zv$K~k;|(jD$c=kMd1l{s2Ob5rVbMfAWW2adtmXnA7S!XVw*}4~c|^T=#`A?WL$0QM zm!0@Ioon&fz(4(@M&{k|GUBKui-K`EvdU^vY1b5tRn01KfrC%xp59jb58SlkT;Le* zlj^%;siwn#gXf6v)6anOK07nw*j#~+8vCR34Qv%Kphw9^Vqn z9-5~AM5<>B#h8{}ZxKs1N+i>N@h0jtfFfRr&;GO1Iw<#YCRe^%UOFS=H(|hWWaRx0)~v5AV!uJD%l?%o3g$E54>f)`pyM1K$nh`7Swmfd^I@pmgL?KR?2+M2V2H1rI#;W_z+S?pOh? zmS;}vlSA44>u=K;M>mca8N_$c9APZ<1`QIOr~WE_CIm5u^}{EHH)eS!T}>&CA(`tWes-KyFeyVVE2C|7&f-3x|`pJ6Y&T%;> ztb0Q}%o)-c`mfdluJNpa6FKCZsF!0n#`BxeNmYJ=d!Ad-^HshWPh@+~>rPW=g&yE* zR+xOpkr~!&t#<~)$v+aA>;b- za8!M_t742&zC=ynr=}~~8{ajkmZ4h9PjWxKQ&m44+HiEQA3mnm&?3}T#q*fzBR;n? zdv84Vn+SVK}Wm` zz&!KahW;>q1QFru8j!E{hQ9`6RSrz$zTUf*!04)g1*>`UsUcU>i)fqJ5!WIv#Rk+$^5 z^Tl`~o(iR4M-k0){0<7R1`as1wDV0H$~$6y~kF}afone8oiU|iG4H?(8>SZm9d;N4}`-e5lD!eWZ;aTz-s_@fl zlMGkOHguio3cjM3<$E5)+4!~#zJR0Crc~(2s}N)+xh}Bh^7NK){Oe|RSLht#ihLYm7Tr%;pix^3BOk5E%JwwNdIa+%qf)v|F*?3p_Z3*`A~Z5MBa2$t)H5mr)e6E zI673yip0*ysq=HNdWh4T-y7;DHXE{pH7x8^=n;E0BJaqDuc$`6Vdlm57dY>4m)T|J z!E&{qtZs*&R)q)G?(8QL2k!D-g3gYCU$6|E0mAso`c%Y}t5IqEwfD=q$6G%lFQ7{Q zk@2-NcKT-i0{dIAdnZv<;=8ypE{Zv|(!MRXSU zxi=~AXz)n(T86UM;@q`r9Q1^0dn{W4ijpa!_>+n(oKWncL>!!{HaYO4lCntK*qt+_ zft)dYhoo_TUfNFhxZ-I<0&i3N?7b>YJ=HiI@s@wyuC4yZv$uTj4`*MUyY<2+a!lyE zi(kI@3B7rY44BfF9nhDS1Mmu5fW$J@GQZ>btrjSya2WJSl>7+A-t1bF7-Z9EzN&=6liqkdyS$m|`piek^kVQlVd7jrB@L zKck+BT+fYqd{Xep?WxM!X^k9N5OOc-!G1xq?ySEq{6=OP{VcL&Q2j%D5sPveP~< zIO)&OtY)o+jKw~$i+@e8+J#8%Gmpf9!8;>FMh4b)#)XP)O?l7s&b(RRw#WPnrNdwS zeqb5b8Q}q}Bbm^|Py_8grSr%qsPgYqnv4Ei8PgB*$~fV=b=AmN7%$_a1b5&}d+orX z4|8ud!@+PU^!Z)YteHl-xT}%gw`=dNLEUo<0sVzN5#Mj9*5i1#?c07hV+YHkiAu)C zo4wNm-kb;S8SF3ro?XMc7^(DPrJi}!Ys#Qp3iUl!CDbgr@C#5?fStNkI`X9ny1K6#exucSv9MGv^t5CBy;z zJo8pb_VUyoO*`<=Nk~07Sd?AC15bKwy1#xTMO7b#JdF3%pz3Np z5ocg@P)U@}9+7tb9L%)^{YIW#D^ql}9(oA>SOyoQ_XVCE^Z|mKd7sq$RA6K8;Zi##B zkylSPUjP1@F2@ROf4hw7NX{SI36Fgu`{9SOKX~IhuX8wvyb{%$LKa1N=AS8I4Do~%P+8s597lqYt? z{*?Q6#GO8%=mBqsJNsmR&NgxG$(zHgZJ5(^3AF_VBQ;m@6-$?;#lnW z$hyO)a+cOV5%>I@?!+#G-V2cIthpVTRiFFZ18blEWcuXQr>{Q!mZg93;m<28=^LN* zSL4CmQQ@(g@rS=@KMOgF3`a&F4;}aL`ste12GN+-r=d4(;~`Oaf|{^n$yq`_Aj_=t z(2>}!UaLlOqM?vN&R9nxVawU-M0dG1YDP!+U3>g8EZ}IzbM5<96`hZL&TXfWfMaX!n5^q%H{GJ(oE4y07t`+g#Ex2SA0q@??V85SS;$!sQ zb_9K^W~NN)8L%JyEYBR36t-56)un1X;1jFMay{;lTL6q%qbH@d5w*aVg>3Uw@8Ans z|CkO~CBRY~%$^c${O>p6l{^0Kc+eHqMpWK@D4t#PfOen*bUB*2{|?&2Ioj18jH_mWXt;XXS zf^JJYUIDD`T^Q|<8)FOB_FH-8ta?S}20US^if4$c;%|ZbgVgjA^F?DfY8v2==+MAw^$|mHEbMwl59E*?!|bvsz{j&Z0C_H=#PpooV5D zu;&dT2Z#X_?9?(R5JQCCs(0$S4dM!5r+Vk9e8+fT4-4!YR;rmFyveTWM}}0NspV2& zn(&7rFek@*jDbX;u{|CRHg&K$xe26Iqm(Eup;beJ)JRot+A0#gYf)}`QMIZ> zZz|d=S7Ovd{NpFC{8(U5xZ0>)z&){Ry=6TNXx*s>g3qgTRwp(qAQQ`Ky2N~Vc zqL(>E)6yb1WU5)Fw5;bEJmF$-AtZvQ+6eZBwL=;Evd8g)^TUc*9~vjCs$NAT(>!Fe z`l&_nSz)57{Xv67yXGw|?uUoe*Y%pRWqlR8Gj_GswrVkC?`@Euo^?IQE(7wy8y+^@*G|_=&Rl~a~MscRz z&;5aGZyLO3r1qKBN9@WuPI~ zU~73%HCeFOx%!QNtx~K0f}(H;y^*tWr;)pc9JFwVLXZ{_qr?AV~&W&w42`3DTEWFk&JI=7{4mLKORP459aZT#+|xmr|Kwz zC3C9Qct_JM6?gh}=_`90r+b~g{W|aZc=!H(r+2^Z{$YpXp^Ag3M-r{_W|BJ3Yjc17 zyQiN2;>Z8a7yk7p#7>^5I7+L!pqXR;a2Y<<;yaSHQ^-O_#~P5}P~^$_o~`wrb-D24 z7M8YQkk%Vc&)<-1G)SHU1+&iwt0F=#v;bd31!^R?Vevk;BZJh;Eui(`eY(H)hgDyn z9D0rp;iV*>SMkRh0WQc0>=@w#u_U-FdIw*RS2(k8^GS8Zn%+58Jv>=IEvDZ`9j`Pv zq}ip6K+E`ygMLpqsbO(+ZX?j*`Oz(7ifRcaF{kN0XrI<)3mYD+HSX=)zTS-oo4i^^ zP51iCYDY6#_2^MrnYPi>bM?f=JJHu`=;_g+A37)6xX+YUVF_NT9+O+-7eN7!)n~ZF z)9K4Rhio^TMVE)a=mcZit1*j;u_DLoyUbYS(_Zz;<~6k0N6^o+nOBSK4HCfXnsYpj z(yFSBw)b|vXh!2cJG>1R!fR_vql=x$orHh%%g%+)Z5P)#KQi4>Ic`BMqrwF+6z}Ly z2fEGAH^K3-=*z5e*Zv&~qf*b9!h5k4`XEJU4XL(Vt$0|x4Oh@1IQRJ<&vQKL=m-5I z|4Vu^w$=g@rmdlxw9rMUIqj`wLty}Rh6OPKI!8Zxn<6`?fduaiqYU5Bj>&Pl&y4-< zRkC=mwbb9Ed|E6{yimBMd!bs|=^yluwa!dwA$$;jrG0PI#{QMc+o=?qJ_n!RnPsLg zEqa#2w-(P;J-hYscdt1dk2-xtCnkQPDxdslN$oYeIY!=i0B3)(uA4?qyA@aSA$l%; ziLcFabfU-sEoQ&IpC;5XDpC&tqGzavI{C&`xNw}U4gO+*WrI@{#nNnw;?}XXh_s0V zKfSeu_ddSoZ96B25z|pxQqf`M;s+T`T1YjV15J(JU}-K!jDM!N^PKGw4dHDGq&Yqy z%qtsJrBsF9bCOz81%GGV zH+~bLvsiQ8+zXX&7N11@={@7PW$o^%r^)idSnlGPc$bFX97lO*E&%Z^K+3u9@s?es-Y7 z{pEXmb7ZUL_jbag)zaT#7(YDcn%_Qoo0(kbEp^6*(=VJodwY50Cx=|7^E14!EvI_O zf9CCXvZ%X59`@$?ZfEn};Vy5O>n%>OownR|?dfaZRXx1BzMtk~-#3gP8Ct&oL&Hh7 z*H&-dzxVpe^!k6NK0Q=pIbK(2Nw)Tu%DWnK&)Bw8N5&_Rwg&wcy=TTh$%m4Xn-}}~s&pq)=?M#Y)@YL5o{-3__qi-JC z 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 PAQDM01wGP4#{d5TaYP`1 diff --git a/icu4c/source/data/locales/pool.res b/icu4c/source/data/locales/pool.res deleted file mode 100644 index 31e94c9904fb857761529d0a4ccf50a93e475bbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127644 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 diff --git a/icu4c/source/data/makedata.mak b/icu4c/source/data/makedata.mak index 6a54d0acc8e..d1f13d06a94 100644 --- a/icu4c/source/data/makedata.mak +++ b/icu4c/source/data/makedata.mak @@ -33,12 +33,8 @@ ICU_LIB_TARGET=$(DLL_OUTPUT)\$(U_ICUDATA_NAME).dll !ENDIF !MESSAGE ICU data make path is $(ICUMAKE) -!IF [py -3]!=0 -!MESSAGE Information: Unable to find Python 3. ICU versions 64 and later will require Python 3 to build. -!MESSAGE Information: See ICU-10923 for more information: https://unicode-org.atlassian.net/browse/ICU-10923 -!ELSE -!MESSAGE Information: Found Python 3. You are all set for ICU 64, which will require Python 3 to build. -!MESSAGE Information: For more info on Python 3 requirement, see: https://unicode-org.atlassian.net/browse/ICU-10923 +!IF [py -3 -c "exit(0)"]!=0 +!MESSAGE Information: Unable to find Python 3. Data will fail to build from source. !ENDIF # Suffixes for data files @@ -72,15 +68,9 @@ ICUP=$(ICUP:\source\data\\..\..=) ICUSRCDATA=$(ICUP)\source\data ICUSRCDATA_RELATIVE_PATH=..\..\.. -# ICUUCM -# The directory that contains ucmcore.mk files along with *.ucm files -# -ICUUCM=mappings - -# ICULOC -# The directory that contains resfiles.mk files along with *.txt locale data files -# -ICULOC=locales +# Timestamp files to keep track of current build state +TOOLS_TS=$(ICUTMP)\tools.timestamp +COREDATA_TS=$(ICUTMP)\coredata.timestamp # ICUCOL # The directory that contains colfiles.mk files along with *.txt collation data files @@ -102,23 +92,6 @@ ICUTRNS=translit # ICUBRK=brkitr -# ICUUNIDATA -# The directory that contains Unicode data files -# -ICUUNIDATA=$(ICUP)\source\data\unidata - - -# ICUMISC -# The directory that contains miscfiles.mk along with files that are miscelleneous data -# -ICUMISC=$(ICUP)\source\data\misc -ICUMISC2=misc - -# ICUSPREP -# The directory that contains sprepfiles.mk files along with *.txt stringprep files -# -ICUSPREP=sprep - # # ICUDATA # The source directory. Contains the source files for the common data to be built. @@ -210,345 +183,8 @@ ICUDATA_SOURCE_ARCHIVE=$(ICUTMP)\$(ICUPKG).dat !IFDEF ICUDATA_SOURCE_ARCHIVE !MESSAGE ICU data source archive is $(ICUDATA_SOURCE_ARCHIVE) -!ELSE -# We're including a list of .ucm files. -# There are several lists, they are all optional. - -# Always build the mapping files for the EBCDIC fallback codepages -# They are necessary on EBCDIC machines, and -# the following logic is much easier if UCM_SOURCE is never empty. -# (They are small.) -UCM_SOURCE=ibm-37_P100-1995.ucm ibm-1047_P100-1995.ucm - -!IF EXISTS("$(ICUSRCDATA)\$(ICUUCM)\ucmcore.mk") -!INCLUDE "$(ICUSRCDATA)\$(ICUUCM)\ucmcore.mk" -UCM_SOURCE=$(UCM_SOURCE) $(UCM_SOURCE_CORE) -!ELSE -!MESSAGE Warning: cannot find "ucmcore.mk". Not building core MIME/Unix/Windows converter files. !ENDIF -!IF EXISTS("$(ICUSRCDATA)\$(ICUUCM)\ucmfiles.mk") -!INCLUDE "$(ICUSRCDATA)\$(ICUUCM)\ucmfiles.mk" -UCM_SOURCE=$(UCM_SOURCE) $(UCM_SOURCE_FILES) -!ELSE -!MESSAGE Warning: cannot find "ucmfiles.mk". Not building many converter files. -!ENDIF - -!IF EXISTS("$(ICUSRCDATA)\$(ICUUCM)\ucmebcdic.mk") -!INCLUDE "$(ICUSRCDATA)\$(ICUUCM)\ucmebcdic.mk" -UCM_SOURCE=$(UCM_SOURCE) $(UCM_SOURCE_EBCDIC) -!IFDEF UCM_SOURCE_EBCDIC_IGNORE_SISO -BUILD_SPECIAL_CNV_FILES=YES -UCM_SOURCE_SPECIAL=$(UCM_SOURCE_EBCDIC_IGNORE_SISO) -!ELSE -!UNDEF BUILD_SPECIAL_CNV_FILES -!ENDIF -!ELSE -!MESSAGE Warning: cannot find "ucmebcdic.mk". Not building EBCDIC converter files. -!ENDIF - -!IF EXISTS("$(ICUSRCDATA)\$(ICUUCM)\ucmlocal.mk") -!INCLUDE "$(ICUSRCDATA)\$(ICUUCM)\ucmlocal.mk" -!IFDEF UCM_SOURCE_LOCAL -UCM_SOURCE=$(UCM_SOURCE) $(UCM_SOURCE_LOCAL) -!ENDIF -!IFDEF UCM_SOURCE_EBCDIC_IGNORE_SISO_LOCAL -UCM_SOURCE_SPECIAL=$(UCM_SOURCE_SPECIAL) $(UCM_SOURCE_EBCDIC_IGNORE_SISO_LOCAL) -BUILD_SPECIAL_CNV_FILES=YES -!ENDIF -!ELSE -!MESSAGE Information: cannot find "ucmlocal.mk". Not building user-additional converter files. -!ENDIF - -CNV_FILES=$(UCM_SOURCE:.ucm=.cnv) -!IFDEF BUILD_SPECIAL_CNV_FILES -CNV_FILES_SPECIAL=$(UCM_SOURCE_SPECIAL:.ucm=.cnv) -!ENDIF - -!IF EXISTS("$(ICUSRCDATA)\$(ICUBRK)\brkfiles.mk") -!INCLUDE "$(ICUSRCDATA)\$(ICUBRK)\brkfiles.mk" -!IF EXISTS("$(ICUSRCDATA)\$(ICUBRK)\brklocal.mk") -!INCLUDE "$(ICUSRCDATA)\$(ICUBRK)\brklocal.mk" -!IFDEF BRK_SOURCE_LOCAL -BRK_SOURCE=$(BRK_SOURCE) $(BRK_SOURCE_LOCAL) -!ENDIF -!IFDEF BRK_DICT_SOURCE_LOCAL -BRK_DICT_SOURCE=$(BRK_DICT_SOURCE) $(BRK_DICT_SOURCE_LOCAL) -!ENDIF -!IFDEF BRK_RES_SOURCE_LOCAL -BRK_RES_SOURCE=$(BRK_RES_SOURCE) $(BRK_RES_SOURCE_LOCAL) -!ENDIF -!ELSE -!MESSAGE Information: cannot find "brklocal.mk". Not building user-additional break iterator files. -!ENDIF -!ELSE -!MESSAGE Warning: cannot find "brkfiles.mk" -!ENDIF - -# -# Break iterator data files. -# -BRK_FILES=$(ICUBRK)\$(BRK_SOURCE:.txt =.brk brkitr\) -BRK_FILES=$(BRK_FILES:.txt=.brk) -BRK_FILES=$(BRK_FILES:brkitr\ =brkitr\) - -!IFDEF BRK_DICT_SOURCE -BRK_DICT_FILES = $(ICUBRK)\$(BRK_DICT_SOURCE:.txt =.dict brkitr\) -BRK_DICT_FILES = $(BRK_DICT_FILES:.txt=.dict) -BRK_DICT_FILES = $(BRK_DICT_FILES:brkitr\ =brkitr\) -!ENDIF - -!IFDEF BRK_RES_SOURCE -BRK_RES_FILES = $(BRK_RES_SOURCE:.txt =.res brkitr\) -BRK_RES_FILES = $(BRK_RES_FILES:.txt=.res) -BRK_RES_FILES = $(ICUBRK)\root.res $(ICUBRK)\$(BRK_RES_FILES:brkitr\ =) -ALL_RES = $(ALL_RES) $(ICUBRK)\res_index.res -!ENDIF - -# Read list of locale resource bundle files -!IF EXISTS("$(ICUSRCDATA)\$(ICULOC)\resfiles.mk") -!INCLUDE "$(ICUSRCDATA)\$(ICULOC)\resfiles.mk" -!IF EXISTS("$(ICUSRCDATA)\$(ICULOC)\reslocal.mk") -!INCLUDE "$(ICUSRCDATA)\$(ICULOC)\reslocal.mk" -!IFDEF GENRB_SOURCE_LOCAL -GENRB_SOURCE=$(GENRB_SOURCE) $(GENRB_SOURCE_LOCAL) -!ENDIF -!ELSE -!MESSAGE Information: cannot find "reslocal.mk". Not building user-additional resource bundle files. -!ENDIF -!ELSE -!MESSAGE Warning: cannot find "resfiles.mk" -!ENDIF - -!IFDEF GENRB_SOURCE -RB_FILES = root.res pool.res $(GENRB_ALIAS_SOURCE:.txt=.res) $(GENRB_ALIAS_SOURCE_LOCAL:.txt=.res) $(GENRB_SOURCE:.txt=.res) -ALL_RES = $(ALL_RES) res_index.res -!ENDIF - - -# Read the list of currency display name resource bundle files -!IF EXISTS("$(ICUSRCDATA)\curr\resfiles.mk") -!INCLUDE "$(ICUSRCDATA)\curr\resfiles.mk" -!IF EXISTS("$(ICUSRCDATA)\curr\reslocal.mk") -!INCLUDE "$(ICUSRCDATA)\curr\reslocal.mk" -!IFDEF CURR_SOURCE_LOCAL -CURR_SOURCE=$(CURR_SOURCE) $(CURR_SOURCE_LOCAL) -!ENDIF -!ELSE -!MESSAGE Information: cannot find "curr\reslocal.mk". Not building user-additional resource bundle files. -!ENDIF -!ELSE -!MESSAGE Warning: cannot find "curr\resfiles.mk" -!ENDIF - -!IFDEF CURR_SOURCE -CURR_FILES = curr\root.txt supplementalData.txt $(CURR_ALIAS_SOURCE) $(CURR_SOURCE) -CURR_RES_FILES = $(CURR_FILES:.txt =.res curr\) -CURR_RES_FILES = $(CURR_RES_FILES:.txt=.res) -CURR_RES_FILES = curr\pool.res $(CURR_RES_FILES:curr\ =curr\) -ALL_RES = $(ALL_RES) curr\res_index.res -!ENDIF - -# Read the list of language/script display name resource bundle files -!IF EXISTS("$(ICUSRCDATA)\lang\resfiles.mk") -!INCLUDE "$(ICUSRCDATA)\lang\resfiles.mk" -!IF EXISTS("$(ICUSRCDATA)\lang\reslocal.mk") -!INCLUDE "$(ICUSRCDATA)\lang\reslocal.mk" -!IFDEF LANG_SOURCE_LOCAL -LANG_SOURCE=$(LANG_SOURCE) $(LANG_SOURCE_LOCAL) -!ENDIF -!ELSE -!MESSAGE Information: cannot find "lang\reslocal.mk". Not building user-additional resource bundle files. -!ENDIF -!ELSE -!MESSAGE Warning: cannot find "lang\resfiles.mk" -!ENDIF - -!IFDEF LANG_SOURCE -LANG_FILES = lang\root.txt $(LANG_ALIAS_SOURCE) $(LANG_SOURCE) -LANG_RES_FILES = $(LANG_FILES:.txt =.res lang\) -LANG_RES_FILES = $(LANG_RES_FILES:.txt=.res) -LANG_RES_FILES = lang\pool.res $(LANG_RES_FILES:lang\ =lang\) -ALL_RES = $(ALL_RES) lang\res_index.res -!ENDIF - -# Read the list of region display name resource bundle files -!IF EXISTS("$(ICUSRCDATA)\region\resfiles.mk") -!INCLUDE "$(ICUSRCDATA)\region\resfiles.mk" -!IF EXISTS("$(ICUSRCDATA)\region\reslocal.mk") -!INCLUDE "$(ICUSRCDATA)\region\reslocal.mk" -!IFDEF REGION_SOURCE_LOCAL -REGION_SOURCE=$(REGION_SOURCE) $(REGION_SOURCE_LOCAL) -!ENDIF -!ELSE -!MESSAGE Information: cannot find "region\reslocal.mk". Not building user-additional resource bundle files. -!ENDIF -!ELSE -!MESSAGE Warning: cannot find "region\resfiles.mk" -!ENDIF - -!IFDEF REGION_SOURCE -REGION_FILES = region\root.txt $(REGION_ALIAS_SOURCE) $(REGION_SOURCE) -REGION_RES_FILES = $(REGION_FILES:.txt =.res region\) -REGION_RES_FILES = $(REGION_RES_FILES:.txt=.res) -REGION_RES_FILES = region\pool.res $(REGION_RES_FILES:region\ =region\) -ALL_RES = $(ALL_RES) region\res_index.res -!ENDIF - -# Read the list of time zone display name resource bundle files -!IF EXISTS("$(ICUSRCDATA)\zone\resfiles.mk") -!INCLUDE "$(ICUSRCDATA)\zone\resfiles.mk" -!IF EXISTS("$(ICUSRCDATA)\zone\reslocal.mk") -!INCLUDE "$(ICUSRCDATA)\zone\reslocal.mk" -!IFDEF ZONE_SOURCE_LOCAL -ZONE_SOURCE=$(ZONE_SOURCE) $(ZONE_SOURCE_LOCAL) -!ENDIF -!ELSE -!MESSAGE Information: cannot find "zone\reslocal.mk". Not building user-additional resource bundle files. -!ENDIF -ZONE_SOURCE=$(ZONE_SOURCE) tzdbNames.txt -!ELSE -!MESSAGE Warning: cannot find "zone\resfiles.mk" -!ENDIF - -!IFDEF ZONE_SOURCE -ZONE_FILES = zone\root.txt $(ZONE_ALIAS_SOURCE) $(ZONE_SOURCE) -ZONE_RES_FILES = $(ZONE_FILES:.txt =.res zone\) -ZONE_RES_FILES = $(ZONE_RES_FILES:.txt=.res) -ZONE_RES_FILES = zone\pool.res $(ZONE_RES_FILES:zone\ =zone\) -ALL_RES = $(ALL_RES) zone\res_index.res -!ENDIF - -# Read the list of units display name resource bundle files -!IF EXISTS("$(ICUSRCDATA)\unit\resfiles.mk") -!INCLUDE "$(ICUSRCDATA)\unit\resfiles.mk" -!IF EXISTS("$(ICUSRCDATA)\unit\reslocal.mk") -!INCLUDE "$(ICUSRCDATA)\unit\reslocal.mk" -!IFDEF UNIT_SOURCE_LOCAL -UNIT_SOURCE=$(UNIT_SOURCE) $(UNIT_SOURCE_LOCAL) -!ENDIF -!ELSE -!MESSAGE Information: cannot find "unit\reslocal.mk". Not building user-additional resource bundle files. -!ENDIF -!ELSE -!MESSAGE Warning: cannot find "unit\resfiles.mk" -!ENDIF - -!IFDEF UNIT_SOURCE -UNIT_FILES = unit\root.txt $(UNIT_ALIAS_SOURCE) $(UNIT_SOURCE) -UNIT_RES_FILES = $(UNIT_FILES:.txt =.res unit\) -UNIT_RES_FILES = $(UNIT_RES_FILES:.txt=.res) -UNIT_RES_FILES = unit\pool.res $(UNIT_RES_FILES:unit\ =unit\) -ALL_RES = $(ALL_RES) unit\res_index.res -!ENDIF - -# Read the list of collation resource bundle files -!IF EXISTS("$(ICUSRCDATA)\$(ICUCOL)\colfiles.mk") -!INCLUDE "$(ICUSRCDATA)\$(ICUCOL)\colfiles.mk" -!IF EXISTS("$(ICUSRCDATA)\$(ICUCOL)\collocal.mk") -!INCLUDE "$(ICUSRCDATA)\$(ICUCOL)\collocal.mk" -!IFDEF COLLATION_SOURCE_LOCAL -COLLATION_SOURCE=$(COLLATION_SOURCE) $(COLLATION_SOURCE_LOCAL) -!ENDIF -!ELSE -!MESSAGE Information: cannot find "collocal.mk". Not building user-additional resource bundle files. -!ENDIF -!ELSE -!MESSAGE Warning: cannot find "colfiles.mk" -!ENDIF - -!IFDEF COLLATION_SOURCE -COL_FILES = $(ICUCOL)\root.txt $(COLLATION_ALIAS_SOURCE) $(COLLATION_SOURCE) -COL_COL_FILES = $(COL_FILES:.txt =.res coll\) -COL_COL_FILES = $(COL_COL_FILES:.txt=.res) -COL_COL_FILES = $(COL_COL_FILES:coll\ =) -ALL_RES = $(ALL_RES) $(ICUCOL)\res_index.res -!ENDIF - -# Read the list of RBNF resource bundle files -!IF EXISTS("$(ICUSRCDATA)\$(ICURBNF)\rbnffiles.mk") -!INCLUDE "$(ICUSRCDATA)\$(ICURBNF)\rbnffiles.mk" -!IF EXISTS("$(ICUSRCDATA)\$(ICURBNF)\rbnflocal.mk") -!INCLUDE "$(ICUSRCDATA)\$(ICURBNF)\rbnflocal.mk" -!IFDEF RBNF_SOURCE_LOCAL -RBNF_SOURCE=$(RBNF_SOURCE) $(RBNF_SOURCE_LOCAL) -!ENDIF -!ELSE -!MESSAGE Information: cannot find "rbnflocal.mk". Not building user-additional resource bundle files. -!ENDIF -!ELSE -!MESSAGE Warning: cannot find "rbnffiles.mk" -!ENDIF - -!IFDEF RBNF_SOURCE -RBNF_FILES = $(ICURBNF)\root.txt $(RBNF_ALIAS_SOURCE) $(RBNF_SOURCE) -RBNF_RES_FILES = $(RBNF_FILES:.txt =.res rbnf\) -RBNF_RES_FILES = $(RBNF_RES_FILES:.txt=.res) -RBNF_RES_FILES = $(RBNF_RES_FILES:rbnf\ =rbnf\) -ALL_RES = $(ALL_RES) $(ICURBNF)\res_index.res -!ENDIF - -# Read the list of transliterator resource bundle files -!IF EXISTS("$(ICUSRCDATA)\$(ICUTRNS)\trnsfiles.mk") -!INCLUDE "$(ICUSRCDATA)\$(ICUTRNS)\trnsfiles.mk" -!IF EXISTS("$(ICUSRCDATA)\$(ICUTRNS)\trnslocal.mk") -!INCLUDE "$(ICUSRCDATA)\$(ICUTRNS)\trnslocal.mk" -!IFDEF TRANSLIT_SOURCE_LOCAL -TRANSLIT_SOURCE=$(TRANSLIT_SOURCE) $(TRANSLIT_SOURCE_LOCAL) -!ENDIF -!ELSE -!MESSAGE Information: cannot find "trnslocal.mk". Not building user-additional transliterator files. -!ENDIF -!ELSE -!MESSAGE Warning: cannot find "trnsfiles.mk" -!ENDIF - -!IFDEF TRANSLIT_SOURCE -TRANSLIT_FILES = $(ICUTRNS)\$(TRANSLIT_ALIAS_SOURCE) $(TRANSLIT_SOURCE) -TRANSLIT_RES_FILES = $(TRANSLIT_FILES:.txt =.res translit\) -TRANSLIT_RES_FILES = $(TRANSLIT_RES_FILES:.txt=.res) -TRANSLIT_RES_FILES = $(TRANSLIT_RES_FILES:translit\ =translit\) -#ALL_RES = $(ALL_RES) $(ICUTRNS)\res_index.res -!ENDIF - -# Read the list of miscellaneous resource bundle files -!IF EXISTS("$(ICUSRCDATA)\$(ICUMISC2)\miscfiles.mk") -!INCLUDE "$(ICUSRCDATA)\$(ICUMISC2)\miscfiles.mk" -!IF EXISTS("$(ICUSRCDATA)\$(ICUMISC2)\misclocal.mk") -!INCLUDE "$(ICUSRCDATA)\$(ICUMISC2)\misclocal.mk" -!IFDEF MISC_SOURCE_LOCAL -MISC_SOURCE=$(MISC_SOURCE) $(MISC_SOURCE_LOCAL) -!ENDIF -!ELSE -!MESSAGE Information: cannot find "misclocal.mk". Not building user-additional miscellaenous files. -!ENDIF -!ELSE -!MESSAGE Warning: cannot find "miscfiles.mk" -!ENDIF - -MISC_FILES = $(MISC_SOURCE:.txt=.res) - -# don't include COL_FILES -ALL_RES = $(ALL_RES) $(RB_FILES) $(MISC_FILES) -!ENDIF - -# Read the list of stringprep profile files -!IF EXISTS("$(ICUSRCDATA)\$(ICUSPREP)\sprepfiles.mk") -!INCLUDE "$(ICUSRCDATA)\$(ICUSPREP)\sprepfiles.mk" -!IF EXISTS("$(ICUSRCDATA)\$(ICUSPREP)\spreplocal.mk") -!INCLUDE "$(ICUSRCDATA)\$(ICUSPREP)\spreplocal.mk" -!IFDEF SPREP_SOURCE_LOCAL -SPREP_SOURCE=$(SPREP_SOURCE) $(SPREP_SOURCE_LOCAL) -!ENDIF -!ELSE -!MESSAGE Information: cannot find "spreplocal.mk". Not building user-additional stringprep files. -!ENDIF -!ELSE -!MESSAGE Warning: cannot find "sprepfiles.mk" -!ENDIF - -SPREP_FILES = $(SPREP_SOURCE:.txt=.spp) - # Common defines for both ways of building ICU's data library. COMMON_ICUDATA_DEPENDENCIES="$(ICUPBIN)\pkgdata.exe" "$(ICUTMP)\icudata.res" "$(ICUP)\source\stubdata\stubdatabuilt.txt" COMMON_ICUDATA_ARGUMENTS=-f -e $(U_ICUDATA_NAME) -v $(ICU_PACKAGE_MODE) -c -p $(ICUPKG) -T "$(ICUTMP)" -L $(U_ICUDATA_NAME) -d "$(ICUBLD_PKG)" -s . @@ -576,6 +212,37 @@ ALL : GODATA "$(ICU_LIB_TARGET)" "$(TESTDATAOUT)\testdata.dat" copy "$(ICUOUT)\$(U_ICUDATA_NAME)$(U_ICUDATA_ENDIAN_SUFFIX).dat" "$(ICUMAKE)\..\..\commondata\" !ENDIF + +# Three main targets: tools, core data, and test data. +# Keep track of whether they are built via timestamp files. + +$(TOOLS_TS): "$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb.exe" "$(ICUTOOLS)\gencnval\$(CFGTOOLS)\gencnval.exe" "$(ICUTOOLS)\gencfu\$(CFGTOOLS)\gencfu.exe" "$(ICUTOOLS)\icupkg\$(CFGTOOLS)\icupkg.exe" "$(ICUTOOLS)\makeconv\$(CFGTOOLS)\makeconv.exe" "$(ICUPBIN)\pkgdata.exe" + @echo "timestamp" > $(TOOLS_TS) + +# On Unix, Python generates at configure time a list of Makefile rules. +# On Windows, however, we run the Python data build script at build time instead. +# The alternative would be to use a preprocessor macro to generate rules for nmake. +# However, this approach was abandoned for reasons including: +# +# - nmake imposes more stringent restrictions on command line length. +# - The lack of gnumake features makes nmake file construction more complex. +# - Windows builds are single-threaded, giving less advantage to a Makefile approach. +# +# Currently, the entire script needs to run even for small changes to data. Maybe consider +# checking file-changed timestamps in Python to build only the required subset of data. + +$(COREDATA_TS): + @cd "$(ICUSRCDATA)" + py -3 -m buildtool \ + --format windirect \ + --in_dir "$(ICUSRCDATA)" \ + --tool_dir "$(ICUTOOLS)" \ + --tool_cfg "$(CFG)" \ + --out_dir "$(ICUBLD_PKG)" \ + --tmp_dir "$(ICUTMP)" + @echo "timestamp" > $(COREDATA_TS) + + # The core Unicode properties files (uprops.icu, ucase.icu, ubidi.icu) # are hardcoded in the common DLL and therefore not included in the data package any more. # They are not built by default but need to be built for ICU4J data and for getting the .c source files @@ -673,10 +340,10 @@ icu4j-data-install : # # testdata - nmake will invoke pkgdata, which will create testdata.dat # -"$(TESTDATAOUT)\testdata.dat": "$(TESTDATA)\*" "$(ICUBLD_PKG)\$(ICUCOL)\ucadata.icu" $(TRANSLIT_RES_FILES) $(MISC_FILES) $(RB_FILES) {"$(ICUTOOLS)\genrb\$(CFGTOOLS)"}genrb.exe +"$(TESTDATAOUT)\testdata.dat": "$(TESTDATA)\*" $(TOOLS_TS) $(COREDATA_TS) @cd "$(TESTDATA)" @echo building testdata... - nmake /nologo /f "$(TESTDATA)\testdata.mak" TESTDATA=. ICUTOOLS="$(ICUTOOLS)" ICUPBIN="$(ICUPBIN)" ICUP="$(ICUP)" CFG=$(CFGTOOLS) TESTDATAOUT="$(TESTDATAOUT)" TESTDATABLD="$(TESTDATABLD)" + nmake /nologo /f "$(TESTDATA)\testdata.mak" TESTDATA=. ICUTOOLS="$(ICUTOOLS)" ICUPBIN="$(ICUPBIN)" ICUP="$(ICUP)" CFG=$(CFGTOOLS) TESTDATAOUT="$(TESTDATAOUT)" TESTDATABLD="$(TESTDATABLD)" ICUSRCDATA="$(ICUSRCDATA)" DLL_OUTPUT="$(DLL_OUTPUT)" #invoke pkgdata for ICU common data # pkgdata will drop all output files (.dat, .dll, .lib) into the target (ICUBLD_PKG) directory. @@ -697,50 +364,12 @@ icu4j-data-install : copy "$(ICUTMP)\$(ICUPKG).dat" "$(ICUOUT)\$(U_ICUDATA_NAME)$(U_ICUDATA_ENDIAN_SUFFIX).dat" -@erase "$(ICUTMP)\$(ICUPKG).dat" !ELSE -"$(ICU_LIB_TARGET)" : $(COMMON_ICUDATA_DEPENDENCIES) $(CNV_FILES) $(CNV_FILES_SPECIAL) "$(ICUBLD_PKG)\unames.icu" "$(ICUBLD_PKG)\cnvalias.icu" "$(ICUBLD_PKG)\nfkc.nrm" "$(ICUBLD_PKG)\nfkc_cf.nrm" "$(ICUBLD_PKG)\uts46.nrm" "$(ICUBLD_PKG)\$(ICUCOL)\ucadata.icu" $(CURR_RES_FILES) $(LANG_RES_FILES) $(REGION_RES_FILES) $(ZONE_RES_FILES) $(UNIT_RES_FILES) $(BRK_FILES) $(BRK_DICT_FILES) $(BRK_RES_FILES) $(ALL_RES) $(COL_COL_FILES) $(RBNF_RES_FILES) $(TRANSLIT_RES_FILES) $(SPREP_FILES) "$(ICUBLD_PKG)\confusables.cfu" - @echo Building icu data +"$(ICU_LIB_TARGET)" : $(COMMON_ICUDATA_DEPENDENCIES) $(COREDATA_TS) + @echo Building ICU data from scratch cd "$(ICUBLD_PKG)" - "$(ICUPBIN)\pkgdata" $(COMMON_ICUDATA_ARGUMENTS) <<"$(ICUTMP)\icudata.lst" -unames.icu -confusables.cfu -$(ICUCOL)\ucadata.icu -cnvalias.icu -nfkc.nrm -nfkc_cf.nrm -uts46.nrm -$(CNV_FILES:.cnv =.cnv -) -$(CNV_FILES_SPECIAL:.cnv =.cnv -) -$(ALL_RES:.res =.res -) -$(CURR_RES_FILES:.res =.res -) -$(LANG_RES_FILES:.res =.res -) -$(REGION_RES_FILES:.res =.res -) -$(ZONE_RES_FILES:.res =.res -) -$(UNIT_RES_FILES:.res =.res -) -$(COL_COL_FILES:.res =.res -) -$(RBNF_RES_FILES:.res =.res -) -$(TRANSLIT_RES_FILES:.res =.res -) -$(BRK_FILES:.brk =.brk -) -$(BRK_DICT_FILES:.dict =.dict -) -$(BRK_RES_FILES:.res =.res -) -$(SPREP_FILES:.spp=.spp -) -<v! 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 diff --git a/icu4c/source/data/unit/pool.res b/icu4c/source/data/unit/pool.res deleted file mode 100644 index 32cdecb14fd3d29266a03d49e6848bdf96af6ac4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80072 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 $0_Ug=?S)FB<#ZH zOg^sp1`KIBPcM~A-6xg%pladW`joq;V0m{2+XVM|OsNSQ-K*!`hfHcZM=O;({>tmG z{r>623oo{3GS)3mP4;bEzdZ47<3Ii5Z%)0~=GR8dIyv=+|KuA}x9gXE#tXjHzgY3; zh4nXnVl}aY)l`>|rzYkqPfc}j>RVsFbK2~m*|2JAUas?2%XMlhH(B&=Or^Y__@mOh zj_kt%!$c%>?=?!ZUDyorpH>dACf41S!s*F!@Rm==CqF&`QJ>MrjOF8JF38eQI#xGN zx1BLQh|G|AGw*7{tBO&jBPtpEi1?l2OAD8%uf z{;$)C+Oltv_O#HhBT9`cz<4*YKCD>Uii1*Nb+2s1Ik?z=?Q$IewS8K)ioY1dLZq2bq9^s_DI} zfqXZv41<2CQT*;i7W5zRmfeI4t0O66PgxK|_pO>d!(kQ84<`9TUmv|wDm0axM(9QKzHsR_;^ zvXnk1_eMqD&V?RBQm(2DYUJGm@MBJ4ZV=n=@tx6EkU%(2zPu888>Gn2OGg>O&w%;x z<02b?2l%W~_X$6luOiQ0{e$b{Y+j$=!y0qd8zkxtUTe>`VWBJUDk91VY?rqS|2;;U z!-|*};jE;@i$r{fcZ$DC?BJBjxnDKl3??&Z3He#pV!TL_w`ycSj1GuVe6&9AhxlE* zU)ZM+)rpmKP_?6deIn5FMdTlQs)cVgT07KEdX|3j`A_bJ=L6nmuM+8LzB9iQf0wT> zEXpfDPLQ_~`Y+Z4&6fLmkt2m6jWKQL&r`a?4j~_rqm1kbQiWHQ_dnxesf-+$y$}A& z{PcO3iOcw?+Tq<|L_#EP6?QN37VPf@?IKs~X@`TwTbPwx#E7*|C^u1U^cp9`f{j7t zM31ox@i{$XbmQK5N0pK8J!3I_XF&dOoV-&Pc{{H2wI3B)-Ycy9u8{K=6>spAP_*R} zKj$`$7B%xZ(J7rcO7`3PjOfou2Oih#U#&eaO%bna(i!Mi`m-E)$chECj`@#eLVtiC zY;!;d-gkgiz|O{Ks%kpAgmE919>xyFD49I{?%@%Qk$v8Bdh$bGRykg~K(i%|9UZ@} z8jh%*_|@1=9m)qBdi#*k2WjIb7V`9XR{B{mZ0lwN04Vm1ltUPK<25x({uU%o^qBs z2)G(7kk4hd7G}&Ns&M`vX+&UhsHOKJV3%i9T0F%f?;rFqE1&Rz$8=>}L;gHH;vmxf zTM4|AmylNV))kfm_J6yzl1kfJvgphRb~SHOg^|KYHQBP=aP91%tWOwaB9*^)gf+Z}8ZZN-Yv2gK@`Rl=%x*F|1`m?>6au{?K#H$V&E3NQm_ zArdd>)icHyri%WrGIDX35$iYfzWbJ4^sJZh?Q*{nzemg+Hjt=2NBH?ym5I{ZyZw~d zrc<(wd&9YAob%@RGTi<+)qpc|qP6w7|pLnH1 zVsBD8a6RU4#)o!?vnlo|#nEx>ROVN^@@PGta-KPn;ojR!gdZFXeAVR8XH;)^9-kpV zI_wWSB4C-)cN3H2-&LSi)H9_MT?nJZn>t6Z6wQ@*m)>+UB<1wPdz8}?OTupJpL^^3 zpZ!dSUz<)Gkbmv@7iQjj?H``YBiQWM5OaeD#&Y}0o(Gy46oL1GZo~(VJ{uMo+la*g zWAFs@7*XPg-ayYLzsH&Gt5oP+V( zn&PLU_c^BW*Yz*1i6-8P`rv~v2aM%i$+6aPU1wNh%qT5&>*nvUE0}ekG}>dj$Irw@ zQqT0Ah-E=Ae35lqf5&ZSRKR^O0`bYTN`gZvqbXXNJT!KVFUeZRcc=kn$DI&d`8!Be zTmhyAaTn_M^aeN!S!B#|R2aSLel4Z#jJWMJ2r|ZT$K8W3Ngw0OqT`dTz-!=lVOcZa z3GHEgsC9WIdm{8>xqsZF$W5$Ud9?A3Y~!(NUW;|SNJIq(^!+j}xJMQhi-g@^6~w

pZN3jf8scQBGE_ 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 diff --git a/icu4c/source/test/testdata/BUILDRULES.py b/icu4c/source/test/testdata/BUILDRULES.py new file mode 100644 index 00000000000..9e12ac1ec40 --- /dev/null +++ b/icu4c/source/test/testdata/BUILDRULES.py @@ -0,0 +1,227 @@ +# Copyright (C) 2018 and later: Unicode, Inc. and others. +# License & terms of use: http://www.unicode.org/copyright.html + +from distutils.sysconfig import parse_makefile + +from buildtool import * + + +def generate(config, glob, common_vars): + build_dirs = ["{OUT_DIR}", "{TMP_DIR}"] + + requests = [] + requests += generate_rb(config, glob, common_vars) + requests += generate_sprep(config, glob, common_vars) + requests += generate_conv(config, glob, common_vars) + requests += generate_other(config, glob, common_vars) + requests += generate_copy(config, glob, common_vars) + + all_output_files = list(sorted(utils.get_all_output_files(requests))) + all_output_files_with_tmp = list(sorted(utils.get_all_output_files(requests, include_tmp=True))) + testdata_list_file = TmpFile("testdata.lst") + requests += [ + PrintFileRequest( + name = "testdata_list", + output_file = testdata_list_file, + content = "\n".join(file.filename for file in all_output_files) + ), + VariableRequest( + name = "testdata_all_output_files", + input_files = all_output_files_with_tmp + [testdata_list_file] + ) + ] + + return (build_dirs, requests) + + +def generate_rb(config, glob, common_vars): + mk_vars = parse_makefile("{GLOB_DIR}/tstfiles.mk".format(**common_vars)) + basenames = [v[:-4] for v in mk_vars["TEST_RES_SOURCE"].split()] + basenames += [ + "casing", + "mc", + "root", + "sh", + "sh_YU", + "te", + "te_IN", + "te_IN_REVISED", + "testtypes", + "testaliases", + "testempty", + "structLocale", + "idna_rules", + "conversion", + "icuio", + # "metaZones", + # "timezoneTypes", + # "windowsZones", + ] + return [ + # Inference rule for creating resource bundles + # Some test data resource bundles are known to have warnings and bad data. + # The -q option is there on purpose, so we don't see it normally. + # TODO: Use option -k? + RepeatedExecutionRequest( + name = "testrb", + dep_files = [], + input_files = [InFile("%s.txt" % bn) for bn in basenames], + output_files = [OutFile("%s.res" % bn) for bn in basenames], + tool = IcuTool("genrb"), + args = "-q -s {IN_DIR} -d {OUT_DIR} {INPUT_FILE}", + format_with = {}, + repeat_with = {} + ), + # Other standalone res files + SingleExecutionRequest( + name = "encoded", + input_files = [InFile("encoded.utf16be")], + output_files = [OutFile("encoded.res")], + tool = IcuTool("genrb"), + args = "-s {IN_DIR} -eUTF-16BE -d {OUT_DIR} {INPUT_FILES[0]}", + format_with = {} + ), + SingleExecutionRequest( + name = "idna_rules", + input_files = [InFile("idna_rules.txt")], + output_files = [OutFile("idna_rules.res")], + tool = IcuTool("genrb"), + args = "-s {IN_DIR} -d {OUT_DIR} {INPUT_FILES[0]}", + format_with = {} + ), + SingleExecutionRequest( + name = "zoneinfo64", + input_files = [InFile("zoneinfo64.txt")], + output_files = [TmpFile("zoneinfo64.res")], + tool = IcuTool("genrb"), + args = "-s {IN_DIR} -d {TMP_DIR} {INPUT_FILES[0]}", + format_with = {} + ) + ] + + +def generate_sprep(config, glob, common_vars): + return [ + SingleExecutionRequest( + name = "nfscsi", + input_files = [InFile("nfs4_cs_prep_ci.txt")], + output_files = [OutFile("nfscsi.spp")], + tool = IcuTool("gensprep"), + args = "-s {IN_DIR} -d {OUT_DIR} -b nfscsi -u 3.2.0 {INPUT_FILES[0]}", + format_with = {} + ), + SingleExecutionRequest( + name = "nfscss", + input_files = [InFile("nfs4_cs_prep_cs.txt")], + output_files = [OutFile("nfscss.spp")], + tool = IcuTool("gensprep"), + args = "-s {IN_DIR} -d {OUT_DIR} -b nfscss -u 3.2.0 {INPUT_FILES[0]}", + format_with = {} + ), + SingleExecutionRequest( + name = "nfscis", + input_files = [InFile("nfs4_cis_prep.txt")], + output_files = [OutFile("nfscis.spp")], + tool = IcuTool("gensprep"), + args = "-s {IN_DIR} -d {OUT_DIR} -b nfscis -u 3.2.0 -k -n {IN_DIR}/../../data/unidata {INPUT_FILES[0]}", + format_with = {} + ), + SingleExecutionRequest( + name = "nfsmxs", + input_files = [InFile("nfs4_mixed_prep_s.txt")], + output_files = [OutFile("nfsmxs.spp")], + tool = IcuTool("gensprep"), + args = "-s {IN_DIR} -d {OUT_DIR} -b nfsmxs -u 3.2.0 -k -n {IN_DIR}/../../data/unidata {INPUT_FILES[0]}", + format_with = {} + ), + SingleExecutionRequest( + name = "nfsmxp", + input_files = [InFile("nfs4_mixed_prep_p.txt")], + output_files = [OutFile("nfsmxp.spp")], + tool = IcuTool("gensprep"), + args = "-s {IN_DIR} -d {OUT_DIR} -b nfsmxp -u 3.2.0 -k -n {IN_DIR}/../../data/unidata {INPUT_FILES[0]}", + format_with = {} + ) + ] + + +def generate_conv(config, glob, common_vars): + basenames = [ + "test1", + "test1bmp", + "test2", + "test3", + "test4", + "test4x", + "test5", + "ibm9027" + ] + return [ + RepeatedExecutionRequest( + name = "test_conv", + dep_files = [], + input_files = [InFile("%s.ucm" % bn) for bn in basenames], + output_files = [OutFile("%s.cnv" % bn) for bn in basenames], + tool = IcuTool("makeconv"), + args = "--small -d {OUT_DIR} {IN_DIR}/{INPUT_FILE}", + format_with = {}, + repeat_with = {} + ) + ] + + +def generate_copy(config, glob, common_vars): + return [ + CopyRequest( + name = "nam_typ", + input_file = OutFile("te.res"), + output_file = TmpFile("nam.typ") + ), + CopyRequest( + name = "old_l_testtypes", + input_file = InFile("old_l_testtypes.res"), + output_file = OutFile("old_l_testtypes.res") + ), + CopyRequest( + name = "old_e_testtypes", + input_file = InFile("old_e_testtypes.res"), + output_file = OutFile("old_e_testtypes.res") + ), + ] + + +def generate_other(config, glob, common_vars): + return [ + SingleExecutionRequest( + name = "testnorm", + input_files = [InFile("testnorm.txt")], + output_files = [OutFile("testnorm.nrm")], + tool = IcuTool("gennorm2"), + args = "-s {IN_DIR} {INPUT_FILES[0]} -o {OUT_DIR}/{OUTPUT_FILES[0]}", + format_with = {} + ), + SingleExecutionRequest( + name = "test_icu", + input_files = [], + output_files = [OutFile("test.icu")], + tool = IcuTool("gentest"), + args = "-d {OUT_DIR}", + format_with = {} + ), + SingleExecutionRequest( + name = "testtable32_txt", + input_files = [], + output_files = [TmpFile("testtable32.txt")], + tool = IcuTool("gentest"), + args = "-r -d {TMP_DIR}", + format_with = {} + ), + SingleExecutionRequest( + name = "testtable32_res", + input_files = [TmpFile("testtable32.txt")], + output_files = [OutFile("testtable32.res")], + tool = IcuTool("genrb"), + args = "-s {TMP_DIR} -d {OUT_DIR} {INPUT_FILES[0]}", + format_with = {} + ) + ] diff --git a/icu4c/source/test/testdata/Makefile.in b/icu4c/source/test/testdata/Makefile.in index 003226154db..04bc1c1afad 100644 --- a/icu4c/source/test/testdata/Makefile.in +++ b/icu4c/source/test/testdata/Makefile.in @@ -127,105 +127,22 @@ TESTDATA=testdata # prefix for files that are testdata TESTDT=$(TESTDATA) -# File definitions -TEST_DAT_FILES=$(TESTBUILDDIR)/test.icu -TEST_SPP_FILES=$(TESTBUILDDIR)/nfscsi.spp $(TESTBUILDDIR)/nfscss.spp $(TESTBUILDDIR)/nfscis.spp $(TESTBUILDDIR)/nfsmxs.spp $(TESTBUILDDIR)/nfsmxp.spp +# Variable names for rules.mk +OUT_DIR=$(TESTBUILDDIR) +TMP_DIR=$(TESTOUTDIR)/$(TESTDT) -TEST_UCM_SOURCE= test1.ucm test1bmp.ucm test2.ucm test3.ucm test4.ucm test4x.ucm test5.ucm ibm9027.ucm -TEST_UCM_FILES=$(TEST_UCM_SOURCE:%=$(TESTSRCDATADIR)/data/%) -TEST_CNV_FILES=$(TEST_UCM_SOURCE:%.ucm=$(TESTBUILDDIR)/%.cnv) +## Include the Python-generated rules -TEST_NRM_FILES=$(TESTBUILDDIR)/testnorm.nrm - -# import the shared .mk file -include $(TESTSRCDATADIR)/tstfiles.mk --include $(TESTSRCDATADIR)/tstlocal.mk - -# TEST_RES_SOURCE comes from tstfiles.mk -TEST_RES = $(TEST_RES_SOURCE) $(TEST_RES_LOCAL) casing.txt mc.txt root.txt sh.txt sh_YU.txt te.txt te_IN.txt te_IN_REVISED.txt testtypes.txt testaliases.txt testempty.txt structLocale.txt idna_rules.txt conversion.txt icuio.txt testtable32.txt metaZones.txt timezoneTypes.txt windowsZones.txt zoneinfo64.txt -TEST_RES_FILES=$(TEST_RES:%.txt=$(TESTBUILDDIR)/%.res) $(TESTBUILDDIR)/encoded.res $(TESTBUILDDIR)/old_l_testtypes.res $(TESTBUILDDIR)/old_e_testtypes.res - -ALL_TEST_FILES = $(TEST_DAT_FILES) $(TEST_SPP_FILES) $(TEST_BRK_FILES) $(TEST_CNV_FILES) $(TEST_NRM_FILES) $(TEST_RES_FILES) $(TESTOUTDIR)/$(TESTDT)/nam.typ $(TESTOUTDIR)/$(TESTDT)/zoneinfo64.res - -# list - -$(TESTBUILDDIR)/testdata.lst: $(SRCLISTDEPS) - @echo "generating $@ (list of data files)" - @-$(RMV) $@ - @for file in $(TEST_RES_FILES:$(TESTBUILDDIR)/%.res=%.res) $(TEST_DAT_FILES:$(TESTBUILDDIR)/%.icu=%.icu) $(TEST_SPP_FILES:$(TESTBUILDDIR)/%.spp=%.spp) $(TEST_CNV_FILES:$(TESTBUILDDIR)/%.cnv=%.cnv) $(TEST_NRM_FILES:$(TESTBUILDDIR)/%.nrm=%.nrm); do \ - echo $$file >> $@; \ - done; +include $(top_builddir)/$(subdir)/rules.mk -build-testdata: build-dir $(ALL_TEST_FILES) $(TESTBUILDDIR)/testdata.lst $(TESTBUILDDIR)/encoded.res +build-testdata: build-dir $(TESTDATA_ALL_OUTPUT_FILES) -# test.icu -$(TESTBUILDDIR)/test.icu: $(GENTEST) - $(INVOKE) $(GENTEST) -d $(TESTBUILDDIR) +testdata: build-testdata -$(TESTBUILDDIR)/testtable32.txt: $(GENTEST) - $(INVOKE) $(GENTEST) -r -d $(TESTBUILDDIR) -$(TESTBUILDDIR)/testtable32.res: $(TESTBUILDDIR)/testtable32.txt $(TOOLBINDIR)/genrb$(EXEEXT) - $(INVOKE) $(TOOLBINDIR)/genrb $(GENRBOPTS) -s $(TESTBUILDDIR) $(ICU_DATA_OPT) -d $(TESTBUILDDIR) $(=2) { - path=argv[1]; + if (argc >= 2) { + path = argv[1]; } else { - path=options[SOURCEDIR].value; - if(path!=NULL && *path!=0) { - char *end; + path = "convrtrs.txt"; + } - uprv_strcpy(pathBuf, path); - end = uprv_strchr(pathBuf, 0); - if(*(end-1)!=U_FILE_SEP_CHAR) { - *(end++)=U_FILE_SEP_CHAR; - } - uprv_strcpy(end, "convrtrs.txt"); - path=pathBuf; - } else { - path = "convrtrs.txt"; + const char* sourcedir = options[SOURCEDIR].value; + if (sourcedir != NULL && *sourcedir != 0) { + char *end; + uprv_strcpy(pathBuf, sourcedir); + end = uprv_strchr(pathBuf, 0); + if(*(end-1)!=U_FILE_SEP_CHAR) { + *(end++)=U_FILE_SEP_CHAR; } + uprv_strcpy(end, path); + path = pathBuf; } uprv_memset(stringStore, 0, sizeof(stringStore)); diff --git a/icu4c/source/tools/genrb/genrb.cpp b/icu4c/source/tools/genrb/genrb.cpp index c4fc462066a..1135254ca92 100644 --- a/icu4c/source/tools/genrb/genrb.cpp +++ b/icu4c/source/tools/genrb/genrb.cpp @@ -99,7 +99,7 @@ UOption options[]={ UOPTION_DEF("language", 'l', UOPT_REQUIRES_ARG), /* 16 */ UOPTION_DEF("omitCollationRules", 'R', UOPT_NO_ARG),/* 17 */ UOPTION_DEF("formatVersion", '\x01', UOPT_REQUIRES_ARG),/* 18 */ - UOPTION_DEF("writePoolBundle", '\x01', UOPT_NO_ARG),/* 19 */ + UOPTION_DEF("writePoolBundle", '\x01', UOPT_OPTIONAL_ARG),/* 19 */ UOPTION_DEF("usePoolBundle", '\x01', UOPT_OPTIONAL_ARG),/* 20 */ UOPTION_DEF("includeUnihanColl", '\x01', UOPT_NO_ARG),/* 21 */ /* temporary, don't display in usage info */ }; @@ -224,8 +224,8 @@ main(int argc, "\t --formatVersion write a .res file compatible with the requested formatVersion (single digit);\n" "\t for example, --formatVersion 1\n"); fprintf(stderr, - "\t --writePoolBundle write a pool.res file with all of the keys of all input bundles\n" - "\t --usePoolBundle [path-to-pool.res] point to keys from the pool.res keys pool bundle if they are available there;\n" + "\t --writePoolBundle [directory] write a pool.res file with all of the keys of all input bundles\n" + "\t --usePoolBundle [directory] point to keys from the pool.res keys pool bundle if they are available there;\n" "\t makes .res files smaller but dependent on the pool bundle\n" "\t (--writePoolBundle and --usePoolBundle cannot be combined)\n"); @@ -532,8 +532,14 @@ main(int argc, poolBundle.close(); if(U_SUCCESS(status) && options[WRITE_POOL_BUNDLE].doesOccur) { + const char* writePoolDir; + if (options[WRITE_POOL_BUNDLE].value!=NULL) { + writePoolDir = options[WRITE_POOL_BUNDLE].value; + } else { + writePoolDir = outputDir; + } char outputFileName[256]; - newPoolBundle->write(outputDir, NULL, outputFileName, sizeof(outputFileName), status); + newPoolBundle->write(writePoolDir, NULL, outputFileName, sizeof(outputFileName), status); if(U_FAILURE(status)) { fprintf(stderr, "unable to write the pool bundle: %s\n", u_errorName(status)); } diff --git a/icu4c/source/tools/genrb/reslist.cpp b/icu4c/source/tools/genrb/reslist.cpp index 0493347ebe5..5fb75fbd74c 100644 --- a/icu4c/source/tools/genrb/reslist.cpp +++ b/icu4c/source/tools/genrb/reslist.cpp @@ -1037,14 +1037,15 @@ void SRBRoot::write(const char *outputDir, const char *outputPkg, // Swap to big-endian so we get the same checksum on all platforms // (except for charset family, due to the key strings). UnicodeString s(f16BitUnits); - s.append((UChar)1); // Ensure that we own this buffer. assert(!s.isBogus()); - uint16_t *p = const_cast(reinterpret_cast(s.getBuffer())); + // .getBuffer(capacity) returns a mutable buffer + char16_t* p = s.getBuffer(f16BitUnits.length()); for (int32_t count = f16BitUnits.length(); count > 0; --count) { uint16_t x = *p; *p++ = (uint16_t)((x << 8) | (x >> 8)); } - checksum = computeCRC((const char *)p, + s.releaseBuffer(f16BitUnits.length()); + checksum = computeCRC((const char *)s.getBuffer(), (uint32_t)f16BitUnits.length() * 2, checksum); } indexes[URES_INDEX_POOL_CHECKSUM] = (int32_t)checksum; diff --git a/icu4c/source/tools/makeconv/makeconv.cpp b/icu4c/source/tools/makeconv/makeconv.cpp index 5a01e209152..12db2860df2 100644 --- a/icu4c/source/tools/makeconv/makeconv.cpp +++ b/icu4c/source/tools/makeconv/makeconv.cpp @@ -179,6 +179,7 @@ enum { OPT_SMALL, OPT_IGNORE_SISO_CHECK, OPT_QUIET, + OPT_SOURCEDIR, OPT_COUNT }; @@ -193,6 +194,7 @@ static UOption options[]={ { "small", NULL, NULL, NULL, '\1', UOPT_NO_ARG, 0 }, { "ignore-siso-check", NULL, NULL, NULL, '\1', UOPT_NO_ARG, 0 }, UOPTION_QUIET, + UOPTION_SOURCEDIR, }; int main(int argc, char* argv[]) @@ -230,7 +232,8 @@ int main(int argc, char* argv[]) "\t-c or --copyright include a copyright notice\n" "\t-d or --destdir destination directory, followed by the path\n" "\t-v or --verbose Turn on verbose output\n" - "\t-q or --quiet do not display warnings and progress\n", + "\t-q or --quiet do not display warnings and progress\n" + "\t-s or --sourcedir source directory, followed by the path\n", argv[0]); fprintf(stdfile, "\t --small Generate smaller .cnv files. They will be\n" @@ -282,11 +285,20 @@ int main(int argc, char* argv[]) #endif UBool printFilename = (UBool) (argc > 2 || VERBOSE); + icu::CharString pathBuf; for (++argv; --argc; ++argv) { UErrorCode localError = U_ZERO_ERROR; const char *arg = getLongPathname(*argv); + const char* sourcedir = options[OPT_SOURCEDIR].value; + if (sourcedir != NULL && *sourcedir != 0) { + pathBuf.clear(); + pathBuf.appendPathPart(sourcedir, localError); + pathBuf.appendPathPart(arg, localError); + arg = pathBuf.data(); + } + /*produces the right destination path for display*/ outFileName.truncate(outBasenameStart); if (outBasenameStart != 0)