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

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

Issue 1453423002: Remove code for old style of 'analyze' in MB. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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 | tools/mb/mb_unittest.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 # 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 602 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 path = self.args.path[0] 613 path = self.args.path[0]
614 614
615 output_dir = self.ParseGYPConfigPath(path) 615 output_dir = self.ParseGYPConfigPath(path)
616 cmd, env = self.GYPCmd(output_dir, vals) 616 cmd, env = self.GYPCmd(output_dir, vals)
617 ret, _, _ = self.Run(cmd, env=env) 617 ret, _, _ = self.Run(cmd, env=env)
618 return ret 618 return ret
619 619
620 def RunGYPAnalyze(self, vals): 620 def RunGYPAnalyze(self, vals):
621 output_dir = self.ParseGYPConfigPath(self.args.path[0]) 621 output_dir = self.ParseGYPConfigPath(self.args.path[0])
622 if self.args.verbose: 622 if self.args.verbose:
623 inp = self.ReadInputJSON(['files']) 623 inp = self.ReadInputJSON(['files', 'test_targets',
624 'additional_compile_targets'])
624 self.Print() 625 self.Print()
625 self.Print('analyze input:') 626 self.Print('analyze input:')
626 self.PrintJSON(inp) 627 self.PrintJSON(inp)
627 self.Print() 628 self.Print()
628 629
629 cmd, env = self.GYPCmd(output_dir, vals) 630 cmd, env = self.GYPCmd(output_dir, vals)
630 cmd.extend(['-f', 'analyzer', 631 cmd.extend(['-f', 'analyzer',
631 '-G', 'config_path=%s' % self.args.input_path[0], 632 '-G', 'config_path=%s' % self.args.input_path[0],
632 '-G', 'analyzer_output_path=%s' % self.args.output_path[0]]) 633 '-G', 'analyzer_output_path=%s' % self.args.output_path[0]])
633 ret, _, _ = self.Run(cmd, env=env) 634 ret, _, _ = self.Run(cmd, env=env)
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
766 env['GYP_CROSSCOMPILE'] = '1' 767 env['GYP_CROSSCOMPILE'] = '1'
767 return cmd, env 768 return cmd, env
768 769
769 def RunGNAnalyze(self, vals): 770 def RunGNAnalyze(self, vals):
770 # analyze runs before 'gn gen' now, so we need to run gn gen 771 # analyze runs before 'gn gen' now, so we need to run gn gen
771 # in order to ensure that we have a build directory. 772 # in order to ensure that we have a build directory.
772 ret = self.RunGNGen(vals) 773 ret = self.RunGNGen(vals)
773 if ret: 774 if ret:
774 return ret 775 return ret
775 776
776 # TODO(dpranke): add 'test_targets' and 'additional_compile_targets' 777 inp = self.ReadInputJSON(['files', 'test_targets',
777 # as required keys once the recipe has been converted over. 778 'additional_compile_targets'])
778 # See crbug.com/552146.
779 inp = self.ReadInputJSON(['files'])
780 if self.args.verbose: 779 if self.args.verbose:
781 self.Print() 780 self.Print()
782 self.Print('analyze input:') 781 self.Print('analyze input:')
783 self.PrintJSON(inp) 782 self.PrintJSON(inp)
784 self.Print() 783 self.Print()
785 784
786 use_new_logic = ('test_targets' in inp and 785 # TODO(crbug.com/555273) - currently GN treats targets and
787 'additional_compile_targets' in inp) 786 # additional_compile_targets identically since we can't tell the
788 if use_new_logic: 787 # difference between a target that is a group in GN and one that isn't.
789 # TODO(crbug.com/555273) - currently GN treats targets and 788 # We should eventually fix this and treat the two types differently.
790 # additional_compile_targets identically since we can't tell the 789 targets = (set(inp['test_targets']) |
791 # difference between a target that is a group in GN and one that isn't. 790 set(inp['additional_compile_targets']))
792 # We should eventually fix this and treat the two types differently.
793 targets = (set(inp['test_targets']) |
794 set(inp['additional_compile_targets']))
795 else:
796 targets = set(inp['targets'])
797 791
798 output_path = self.args.output_path[0] 792 output_path = self.args.output_path[0]
799 793
800 # Bail out early if a GN file was modified, since 'gn refs' won't know 794 # Bail out early if a GN file was modified, since 'gn refs' won't know
801 # what to do about it. Also, bail out early if 'all' was asked for, 795 # what to do about it. Also, bail out early if 'all' was asked for,
802 # since we can't deal with it yet. 796 # since we can't deal with it yet.
803 if (any(f.endswith('.gn') or f.endswith('.gni') for f in inp['files']) or 797 if (any(f.endswith('.gn') or f.endswith('.gni') for f in inp['files']) or
804 'all' in targets): 798 'all' in targets):
805 if use_new_logic: 799 self.WriteJSON({
806 self.WriteJSON({ 800 'status': 'Found dependency (all)',
807 'status': 'Found dependency (all)', 801 'compile_targets': sorted(targets),
808 'compile_targets': sorted(targets), 802 'test_targets': sorted(targets & set(inp['test_targets'])),
809 'test_targets': sorted(targets & set(inp['test_targets'])), 803 }, output_path)
810 }, output_path)
811 else:
812 self.WriteJSON({'status': 'Found dependency (all)'}, output_path)
813 return 0 804 return 0
814 805
815 # This shouldn't normally happen, but could due to unusual race conditions, 806 # This shouldn't normally happen, but could due to unusual race conditions,
816 # like a try job that gets scheduled before a patch lands but runs after 807 # like a try job that gets scheduled before a patch lands but runs after
817 # the patch has landed. 808 # the patch has landed.
818 if not inp['files']: 809 if not inp['files']:
819 self.Print('Warning: No files modified in patch, bailing out early.') 810 self.Print('Warning: No files modified in patch, bailing out early.')
820 if use_new_logic: 811 self.WriteJSON({
821 self.WriteJSON({ 812 'status': 'No dependency',
822 'status': 'No dependency', 813 'compile_targets': [],
823 'compile_targets': [], 814 'test_targets': [],
824 'test_targets': [], 815 }, output_path)
825 }, output_path)
826 else:
827 self.WriteJSON({
828 'status': 'No dependency',
829 'targets': [],
830 'build_targets': [],
831 }, output_path)
832 return 0 816 return 0
833 817
834 ret = 0 818 ret = 0
835 response_file = self.TempFile() 819 response_file = self.TempFile()
836 response_file.write('\n'.join(inp['files']) + '\n') 820 response_file.write('\n'.join(inp['files']) + '\n')
837 response_file.close() 821 response_file.close()
838 822
839 matching_targets = set() 823 matching_targets = set()
840 try: 824 try:
841 cmd = self.GNCmd('refs', self.args.path[0]) + [ 825 cmd = self.GNCmd('refs', self.args.path[0]) + [
(...skipping 20 matching lines...) Expand all
862 # just 'chrome_public_apk'. This may result in too many targets 846 # just 'chrome_public_apk'. This may result in too many targets
863 # getting built, but we can adjust that later if need be. 847 # getting built, but we can adjust that later if need be.
864 for input_target in targets: 848 for input_target in targets:
865 if (input_target == build_target or 849 if (input_target == build_target or
866 build_target.endswith(':' + input_target)): 850 build_target.endswith(':' + input_target)):
867 matching_targets.add(input_target) 851 matching_targets.add(input_target)
868 finally: 852 finally:
869 self.RemoveFile(response_file.name) 853 self.RemoveFile(response_file.name)
870 854
871 if matching_targets: 855 if matching_targets:
872 if use_new_logic: 856 self.WriteJSON({
873 self.WriteJSON({
874 'status': 'Found dependency',
875 'compile_targets': sorted(matching_targets),
876 'test_targets': sorted(matching_targets &
877 set(inp['test_targets'])),
878 }, output_path)
879 else:
880 self.WriteJSON({
881 'status': 'Found dependency', 857 'status': 'Found dependency',
882 'targets': sorted(matching_targets), 858 'compile_targets': sorted(matching_targets),
883 'build_targets': sorted(matching_targets), 859 'test_targets': sorted(matching_targets &
884 }, output_path) 860 set(inp['test_targets'])),
861 }, output_path)
885 else: 862 else:
886 if use_new_logic: 863 self.WriteJSON({
887 self.WriteJSON({ 864 'status': 'No dependency',
888 'status': 'No dependency', 865 'compile_targets': [],
889 'compile_targets': [], 866 'test_targets': [],
890 'test_targets': [], 867 }, output_path)
891 }, output_path)
892 else:
893 self.WriteJSON({
894 'status': 'No dependency',
895 'targets': [],
896 'build_targets': [],
897 }, output_path)
898 868
899 if self.args.verbose: 869 if self.args.verbose:
900 outp = json.loads(self.ReadFile(output_path)) 870 outp = json.loads(self.ReadFile(output_path))
901 self.Print() 871 self.Print()
902 self.Print('analyze output:') 872 self.Print('analyze output:')
903 self.PrintJSON(outp) 873 self.PrintJSON(outp)
904 self.Print() 874 self.Print()
905 875
906 return 0 876 return 0
907 877
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
1090 1060
1091 if __name__ == '__main__': 1061 if __name__ == '__main__':
1092 try: 1062 try:
1093 sys.exit(main(sys.argv[1:])) 1063 sys.exit(main(sys.argv[1:]))
1094 except MBErr as e: 1064 except MBErr as e:
1095 print(e) 1065 print(e)
1096 sys.exit(1) 1066 sys.exit(1)
1097 except KeyboardInterrupt: 1067 except KeyboardInterrupt:
1098 print("interrupted, exiting", stream=sys.stderr) 1068 print("interrupted, exiting", stream=sys.stderr)
1099 sys.exit(130) 1069 sys.exit(130)
OLDNEW
« no previous file with comments | « no previous file | tools/mb/mb_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698