195640e3a20adea634b4df4ccf8c93f411184c438joi@chromium.org#!/usr/bin/env python 295640e3a20adea634b4df4ccf8c93f411184c438joi@chromium.org# Copyright (c) 2012 The Chromium Authors. All rights reserved. 301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org# Use of this source code is governed by a BSD-style license that can be 401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org# found in the LICENSE file. 501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 6eda8d69f7c49419eef6e96a1cd42af26a864d794joi@chromium.org"""Command processor for GRIT. This is the script you invoke to run the various 701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgGRIT tools. 8eda8d69f7c49419eef6e96a1cd42af26a864d794joi@chromium.org""" 901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 1001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgimport os 1101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgimport sys 1201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgif __name__ == '__main__': 1398b76c0017dbdc61506f146d197d594b1ce07db7joi@chromium.org sys.path.append(os.path.join(os.path.dirname(__file__), '..')) 1401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 1501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgimport getopt 1601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 1701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit import util 1801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 19eafc3b06f8c3ec9a48714b5d44e7d91ecab023ebjoi@chromium.orgimport grit.extern.FP 2001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 2101fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org# Tool info factories; these import only within each factory to avoid 2201fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org# importing most of the GRIT code until required. 2301fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.orgdef ToolFactoryBuild(): 2401fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org import grit.tool.build 2501fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org return grit.tool.build.RcBuilder() 2601fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org 27eda8d69f7c49419eef6e96a1cd42af26a864d794joi@chromium.orgdef ToolFactoryBuildInfo(): 28eda8d69f7c49419eef6e96a1cd42af26a864d794joi@chromium.org import grit.tool.buildinfo 29eda8d69f7c49419eef6e96a1cd42af26a864d794joi@chromium.org return grit.tool.buildinfo.DetermineBuildInfo() 30eda8d69f7c49419eef6e96a1cd42af26a864d794joi@chromium.org 3101fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.orgdef ToolFactoryCount(): 3201fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org import grit.tool.count 3301fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org return grit.tool.count.CountMessage() 3401fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org 3501fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.orgdef ToolFactoryDiffStructures(): 3601fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org import grit.tool.diff_structures 3701fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org return grit.tool.diff_structures.DiffStructures() 3801fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org 3901fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.orgdef ToolFactoryMenuTranslationsFromParts(): 4001fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org import grit.tool.menu_from_parts 4101fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org return grit.tool.menu_from_parts.MenuTranslationsFromParts() 4201fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org 4301fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.orgdef ToolFactoryNewGrd(): 4401fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org import grit.tool.newgrd 4501fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org return grit.tool.newgrd.NewGrd() 4601fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org 4701fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.orgdef ToolFactoryResizeDialog(): 4801fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org import grit.tool.resize 4901fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org return grit.tool.resize.ResizeDialog() 5001fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org 5101fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.orgdef ToolFactoryRc2Grd(): 5201fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org import grit.tool.rc2grd 5301fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org return grit.tool.rc2grd.Rc2Grd() 5401fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org 5501fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.orgdef ToolFactoryTest(): 5601fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org import grit.tool.test 5701fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org return grit.tool.test.TestTool() 5801fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org 5901fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.orgdef ToolFactoryTranslationToTc(): 6001fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org import grit.tool.transl2tc 6101fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org return grit.tool.transl2tc.TranslationToTc() 6201fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org 6301fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.orgdef ToolFactoryUnit(): 6401fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org import grit.tool.unit 6501fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org return grit.tool.unit.UnitTestTool() 6601fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org 67eafc3b06f8c3ec9a48714b5d44e7d91ecab023ebjoi@chromium.orgdef ToolFactoryXmb(): 68eafc3b06f8c3ec9a48714b5d44e7d91ecab023ebjoi@chromium.org import grit.tool.xmb 69eafc3b06f8c3ec9a48714b5d44e7d91ecab023ebjoi@chromium.org return grit.tool.xmb.OutputXmb() 70eafc3b06f8c3ec9a48714b5d44e7d91ecab023ebjoi@chromium.org 7139c335c3faa47701974a3ba3f7f8175947efc248newt@chromium.orgdef ToolAndroid2Grd(): 7239c335c3faa47701974a3ba3f7f8175947efc248newt@chromium.org import grit.tool.android2grd 7339c335c3faa47701974a3ba3f7f8175947efc248newt@chromium.org return grit.tool.android2grd.Android2Grd() 7439c335c3faa47701974a3ba3f7f8175947efc248newt@chromium.org 7501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org# Keys for the following map 7601fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org_FACTORY = 1 7701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org_REQUIRES_INPUT = 2 7801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org_HIDDEN = 3 # optional key - presence indicates tool is hidden 7901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 8001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org# Maps tool names to the tool's module. Done as a list of (key, value) tuples 8101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org# instead of a map to preserve ordering. 8201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org_TOOLS = [ 8301fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org ['build', { _FACTORY : ToolFactoryBuild, _REQUIRES_INPUT : True }], 84eda8d69f7c49419eef6e96a1cd42af26a864d794joi@chromium.org ['buildinfo', { _FACTORY : ToolFactoryBuildInfo, _REQUIRES_INPUT : True }], 85eafc3b06f8c3ec9a48714b5d44e7d91ecab023ebjoi@chromium.org ['count', { _FACTORY : ToolFactoryCount, _REQUIRES_INPUT : True }], 86eafc3b06f8c3ec9a48714b5d44e7d91ecab023ebjoi@chromium.org ['menufromparts', { 87eafc3b06f8c3ec9a48714b5d44e7d91ecab023ebjoi@chromium.org _FACTORY: ToolFactoryMenuTranslationsFromParts, 88eafc3b06f8c3ec9a48714b5d44e7d91ecab023ebjoi@chromium.org _REQUIRES_INPUT : True, _HIDDEN : True }], 8901fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org ['newgrd', { _FACTORY : ToolFactoryNewGrd, _REQUIRES_INPUT : False }], 9001fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org ['rc2grd', { _FACTORY : ToolFactoryRc2Grd, _REQUIRES_INPUT : False }], 9101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org ['resize', { 9201fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org _FACTORY : ToolFactoryResizeDialog, _REQUIRES_INPUT : True }], 93eafc3b06f8c3ec9a48714b5d44e7d91ecab023ebjoi@chromium.org ['sdiff', { _FACTORY : ToolFactoryDiffStructures, 94eafc3b06f8c3ec9a48714b5d44e7d91ecab023ebjoi@chromium.org _REQUIRES_INPUT : False }], 9501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org ['test', { 9601fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org _FACTORY: ToolFactoryTest, _REQUIRES_INPUT : True, 9701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org _HIDDEN : True }], 98eafc3b06f8c3ec9a48714b5d44e7d91ecab023ebjoi@chromium.org ['transl2tc', { _FACTORY : ToolFactoryTranslationToTc, 99eafc3b06f8c3ec9a48714b5d44e7d91ecab023ebjoi@chromium.org _REQUIRES_INPUT : False }], 100eafc3b06f8c3ec9a48714b5d44e7d91ecab023ebjoi@chromium.org ['unit', { _FACTORY : ToolFactoryUnit, _REQUIRES_INPUT : False }], 101eafc3b06f8c3ec9a48714b5d44e7d91ecab023ebjoi@chromium.org ['xmb', { _FACTORY : ToolFactoryXmb, _REQUIRES_INPUT : True }], 10239c335c3faa47701974a3ba3f7f8175947efc248newt@chromium.org ['android2grd', { 10339c335c3faa47701974a3ba3f7f8175947efc248newt@chromium.org _FACTORY: ToolAndroid2Grd, 10439c335c3faa47701974a3ba3f7f8175947efc248newt@chromium.org _REQUIRES_INPUT : False }], 10501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org] 10601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 10701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 10801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgdef PrintUsage(): 10901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org tool_list = '' 11001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org for (tool, info) in _TOOLS: 11101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org if not _HIDDEN in info.keys(): 11201fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org tool_list += ' %-12s %s\n' % (tool, info[_FACTORY]().ShortDescription()) 11301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 11401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # TODO(joi) Put these back into the usage when appropriate: 11501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # 11601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # -d Work disconnected. This causes GRIT not to attempt connections with 11701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # e.g. Perforce. 11801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # 11901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org # -c Use the specified Perforce CLIENT when talking to Perforce. 120d4edc6c61f2135b39318e34f9b342b673133e6ccbenrg@chromium.org print """GRIT - the Google Resource and Internationalization Tool 121d4edc6c61f2135b39318e34f9b342b673133e6ccbenrg@chromium.org 122d4edc6c61f2135b39318e34f9b342b673133e6ccbenrg@chromium.orgUsage: grit [GLOBALOPTIONS] TOOL [args to tool] 12301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 12401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgGlobal options: 12501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 12601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org -i INPUT Specifies the INPUT file to use (a .grd file). If this is not 12701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org specified, GRIT will look for the environment variable GRIT_INPUT. 12801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org If it is not present either, GRIT will try to find an input file 12901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org named 'resource.grd' in the current working directory. 13001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 131eafc3b06f8c3ec9a48714b5d44e7d91ecab023ebjoi@chromium.org -h MODULE Causes GRIT to use MODULE.UnsignedFingerPrint instead of 132eafc3b06f8c3ec9a48714b5d44e7d91ecab023ebjoi@chromium.org grit.extern.FP.UnsignedFingerprint. MODULE must be 133eafc3b06f8c3ec9a48714b5d44e7d91ecab023ebjoi@chromium.org available somewhere in the PYTHONPATH search path. 134eafc3b06f8c3ec9a48714b5d44e7d91ecab023ebjoi@chromium.org 13501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org -v Print more verbose runtime information. 13601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 13701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org -x Print extremely verbose runtime information. Implies -v 13801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 13901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org -p FNAME Specifies that GRIT should profile its execution and output the 14001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org results to the file FNAME. 14101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 14201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgTools: 14301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 14401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org TOOL can be one of the following: 14501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org%s 14601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org For more information on how to use a particular tool, and the specific 14701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org arguments you can send to that tool, execute 'grit help TOOL' 148eda8d69f7c49419eef6e96a1cd42af26a864d794joi@chromium.org""" % (tool_list) 14901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 15001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 15101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgclass Options(object): 152eda8d69f7c49419eef6e96a1cd42af26a864d794joi@chromium.org """Option storage and parsing.""" 15301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 15401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def __init__(self): 15501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.disconnected = False 15601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.client = '' 157eafc3b06f8c3ec9a48714b5d44e7d91ecab023ebjoi@chromium.org self.hash = None 15801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.input = None 15901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.verbose = False 16001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.extra_verbose = False 16101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.output_stream = sys.stdout 16201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.profile_dest = None 163705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org self.psyco = False 16401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 16501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def ReadOptions(self, args): 166eda8d69f7c49419eef6e96a1cd42af26a864d794joi@chromium.org """Reads options from the start of args and returns the remainder.""" 1671e98e2afc5bc983b43e6b482069150082c5fb337joi@chromium.org (opts, args) = getopt.getopt(args, 'g:qdvxc:i:p:h:', ('psyco',)) 16801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org for (key, val) in opts: 16901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org if key == '-d': self.disconnected = True 17001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org elif key == '-c': self.client = val 171eafc3b06f8c3ec9a48714b5d44e7d91ecab023ebjoi@chromium.org elif key == '-h': self.hash = val 17201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org elif key == '-i': self.input = val 17301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org elif key == '-v': 17401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.verbose = True 17501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org util.verbose = True 17601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org elif key == '-x': 17701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.verbose = True 17801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org util.verbose = True 17901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.extra_verbose = True 18001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org util.extra_verbose = True 18101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org elif key == '-p': self.profile_dest = val 182705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org elif key == '--psyco': self.psyco = True 18301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 18401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org if not self.input: 18501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org if 'GRIT_INPUT' in os.environ: 18601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.input = os.environ['GRIT_INPUT'] 18701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org else: 18801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org self.input = 'resource.grd' 18901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 19001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org return args 19101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 19201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def __repr__(self): 19301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org return '(disconnected: %d, verbose: %d, client: %s, input: %s)' % ( 194eda8d69f7c49419eef6e96a1cd42af26a864d794joi@chromium.org self.disconnected, self.verbose, self.client, self.input) 19501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 19601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 19701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgdef _GetToolInfo(tool): 198eda8d69f7c49419eef6e96a1cd42af26a864d794joi@chromium.org """Returns the info map for the tool named 'tool' or None if there is no 199eda8d69f7c49419eef6e96a1cd42af26a864d794joi@chromium.org such tool.""" 200705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org matches = [t for t in _TOOLS if t[0] == tool] 201eda8d69f7c49419eef6e96a1cd42af26a864d794joi@chromium.org if not matches: 20201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org return None 20301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org else: 20401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org return matches[0][1] 20501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 20601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 20701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgdef Main(args): 208eda8d69f7c49419eef6e96a1cd42af26a864d794joi@chromium.org """Parses arguments and does the appropriate thing.""" 20901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org util.ChangeStdoutEncoding() 21001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 21195640e3a20adea634b4df4ccf8c93f411184c438joi@chromium.org if sys.version_info < (2, 6): 21295640e3a20adea634b4df4ccf8c93f411184c438joi@chromium.org print "GRIT requires Python 2.6 or later." 21395640e3a20adea634b4df4ccf8c93f411184c438joi@chromium.org return 2 214eda8d69f7c49419eef6e96a1cd42af26a864d794joi@chromium.org elif not args or (len(args) == 1 and args[0] == 'help'): 21501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org PrintUsage() 21601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org return 0 21701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org elif len(args) == 2 and args[0] == 'help': 21801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org tool = args[1].lower() 21901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org if not _GetToolInfo(tool): 22001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org print "No such tool. Try running 'grit help' for a list of tools." 22101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org return 2 22201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 22301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org print ("Help for 'grit %s' (for general help, run 'grit help'):\n" 22401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org % (tool)) 22501fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org print _GetToolInfo(tool)[_FACTORY]().__doc__ 22601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org return 0 22701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org else: 22801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org options = Options() 22901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org args = options.ReadOptions(args) # args may be shorter after this 23001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org if not args: 23101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org print "No tool provided. Try running 'grit help' for a list of tools." 23201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org return 2 23301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org tool = args[0] 23401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org if not _GetToolInfo(tool): 23501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org print "No such tool. Try running 'grit help' for a list of tools." 23601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org return 2 23701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 23801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org try: 23901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org if _GetToolInfo(tool)[_REQUIRES_INPUT]: 24001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org os.stat(options.input) 24101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org except OSError: 24201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org print ('Input file %s not found.\n' 24301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 'To specify a different input file:\n' 24401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org ' 1. Use the GRIT_INPUT environment variable.\n' 24501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org ' 2. Use the -i command-line option. This overrides ' 24601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 'GRIT_INPUT.\n' 24701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org ' 3. Specify neither GRIT_INPUT or -i and GRIT will try to load ' 24801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org "'resource.grd'\n" 24901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org ' from the current directory.' % options.input) 25001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org return 2 25101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 252705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org if options.psyco: 253705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org # Psyco is a specializing JIT for Python. Early tests indicate that it 254705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org # could speed up GRIT (at the expense of more memory) for large GRIT 255705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org # compilations. See http://psyco.sourceforge.net/ 256705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org import psyco 257705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org psyco.profile() 258705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org 259eafc3b06f8c3ec9a48714b5d44e7d91ecab023ebjoi@chromium.org if options.hash: 260eafc3b06f8c3ec9a48714b5d44e7d91ecab023ebjoi@chromium.org grit.extern.FP.UseUnsignedFingerPrintFromModule(options.hash) 261eafc3b06f8c3ec9a48714b5d44e7d91ecab023ebjoi@chromium.org 26201fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org toolobject = _GetToolInfo(tool)[_FACTORY]() 26301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org if options.profile_dest: 26401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org import hotshot 26501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org prof = hotshot.Profile(options.profile_dest) 26601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org prof.runcall(toolobject.Run, options, args[1:]) 26701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org else: 26801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org toolobject.Run(options, args[1:]) 26901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 27001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 27101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgif __name__ == '__main__': 27201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org sys.exit(Main(sys.argv[1:])) 273