]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/data/makedata.mak
ICU-64252.0.1.tar.gz
[apple/icu.git] / icuSources / data / makedata.mak
index 37613135976acfb509e1d96bae8d09d2fbf64a7a..75cdb2a4a8c21a8a4784d6d37f6fd26104dcc7cd 100644 (file)
 
 ##############################################################################
 # Keep the following in sync with the version - see common/unicode/uvernum.h
-U_ICUDATA_NAME=icudt59
+U_ICUDATA_NAME=icudt64
 ##############################################################################
 !IF "$(UWP)" == "UWP"
-U_ICUDATA_NAME=icudt
+# Optionally change the name of the data file for the UWP version.
+U_ICUDATA_NAME=icudt64
 !ENDIF
 U_ICUDATA_ENDIAN_SUFFIX=l
-UNICODE_VERSION=10.0
+UNICODE_VERSION=12.1
 ICU_LIB_TARGET=$(DLL_OUTPUT)\$(U_ICUDATA_NAME).dll
 
 #  ICUMAKE
@@ -32,12 +33,16 @@ ICU_LIB_TARGET=$(DLL_OUTPUT)\$(U_ICUDATA_NAME).dll
 !ENDIF
 !MESSAGE ICU data make path is $(ICUMAKE)
 
+!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
 .SUFFIXES : .nrm .icu .ucm .cnv .dll .dat .res .txt .c
 
 ICUOUT=$(ICUMAKE)\out
 
-#  the prefix "icudt21_" for use in filenames
+#  the prefix "icudt62_" for use in filenames
 ICUPKG=$(U_ICUDATA_NAME)$(U_ICUDATA_ENDIAN_SUFFIX)
 
 # need to nuke \\ for .NET...
@@ -63,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
@@ -93,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.
@@ -201,315 +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"
-UCM_SOURCE=$(UCM_SOURCE) $(UCM_SOURCE_LOCAL)
-!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"
-BRK_SOURCE=$(BRK_SOURCE) $(BRK_SOURCE_LOCAL)
-BRK_DICT_SOURCE=$(BRK_DICT_SOURCE) $(BRK_DICT_SOURCE_LOCAL)
-BRK_RES_SOURCE=$(BRK_RES_SOURCE) $(BRK_RES_SOURCE_LOCAL)
-!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"
-GENRB_SOURCE=$(GENRB_SOURCE) $(GENRB_SOURCE_LOCAL)
-!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"
-CURR_SOURCE=$(CURR_SOURCE) $(CURR_SOURCE_LOCAL)
-!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"
-LANG_SOURCE=$(LANG_SOURCE) $(LANG_SOURCE_LOCAL)
-!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"
-REGION_SOURCE=$(REGION_SOURCE) $(REGION_SOURCE_LOCAL)
-!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"
-ZONE_SOURCE=$(ZONE_SOURCE) $(ZONE_SOURCE_LOCAL)
-!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"
-UNIT_SOURCE=$(UNIT_SOURCE) $(UNIT_SOURCE_LOCAL)
-!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"
-COLLATION_SOURCE=$(COLLATION_SOURCE) $(COLLATION_SOURCE_LOCAL)
-!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"
-RBNF_SOURCE=$(RBNF_SOURCE) $(RBNF_SOURCE_LOCAL)
-!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"
-TRANSLIT_SOURCE=$(TRANSLIT_SOURCE) $(TRANSLIT_SOURCE_LOCAL)
-!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"
-MISC_SOURCE=$(MISC_SOURCE) $(MISC_SOURCE_LOCAL)
-!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"
-SPREP_SOURCE=$(SPREP_SOURCE) $(SPREP_SOURCE_LOCAL)
-!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 .
@@ -537,6 +212,39 @@ 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 -B -m buildtool \
+               --mode windows-exec \
+               --src_dir "$(ICUSRCDATA)" \
+               --tool_dir "$(ICUTOOLS)" \
+               --tool_cfg "$(CFG)" \
+               --out_dir "$(ICUBLD_PKG)" \
+               --tmp_dir "$(ICUTMP)"
+               --filter_file "$(ICU_DATA_FILTER_FILE)" \
+               $(ICU_DATA_BUILDTOOL_OPTS) \
+       @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
@@ -634,10 +342,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.
@@ -658,50 +366,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
-)
-<<KEEP
+       "$(ICUPBIN)\pkgdata" $(COMMON_ICUDATA_ARGUMENTS) $(ICUTMP)\icudata.lst
        -@erase "$(ICU_LIB_TARGET)"
