Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(243)

Side by Side Diff: build/android/gyp/javac.py

Issue 1356873003: CallAndRecordIfStale(): Add knownledge of output_files, depfiles, stamp (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@incremental-script-dep
Patch Set: add assert and remove map() Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « build/android/gyp/dex.py ('k') | build/android/gyp/proguard.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
16 15
17 import jar 16 import jar
18 17
19 sys.path.append(build_utils.COLORAMA_ROOT) 18 sys.path.append(build_utils.COLORAMA_ROOT)
20 import colorama 19 import colorama
21 20
22 21
23 def ColorJavacOutput(output): 22 def ColorJavacOutput(output):
24 fileline_prefix = r'(?P<fileline>(?P<file>[-.\w/\\]+.java):(?P<line>[0-9]+):)' 23 fileline_prefix = r'(?P<fileline>(?P<file>[-.\w/\\]+.java):(?P<line>[0-9]+):)'
25 warning_re = re.compile( 24 warning_re = re.compile(
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 204
206 java_files = _FilterJavaFiles(java_files, options.javac_includes) 205 java_files = _FilterJavaFiles(java_files, options.javac_includes)
207 206
208 runtime_classpath = options.classpath 207 runtime_classpath = options.classpath
209 compile_classpath = runtime_classpath 208 compile_classpath = runtime_classpath
210 if options.use_ijars: 209 if options.use_ijars:
211 ijar_re = re.compile(r'\.jar$') 210 ijar_re = re.compile(r'\.jar$')
212 compile_classpath = ( 211 compile_classpath = (
213 [ijar_re.sub('.interface.jar', p) for p in runtime_classpath]) 212 [ijar_re.sub('.interface.jar', p) for p in runtime_classpath])
214 213
215 javac_args = [ 214 javac_cmd = ['javac']
215 if options.use_errorprone_path:
216 javac_cmd = [options.use_errorprone_path] + ERRORPRONE_OPTIONS
217
218 javac_cmd.extend((
216 '-g', 219 '-g',
217 # Chromium only allows UTF8 source files. Being explicit avoids 220 # Chromium only allows UTF8 source files. Being explicit avoids
218 # javac pulling a default encoding from the user's environment. 221 # javac pulling a default encoding from the user's environment.
219 '-encoding', 'UTF-8', 222 '-encoding', 'UTF-8',
220 '-classpath', ':'.join(compile_classpath), 223 '-classpath', ':'.join(compile_classpath),
221 ] 224 ))
222 225
223 if options.bootclasspath: 226 if options.bootclasspath:
224 javac_args.extend([ 227 javac_cmd.extend([
225 '-bootclasspath', ':'.join(options.bootclasspath), 228 '-bootclasspath', ':'.join(options.bootclasspath),
226 '-source', '1.7', 229 '-source', '1.7',
227 '-target', '1.7', 230 '-target', '1.7',
228 ]) 231 ])
229 232
230 if options.chromium_code: 233 if options.chromium_code:
231 # TODO(aurimas): re-enable '-Xlint:deprecation' checks once they are fixed. 234 # TODO(aurimas): re-enable '-Xlint:deprecation' checks once they are fixed.
232 javac_args.extend(['-Xlint:unchecked']) 235 javac_cmd.extend(['-Xlint:unchecked'])
233 else: 236 else:
234 # XDignore.symbol.file makes javac compile against rt.jar instead of 237 # XDignore.symbol.file makes javac compile against rt.jar instead of
235 # ct.sym. This means that using a java internal package/class will not 238 # ct.sym. This means that using a java internal package/class will not
236 # trigger a compile warning or error. 239 # trigger a compile warning or error.
237 javac_args.extend(['-XDignore.symbol.file']) 240 javac_cmd.extend(['-XDignore.symbol.file'])
238
239 javac_cmd = ['javac']
240 if options.use_errorprone_path:
241 javac_cmd = [options.use_errorprone_path] + ERRORPRONE_OPTIONS
242 241
243 # Compute the list of paths that when changed, we need to rebuild. 242 # Compute the list of paths that when changed, we need to rebuild.
244 input_paths = options.bootclasspath + options.java_srcjars + java_files 243 input_paths = options.bootclasspath + options.java_srcjars + java_files
245 # TODO(agrieve): Remove this .TOC heuristic once GYP is no more. 244 # TODO(agrieve): Remove this .TOC heuristic once GYP is no more.
246 if not options.use_ijars: 245 if not options.use_ijars:
247 for path in compile_classpath: 246 for path in compile_classpath:
248 if os.path.exists(path + '.TOC'): 247 if os.path.exists(path + '.TOC'):
249 input_paths.append(path + '.TOC') 248 input_paths.append(path + '.TOC')
250 else: 249 else:
251 input_paths.append(path) 250 input_paths.append(path)
252 python_deps = build_utils.GetPythonDependencies()
253 251
254 def OnStaleMd5(): 252 def on_stale_md5():
255 with build_utils.TempDir() as temp_dir: 253 with build_utils.TempDir() as temp_dir:
256 if options.java_srcjars: 254 if options.java_srcjars:
257 java_dir = os.path.join(temp_dir, 'java') 255 java_dir = os.path.join(temp_dir, 'java')
258 os.makedirs(java_dir) 256 os.makedirs(java_dir)
259 for srcjar in options.java_srcjars: 257 for srcjar in options.java_srcjars:
260 build_utils.ExtractAll(srcjar, path=java_dir, pattern='*.java') 258 build_utils.ExtractAll(srcjar, path=java_dir, pattern='*.java')
261 jar_srcs = build_utils.FindInDirectory(java_dir, '*.java') 259 jar_srcs = build_utils.FindInDirectory(java_dir, '*.java')
262 java_files.extend(_FilterJavaFiles(jar_srcs, options.javac_includes)) 260 java_files.extend(_FilterJavaFiles(jar_srcs, options.javac_includes))
263 261
264 classes_dir = os.path.join(temp_dir, 'classes') 262 classes_dir = os.path.join(temp_dir, 'classes')
265 os.makedirs(classes_dir) 263 os.makedirs(classes_dir)
266 264
267 if java_files: 265 if java_files:
268 # Don't include the output directory in the initial set of args since it 266 # Don't include the output directory in the initial set of args since it
269 # being in a temp dir makes it unstable (breaks md5 stamping). 267 # being in a temp dir makes it unstable (breaks md5 stamping).
270 cmd = javac_cmd + javac_args + ['-d', classes_dir] + java_files 268 cmd = javac_cmd + ['-d', classes_dir] + java_files
271 269
272 build_utils.CheckOutput( 270 build_utils.CheckOutput(
273 cmd, 271 cmd,
274 print_stdout=options.chromium_code, 272 print_stdout=options.chromium_code,
275 stderr_filter=ColorJavacOutput) 273 stderr_filter=ColorJavacOutput)
276 274
277 if options.main_class or options.manifest_entry: 275 if options.main_class or options.manifest_entry:
278 entries = [] 276 entries = []
279 if options.manifest_entry: 277 if options.manifest_entry:
280 entries = [e.split(':') for e in options.manifest_entry] 278 entries = [e.split(':') for e in options.manifest_entry]
281 manifest_file = os.path.join(temp_dir, 'manifest') 279 manifest_file = os.path.join(temp_dir, 'manifest')
282 _CreateManifest(manifest_file, runtime_classpath, options.main_class, 280 _CreateManifest(manifest_file, runtime_classpath, options.main_class,
283 entries) 281 entries)
284 else: 282 else:
285 manifest_file = None 283 manifest_file = None
286 jar.JarDirectory(classes_dir, 284 jar.JarDirectory(classes_dir,
287 options.jar_excluded_classes, 285 options.jar_excluded_classes,
288 options.jar_path, 286 options.jar_path,
289 manifest_file=manifest_file) 287 manifest_file=manifest_file)
290 288
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
297 289
298 # List python deps in input_strings rather than input_paths since the contents 290 # List python deps in input_strings rather than input_paths since the contents
299 # of them does not change what gets written to the depsfile. 291 # of them does not change what gets written to the depsfile.
300 md5_check.CallAndRecordIfStale( 292 build_utils.CallAndWriteDepfileIfStale(
301 OnStaleMd5, 293 on_stale_md5,
302 record_path=options.jar_path + '.javac.md5.stamp', 294 options,
303 input_paths=input_paths, 295 input_paths=input_paths,
304 input_strings=javac_cmd + javac_args + python_deps, 296 input_strings=javac_cmd,
305 force=not os.path.exists(options.jar_path)) 297 output_paths=[options.jar_path])
306
307 298
308 299
309 if __name__ == '__main__': 300 if __name__ == '__main__':
310 sys.exit(main(sys.argv[1:])) 301 sys.exit(main(sys.argv[1:]))
311
312
OLDNEW
« no previous file with comments | « build/android/gyp/dex.py ('k') | build/android/gyp/proguard.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698