OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # | 2 # |
3 # Copyright 2013 The Chromium Authors. All rights reserved. | 3 # Copyright 2013 The Chromium Authors. All rights reserved. |
4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be |
5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
6 | 6 |
7 import optparse | 7 import optparse |
8 import os | 8 import os |
9 import shutil | 9 import shutil |
10 import re | 10 import re |
11 import sys | 11 import sys |
12 import textwrap | 12 import textwrap |
13 | 13 |
14 from util import build_utils | 14 from util import build_utils |
| 15 from util import md5_check |
15 | 16 |
16 import jar | 17 import jar |
17 | 18 |
18 sys.path.append(build_utils.COLORAMA_ROOT) | 19 sys.path.append(build_utils.COLORAMA_ROOT) |
19 import colorama | 20 import colorama |
20 | 21 |
21 | 22 |
22 def ColorJavacOutput(output): | 23 def ColorJavacOutput(output): |
23 fileline_prefix = r'(?P<fileline>(?P<file>[-.\w/\\]+.java):(?P<line>[0-9]+):)' | 24 fileline_prefix = r'(?P<fileline>(?P<file>[-.\w/\\]+.java):(?P<line>[0-9]+):)' |
24 warning_re = re.compile( | 25 warning_re = re.compile( |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 | 205 |
205 java_files = _FilterJavaFiles(java_files, options.javac_includes) | 206 java_files = _FilterJavaFiles(java_files, options.javac_includes) |
206 | 207 |
207 runtime_classpath = options.classpath | 208 runtime_classpath = options.classpath |
208 compile_classpath = runtime_classpath | 209 compile_classpath = runtime_classpath |
209 if options.use_ijars: | 210 if options.use_ijars: |
210 ijar_re = re.compile(r'\.jar$') | 211 ijar_re = re.compile(r'\.jar$') |
211 compile_classpath = ( | 212 compile_classpath = ( |
212 [ijar_re.sub('.interface.jar', p) for p in runtime_classpath]) | 213 [ijar_re.sub('.interface.jar', p) for p in runtime_classpath]) |
213 | 214 |
214 javac_cmd = ['javac'] | 215 javac_args = [ |
215 if options.use_errorprone_path: | |
216 javac_cmd = [options.use_errorprone_path] + ERRORPRONE_OPTIONS | |
217 | |
218 javac_cmd.extend(( | |
219 '-g', | 216 '-g', |
220 # Chromium only allows UTF8 source files. Being explicit avoids | 217 # Chromium only allows UTF8 source files. Being explicit avoids |
221 # javac pulling a default encoding from the user's environment. | 218 # javac pulling a default encoding from the user's environment. |
222 '-encoding', 'UTF-8', | 219 '-encoding', 'UTF-8', |
223 '-classpath', ':'.join(compile_classpath), | 220 '-classpath', ':'.join(compile_classpath), |
224 )) | 221 ] |
225 | 222 |
226 if options.bootclasspath: | 223 if options.bootclasspath: |
227 javac_cmd.extend([ | 224 javac_args.extend([ |
228 '-bootclasspath', ':'.join(options.bootclasspath), | 225 '-bootclasspath', ':'.join(options.bootclasspath), |
229 '-source', '1.7', | 226 '-source', '1.7', |
230 '-target', '1.7', | 227 '-target', '1.7', |
231 ]) | 228 ]) |
232 | 229 |
233 if options.chromium_code: | 230 if options.chromium_code: |
234 # TODO(aurimas): re-enable '-Xlint:deprecation' checks once they are fixed. | 231 # TODO(aurimas): re-enable '-Xlint:deprecation' checks once they are fixed. |
235 javac_cmd.extend(['-Xlint:unchecked']) | 232 javac_args.extend(['-Xlint:unchecked']) |
236 else: | 233 else: |
237 # XDignore.symbol.file makes javac compile against rt.jar instead of | 234 # XDignore.symbol.file makes javac compile against rt.jar instead of |
238 # ct.sym. This means that using a java internal package/class will not | 235 # ct.sym. This means that using a java internal package/class will not |
239 # trigger a compile warning or error. | 236 # trigger a compile warning or error. |
240 javac_cmd.extend(['-XDignore.symbol.file']) | 237 javac_args.extend(['-XDignore.symbol.file']) |
| 238 |
| 239 javac_cmd = ['javac'] |
| 240 if options.use_errorprone_path: |
| 241 javac_cmd = [options.use_errorprone_path] + ERRORPRONE_OPTIONS |
241 | 242 |
242 # Compute the list of paths that when changed, we need to rebuild. | 243 # Compute the list of paths that when changed, we need to rebuild. |
243 input_paths = options.bootclasspath + options.java_srcjars + java_files | 244 input_paths = options.bootclasspath + options.java_srcjars + java_files |
244 # TODO(agrieve): Remove this .TOC heuristic once GYP is no more. | 245 # TODO(agrieve): Remove this .TOC heuristic once GYP is no more. |
245 if not options.use_ijars: | 246 if not options.use_ijars: |
246 for path in compile_classpath: | 247 for path in compile_classpath: |
247 if os.path.exists(path + '.TOC'): | 248 if os.path.exists(path + '.TOC'): |
248 input_paths.append(path + '.TOC') | 249 input_paths.append(path + '.TOC') |
249 else: | 250 else: |
250 input_paths.append(path) | 251 input_paths.append(path) |
| 252 python_deps = build_utils.GetPythonDependencies() |
251 | 253 |
252 def on_stale_md5(): | 254 def OnStaleMd5(): |
253 with build_utils.TempDir() as temp_dir: | 255 with build_utils.TempDir() as temp_dir: |
254 if options.java_srcjars: | 256 if options.java_srcjars: |
255 java_dir = os.path.join(temp_dir, 'java') | 257 java_dir = os.path.join(temp_dir, 'java') |
256 os.makedirs(java_dir) | 258 os.makedirs(java_dir) |
257 for srcjar in options.java_srcjars: | 259 for srcjar in options.java_srcjars: |
258 build_utils.ExtractAll(srcjar, path=java_dir, pattern='*.java') | 260 build_utils.ExtractAll(srcjar, path=java_dir, pattern='*.java') |
259 jar_srcs = build_utils.FindInDirectory(java_dir, '*.java') | 261 jar_srcs = build_utils.FindInDirectory(java_dir, '*.java') |
260 java_files.extend(_FilterJavaFiles(jar_srcs, options.javac_includes)) | 262 java_files.extend(_FilterJavaFiles(jar_srcs, options.javac_includes)) |
261 | 263 |
262 classes_dir = os.path.join(temp_dir, 'classes') | 264 classes_dir = os.path.join(temp_dir, 'classes') |
263 os.makedirs(classes_dir) | 265 os.makedirs(classes_dir) |
264 | 266 |
265 if java_files: | 267 if java_files: |
266 # Don't include the output directory in the initial set of args since it | 268 # Don't include the output directory in the initial set of args since it |
267 # being in a temp dir makes it unstable (breaks md5 stamping). | 269 # being in a temp dir makes it unstable (breaks md5 stamping). |
268 cmd = javac_cmd + ['-d', classes_dir] + java_files | 270 cmd = javac_cmd + javac_args + ['-d', classes_dir] + java_files |
269 | 271 |
270 build_utils.CheckOutput( | 272 build_utils.CheckOutput( |
271 cmd, | 273 cmd, |
272 print_stdout=options.chromium_code, | 274 print_stdout=options.chromium_code, |
273 stderr_filter=ColorJavacOutput) | 275 stderr_filter=ColorJavacOutput) |
274 | 276 |
275 if options.main_class or options.manifest_entry: | 277 if options.main_class or options.manifest_entry: |
276 entries = [] | 278 entries = [] |
277 if options.manifest_entry: | 279 if options.manifest_entry: |
278 entries = [e.split(':') for e in options.manifest_entry] | 280 entries = [e.split(':') for e in options.manifest_entry] |
279 manifest_file = os.path.join(temp_dir, 'manifest') | 281 manifest_file = os.path.join(temp_dir, 'manifest') |
280 _CreateManifest(manifest_file, runtime_classpath, options.main_class, | 282 _CreateManifest(manifest_file, runtime_classpath, options.main_class, |
281 entries) | 283 entries) |
282 else: | 284 else: |
283 manifest_file = None | 285 manifest_file = None |
284 jar.JarDirectory(classes_dir, | 286 jar.JarDirectory(classes_dir, |
285 options.jar_excluded_classes, | 287 options.jar_excluded_classes, |
286 options.jar_path, | 288 options.jar_path, |
287 manifest_file=manifest_file) | 289 manifest_file=manifest_file) |
288 | 290 |
| 291 if options.stamp: |
| 292 build_utils.Touch(options.stamp) |
| 293 |
| 294 if options.depfile: |
| 295 build_utils.WriteDepfile(options.depfile, input_paths + python_deps) |
| 296 |
289 | 297 |
290 # List python deps in input_strings rather than input_paths since the contents | 298 # List python deps in input_strings rather than input_paths since the contents |
291 # of them does not change what gets written to the depsfile. | 299 # of them does not change what gets written to the depsfile. |
292 build_utils.CallAndWriteDepfileIfStale( | 300 md5_check.CallAndRecordIfStale( |
293 on_stale_md5, | 301 OnStaleMd5, |
294 options, | 302 record_path=options.jar_path + '.javac.md5.stamp', |
295 input_paths=input_paths, | 303 input_paths=input_paths, |
296 input_strings=javac_cmd, | 304 input_strings=javac_cmd + javac_args + python_deps, |
297 output_paths=[options.jar_path]) | 305 force=not os.path.exists(options.jar_path)) |
| 306 |
298 | 307 |
299 | 308 |
300 if __name__ == '__main__': | 309 if __name__ == '__main__': |
301 sys.exit(main(sys.argv[1:])) | 310 sys.exit(main(sys.argv[1:])) |
| 311 |
| 312 |
OLD | NEW |