1*2fd832c6SAndroid Build Coastguard Worker#!/usr/bin/python3 -B 2*2fd832c6SAndroid Build Coastguard Worker 3*2fd832c6SAndroid Build Coastguard Worker# Copyright 2017 The Android Open Source Project 4*2fd832c6SAndroid Build Coastguard Worker# 5*2fd832c6SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 6*2fd832c6SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 7*2fd832c6SAndroid Build Coastguard Worker# You may obtain a copy of the License at 8*2fd832c6SAndroid Build Coastguard Worker# 9*2fd832c6SAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 10*2fd832c6SAndroid Build Coastguard Worker# 11*2fd832c6SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 12*2fd832c6SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 13*2fd832c6SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*2fd832c6SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 15*2fd832c6SAndroid Build Coastguard Worker# limitations under the License. 16*2fd832c6SAndroid Build Coastguard Worker 17*2fd832c6SAndroid Build Coastguard Worker"""Generates the timezone data files used by Android.""" 18*2fd832c6SAndroid Build Coastguard Worker 19*2fd832c6SAndroid Build Coastguard Workerimport argparse 20*2fd832c6SAndroid Build Coastguard Workerimport glob 21*2fd832c6SAndroid Build Coastguard Workerimport os 22*2fd832c6SAndroid Build Coastguard Workerimport re 23*2fd832c6SAndroid Build Coastguard Workerimport subprocess 24*2fd832c6SAndroid Build Coastguard Workerimport sys 25*2fd832c6SAndroid Build Coastguard Workerimport tarfile 26*2fd832c6SAndroid Build Coastguard Workerimport tempfile 27*2fd832c6SAndroid Build Coastguard Worker 28*2fd832c6SAndroid Build Coastguard Workersys.path.append('%s/external/icu/tools' % os.environ.get('ANDROID_BUILD_TOP')) 29*2fd832c6SAndroid Build Coastguard Workerimport i18nutil 30*2fd832c6SAndroid Build Coastguard Workerimport icuutil 31*2fd832c6SAndroid Build Coastguard Workerimport tzdatautil 32*2fd832c6SAndroid Build Coastguard Worker 33*2fd832c6SAndroid Build Coastguard Worker# Unix epoch timestamp in seconds up to which transitions in tzdata will be pregenerated. 34*2fd832c6SAndroid Build Coastguard Workerpregeneration_upper_bound = 4102444800 # 1 Jan 2100 35*2fd832c6SAndroid Build Coastguard Worker 36*2fd832c6SAndroid Build Coastguard Worker# Calculate the paths that are referred to by multiple functions. 37*2fd832c6SAndroid Build Coastguard Workerandroid_build_top = i18nutil.GetAndroidRootOrDie() 38*2fd832c6SAndroid Build Coastguard Workertimezone_dir = os.path.realpath('%s/system/timezone' % android_build_top) 39*2fd832c6SAndroid Build Coastguard Workeri18nutil.CheckDirExists(timezone_dir, 'system/timezone') 40*2fd832c6SAndroid Build Coastguard Worker 41*2fd832c6SAndroid Build Coastguard Workerandroid_host_out = i18nutil.GetAndroidHostOutOrDie() 42*2fd832c6SAndroid Build Coastguard Worker 43*2fd832c6SAndroid Build Coastguard Workerzone_compactor_dir = os.path.realpath('%s/system/timezone/input_tools/android' % android_build_top) 44*2fd832c6SAndroid Build Coastguard Workeri18nutil.CheckDirExists(zone_compactor_dir, 'system/timezone/input_tools/android') 45*2fd832c6SAndroid Build Coastguard Worker 46*2fd832c6SAndroid Build Coastguard Workertimezone_input_tools_dir = os.path.realpath('%s/input_tools' % timezone_dir) 47*2fd832c6SAndroid Build Coastguard Workertimezone_input_data_dir = os.path.realpath('%s/input_data' % timezone_dir) 48*2fd832c6SAndroid Build Coastguard Worker 49*2fd832c6SAndroid Build Coastguard Workertimezone_output_data_dir = '%s/output_data' % timezone_dir 50*2fd832c6SAndroid Build Coastguard Workeri18nutil.CheckDirExists(timezone_output_data_dir, 'output_data') 51*2fd832c6SAndroid Build Coastguard Worker 52*2fd832c6SAndroid Build Coastguard Workertmp_dir = tempfile.mkdtemp('-tzdata') 53*2fd832c6SAndroid Build Coastguard Worker 54*2fd832c6SAndroid Build Coastguard Workerdef GenerateZicInputFile(extracted_iana_data_dir): 55*2fd832c6SAndroid Build Coastguard Worker # Android APIs assume DST means "summer time" so we follow the rearguard format 56*2fd832c6SAndroid Build Coastguard Worker # introduced in 2018e. 57*2fd832c6SAndroid Build Coastguard Worker zic_input_file_name = 'rearguard.zi' 58*2fd832c6SAndroid Build Coastguard Worker 59*2fd832c6SAndroid Build Coastguard Worker # 'NDATA=' is used to remove unnecessary rules files. 60*2fd832c6SAndroid Build Coastguard Worker subprocess.check_call(['make', '-C', extracted_iana_data_dir, 'NDATA=', zic_input_file_name]) 61*2fd832c6SAndroid Build Coastguard Worker 62*2fd832c6SAndroid Build Coastguard Worker zic_input_file = '%s/%s' % (extracted_iana_data_dir, zic_input_file_name) 63*2fd832c6SAndroid Build Coastguard Worker if not os.path.exists(zic_input_file): 64*2fd832c6SAndroid Build Coastguard Worker print('Could not find %s' % zic_input_file) 65*2fd832c6SAndroid Build Coastguard Worker sys.exit(1) 66*2fd832c6SAndroid Build Coastguard Worker return zic_input_file 67*2fd832c6SAndroid Build Coastguard Worker 68*2fd832c6SAndroid Build Coastguard Worker 69*2fd832c6SAndroid Build Coastguard Workerdef WriteSetupFile(zic_input_file): 70*2fd832c6SAndroid Build Coastguard Worker """Writes the list of zones that ZoneCompactor should process.""" 71*2fd832c6SAndroid Build Coastguard Worker links = [] 72*2fd832c6SAndroid Build Coastguard Worker zones = [] 73*2fd832c6SAndroid Build Coastguard Worker for line in open(zic_input_file): 74*2fd832c6SAndroid Build Coastguard Worker fields = line.split() 75*2fd832c6SAndroid Build Coastguard Worker if fields: 76*2fd832c6SAndroid Build Coastguard Worker line_type = fields[0] 77*2fd832c6SAndroid Build Coastguard Worker if line_type == 'Link': 78*2fd832c6SAndroid Build Coastguard Worker # Each "Link" line requires the creation of a link from an old tz ID to 79*2fd832c6SAndroid Build Coastguard Worker # a new tz ID, and implies the existence of a zone with the old tz ID. 80*2fd832c6SAndroid Build Coastguard Worker # 81*2fd832c6SAndroid Build Coastguard Worker # IANA terminology: 82*2fd832c6SAndroid Build Coastguard Worker # TARGET = the new tz ID, LINK-NAME = the old tz ID 83*2fd832c6SAndroid Build Coastguard Worker target = fields[1] 84*2fd832c6SAndroid Build Coastguard Worker link_name = fields[2] 85*2fd832c6SAndroid Build Coastguard Worker links.append('Link %s %s' % (target, link_name)) 86*2fd832c6SAndroid Build Coastguard Worker zones.append('Zone %s' % link_name) 87*2fd832c6SAndroid Build Coastguard Worker elif line_type == 'Zone': 88*2fd832c6SAndroid Build Coastguard Worker # Each "Zone" line indicates the existence of a tz ID. 89*2fd832c6SAndroid Build Coastguard Worker # 90*2fd832c6SAndroid Build Coastguard Worker # IANA terminology: 91*2fd832c6SAndroid Build Coastguard Worker # NAME is the tz ID, other fields like STDOFF, RULES, FORMAT,[UNTIL] are 92*2fd832c6SAndroid Build Coastguard Worker # ignored. 93*2fd832c6SAndroid Build Coastguard Worker name = fields[1] 94*2fd832c6SAndroid Build Coastguard Worker zones.append('Zone %s' % name) 95*2fd832c6SAndroid Build Coastguard Worker 96*2fd832c6SAndroid Build Coastguard Worker zone_compactor_setup_file = '%s/setup' % tmp_dir 97*2fd832c6SAndroid Build Coastguard Worker setup = open(zone_compactor_setup_file, 'w') 98*2fd832c6SAndroid Build Coastguard Worker 99*2fd832c6SAndroid Build Coastguard Worker # Ordering requirement from ZoneCompactor: Links must come first. 100*2fd832c6SAndroid Build Coastguard Worker for link in sorted(set(links)): 101*2fd832c6SAndroid Build Coastguard Worker setup.write('%s\n' % link) 102*2fd832c6SAndroid Build Coastguard Worker for zone in sorted(set(zones)): 103*2fd832c6SAndroid Build Coastguard Worker setup.write('%s\n' % zone) 104*2fd832c6SAndroid Build Coastguard Worker setup.close() 105*2fd832c6SAndroid Build Coastguard Worker return zone_compactor_setup_file 106*2fd832c6SAndroid Build Coastguard Worker 107*2fd832c6SAndroid Build Coastguard Worker 108*2fd832c6SAndroid Build Coastguard Workerdef BuildIcuData(iana_data_tar_file): 109*2fd832c6SAndroid Build Coastguard Worker icu_build_dir = '%s/icu' % tmp_dir 110*2fd832c6SAndroid Build Coastguard Worker 111*2fd832c6SAndroid Build Coastguard Worker icuutil.PrepareIcuBuild(icu_build_dir) 112*2fd832c6SAndroid Build Coastguard Worker icuutil.MakeTzDataFiles(icu_build_dir, iana_data_tar_file) 113*2fd832c6SAndroid Build Coastguard Worker 114*2fd832c6SAndroid Build Coastguard Worker # Create ICU system image files. 115*2fd832c6SAndroid Build Coastguard Worker icuutil.MakeAndCopyIcuDataFiles(icu_build_dir) 116*2fd832c6SAndroid Build Coastguard Worker 117*2fd832c6SAndroid Build Coastguard Worker # Create the ICU's .res time zone files. 118*2fd832c6SAndroid Build Coastguard Worker icu_overlay_dir = '%s/icu_overlay' % timezone_output_data_dir 119*2fd832c6SAndroid Build Coastguard Worker icuutil.MakeAndCopyIcuTzFiles(icu_build_dir, icu_overlay_dir) 120*2fd832c6SAndroid Build Coastguard Worker 121*2fd832c6SAndroid Build Coastguard Worker # There are files in ICU which generation depends on ICU itself, 122*2fd832c6SAndroid Build Coastguard Worker # so multiple builds might be needed. 123*2fd832c6SAndroid Build Coastguard Worker icuutil.GenerateIcuDataFiles() 124*2fd832c6SAndroid Build Coastguard Worker 125*2fd832c6SAndroid Build Coastguard Worker # Copy ICU license file(s) 126*2fd832c6SAndroid Build Coastguard Worker icuutil.CopyLicenseFiles(icu_overlay_dir) 127*2fd832c6SAndroid Build Coastguard Worker 128*2fd832c6SAndroid Build Coastguard Worker 129*2fd832c6SAndroid Build Coastguard Workerdef GetIanaVersion(iana_tar_file): 130*2fd832c6SAndroid Build Coastguard Worker iana_tar_filename = os.path.basename(iana_tar_file) 131*2fd832c6SAndroid Build Coastguard Worker iana_version = re.search('tz(?:data|code)(.+)\\.tar\\.gz', iana_tar_filename).group(1) 132*2fd832c6SAndroid Build Coastguard Worker return iana_version 133*2fd832c6SAndroid Build Coastguard Worker 134*2fd832c6SAndroid Build Coastguard Worker 135*2fd832c6SAndroid Build Coastguard Workerdef ExtractTarFile(tar_file, dir): 136*2fd832c6SAndroid Build Coastguard Worker print('Extracting %s...' % tar_file) 137*2fd832c6SAndroid Build Coastguard Worker if not os.path.exists(dir): 138*2fd832c6SAndroid Build Coastguard Worker os.mkdir(dir) 139*2fd832c6SAndroid Build Coastguard Worker tar = tarfile.open(tar_file, 'r') 140*2fd832c6SAndroid Build Coastguard Worker tar.extractall(dir) 141*2fd832c6SAndroid Build Coastguard Worker 142*2fd832c6SAndroid Build Coastguard Worker 143*2fd832c6SAndroid Build Coastguard Workerdef BuildZic(iana_tools_dir): 144*2fd832c6SAndroid Build Coastguard Worker iana_zic_code_tar_file = tzdatautil.GetIanaTarFile(iana_tools_dir, 'tzcode') 145*2fd832c6SAndroid Build Coastguard Worker iana_zic_code_version = GetIanaVersion(iana_zic_code_tar_file) 146*2fd832c6SAndroid Build Coastguard Worker iana_zic_data_tar_file = tzdatautil.GetIanaTarFile(iana_tools_dir, 'tzdata') 147*2fd832c6SAndroid Build Coastguard Worker iana_zic_data_version = GetIanaVersion(iana_zic_data_tar_file) 148*2fd832c6SAndroid Build Coastguard Worker 149*2fd832c6SAndroid Build Coastguard Worker print('Found IANA zic release %s/%s in %s/%s ...' \ 150*2fd832c6SAndroid Build Coastguard Worker % (iana_zic_code_version, iana_zic_data_version, iana_zic_code_tar_file, 151*2fd832c6SAndroid Build Coastguard Worker iana_zic_data_tar_file)) 152*2fd832c6SAndroid Build Coastguard Worker 153*2fd832c6SAndroid Build Coastguard Worker zic_build_dir = '%s/zic' % tmp_dir 154*2fd832c6SAndroid Build Coastguard Worker ExtractTarFile(iana_zic_code_tar_file, zic_build_dir) 155*2fd832c6SAndroid Build Coastguard Worker ExtractTarFile(iana_zic_data_tar_file, zic_build_dir) 156*2fd832c6SAndroid Build Coastguard Worker 157*2fd832c6SAndroid Build Coastguard Worker # zic 158*2fd832c6SAndroid Build Coastguard Worker print('Building zic...') 159*2fd832c6SAndroid Build Coastguard Worker # VERSION_DEPS= is to stop the build process looking for files that might not 160*2fd832c6SAndroid Build Coastguard Worker # be present across different versions. 161*2fd832c6SAndroid Build Coastguard Worker subprocess.check_call(['make', '-C', zic_build_dir, 'zic']) 162*2fd832c6SAndroid Build Coastguard Worker 163*2fd832c6SAndroid Build Coastguard Worker zic_binary_file = '%s/zic' % zic_build_dir 164*2fd832c6SAndroid Build Coastguard Worker if not os.path.exists(zic_binary_file): 165*2fd832c6SAndroid Build Coastguard Worker print('Could not find %s' % zic_binary_file) 166*2fd832c6SAndroid Build Coastguard Worker sys.exit(1) 167*2fd832c6SAndroid Build Coastguard Worker return zic_binary_file 168*2fd832c6SAndroid Build Coastguard Worker 169*2fd832c6SAndroid Build Coastguard Worker 170*2fd832c6SAndroid Build Coastguard Workerdef BuildTzdata(zic_binary_file, extracted_iana_data_dir, iana_data_version): 171*2fd832c6SAndroid Build Coastguard Worker print('Generating zic input file...') 172*2fd832c6SAndroid Build Coastguard Worker zic_input_file = GenerateZicInputFile(extracted_iana_data_dir) 173*2fd832c6SAndroid Build Coastguard Worker 174*2fd832c6SAndroid Build Coastguard Worker print('Calling zic...') 175*2fd832c6SAndroid Build Coastguard Worker zic_output_dir = '%s/data' % tmp_dir 176*2fd832c6SAndroid Build Coastguard Worker os.mkdir(zic_output_dir) 177*2fd832c6SAndroid Build Coastguard Worker # -R specifies upper bound for generated transitions. 178*2fd832c6SAndroid Build Coastguard Worker zic_cmd = [zic_binary_file, '-b', 'slim', '-R', f'@{pregeneration_upper_bound}', '-d', zic_output_dir, zic_input_file] 179*2fd832c6SAndroid Build Coastguard Worker subprocess.check_call(zic_cmd) 180*2fd832c6SAndroid Build Coastguard Worker 181*2fd832c6SAndroid Build Coastguard Worker # ZoneCompactor 182*2fd832c6SAndroid Build Coastguard Worker zone_compactor_setup_file = WriteSetupFile(zic_input_file) 183*2fd832c6SAndroid Build Coastguard Worker 184*2fd832c6SAndroid Build Coastguard Worker print('Calling ZoneCompactor to update tzdata to %s...' % iana_data_version) 185*2fd832c6SAndroid Build Coastguard Worker 186*2fd832c6SAndroid Build Coastguard Worker tzdatautil.InvokeSoong(android_build_top, ['zone_compactor']) 187*2fd832c6SAndroid Build Coastguard Worker 188*2fd832c6SAndroid Build Coastguard Worker # Create args for ZoneCompactor 189*2fd832c6SAndroid Build Coastguard Worker header_string = 'tzdata%s' % iana_data_version 190*2fd832c6SAndroid Build Coastguard Worker 191*2fd832c6SAndroid Build Coastguard Worker print('Executing ZoneCompactor...') 192*2fd832c6SAndroid Build Coastguard Worker command = '%s/bin/zone_compactor' % android_host_out 193*2fd832c6SAndroid Build Coastguard Worker iana_output_data_dir = '%s/iana' % timezone_output_data_dir 194*2fd832c6SAndroid Build Coastguard Worker subprocess.check_call([command, zone_compactor_setup_file, zic_output_dir, iana_output_data_dir, 195*2fd832c6SAndroid Build Coastguard Worker header_string]) 196*2fd832c6SAndroid Build Coastguard Worker 197*2fd832c6SAndroid Build Coastguard Worker 198*2fd832c6SAndroid Build Coastguard Workerdef BuildTzlookupAndTzIds(iana_data_dir): 199*2fd832c6SAndroid Build Coastguard Worker countryzones_source_file = '%s/android/countryzones.txt' % timezone_input_data_dir 200*2fd832c6SAndroid Build Coastguard Worker tzlookup_dest_file = '%s/android/tzlookup.xml' % timezone_output_data_dir 201*2fd832c6SAndroid Build Coastguard Worker tzids_dest_file = '%s/android/tzids.prototxt' % timezone_output_data_dir 202*2fd832c6SAndroid Build Coastguard Worker 203*2fd832c6SAndroid Build Coastguard Worker print('Calling TzLookupGenerator to create tzlookup.xml / tzids.prototxt...') 204*2fd832c6SAndroid Build Coastguard Worker tzdatautil.InvokeSoong(android_build_top, ['tzlookup_generator']) 205*2fd832c6SAndroid Build Coastguard Worker 206*2fd832c6SAndroid Build Coastguard Worker zone_tab_file = '%s/zone.tab' % iana_data_dir 207*2fd832c6SAndroid Build Coastguard Worker command = '%s/bin/tzlookup_generator' % android_host_out 208*2fd832c6SAndroid Build Coastguard Worker subprocess.check_call([command, countryzones_source_file, zone_tab_file, tzlookup_dest_file, 209*2fd832c6SAndroid Build Coastguard Worker tzids_dest_file]) 210*2fd832c6SAndroid Build Coastguard Worker 211*2fd832c6SAndroid Build Coastguard Worker 212*2fd832c6SAndroid Build Coastguard Workerdef BuildTelephonylookup(): 213*2fd832c6SAndroid Build Coastguard Worker telephonylookup_source_file = '%s/android/telephonylookup.txt' % timezone_input_data_dir 214*2fd832c6SAndroid Build Coastguard Worker telephonylookup_dest_file = '%s/android/telephonylookup.xml' % timezone_output_data_dir 215*2fd832c6SAndroid Build Coastguard Worker 216*2fd832c6SAndroid Build Coastguard Worker print('Calling TelephonyLookupGenerator to create telephonylookup.xml...') 217*2fd832c6SAndroid Build Coastguard Worker tzdatautil.InvokeSoong(android_build_top, ['telephonylookup_generator']) 218*2fd832c6SAndroid Build Coastguard Worker 219*2fd832c6SAndroid Build Coastguard Worker command = '%s/bin/telephonylookup_generator' % android_host_out 220*2fd832c6SAndroid Build Coastguard Worker subprocess.check_call([command, telephonylookup_source_file, telephonylookup_dest_file]) 221*2fd832c6SAndroid Build Coastguard Worker 222*2fd832c6SAndroid Build Coastguard Worker 223*2fd832c6SAndroid Build Coastguard Workerdef CreateTzVersion(iana_data_version, android_revision, output_version_file): 224*2fd832c6SAndroid Build Coastguard Worker create_tz_version_script = '%s/input_tools/version/create-tz_version.py' % timezone_dir 225*2fd832c6SAndroid Build Coastguard Worker 226*2fd832c6SAndroid Build Coastguard Worker subprocess.check_call([create_tz_version_script, 227*2fd832c6SAndroid Build Coastguard Worker '-iana_version', iana_data_version, 228*2fd832c6SAndroid Build Coastguard Worker '-revision', str(android_revision), 229*2fd832c6SAndroid Build Coastguard Worker '-output_version_file', output_version_file]) 230*2fd832c6SAndroid Build Coastguard Worker 231*2fd832c6SAndroid Build Coastguard Workerdef UpdateTestFiles(): 232*2fd832c6SAndroid Build Coastguard Worker testing_data_dir = '%s/testing/data' % timezone_dir 233*2fd832c6SAndroid Build Coastguard Worker update_test_files_script = '%s/create-test-data.sh' % testing_data_dir 234*2fd832c6SAndroid Build Coastguard Worker subprocess.check_call([update_test_files_script], cwd=testing_data_dir) 235*2fd832c6SAndroid Build Coastguard Worker 236*2fd832c6SAndroid Build Coastguard Worker 237*2fd832c6SAndroid Build Coastguard Worker# Run from any directory, with no special setup required. 238*2fd832c6SAndroid Build Coastguard Worker# In the rare case when tzdata has to be updated, but under the same version, 239*2fd832c6SAndroid Build Coastguard Worker# pass "-revision" argument. 240*2fd832c6SAndroid Build Coastguard Worker# See http://www.iana.org/time-zones/ for more about the source of this data. 241*2fd832c6SAndroid Build Coastguard Workerdef main(): 242*2fd832c6SAndroid Build Coastguard Worker parser = argparse.ArgumentParser() 243*2fd832c6SAndroid Build Coastguard Worker parser.add_argument('-revision', type=int, default=1, 244*2fd832c6SAndroid Build Coastguard Worker help='Revision of current the IANA version, default = 1') 245*2fd832c6SAndroid Build Coastguard Worker 246*2fd832c6SAndroid Build Coastguard Worker args = parser.parse_args() 247*2fd832c6SAndroid Build Coastguard Worker android_revision = args.revision 248*2fd832c6SAndroid Build Coastguard Worker 249*2fd832c6SAndroid Build Coastguard Worker print('Source data file structure: %s' % timezone_input_data_dir) 250*2fd832c6SAndroid Build Coastguard Worker print('Source tools file structure: %s' % timezone_input_tools_dir) 251*2fd832c6SAndroid Build Coastguard Worker print('Intermediate / working dir: %s' % tmp_dir) 252*2fd832c6SAndroid Build Coastguard Worker print('Output data file structure: %s' % timezone_output_data_dir) 253*2fd832c6SAndroid Build Coastguard Worker 254*2fd832c6SAndroid Build Coastguard Worker iana_input_data_dir = '%s/iana' % timezone_input_data_dir 255*2fd832c6SAndroid Build Coastguard Worker iana_data_tar_file = tzdatautil.GetIanaTarFile(iana_input_data_dir, 'tzdata') 256*2fd832c6SAndroid Build Coastguard Worker iana_data_version = GetIanaVersion(iana_data_tar_file) 257*2fd832c6SAndroid Build Coastguard Worker print('IANA time zone data release %s in %s ...' % (iana_data_version, iana_data_tar_file)) 258*2fd832c6SAndroid Build Coastguard Worker 259*2fd832c6SAndroid Build Coastguard Worker icu_dir = icuutil.icuDir() 260*2fd832c6SAndroid Build Coastguard Worker print('Found icu in %s ...' % icu_dir) 261*2fd832c6SAndroid Build Coastguard Worker 262*2fd832c6SAndroid Build Coastguard Worker BuildIcuData(iana_data_tar_file) 263*2fd832c6SAndroid Build Coastguard Worker 264*2fd832c6SAndroid Build Coastguard Worker iana_tools_dir = '%s/iana' % timezone_input_tools_dir 265*2fd832c6SAndroid Build Coastguard Worker zic_binary_file = BuildZic(iana_tools_dir) 266*2fd832c6SAndroid Build Coastguard Worker 267*2fd832c6SAndroid Build Coastguard Worker iana_data_dir = '%s/iana_data' % tmp_dir 268*2fd832c6SAndroid Build Coastguard Worker ExtractTarFile(iana_data_tar_file, iana_data_dir) 269*2fd832c6SAndroid Build Coastguard Worker BuildTzdata(zic_binary_file, iana_data_dir, iana_data_version) 270*2fd832c6SAndroid Build Coastguard Worker 271*2fd832c6SAndroid Build Coastguard Worker BuildTzlookupAndTzIds(iana_data_dir) 272*2fd832c6SAndroid Build Coastguard Worker 273*2fd832c6SAndroid Build Coastguard Worker BuildTelephonylookup() 274*2fd832c6SAndroid Build Coastguard Worker 275*2fd832c6SAndroid Build Coastguard Worker # Create a version file from the output from prior stages. 276*2fd832c6SAndroid Build Coastguard Worker output_version_file = '%s/version/tz_version' % timezone_output_data_dir 277*2fd832c6SAndroid Build Coastguard Worker CreateTzVersion(iana_data_version, android_revision, output_version_file) 278*2fd832c6SAndroid Build Coastguard Worker 279*2fd832c6SAndroid Build Coastguard Worker # Update test versions of data files too. 280*2fd832c6SAndroid Build Coastguard Worker UpdateTestFiles() 281*2fd832c6SAndroid Build Coastguard Worker 282*2fd832c6SAndroid Build Coastguard Worker print('Look in %s and %s for new files' % (timezone_output_data_dir, icu_dir)) 283*2fd832c6SAndroid Build Coastguard Worker sys.exit(0) 284*2fd832c6SAndroid Build Coastguard Worker 285*2fd832c6SAndroid Build Coastguard Worker 286*2fd832c6SAndroid Build Coastguard Workerif __name__ == '__main__': 287*2fd832c6SAndroid Build Coastguard Worker main() 288