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

Side by Side Diff: tools/mb/mb.py

Issue 1135743005: Modify the gn version of 'mb analyze' to handle GN group targets as well. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@mb_response_file
Patch Set: add the input target, not the build target, to the list of matches Created 5 years, 7 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 | « no previous file | no next file » | 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 # Copyright 2015 The Chromium Authors. All rights reserved. 2 # Copyright 2015 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 """MB - the Meta-Build wrapper around GYP and GN 6 """MB - the Meta-Build wrapper around GYP and GN
7 7
8 MB is a wrapper script for GYP and GN that can be used to generate build files 8 MB is a wrapper script for GYP and GN that can be used to generate build files
9 for sets of canned configurations and analyze them. 9 for sets of canned configurations and analyze them.
10 """ 10 """
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 return 0 422 return 0
423 423
424 ret = 0 424 ret = 0
425 response_file = self.TempFile() 425 response_file = self.TempFile()
426 response_file.write('\n'.join(inp['files']) + '\n') 426 response_file.write('\n'.join(inp['files']) + '\n')
427 response_file.close() 427 response_file.close()
428 428
429 matching_targets = [] 429 matching_targets = []
430 try: 430 try:
431 cmd = self.GNCmd('refs', self.args.path[0]) + [ 431 cmd = self.GNCmd('refs', self.args.path[0]) + [
432 '@%s' % response_file.name, 432 '@%s' % response_file.name, '--all', '--as=output']
433 '--type=executable', '--all', '--as=output'
434 ]
435 ret, out, _ = self.Run(cmd) 433 ret, out, _ = self.Run(cmd)
436 if ret and not 'The input matches no targets' in out: 434 if ret and not 'The input matches no targets' in out:
437 self.WriteFailureAndRaise('gn refs returned %d: %s' % (ret, out), 435 self.WriteFailureAndRaise('gn refs returned %d: %s' % (ret, out),
438 output_path) 436 output_path)
439 build_dir = self.ToSrcRelPath(self.args.path[0]) + os.sep 437 build_dir = self.ToSrcRelPath(self.args.path[0]) + os.sep
440 for output in out.splitlines(): 438 for output in out.splitlines():
441 build_output = output.replace(build_dir, '') 439 build_output = output.replace(build_dir, '')
442 if build_output in inp['targets']: 440 if build_output in inp['targets']:
443 matching_targets.append(build_output) 441 matching_targets.append(build_output)
442
443 cmd = self.GNCmd('refs', self.args.path[0]) + [
444 '@%s' % response_file.name, '--all']
445 ret, out, _ = self.Run(cmd)
446 if ret and not 'The input matches no targets' in out:
447 self.WriteFailureAndRaise('gn refs returned %d: %s' % (ret, out),
448 output_path)
449 for label in out.splitlines():
450 build_target = label[2:]
451 # We want to accept 'chrome/android:chrome_shell_apk' and
452 # just 'chrome_shell_apk'. This may result in too many targets
453 # getting built, but we can adjust that later if need be.
454 for input_target in inp['targets']:
455 if (input_target == build_target or
456 build_target.endswith(':' + input_target)):
457 matching_targets.append(input_target)
444 finally: 458 finally:
445 self.RemoveFile(response_file.name) 459 self.RemoveFile(response_file.name)
446 460
447 if matching_targets: 461 if matching_targets:
448 # TODO: it could be that a target X might depend on a target Y 462 # TODO: it could be that a target X might depend on a target Y
449 # and both would be listed in the input, but we would only need 463 # and both would be listed in the input, but we would only need
450 # to specify target X as a build_target (whereas both X and Y are 464 # to specify target X as a build_target (whereas both X and Y are
451 # targets). I'm not sure if that optimization is generally worth it. 465 # targets). I'm not sure if that optimization is generally worth it.
452 self.WriteJSON({'targets': sorted(matching_targets), 466 self.WriteJSON({'targets': sorted(matching_targets),
453 'build_targets': sorted(matching_targets), 467 'build_targets': sorted(matching_targets),
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
562 576
563 if __name__ == '__main__': 577 if __name__ == '__main__':
564 try: 578 try:
565 sys.exit(main(sys.argv[1:])) 579 sys.exit(main(sys.argv[1:]))
566 except MBErr as e: 580 except MBErr as e:
567 print(e) 581 print(e)
568 sys.exit(1) 582 sys.exit(1)
569 except KeyboardInterrupt: 583 except KeyboardInterrupt:
570 print("interrupted, exiting", stream=sys.stderr) 584 print("interrupted, exiting", stream=sys.stderr)
571 sys.exit(130) 585 sys.exit(130)
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698