15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/env python
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved.
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file.
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""Helper script to repack paks for a list of locales.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Gyp doesn't have any built-in looping capability, so this just provides a way to
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)loop over a list of locales when repacking pak files, thus avoiding a
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)proliferation of mostly duplicate, cut-n-paste gyp actions.
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import optparse
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import os
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import sys
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..',
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             'tools', 'grit'))
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from grit.format import data_pack
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# The gyp "branding" variable.
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BRANDING = None
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Some build paths defined by gyp.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GRIT_DIR = None
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SHARE_INT_DIR = None
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)INT_DIR = None
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# The target platform. If it is not defined, sys.platform will be used.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)OS = None
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Extra input files.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)EXTRA_INPUT_FILES = []
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Usage(Exception):
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def __init__(self, msg):
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.msg = msg
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def calc_output(locale):
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Determine the file that will be generated for the given locale."""
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  #e.g. '<(INTERMEDIATE_DIR)/repack/da.pak',
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # For Fake Bidi, generate it at a fixed path so that tests can safely
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # reference it.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if locale == 'fake-bidi':
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return '%s/%s.pak' % (INT_DIR, locale)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if OS == 'mac' or OS == 'ios':
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # For Cocoa to find the locale at runtime, it needs to use '_' instead
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # of '-' (http://crbug.com/20441).  Also, 'en-US' should be represented
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # simply as 'en' (http://crbug.com/19165, http://crbug.com/25578).
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if locale == 'en-US':
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      locale = 'en'
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return '%s/repack/%s.lproj/locale.pak' % (INT_DIR, locale.replace('-', '_'))
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else:
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return os.path.join(INT_DIR, 'repack', locale + '.pak')
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def calc_inputs(locale):
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Determine the files that need processing for the given locale."""
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  inputs = []
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  #e.g. '<(grit_out_dir)/generated_resources_da.pak'
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  inputs.append(os.path.join(GRIT_DIR, 'generated_resources_%s.pak' % locale))
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  #e.g. '<(grit_out_dir)/locale_settings_da.pak'
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  inputs.append(os.path.join(GRIT_DIR, 'locale_settings_%s.pak' % locale))
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  #e.g. '<(grit_out_dir)/platform_locale_settings_da.pak'
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  inputs.append(os.path.join(GRIT_DIR,
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                'platform_locale_settings_%s.pak' % locale))
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  #e.g. '<(SHARED_INTERMEDIATE_DIR)/components/strings/
737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  # component_strings_da.pak',
747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  inputs.append(os.path.join(SHARE_INT_DIR, 'components', 'strings',
757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                'component_strings_%s.pak' % locale))
7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if OS != 'ios':
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    #e.g. '<(SHARED_INTERMEDIATE_DIR)/webkit/webkit_strings_da.pak'
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    inputs.append(os.path.join(SHARE_INT_DIR, 'webkit',
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  'webkit_strings_%s.pak' % locale))
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    #e.g. '<(SHARED_INTERMEDIATE_DIR)/ui/ui_strings_da.pak',
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    inputs.append(os.path.join(SHARE_INT_DIR, 'ui', 'ui_strings',
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  'ui_strings_%s.pak' % locale))
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    #e.g. '<(SHARED_INTERMEDIATE_DIR)/ash_strings/ash_strings_da.pak',
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    inputs.append(os.path.join(SHARE_INT_DIR, 'ash_strings',
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  'ash_strings_%s.pak' % locale))
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
90868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    #e.g. '<(SHARED_INTERMEDIATE_DIR)/device/bluetooth/strings/
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    # device_bluetooth_strings_da.pak',
92868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    inputs.append(os.path.join(SHARE_INT_DIR, 'device', 'bluetooth', 'strings',
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  'device_bluetooth_strings_%s.pak' % locale))
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    #e.g. '<(SHARED_INTERMEDIATE_DIR)/ui/app_locale_settings_da.pak',
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    inputs.append(os.path.join(SHARE_INT_DIR, 'ui', 'app_locale_settings',
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  'app_locale_settings_%s.pak' % locale))
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  #e.g. '<(grit_out_dir)/google_chrome_strings_da.pak'
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  #     or
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  #     '<(grit_out_dir)/chromium_strings_da.pak'
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  inputs.append(os.path.join(
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GRIT_DIR, '%s_strings_%s.pak' % (BRANDING, locale)))
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Add any extra input files.
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for extra_file in EXTRA_INPUT_FILES:
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    inputs.append('%s_%s.pak' % (extra_file, locale))
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return inputs
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def list_outputs(locales):
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Returns the names of files that will be generated for the given locales.
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  This is to provide gyp the list of output files, so build targets can
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  properly track what needs to be built.
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  outputs = []
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for locale in locales:
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    outputs.append(calc_output(locale))
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Quote each element so filename spaces don't mess up gyp's attempt to parse
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # it into a list.
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return " ".join(['"%s"' % x for x in outputs])
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def list_inputs(locales):
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Returns the names of files that will be processed for the given locales.
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  This is to provide gyp the list of input files, so build targets can properly
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  track their prerequisites.
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  inputs = []
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for locale in locales:
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    inputs += calc_inputs(locale)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Quote each element so filename spaces don't mess up gyp's attempt to parse
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # it into a list.
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return " ".join(['"%s"' % x for x in inputs])
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def repack_locales(locales):
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """ Loop over and repack the given locales."""
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for locale in locales:
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    inputs = []
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    inputs += calc_inputs(locale)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    output = calc_output(locale)
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    data_pack.DataPack.RePack(output, inputs)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def DoMain(argv):
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  global BRANDING
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  global GRIT_DIR
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  global SHARE_INT_DIR
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  global INT_DIR
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  global OS
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  global EXTRA_INPUT_FILES
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parser = optparse.OptionParser("usage: %prog [options] locales")
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parser.add_option("-i", action="store_true", dest="inputs", default=False,
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    help="Print the expected input file list, then exit.")
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parser.add_option("-o", action="store_true", dest="outputs", default=False,
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    help="Print the expected output file list, then exit.")
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parser.add_option("-g", action="store", dest="grit_dir",
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    help="GRIT build files output directory.")
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parser.add_option("-x", action="store", dest="int_dir",
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    help="Intermediate build files output directory.")
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parser.add_option("-s", action="store", dest="share_int_dir",
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    help="Shared intermediate build files output directory.")
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parser.add_option("-b", action="store", dest="branding",
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    help="Branding type of this build.")
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parser.add_option("-e", action="append", dest="extra_input", default=[],
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    help="Full path to an extra input pak file without the\
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         locale suffix and \".pak\" extension.")
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parser.add_option("-p", action="store", dest="os",
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    help="The target OS. (e.g. mac, linux, win, etc.)")
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  options, locales = parser.parse_args(argv)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if not locales:
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    parser.error('Please specificy at least one locale to process.\n')
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  print_inputs = options.inputs
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  print_outputs = options.outputs
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GRIT_DIR = options.grit_dir
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  INT_DIR = options.int_dir
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SHARE_INT_DIR = options.share_int_dir
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BRANDING = options.branding
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXTRA_INPUT_FILES = options.extra_input
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OS = options.os
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if not OS:
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if sys.platform == 'darwin':
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      OS = 'mac'
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    elif sys.platform.startswith('linux'):
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      OS = 'linux'
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    elif sys.platform in ('cygwin', 'win32'):
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      OS = 'win'
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else:
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      OS = sys.platform
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if not (GRIT_DIR and INT_DIR and SHARE_INT_DIR):
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    parser.error('Please specify all of "-g" and "-x" and "-s".\n')
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if print_inputs and print_outputs:
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    parser.error('Please specify only one of "-i" or "-o".\n')
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Need to know the branding, unless we're just listing the outputs.
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if not print_outputs and not BRANDING:
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    parser.error('Please specify "-b" to determine the input files.\n')
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if print_inputs:
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return list_inputs(locales)
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if print_outputs:
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return list_outputs(locales)
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return repack_locales(locales)
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__ == '__main__':
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  results = DoMain(sys.argv[1:])
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if results:
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print results
219