1*2fd832c6SAndroid Build Coastguard Worker#!/usr/bin/python3 -B 2*2fd832c6SAndroid Build Coastguard Worker 3*2fd832c6SAndroid Build Coastguard Worker# Copyright 2019 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"""Dumps the contents of a tzdata file.""" 18*2fd832c6SAndroid Build Coastguard Worker 19*2fd832c6SAndroid Build Coastguard Workerimport argparse 20*2fd832c6SAndroid Build Coastguard Workerimport os 21*2fd832c6SAndroid Build Coastguard Workerimport subprocess 22*2fd832c6SAndroid Build Coastguard Workerimport sys 23*2fd832c6SAndroid Build Coastguard Worker 24*2fd832c6SAndroid Build Coastguard Workersys.path.append('%s/external/icu/tools' % os.environ.get('ANDROID_BUILD_TOP')) 25*2fd832c6SAndroid Build Coastguard Workerimport i18nutil 26*2fd832c6SAndroid Build Coastguard Worker 27*2fd832c6SAndroid Build Coastguard Workersys.path.append('%s/system/timezone' % os.environ.get('ANDROID_BUILD_TOP')) 28*2fd832c6SAndroid Build Coastguard Workerimport tzdatautil 29*2fd832c6SAndroid Build Coastguard Worker 30*2fd832c6SAndroid Build Coastguard Worker 31*2fd832c6SAndroid Build Coastguard Worker# Calculate the paths that are referred to by multiple functions. 32*2fd832c6SAndroid Build Coastguard Workerandroid_build_top = i18nutil.GetAndroidRootOrDie() 33*2fd832c6SAndroid Build Coastguard Workertimezone_dir = os.path.realpath('%s/system/timezone' % android_build_top) 34*2fd832c6SAndroid Build Coastguard Workeri18nutil.CheckDirExists(timezone_dir, 'system/timezone') 35*2fd832c6SAndroid Build Coastguard Worker 36*2fd832c6SAndroid Build Coastguard Workerandroid_host_out = i18nutil.GetAndroidHostOutOrDie() 37*2fd832c6SAndroid Build Coastguard Worker 38*2fd832c6SAndroid Build Coastguard Workerdebug_tools_dir = os.path.realpath('%s/system/timezone/debug_tools/host' % android_build_top) 39*2fd832c6SAndroid Build Coastguard Workeri18nutil.CheckDirExists(debug_tools_dir, 'system/timezone/debug_tools/host') 40*2fd832c6SAndroid Build Coastguard Worker 41*2fd832c6SAndroid Build Coastguard Worker 42*2fd832c6SAndroid Build Coastguard Workerdef BuildDebugTools(): 43*2fd832c6SAndroid Build Coastguard Worker tzdatautil.InvokeSoong(android_build_top, ['zone_splitter', 'tz_file_dumper']) 44*2fd832c6SAndroid Build Coastguard Worker 45*2fd832c6SAndroid Build Coastguard Worker 46*2fd832c6SAndroid Build Coastguard Workerdef SplitTzData(tzdata_file, output_dir): 47*2fd832c6SAndroid Build Coastguard Worker jar_file = '%s/framework/zone_splitter.jar' % android_host_out 48*2fd832c6SAndroid Build Coastguard Worker subprocess.check_call(['java', '-jar', jar_file, tzdata_file, output_dir]) 49*2fd832c6SAndroid Build Coastguard Worker 50*2fd832c6SAndroid Build Coastguard Worker 51*2fd832c6SAndroid Build Coastguard Workerdef CreateCsvFiles(zones_dir, csvs_dir): 52*2fd832c6SAndroid Build Coastguard Worker jar_file = '%s/framework/tz_file_dumper.jar' % android_host_out 53*2fd832c6SAndroid Build Coastguard Worker subprocess.check_call(['java', '-jar', jar_file, zones_dir, csvs_dir]) 54*2fd832c6SAndroid Build Coastguard Worker 55*2fd832c6SAndroid Build Coastguard Worker 56*2fd832c6SAndroid Build Coastguard Workerdef CheckFileExists(file, filename): 57*2fd832c6SAndroid Build Coastguard Worker if not os.path.isfile(file): 58*2fd832c6SAndroid Build Coastguard Worker print("Couldn't find %s (%s)!" % (filename, file)) 59*2fd832c6SAndroid Build Coastguard Worker sys.exit(1) 60*2fd832c6SAndroid Build Coastguard Worker 61*2fd832c6SAndroid Build Coastguard Worker 62*2fd832c6SAndroid Build Coastguard Workerdef main(): 63*2fd832c6SAndroid Build Coastguard Worker parser = argparse.ArgumentParser() 64*2fd832c6SAndroid Build Coastguard Worker parser.add_argument('-tzdata', required=True, 65*2fd832c6SAndroid Build Coastguard Worker help='The tzdata file to process') 66*2fd832c6SAndroid Build Coastguard Worker parser.add_argument('-output', required=True, 67*2fd832c6SAndroid Build Coastguard Worker help='The output directory for the dump') 68*2fd832c6SAndroid Build Coastguard Worker args = parser.parse_args() 69*2fd832c6SAndroid Build Coastguard Worker 70*2fd832c6SAndroid Build Coastguard Worker tzdata_file = args.tzdata 71*2fd832c6SAndroid Build Coastguard Worker output_dir = args.output 72*2fd832c6SAndroid Build Coastguard Worker 73*2fd832c6SAndroid Build Coastguard Worker CheckFileExists(tzdata_file, '-tzdata') 74*2fd832c6SAndroid Build Coastguard Worker if not os.path.exists(output_dir): 75*2fd832c6SAndroid Build Coastguard Worker print('Creating dir: %s' % output_dir) 76*2fd832c6SAndroid Build Coastguard Worker os.mkdir(output_dir) 77*2fd832c6SAndroid Build Coastguard Worker i18nutil.CheckDirExists(output_dir, '-output') 78*2fd832c6SAndroid Build Coastguard Worker 79*2fd832c6SAndroid Build Coastguard Worker BuildDebugTools() 80*2fd832c6SAndroid Build Coastguard Worker 81*2fd832c6SAndroid Build Coastguard Worker SplitTzData(tzdata_file, output_dir) 82*2fd832c6SAndroid Build Coastguard Worker 83*2fd832c6SAndroid Build Coastguard Worker zones_dir = '%s/zones' % output_dir 84*2fd832c6SAndroid Build Coastguard Worker csvs_dir = '%s/csvs' % output_dir 85*2fd832c6SAndroid Build Coastguard Worker 86*2fd832c6SAndroid Build Coastguard Worker i18nutil.CheckDirExists(zones_dir, 'zones output dir') 87*2fd832c6SAndroid Build Coastguard Worker if not os.path.exists(csvs_dir): 88*2fd832c6SAndroid Build Coastguard Worker os.mkdir(csvs_dir) 89*2fd832c6SAndroid Build Coastguard Worker 90*2fd832c6SAndroid Build Coastguard Worker CreateCsvFiles(zones_dir, csvs_dir) 91*2fd832c6SAndroid Build Coastguard Worker 92*2fd832c6SAndroid Build Coastguard Worker print('Look in %s for all extracted files' % output_dir) 93*2fd832c6SAndroid Build Coastguard Worker print('Look in %s for dumped CSVs' % csvs_dir) 94*2fd832c6SAndroid Build Coastguard Worker sys.exit(0) 95*2fd832c6SAndroid Build Coastguard Worker 96*2fd832c6SAndroid Build Coastguard Worker 97*2fd832c6SAndroid Build Coastguard Workerif __name__ == '__main__': 98*2fd832c6SAndroid Build Coastguard Worker main() 99