diff options
Diffstat (limited to 'ios/chrome/tools/build/ios_repack_today_extension_locales.py')
-rwxr-xr-x | ios/chrome/tools/build/ios_repack_today_extension_locales.py | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/ios/chrome/tools/build/ios_repack_today_extension_locales.py b/ios/chrome/tools/build/ios_repack_today_extension_locales.py new file mode 100755 index 0000000..d7e2334 --- /dev/null +++ b/ios/chrome/tools/build/ios_repack_today_extension_locales.py @@ -0,0 +1,142 @@ +#!/usr/bin/env python +# Copyright 2015 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +"""Helper script to repack paks for a list of locales for today extension. + +Gyp doesn't have any built-in looping capability, so this just provides a way to +loop over a list of locales when repacking pak files, thus avoiding a +proliferation of mostly duplicate, cut-n-paste gyp actions. +""" + +import optparse +import os +import sys + +script_dir = os.path.dirname(__file__) +src_dir = os.path.join(script_dir, os.pardir, os.pardir, os.pardir, os.pardir) +sys.path.append(os.path.join(src_dir, 'tools', 'grit')) + +from grit.format import data_pack + + +def calc_output(options, locale): + """Determine the file that will be generated for the given locale.""" + #e.g. '<(INTERMEDIATE_DIR)/repack/da.pak', + # For Fake Bidi, generate it at a fixed path so that tests can safely + # reference it. + if locale == 'fake-bidi': + return os.path.join(options.share_int_dir, locale + '.pak') + # For Cocoa to find the locale at runtime, it needs to use '_' instead + # of '-' (http://crbug.com/20441). Also, 'en-US' should be represented + # simply as 'en' (http://crbug.com/19165, http://crbug.com/25578). + if locale == 'en-US': + locale = 'en' + else: + locale = locale.replace('-', '_') + return os.path.join(options.out_dir, locale + '.lproj', 'locale.pak') + + +def calc_inputs(options, locale): + """Determine the files that need processing for the given locale.""" + inputs = [] + + #e.g. 'out/Debug/gen/ios/today_extension/ios_today_extension_strings_da.pak' + inputs.append(os.path.join(options.share_int_dir, 'ios', 'today_extension', + 'ios_today_extension_strings_%s.pak' % (locale))) + + # Add any extra input files. + for extra_file in options.extra_input: + inputs.append('%s_%s.pak' % (extra_file, locale)) + + return inputs + + +def list_outputs(options, locales): + """Returns the names of files that will be generated for the given locales. + + This is to provide gyp the list of output files, so build targets can + properly track what needs to be built. + """ + outputs = [] + for locale in locales: + outputs.append(calc_output(options, locale)) + return outputs + + +def list_inputs(options, locales): + """Returns the names of files that will be processed for the given locales. + + This is to provide gyp the list of input files, so build targets can properly + track their prerequisites. + """ + inputs = [] + for locale in locales: + inputs.extend(calc_inputs(options, locale)) + return inputs + + +def quote_filenames(filenames): + """Quote each elements so filename spaces don't mess up gyp's attempt to parse + it into a list.""" + return " ".join(['"%s"' % x for x in filenames]) + + +def repack_locales(options, locales): + """ Loop over and repack the given locales.""" + for locale in locales: + inputs = calc_inputs(options, locale) + output = calc_output(options, locale) + data_pack.DataPack.RePack(output, inputs, whitelist_file=options.whitelist) + + +def DoMain(argv): + parser = optparse.OptionParser("usage: %prog [options] locales") + parser.add_option( + "-i", action="store_true", dest="print_inputs", default=False, + help="Print the expected input file list, then exit.") + parser.add_option( + "-o", action="store_true", dest="print_outputs", default=False, + help="Print the expected output file list, then exit.") + parser.add_option( + "-x", action="store", dest="out_dir", + help="Intermediate build files output directory.") + parser.add_option( + "-s", action="store", dest="share_int_dir", + help="Shared intermediate build files output directory.") + parser.add_option( + "-b", action="store", dest="branding", + help="Branding type of this build.") + parser.add_option( + "-e", action="append", dest="extra_input", default=[], + help="Full path to an extra input pak file without the " + "locale suffix and \".pak\" extension.") + parser.add_option( + "--whitelist", action="store", help="Full path to the " + "whitelist used to filter output pak file resource IDs") + options, locales = parser.parse_args(argv) + + if not locales: + parser.error('Please specificy at least one locale to process.\n') + + if not (options.out_dir and options.share_int_dir): + parser.error('Please specify all of "-x" and "-s".\n') + if options.print_inputs and options.print_outputs: + parser.error('Please specify only one of "-i" or "-o".\n') + # Need to know the branding, unless we're just listing the outputs. + if not options.print_outputs and not options.branding: + parser.error('Please specify "-b" to determine the input files.\n') + + if options.print_inputs: + return quote_filenames(list_inputs(options, locales)) + + if options.print_outputs: + return quote_filenames(list_outputs(options, locales)) + + return repack_locales(options, locales) + +if __name__ == '__main__': + results = DoMain(sys.argv[1:]) + if results: + print results |