#!/usr/bin/python -B
|
|
"""Regenerates (just) ICU data source files used to build ICU data files."""
|
|
from __future__ import print_function
|
|
import os
|
import pipes
|
import shutil
|
import subprocess
|
import sys
|
|
import i18nutil
|
import icuutil
|
|
|
# Run with no arguments from any directory, with no special setup required.
|
# See icu4c/source/data/cldr-icu-readme.txt for the upstream ICU instructions.
|
def main():
|
cldr_dir = icuutil.cldrDir()
|
print('Found cldr in %s ...' % cldr_dir)
|
icu_dir = icuutil.icuDir()
|
print('Found icu in %s ...' % icu_dir)
|
|
# Ant doesn't have any mechanism for using a build directory separate from the
|
# source directory so this build script creates a temporary directory and then
|
# copies all necessary ICU4J and CLDR source code to here before building it:
|
i18nutil.SwitchToNewTemporaryDirectory()
|
|
print('Copying ICU4J source code ...')
|
shutil.copytree(os.path.join(icu_dir, 'icu4j'), 'icu4j', True)
|
print('Building ICU4J ...')
|
subprocess.check_call([
|
'ant',
|
'-f', 'icu4j/build.xml',
|
'jar',
|
'cldrUtil',
|
])
|
|
# Append the newly built JAR files to the Java CLASSPATH to use these instead
|
# of the pre-built JAR files in the CLDR source tree, to ensure that the same
|
# version of ICU is being used to build the data as will use the data:
|
cp = []
|
try:
|
cp.append(os.environ['CLASSPATH'])
|
except KeyError:
|
pass
|
cp.append('icu4j/icu4j.jar')
|
cp.append('icu4j/out/cldr_util/lib/utilities.jar')
|
os.environ['CLASSPATH'] = ':'.join(cp)
|
|
# This is the location of the original CLDR source tree (not the temporary
|
# copy of the tools source code) from where the data files are to be read:
|
os.environ['CLDR_DIR'] = cldr_dir
|
|
print('Copying CLDR source code ...')
|
shutil.copytree(os.path.join(cldr_dir, 'tools/java'), 'cldr-tools-java', True)
|
print('Building CLDR tools ...')
|
subprocess.check_call([
|
'ant',
|
'-f', 'cldr-tools-java/build.xml',
|
'tool',
|
'AddPseudolocales',
|
])
|
|
# This is the temporary directory in which the CLDR tools have been built:
|
os.environ['CLDR_CLASSES'] = os.path.join(
|
os.getcwd(), 'cldr-tools-java/classes')
|
|
# It's essential to set CLDR_DTD_CACHE for otherwise the repeated requests for
|
# the same file will cause the unicode.org web server to block this machine:
|
os.makedirs('cldr-dtd-cache')
|
os.environ['ANT_OPTS'] = '-DCLDR_DTD_CACHE=%s' % pipes.quote(os.path.join(
|
os.getcwd(), 'cldr-dtd-cache'))
|
|
print('Building ICU data source files ...')
|
subprocess.check_call([
|
'ant',
|
'-f', os.path.join(icu_dir, 'icu4c/source/data/build.xml'),
|
'clean',
|
'all',
|
])
|
|
print('Look in %s/icu4c/source/data for new data source files' % icu_dir)
|
sys.exit(0)
|
|
if __name__ == '__main__':
|
main()
|