| #!/usr/bin/python |
| |
| """Regenerates ICU data files.""" |
| |
| import glob |
| import os |
| import shutil |
| import subprocess |
| import sys |
| |
| import i18nutil |
| |
| # Find the icu directory. |
| android_build_top = i18nutil.GetAndroidRootOrDie() |
| icu_dir = os.path.realpath('%s/external/icu' % android_build_top) |
| icu4c_dir = os.path.realpath('%s/icu4c/source' % icu_dir) |
| icu4j_dir = os.path.realpath('%s/icu4j' % icu_dir) |
| i18nutil.CheckDirExists(icu4c_dir, 'external/icu/icu4c/source') |
| i18nutil.CheckDirExists(icu4j_dir, 'external/icu/icu4j') |
| |
| def PrepareIcuBuild(icu_build_dir): |
| # Keep track of the original cwd so we can go back to it at the end. |
| original_working_dir = os.getcwd() |
| |
| # Create a directory to run 'make' from. |
| os.mkdir(icu_build_dir) |
| os.chdir(icu_build_dir) |
| |
| # Build the ICU tools. |
| print 'Configuring ICU tools...' |
| subprocess.check_call(['%s/runConfigureICU' % icu4c_dir, 'Linux']) |
| |
| os.chdir(original_working_dir) |
| |
| def icuDir(): |
| return icu_dir |
| |
| def MakeTzDataFiles(icu_build_dir, data_filename): |
| # Keep track of the original cwd so we can go back to it at the end. |
| original_working_dir = os.getcwd() |
| |
| # Fix missing files. |
| os.chdir('%s/tools/tzcode' % icu_build_dir) |
| |
| # The tz2icu tool only picks up icuregions and icuzones in they are in the CWD |
| for icu_data_file in [ 'icuregions', 'icuzones']: |
| icu_data_file_source = '%s/tools/tzcode/%s' % (icu4c_dir, icu_data_file) |
| icu_data_file_symlink = './%s' % icu_data_file |
| os.symlink(icu_data_file_source, icu_data_file_symlink) |
| |
| shutil.copyfile('%s/%s' % (original_working_dir, data_filename), |
| data_filename) |
| |
| print 'Making ICU tz data files...' |
| # The Makefile assumes the existence of the bin directory. |
| os.mkdir('%s/bin' % icu_build_dir) |
| subprocess.check_call(['make']) |
| |
| # Copy the source file to its ultimate destination. |
| icu_txt_data_dir = '%s/data/misc' % icu4c_dir |
| print 'Copying zoneinfo64.txt to %s ...' % icu_txt_data_dir |
| shutil.copy('zoneinfo64.txt', icu_txt_data_dir) |
| |
| os.chdir(original_working_dir) |
| |
| |
| def MakeAndCopyIcuDataFiles(icu_build_dir): |
| # Keep track of the original cwd so we can go back to it at the end. |
| original_working_dir = os.getcwd() |
| |
| # Regenerate the .dat file. |
| os.chdir(icu_build_dir) |
| subprocess.check_call(['make', 'INCLUDE_UNI_CORE_DATA=1', '-j32']) |
| |
| # Copy the .dat file to its ultimate destination. |
| icu_dat_data_dir = '%s/stubdata' % icu4c_dir |
| datfiles = glob.glob('data/out/tmp/icudt??l.dat') |
| if len(datfiles) != 1: |
| print 'ERROR: Unexpectedly found %d .dat files (%s). Halting.' % (len(datfiles), datfiles) |
| sys.exit(1) |
| datfile = datfiles[0] |
| print 'Copying %s to %s ...' % (datfile, icu_dat_data_dir) |
| shutil.copy(datfile, icu_dat_data_dir) |
| |
| # Generate the ICU4J .jar files |
| os.chdir('%s/data' % icu_build_dir) |
| subprocess.check_call(['make', 'icu4j-data']) |
| |
| # Copy the ICU4J .jar files to their ultimate destination. |
| icu_jar_data_dir = '%s/main/shared/data' % icu4j_dir |
| jarfiles = glob.glob('out/icu4j/*.jar') |
| if len(jarfiles) != 2: |
| print 'ERROR: Unexpectedly found %d .jar files (%s). Halting.' % (len(jarfiles), jarfiles) |
| sys.exit(1) |
| for jarfile in jarfiles: |
| print 'Copying %s to %s ...' % (jarfile, icu_jar_data_dir) |
| shutil.copy(jarfile, icu_jar_data_dir) |
| |
| # Switch back to the original working cwd. |
| os.chdir(original_working_dir) |
| |
| # Run with no arguments from any directory, with no special setup required. |
| def main(): |
| i18nutil.SwitchToNewTemporaryDirectory() |
| icu_build_dir = '%s/icu' % os.getcwd() |
| |
| print 'Found icu in %s ...' % icu_dir |
| |
| PrepareIcuBuild(icu_build_dir) |
| |
| MakeAndCopyIcuDataFiles(icu_build_dir) |
| |
| print 'Look in %s for new data files' % icu_dir |
| sys.exit(0) |
| |
| if __name__ == '__main__': |
| main() |