-    @if not exist "$(DLL_OUTPUT)" mkdir "$(DLL_OUTPUT)"
+       @if not exist "$(DLL_OUTPUT)" mkdir "$(DLL_OUTPUT)"
        copy "$(U_ICUDATA_NAME).dll" "$(ICU_LIB_TARGET)"
        -@erase "$(U_ICUDATA_NAME).dll"
        copy "$(ICUTMP)\$(ICUPKG).dat" "$(ICUOUT)\$(U_ICUDATA_NAME)$(U_ICUDATA_ENDIAN_SUFFIX).dat"
@@ -709,22 +379,13 @@ $(SPREP_FILES:.spp=.spp
 !ENDIF
 
 # utility target to create missing directories
+# Most directories are made by Python, but still create ICUTMP
+# so it works in the source archive
 CREATE_DIRS :
        @if not exist "$(ICUOUT)\$(NULL)" mkdir "$(ICUOUT)"
        @if not exist "$(ICUTMP)\$(NULL)" mkdir "$(ICUTMP)"
        @if not exist "$(ICUOUT)\build\$(NULL)" mkdir "$(ICUOUT)\build"
        @if not exist "$(ICUBLD_PKG)\$(NULL)" mkdir "$(ICUBLD_PKG)"
-       @if not exist "$(ICUBLD_PKG)\curr\$(NULL)" mkdir "$(ICUBLD_PKG)\curr"
-       @if not exist "$(ICUBLD_PKG)\lang\$(NULL)" mkdir "$(ICUBLD_PKG)\lang"
-       @if not exist "$(ICUBLD_PKG)\region\$(NULL)" mkdir "$(ICUBLD_PKG)\region"
-       @if not exist "$(ICUBLD_PKG)\zone\$(NULL)" mkdir "$(ICUBLD_PKG)\zone"
-       @if not exist "$(ICUBLD_PKG)\$(ICUBRK)\$(NULL)" mkdir "$(ICUBLD_PKG)\$(ICUBRK)"
-       @if not exist "$(ICUBLD_PKG)\$(ICUCOL)\$(NULL)" mkdir "$(ICUBLD_PKG)\$(ICUCOL)"
-       @if not exist "$(ICUBLD_PKG)\$(ICURBNF)\$(NULL)" mkdir "$(ICUBLD_PKG)\$(ICURBNF)"
-       @if not exist "$(ICUBLD_PKG)\$(ICUTRNS)\$(NULL)" mkdir "$(ICUBLD_PKG)\$(ICUTRNS)"
-       @if not exist "$(TESTDATAOUT)\$(NULL)" mkdir "$(TESTDATAOUT)"
-       @if not exist "$(TESTDATABLD)\$(NULL)" mkdir "$(TESTDATABLD)"
-       @if not exist "$(TESTDATAOUT)\testdata\$(NULL)" mkdir "$(TESTDATAOUT)\testdata"
 
 # utility target to send us to the right dir
 GODATA : CREATE_DIRS
@@ -772,6 +433,7 @@ CLEAN : GODATA
        -@erase "*.mak"
        -@erase "*.obj"
        -@erase "*.res"
+       -@erase "*.timestamp"
        @cd "$(TESTDATABLD)"
        -@erase "*.cnv"
        -@erase "*.icu"
@@ -787,252 +449,14 @@ CLEAN : GODATA
        @cd "$(ICUBLD_PKG)"
 
 
-# RBBI .brk file generation.
-{$(ICUSRCDATA_RELATIVE_PATH)\$(ICUBRK)\rules}.txt.brk:
-       @echo Creating $@
-       @"$(ICUTOOLS)\genbrk\$(CFGTOOLS)\genbrk" -c -r $< -o $@ -d"$(ICUBLD_PKG)" -i "$(ICUBLD_PKG)"
-
-#RBBI .dict file generation.
-{$(ICUSRCDATA_RELATIVE_PATH)\$(ICUBRK)\dictionaries}.txt.dict:
-    @echo Creating $@
-    @"$(ICUTOOLS)\gendict\$(CFGTOOLS)\gendict" -c --uchars $<  "$(ICUBLD_PKG)\$@"
-
-$(ICUBRK)\thaidict.dict:
-       @echo Creating $(ICUBRK)\thaidict.dict
-       @"$(ICUTOOLS)\gendict\$(CFGTOOLS)\gendict" -c --bytes --transform offset-0x0e00 $(ICUSRCDATA_RELATIVE_PATH)\$(ICUBRK)\dictionaries\thaidict.txt "$(ICUBLD_PKG)\$(ICUBRK)\thaidict.dict"
-
-$(ICUBRK)\laodict.dict:
-       @echo Creating $(ICUBRK)\laodict.dict
-       @"$(ICUTOOLS)\gendict\$(CFGTOOLS)\gendict" -c --bytes --transform offset-0x0e80 $(ICUSRCDATA_RELATIVE_PATH)\$(ICUBRK)\dictionaries\laodict.txt "$(ICUBLD_PKG)\$(ICUBRK)\laodict.dict"
-
-$(ICUBRK)\burmesedict.dict:
-       @echo Creating $(ICUBRK)\burmesedict.dict
-       @"$(ICUTOOLS)\gendict\$(CFGTOOLS)\gendict" -c --bytes --transform offset-0x1000 $(ICUSRCDATA_RELATIVE_PATH)\$(ICUBRK)\dictionaries\burmesedict.txt "$(ICUBLD_PKG)\$(ICUBRK)\burmesedict.dict"
-
-$(ICUBRK)\khmerdict.dict:
-       @echo Creating $(ICUBRK)\khmerdict.dict
-       @"$(ICUTOOLS)\gendict\$(CFGTOOLS)\gendict" -c --bytes --transform offset-0x1780 $(ICUSRCDATA_RELATIVE_PATH)\$(ICUBRK)\dictionaries\khmerdict.txt "$(ICUBLD_PKG)\$(ICUBRK)\khmerdict.dict"
-
-!IFNDEF ICUDATA_SOURCE_ARCHIVE
-# Rule for creating converters
-$(CNV_FILES): $(UCM_SOURCE)
-       @echo Building Charset Conversion table $(@B)
-       @"$(ICUTOOLS)\makeconv\$(CFGTOOLS)\makeconv" -c -d"$(ICUBLD_PKG)" $(ICUSRCDATA_RELATIVE_PATH)\$(ICUUCM)\$(@B).ucm
-!ENDIF
-
-!IFDEF BUILD_SPECIAL_CNV_FILES
-$(CNV_FILES_SPECIAL): $(UCM_SOURCE_SPECIAL)
-       @echo Building Special Charset Conversion table $(@B)
-       @"$(ICUTOOLS)\makeconv\$(CFGTOOLS)\makeconv" -c --ignore-siso-check -d"$(ICUBLD_PKG)" $(ICUSRCDATA_RELATIVE_PATH)\$(ICUUCM)\$(@B).ucm
-!ENDIF
-
-# Batch inference rule for creating miscellaneous resource files
-# TODO: -q option is specified to squelch the 120+ warnings about
-#       empty intvectors and binary elements.  Unfortunately, this may
-#       squelch other legitimate warnings.  When there is a better
-#       way, remove the -q.
-{$(ICUSRCDATA_RELATIVE_PATH)\$(ICUMISC2)}.txt.res::
-       @echo Making Miscellaneous Resource Bundle files
-       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -q -d"$(ICUBLD_PKG)" $<
-
-# Inference rule for creating resource bundle files
-{$(ICUSRCDATA_RELATIVE_PATH)\$(ICULOC)}.txt.res::
-       @echo Making Locale Resource Bundle files
-       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" --usePoolBundle $(ICUSRCDATA_RELATIVE_PATH)\$(ICULOC) -k -d"$(ICUBLD_PKG)" $<
-
-# copy the locales/pool.res file from the source folder to the build output folder
-# and swap it to native endianness
-pool.res: $(ICUSRCDATA_RELATIVE_PATH)\$(ICULOC)\pool.res
-       "$(ICUPBIN)\icupkg" -tl "$(ICUSRCDATA_RELATIVE_PATH)\$(ICULOC)\pool.res" pool.res
-
-res_index.res:
-       @echo Generating <<res_index.txt
-// Warning this file is automatically generated
-res_index:table(nofallback) {
-    InstalledLocales {
-        $(GENRB_SOURCE:.txt= {""}
-       )
-    }
-}
-<<KEEP
-       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -d"$(ICUBLD_PKG)" .\res_index.txt
-       
-
-{$(ICUSRCDATA_RELATIVE_PATH)\curr}.txt{curr}.res::
-       @echo Making currency display name files
-       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" --usePoolBundle $(ICUSRCDATA_RELATIVE_PATH)\curr -k -i "$(ICUBLD_PKG)" -d"$(ICUBLD_PKG)\curr" $<
-
-# copy the curr/pool.res file from the source folder to the build output folder
-# and swap it to native endianness
-curr\pool.res: $(ICUSRCDATA_RELATIVE_PATH)\curr\pool.res
-       "$(ICUPBIN)\icupkg" -tl "$(ICUSRCDATA_RELATIVE_PATH)\curr\pool.res" curr\pool.res
-
-curr\res_index.res:
-       @echo Generating <<curr\res_index.txt
-// Warning this file is automatically generated
-res_index:table(nofallback) {
-    InstalledLocales {
-        $(CURR_SOURCE:.txt= {""}
-       )
-    }
-}
-<<KEEP
-       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -d"$(ICUBLD_PKG)\curr" .\curr\res_index.txt
-
-
-{$(ICUSRCDATA_RELATIVE_PATH)\lang}.txt{lang}.res::
-       @echo Making language/script display name files
-       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" --usePoolBundle $(ICUSRCDATA_RELATIVE_PATH)\lang -k -i "$(ICUBLD_PKG)" -d"$(ICUBLD_PKG)\lang" $<
-
-# copy the lang/pool.res file from the source folder to the build output folder
-# and swap it to native endianness
-lang\pool.res: $(ICUSRCDATA_RELATIVE_PATH)\lang\pool.res
-       "$(ICUPBIN)\icupkg" -tl "$(ICUSRCDATA_RELATIVE_PATH)\lang\pool.res" lang\pool.res
-
-lang\res_index.res:
-       @echo Generating <<lang\res_index.txt
-// Warning this file is automatically generated
-res_index:table(nofallback) {
-    InstalledLocales {
-        $(LANG_SOURCE:.txt= {""}
-       )
-    }
-}
-<<KEEP
-       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -d"$(ICUBLD_PKG)\lang" .\lang\res_index.txt
-
-
-{$(ICUSRCDATA_RELATIVE_PATH)\region}.txt{region}.res::
-       @echo Making region display name files
-       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" --usePoolBundle $(ICUSRCDATA_RELATIVE_PATH)\region -k -i "$(ICUBLD_PKG)" -d"$(ICUBLD_PKG)\region" $<
-
-# copy the region/pool.res file from the source folder to the build output folder
-# and swap it to native endianness
-region\pool.res: $(ICUSRCDATA_RELATIVE_PATH)\region\pool.res
-       "$(ICUPBIN)\icupkg" -tl "$(ICUSRCDATA_RELATIVE_PATH)\region\pool.res" region\pool.res
-
-region\res_index.res:
-       @echo Generating <<region\res_index.txt
-// Warning this file is automatically generated
-res_index:table(nofallback) {
-    InstalledLocales {
-        $(REGION_SOURCE:.txt= {""}
-       )
-    }
-}
-<<KEEP
-       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -d"$(ICUBLD_PKG)\region" .\region\res_index.txt
-
-
-{$(ICUSRCDATA_RELATIVE_PATH)\zone}.txt{zone}.res::
-       @echo Making time zone display name files
-       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" --usePoolBundle $(ICUSRCDATA_RELATIVE_PATH)\zone -k -i "$(ICUBLD_PKG)" -d"$(ICUBLD_PKG)\zone" $<
-
-# copy the zone/pool.res file from the source folder to the build output folder
-# and swap it to native endianness
-zone\pool.res: $(ICUSRCDATA_RELATIVE_PATH)\zone\pool.res
-       "$(ICUPBIN)\icupkg" -tl "$(ICUSRCDATA_RELATIVE_PATH)\zone\pool.res" zone\pool.res
-
-zone\res_index.res:
-       @echo Generating <<zone\res_index.txt
-// Warning this file is automatically generated
-res_index:table(nofallback) {
-    InstalledLocales {
-        $(ZONE_SOURCE:.txt= {""}
-       )
-    }
-}
-<<KEEP
-       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -d"$(ICUBLD_PKG)\zone" .\zone\res_index.txt
-
-
-{$(ICUSRCDATA_RELATIVE_PATH)\unit}.txt{unit}.res::
-       @echo Making unit display name files
-       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" --usePoolBundle $(ICUSRCDATA_RELATIVE_PATH)\unit -k -i "$(ICUBLD_PKG)" -d"$(ICUBLD_PKG)\unit" $<
-
-# copy the unit/pool.res file from the source folder to the build output folder
-# and swap it to native endianness
-unit\pool.res: $(ICUSRCDATA_RELATIVE_PATH)\unit\pool.res
-       "$(ICUPBIN)\icupkg" -tl "$(ICUSRCDATA_RELATIVE_PATH)\unit\pool.res" unit\pool.res
-
-unit\res_index.res:
-       @echo Generating <<unit\res_index.txt
-// Warning this file is automatically generated
-res_index:table(nofallback) {
-    InstalledLocales {
-        $(UNIT_SOURCE:.txt= {""}
-       )
-    }
-}
-<<KEEP
-       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -d"$(ICUBLD_PKG)\unit" .\unit\res_index.txt
-
-
-{$(ICUSRCDATA_RELATIVE_PATH)\$(ICUCOL)}.txt{$(ICUCOL)}.res::
-       @echo Making Collation files
-       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -i "$(ICUBLD_PKG)" -d"$(ICUBLD_PKG)\$(ICUCOL)" $<
-
-$(ICUCOL)\res_index.res:
-       @echo Generating <<$(ICUCOL)\res_index.txt
-// Warning this file is automatically generated
-res_index:table(nofallback) {
-    InstalledLocales {
-        $(COLLATION_SOURCE:.txt= {""}
-       )
-    }
-}
-<<KEEP
-       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -d"$(ICUBLD_PKG)\$(ICUCOL)" .\$(ICUCOL)\res_index.txt
-
-{$(ICUSRCDATA_RELATIVE_PATH)\$(ICURBNF)}.txt{$(ICURBNF)}.res::
-       @echo Making RBNF files
-       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -i "$(ICUBLD_PKG)" -d"$(ICUBLD_PKG)\$(ICURBNF)" $<
-
-$(ICURBNF)\res_index.res:
-       @echo Generating <<$(ICURBNF)\res_index.txt
-// Warning this file is automatically generated
-res_index:table(nofallback) {
-    InstalledLocales {
-        $(RBNF_SOURCE:.txt= {""}
-       )
-    }
-}
-<<KEEP
-       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -d"$(ICUBLD_PKG)\$(ICURBNF)" .\$(ICURBNF)\res_index.txt
-
-$(ICUBRK)\res_index.res:
-       @echo Generating <<$(ICUBRK)\res_index.txt
-// Warning this file is automatically generated
-res_index:table(nofallback) {
-    InstalledLocales {
-        $(BRK_RES_SOURCE:.txt= {""}
-       )
-    }
-}
-<<KEEP
-       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -d"$(ICUBLD_PKG)\$(ICUBRK)" .\$(ICUBRK)\res_index.txt
-
-{$(ICUSRCDATA_RELATIVE_PATH)\$(ICUBRK)}.txt{$(ICUBRK)}.res::
-       @echo Making Break Iterator Resource files
-       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -i "$(ICUBLD_PKG)" -d"$(ICUBLD_PKG)\$(ICUBRK)" $<
-
-{$(ICUSRCDATA_RELATIVE_PATH)\$(ICUTRNS)}.txt{$(ICUTRNS)}.res::
-       @echo Making Transliterator files
-       @"$(ICUTOOLS)\genrb\$(CFGTOOLS)\genrb" -k -i "$(ICUBLD_PKG)" -d"$(ICUBLD_PKG)\$(ICUTRNS)" $<
-
-
 # DLL version information
 # If you modify this, modify winmode.c in pkgdata.
-"$(ICUTMP)\icudata.res": "$(ICUMISC)\icudata.rc"
+"$(ICUTMP)\icudata.res": "$(ICUSRCDATA)\misc\icudata.rc"
        @echo Creating data DLL version information from $**
        @rc.exe /i "..\..\..\..\common" /r /fo $@ $**
 
-# Targets for converters
-"$(ICUBLD_PKG)\cnvalias.icu" : {"$(ICUSRCDATA)\$(ICUUCM)"}\convrtrs.txt "$(ICUTOOLS)\gencnval\$(CFGTOOLS)\gencnval.exe"
-       @echo Creating data file for Converter Aliases
-       @"$(ICUTOOLS)\gencnval\$(CFGTOOLS)\gencnval" -d "$(ICUBLD_PKG)" "$(ICUSRCDATA)\$(ICUUCM)\convrtrs.txt"
-
 # Targets for prebuilt Unicode data
+# Needed for ICU4J!
 "$(ICUBLD_PKG)\pnames.icu": $(ICUSRCDATA_RELATIVE_PATH)\in\pnames.icu
        "$(ICUPBIN)\icupkg" -tl $? $@
 
@@ -1063,37 +487,8 @@ res_index:table(nofallback) {
 "$(ICUBLD_PKG)\coll\ucadata.icu": $(ICUSRCDATA_RELATIVE_PATH)\in\coll\ucadata-unihan.icu
        "$(ICUPBIN)\icupkg" -tl $? $@
 
-# Stringprep .spp file generation.
-{$(ICUSRCDATA_RELATIVE_PATH)\$(ICUSPREP)}.txt.spp:
-       @echo Creating $@
-       @"$(ICUTOOLS)\gensprep\$(CFGTOOLS)\gensprep" -s $(<D) -d "$(ICUBLD_PKG)" -b $(@B) -m "$(ICUUNIDATA)" -u 3.2.0 $(<F)
-
-# Confusables .cfu file generation
-#     Can't use an inference rule because two .txt source files combine to produce a single .cfu output file
-"$(ICUBLD_PKG)\confusables.cfu": "$(ICUUNIDATA)\confusables.txt" "$(ICUUNIDATA)\confusablesWholeScript.txt" "$(ICUTOOLS)\gencfu\$(CFGTOOLS)\gencfu.exe"
-       @echo Creating $@
-       @"$(ICUTOOLS)\gencfu\$(CFGTOOLS)\gencfu" -c -r "$(ICUUNIDATA)\confusables.txt" -w "$(ICUUNIDATA)\confusablesWholeScript.txt" -o $@ -i "$(ICUBLD_PKG)"
 
 !IFDEF ICUDATA_ARCHIVE
-"$(ICUDATA_SOURCE_ARCHIVE)": CREATE_DIRS $(ICUDATA_ARCHIVE) "$(ICUTOOLS)\icupkg\$(CFGTOOLS)\icupkg.exe"
+"$(ICUDATA_SOURCE_ARCHIVE)": CREATE_DIRS $(ICUDATA_ARCHIVE) $(TOOLS_TS)
        "$(ICUTOOLS)\icupkg\$(CFGTOOLS)\icupkg" -t$(U_ICUDATA_ENDIAN_SUFFIX) "$(ICUDATA_ARCHIVE)" "$(ICUDATA_SOURCE_ARCHIVE)"
 !ENDIF
-
-# Dependencies on the tools for the batch inference rules
-
-!IFNDEF ICUDATA_SOURCE_ARCHIVE
-$(UCM_SOURCE) : {"$(ICUTOOLS)\makeconv\$(CFGTOOLS)"}makeconv.exe
-
-!IFDEF BUILD_SPECIAL_CNV_FILES
-$(UCM_SOURCE_SPECIAL): {"$(ICUTOOLS)\makeconv\$(CFGTOOLS)"}makeconv.exe
-!ENDIF
-
-# This used to depend on "$(ICUBLD_PKG)\uprops.icu" "$(ICUBLD_PKG)\ucase.icu" "$(ICUBLD_PKG)\ubidi.icu"
-# This data is now hard coded as a part of the library.
-# See Jitterbug 4497 for details.
-$(MISC_SOURCE) $(RB_FILES) $(CURR_FILES) $(LANG_FILES) $(REGION_FILES) $(ZONE_FILES) $(UNIT_FILES) $(COL_COL_FILES) $(RBNF_RES_FILES) $(BRK_RES_FILES) $(TRANSLIT_RES_FILES): {"$(ICUTOOLS)\genrb\$(CFGTOOLS)"}genrb.exe "$(ICUBLD_PKG)\$(ICUCOL)\ucadata.icu"
-
-# This used to depend on "$(ICUBLD_PKG)\pnames.icu" "$(ICUBLD_PKG)\uprops.icu" "$(ICUBLD_PKG)\ucase.icu" "$(ICUBLD_PKG)\ubidi.icu"
-# These are now hardcoded in ICU4C and only loaded in ICU4J.
-$(BRK_SOURCE) : "$(ICUBLD_PKG)\unames.icu"
-!ENDIF