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 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
97 -t PLATFORM Specifies the platform the build is targeting; defaults | 97 -t PLATFORM Specifies the platform the build is targeting; defaults |
98 to the value of sys.platform. The value provided via this | 98 to the value of sys.platform. The value provided via this |
99 flag should match what sys.platform would report for your | 99 flag should match what sys.platform would report for your |
100 target platform; see grit.node.base.EvaluateCondition. | 100 target platform; see grit.node.base.EvaluateCondition. |
101 | 101 |
102 -h HEADERFORMAT Custom format string to use for generating rc header files. | 102 -h HEADERFORMAT Custom format string to use for generating rc header files. |
103 The string should have two placeholders: {textual_id} | 103 The string should have two placeholders: {textual_id} |
104 and {numeric_id}. E.g. "#define {textual_id} {numeric_id}" | 104 and {numeric_id}. E.g. "#define {textual_id} {numeric_id}" |
105 Otherwise it will use the default "#define SYMBOL 1234" | 105 Otherwise it will use the default "#define SYMBOL 1234" |
106 | 106 |
| 107 --output-all-resource-defines |
| 108 --no-output-all-resource-defines If specified, overrides the value of the |
| 109 output_all_resource_defines attribute of the root <grit> |
| 110 element of the input .grd file. |
| 111 |
107 Conditional inclusion of resources only affects the output of files which | 112 Conditional inclusion of resources only affects the output of files which |
108 control which resources get linked into a binary, e.g. it affects .rc files | 113 control which resources get linked into a binary, e.g. it affects .rc files |
109 meant for compilation but it does not affect resource header files (that define | 114 meant for compilation but it does not affect resource header files (that define |
110 IDs). This helps ensure that values of IDs stay the same, that all messages | 115 IDs). This helps ensure that values of IDs stay the same, that all messages |
111 are exported to translation interchange files (e.g. XMB files), etc. | 116 are exported to translation interchange files (e.g. XMB files), etc. |
112 ''' | 117 ''' |
113 | 118 |
114 def ShortDescription(self): | 119 def ShortDescription(self): |
115 return 'A tool that builds RC files for compilation.' | 120 return 'A tool that builds RC files for compilation.' |
116 | 121 |
117 def Run(self, opts, args): | 122 def Run(self, opts, args): |
118 self.output_directory = '.' | 123 self.output_directory = '.' |
119 first_ids_file = None | 124 first_ids_file = None |
120 whitelist_filenames = [] | 125 whitelist_filenames = [] |
121 assert_output_files = [] | 126 assert_output_files = [] |
122 target_platform = None | 127 target_platform = None |
123 depfile = None | 128 depfile = None |
124 depdir = None | 129 depdir = None |
125 rc_header_format = None | 130 rc_header_format = None |
| 131 output_all_resource_defines = None |
126 (own_opts, args) = getopt.getopt(args, 'a:o:D:E:f:w:t:h:', | 132 (own_opts, args) = getopt.getopt(args, 'a:o:D:E:f:w:t:h:', |
127 ('depdir=','depfile=','assert-file-list=')) | 133 ('depdir=','depfile=','assert-file-list=', |
| 134 'output-all-resource-defines', |
| 135 'no-output-all-resource-defines',)) |
128 for (key, val) in own_opts: | 136 for (key, val) in own_opts: |
129 if key == '-a': | 137 if key == '-a': |
130 assert_output_files.append(val) | 138 assert_output_files.append(val) |
131 elif key == '--assert-file-list': | 139 elif key == '--assert-file-list': |
132 with open(val) as f: | 140 with open(val) as f: |
133 assert_output_files += f.read().splitlines() | 141 assert_output_files += f.read().splitlines() |
134 elif key == '-o': | 142 elif key == '-o': |
135 self.output_directory = val | 143 self.output_directory = val |
136 elif key == '-D': | 144 elif key == '-D': |
137 name, val = util.ParseDefine(val) | 145 name, val = util.ParseDefine(val) |
138 self.defines[name] = val | 146 self.defines[name] = val |
139 elif key == '-E': | 147 elif key == '-E': |
140 (env_name, env_value) = val.split('=', 1) | 148 (env_name, env_value) = val.split('=', 1) |
141 os.environ[env_name] = env_value | 149 os.environ[env_name] = env_value |
142 elif key == '-f': | 150 elif key == '-f': |
143 # TODO(joi@chromium.org): Remove this override once change | 151 # TODO(joi@chromium.org): Remove this override once change |
144 # lands in WebKit.grd to specify the first_ids_file in the | 152 # lands in WebKit.grd to specify the first_ids_file in the |
145 # .grd itself. | 153 # .grd itself. |
146 first_ids_file = val | 154 first_ids_file = val |
147 elif key == '-w': | 155 elif key == '-w': |
148 whitelist_filenames.append(val) | 156 whitelist_filenames.append(val) |
| 157 elif key == '--output-all-resource-defines': |
| 158 output_all_resource_defines = True |
| 159 elif key == '--no-output-all-resource-defines': |
| 160 output_all_resource_defines = False |
149 elif key == '-t': | 161 elif key == '-t': |
150 target_platform = val | 162 target_platform = val |
151 elif key == '-h': | 163 elif key == '-h': |
152 rc_header_format = val | 164 rc_header_format = val |
153 elif key == '--depdir': | 165 elif key == '--depdir': |
154 depdir = val | 166 depdir = val |
155 elif key == '--depfile': | 167 elif key == '--depfile': |
156 depfile = val | 168 depfile = val |
157 | 169 |
158 if len(args): | 170 if len(args): |
(...skipping 12 matching lines...) Expand all Loading... |
171 for whitelist_filename in whitelist_filenames: | 183 for whitelist_filename in whitelist_filenames: |
172 self.VerboseOut('Using whitelist: %s\n' % whitelist_filename); | 184 self.VerboseOut('Using whitelist: %s\n' % whitelist_filename); |
173 whitelist_contents = util.ReadFile(whitelist_filename, util.RAW_TEXT) | 185 whitelist_contents = util.ReadFile(whitelist_filename, util.RAW_TEXT) |
174 self.whitelist_names.update(whitelist_contents.strip().split('\n')) | 186 self.whitelist_names.update(whitelist_contents.strip().split('\n')) |
175 | 187 |
176 self.res = grd_reader.Parse(opts.input, | 188 self.res = grd_reader.Parse(opts.input, |
177 debug=opts.extra_verbose, | 189 debug=opts.extra_verbose, |
178 first_ids_file=first_ids_file, | 190 first_ids_file=first_ids_file, |
179 defines=self.defines, | 191 defines=self.defines, |
180 target_platform=target_platform) | 192 target_platform=target_platform) |
| 193 |
| 194 # If the output_all_resource_defines option is specified, override the value |
| 195 # found in the grd file. |
| 196 if output_all_resource_defines is not None: |
| 197 self.res.SetShouldOutputAllResourceDefines(output_all_resource_defines) |
| 198 |
181 # Set an output context so that conditionals can use defines during the | 199 # Set an output context so that conditionals can use defines during the |
182 # gathering stage; we use a dummy language here since we are not outputting | 200 # gathering stage; we use a dummy language here since we are not outputting |
183 # a specific language. | 201 # a specific language. |
184 self.res.SetOutputLanguage('en') | 202 self.res.SetOutputLanguage('en') |
185 if rc_header_format: | 203 if rc_header_format: |
186 self.res.AssignRcHeaderFormat(rc_header_format) | 204 self.res.AssignRcHeaderFormat(rc_header_format) |
187 self.res.RunGatherers() | 205 self.res.RunGatherers() |
188 self.Process() | 206 self.Process() |
189 | 207 |
190 if assert_output_files: | 208 if assert_output_files: |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
427 self.MakeDirectoriesTo(depfile) | 445 self.MakeDirectoriesTo(depfile) |
428 outfile = self.fo_create(depfile, 'wb') | 446 outfile = self.fo_create(depfile, 'wb') |
429 outfile.writelines(depfile_contents) | 447 outfile.writelines(depfile_contents) |
430 | 448 |
431 @staticmethod | 449 @staticmethod |
432 def MakeDirectoriesTo(file): | 450 def MakeDirectoriesTo(file): |
433 '''Creates directories necessary to contain |file|.''' | 451 '''Creates directories necessary to contain |file|.''' |
434 dir = os.path.split(file)[0] | 452 dir = os.path.split(file)[0] |
435 if not os.path.exists(dir): | 453 if not os.path.exists(dir): |
436 os.makedirs(dir) | 454 os.makedirs(dir) |
OLD | NEW |