OLD | NEW |
---|---|
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 '''The 'grit build' tool along with integration for this tool with the | 6 '''The 'grit build' tool along with integration for this tool with the |
7 SCons build system. | 7 SCons build system. |
8 ''' | 8 ''' |
9 | 9 |
10 import filecmp | 10 import filecmp |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
49 | 49 |
50 -o OUTPUTDIR Specify what directory output paths are relative to. | 50 -o OUTPUTDIR Specify what directory output paths are relative to. |
51 Defaults to the current directory. | 51 Defaults to the current directory. |
52 | 52 |
53 -D NAME[=VAL] Specify a C-preprocessor-like define NAME with optional | 53 -D NAME[=VAL] Specify a C-preprocessor-like define NAME with optional |
54 value VAL (defaults to 1) which will be used to control | 54 value VAL (defaults to 1) which will be used to control |
55 conditional inclusion of resources. | 55 conditional inclusion of resources. |
56 | 56 |
57 -E NAME=VALUE Set environment variable NAME to VALUE (within grit). | 57 -E NAME=VALUE Set environment variable NAME to VALUE (within grit). |
58 | 58 |
59 -f FIRSTIDFILE Path to a python file that specifies the first id of | 59 -f FIRSTIDSFILE Path to a python file that specifies the first id of |
60 value to use for resources. Defaults to the file | 60 value to use for resources. A non-empty value here will |
61 resources_ids next to grit.py. Set to an empty string | 61 override the value specified in the <grit> node's |
62 if you don't want to use a first id file. | 62 first_ids_file. |
63 | 63 |
64 -w WHITELISTFILE Path to a file containing the string names of the | 64 -w WHITELISTFILE Path to a file containing the string names of the |
65 resources to include. Anything not listed is dropped. | 65 resources to include. Anything not listed is dropped. |
66 | 66 |
67 | 67 |
68 Conditional inclusion of resources only affects the output of files which | 68 Conditional inclusion of resources only affects the output of files which |
69 control which resources get linked into a binary, e.g. it affects .rc files | 69 control which resources get linked into a binary, e.g. it affects .rc files |
70 meant for compilation but it does not affect resource header files (that define | 70 meant for compilation but it does not affect resource header files (that define |
71 IDs). This helps ensure that values of IDs stay the same, that all messages | 71 IDs). This helps ensure that values of IDs stay the same, that all messages |
72 are exported to translation interchange files (e.g. XMB files), etc. | 72 are exported to translation interchange files (e.g. XMB files), etc. |
73 ''' | 73 ''' |
74 | 74 |
75 def ShortDescription(self): | 75 def ShortDescription(self): |
76 return 'A tool that builds RC files for compilation.' | 76 return 'A tool that builds RC files for compilation.' |
77 | 77 |
78 def Run(self, opts, args): | 78 def Run(self, opts, args): |
79 self.output_directory = '.' | 79 self.output_directory = '.' |
80 first_id_filename = None | 80 first_ids_file = None |
81 whitelist_filenames = [] | 81 whitelist_filenames = [] |
82 (own_opts, args) = getopt.getopt(args, 'o:D:E:f:w:') | 82 (own_opts, args) = getopt.getopt(args, 'o:D:E:f:w:') |
83 for (key, val) in own_opts: | 83 for (key, val) in own_opts: |
84 if key == '-o': | 84 if key == '-o': |
85 self.output_directory = val | 85 self.output_directory = val |
86 elif key == '-D': | 86 elif key == '-D': |
87 name, val = ParseDefine(val) | 87 name, val = ParseDefine(val) |
88 self.defines[name] = val | 88 self.defines[name] = val |
89 elif key == '-E': | 89 elif key == '-E': |
90 (env_name, env_value) = val.split('=') | 90 (env_name, env_value) = val.split('=') |
91 os.environ[env_name] = env_value | 91 os.environ[env_name] = env_value |
92 elif key == '-f': | 92 elif key == '-f': |
93 first_id_filename = val | 93 # TODO(joi@chromium.org): Remove this override once change |
94 # lands in WebKit.grd to specify the first_ids_file in the | |
95 # .grd itself. | |
tony
2012/03/28 17:31:56
I like the command line flag. In Chromium, if some
Jói
2012/03/29 11:36:15
I'd prefer to have just one way to do things, but
| |
96 first_ids_file = val | |
94 elif key == '-w': | 97 elif key == '-w': |
95 whitelist_filenames.append(val) | 98 whitelist_filenames.append(val) |
96 | 99 |
97 if len(args): | 100 if len(args): |
98 print "This tool takes no tool-specific arguments." | 101 print "This tool takes no tool-specific arguments." |
99 return 2 | 102 return 2 |
100 self.SetOptions(opts) | 103 self.SetOptions(opts) |
101 if self.scons_targets: | 104 if self.scons_targets: |
102 self.VerboseOut('Using SCons targets to identify files to output.\n') | 105 self.VerboseOut('Using SCons targets to identify files to output.\n') |
103 else: | 106 else: |
104 self.VerboseOut('Output directory: %s (absolute path: %s)\n' % | 107 self.VerboseOut('Output directory: %s (absolute path: %s)\n' % |
105 (self.output_directory, | 108 (self.output_directory, |
106 os.path.abspath(self.output_directory))) | 109 os.path.abspath(self.output_directory))) |
107 | 110 |
108 if whitelist_filenames: | 111 if whitelist_filenames: |
109 self.whitelist_names = set() | 112 self.whitelist_names = set() |
110 for whitelist_filename in whitelist_filenames: | 113 for whitelist_filename in whitelist_filenames: |
111 self.VerboseOut('Using whitelist: %s\n' % whitelist_filename); | 114 self.VerboseOut('Using whitelist: %s\n' % whitelist_filename); |
112 whitelist_file = open(whitelist_filename) | 115 whitelist_file = open(whitelist_filename) |
113 self.whitelist_names |= set(whitelist_file.read().strip().split('\n')) | 116 self.whitelist_names |= set(whitelist_file.read().strip().split('\n')) |
114 whitelist_file.close() | 117 whitelist_file.close() |
115 | 118 |
116 self.res = grd_reader.Parse(opts.input, first_id_filename=first_id_filename, | 119 self.res = grd_reader.Parse(opts.input, |
117 debug=opts.extra_verbose, defines=self.defines) | 120 debug=opts.extra_verbose, |
121 first_ids_file=first_ids_file, | |
122 defines=self.defines) | |
118 self.res.RunGatherers(recursive = True) | 123 self.res.RunGatherers(recursive = True) |
119 self.Process() | 124 self.Process() |
120 return 0 | 125 return 0 |
121 | 126 |
122 def __init__(self): | 127 def __init__(self): |
123 # Default file-creation function is built-in file(). Only done to allow | 128 # Default file-creation function is built-in file(). Only done to allow |
124 # overriding by unit test. | 129 # overriding by unit test. |
125 self.fo_create = file | 130 self.fo_create = file |
126 | 131 |
127 # key/value pairs of C-preprocessor like defines that are used for | 132 # key/value pairs of C-preprocessor like defines that are used for |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
291 | 296 |
292 # Print out any fallback warnings, and missing translation errors, and | 297 # Print out any fallback warnings, and missing translation errors, and |
293 # exit with an error code if there are missing translations in a non-pseudo | 298 # exit with an error code if there are missing translations in a non-pseudo |
294 # and non-official build. | 299 # and non-official build. |
295 warnings = (self.res.UberClique().MissingTranslationsReport(). | 300 warnings = (self.res.UberClique().MissingTranslationsReport(). |
296 encode('ascii', 'replace')) | 301 encode('ascii', 'replace')) |
297 if warnings and self.defines.get('_google_chrome', False): | 302 if warnings and self.defines.get('_google_chrome', False): |
298 print warnings | 303 print warnings |
299 if self.res.UberClique().HasMissingTranslations(): | 304 if self.res.UberClique().HasMissingTranslations(): |
300 sys.exit(-1) | 305 sys.exit(-1) |
OLD | NEW |