| Index: ios/chrome/tools/build/ios_repack_locales.py
 | 
| diff --git a/ios/chrome/tools/build/ios_repack_locales.py b/ios/chrome/tools/build/ios_repack_locales.py
 | 
| new file mode 100755
 | 
| index 0000000000000000000000000000000000000000..4801f0647b8669fcbe704e90142640b8b1d43a16
 | 
| --- /dev/null
 | 
| +++ b/ios/chrome/tools/build/ios_repack_locales.py
 | 
| @@ -0,0 +1,155 @@
 | 
| +#!/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 iOS.
 | 
| +
 | 
| +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. '<(SHARED_INTERMEDIATE_DIR)/components/strings/
 | 
| +  # components_strings_da.pak',
 | 
| +  inputs.append(os.path.join(options.share_int_dir, 'components', 'strings',
 | 
| +                'components_strings_%s.pak' % locale))
 | 
| +
 | 
| +  #e.g. '<(SHARED_INTERMEDIATE_DIR)/ui/strings/ui_strings_da.pak',
 | 
| +  inputs.append(os.path.join(options.share_int_dir, 'ui', 'strings',
 | 
| +                'ui_strings_%s.pak' % locale))
 | 
| +
 | 
| +  #e.g. '<(SHARED_INTERMEDIATE_DIR)/ios/chrome/ios_strings_resources_da.pak'
 | 
| +  inputs.append(os.path.join(options.share_int_dir, 'ios', 'chrome',
 | 
| +                'ios_strings_resources_%s.pak' % locale))
 | 
| +
 | 
| +  if options.branding:
 | 
| +    #e.g. '<(SHARED_INTERMEDIATE_DIR)/ios/chrome/google_chrome_strings_da.pak'
 | 
| +    #     or
 | 
| +    #     '<(SHARED_INTERMEDIATE_DIR)/ios/chrome/chromium_strings_da.pak'
 | 
| +    inputs.append(os.path.join(options.share_int_dir, 'ios', 'chrome',
 | 
| +        '%s_strings_%s.pak' % (options.branding, 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')
 | 
| +
 | 
| +  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
 | 
| 
 |