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

Side by Side Diff: build/gyp_v8

Issue 955463002: Port chromium landmines script. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 10 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
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # 2 #
3 # Copyright 2012 the V8 project authors. All rights reserved. 3 # Copyright 2012 the V8 project authors. All rights reserved.
4 # Redistribution and use in source and binary forms, with or without 4 # Redistribution and use in source and binary forms, with or without
5 # modification, are permitted provided that the following conditions are 5 # modification, are permitted provided that the following conditions are
6 # met: 6 # met:
7 # 7 #
8 # * Redistributions of source code must retain the above copyright 8 # * Redistributions of source code must retain the above copyright
9 # notice, this list of conditions and the following disclaimer. 9 # notice, this list of conditions and the following disclaimer.
10 # * Redistributions in binary form must reproduce the above 10 # * Redistributions in binary form must reproduce the above
(...skipping 13 matching lines...) Expand all
24 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 29
30 # This script is wrapper for V8 that adds some support for how GYP 30 # This script is wrapper for V8 that adds some support for how GYP
31 # is invoked by V8 beyond what can be done in the gclient hooks. 31 # is invoked by V8 beyond what can be done in the gclient hooks.
32 32
33 import glob 33 import glob
34 import gyp_environment
34 import os 35 import os
35 import platform 36 import platform
36 import shlex 37 import shlex
37 import subprocess 38 import subprocess
38 import sys 39 import sys
39 40
40 script_dir = os.path.dirname(os.path.realpath(__file__)) 41 script_dir = os.path.dirname(os.path.realpath(__file__))
41 v8_root = os.path.abspath(os.path.join(script_dir, os.pardir)) 42 v8_root = os.path.abspath(os.path.join(script_dir, os.pardir))
42 43
43 sys.path.insert(0, os.path.join(v8_root, 'build', 'gyp', 'pylib')) 44 sys.path.insert(0, os.path.join(v8_root, 'build', 'gyp', 'pylib'))
44 import gyp 45 import gyp
45 46
46 # Add paths so that pymod_do_main(...) can import files. 47 # Add paths so that pymod_do_main(...) can import files.
47 sys.path.insert( 48 sys.path.insert(
48 1, os.path.abspath(os.path.join(v8_root, 'tools', 'generate_shim_headers'))) 49 1, os.path.abspath(os.path.join(v8_root, 'tools', 'generate_shim_headers')))
49 50
50 51
51 def apply_gyp_environment(file_path=None):
52 """
53 Reads in a *.gyp_env file and applies the valid keys to os.environ.
54 """
55 if not file_path or not os.path.exists(file_path):
56 return
57 file_contents = open(file_path).read()
58 try:
59 file_data = eval(file_contents, {'__builtins__': None}, None)
60 except SyntaxError, e:
61 e.filename = os.path.abspath(file_path)
62 raise
63 supported_vars = ( 'V8_GYP_FILE',
64 'V8_GYP_SYNTAX_CHECK',
65 'GYP_DEFINES',
66 'GYP_GENERATOR_FLAGS',
67 'GYP_GENERATOR_OUTPUT', )
68 for var in supported_vars:
69 val = file_data.get(var)
70 if val:
71 if var in os.environ:
72 print 'INFO: Environment value for "%s" overrides value in %s.' % (
73 var, os.path.abspath(file_path)
74 )
75 else:
76 os.environ[var] = val
77
78
79 def additional_include_files(args=[]): 52 def additional_include_files(args=[]):
80 """ 53 """
81 Returns a list of additional (.gypi) files to include, without 54 Returns a list of additional (.gypi) files to include, without
82 duplicating ones that are already specified on the command line. 55 duplicating ones that are already specified on the command line.
83 """ 56 """
84 # Determine the include files specified on the command line. 57 # Determine the include files specified on the command line.
85 # This doesn't cover all the different option formats you can use, 58 # This doesn't cover all the different option formats you can use,
86 # but it's mainly intended to avoid duplicating flags on the automatic 59 # but it's mainly intended to avoid duplicating flags on the automatic
87 # makefile regeneration which only uses this format. 60 # makefile regeneration which only uses this format.
88 specified_includes = set() 61 specified_includes = set()
(...skipping 13 matching lines...) Expand all
102 supplements = glob.glob(os.path.join(v8_root, '*', 'supplement.gypi')) 75 supplements = glob.glob(os.path.join(v8_root, '*', 'supplement.gypi'))
103 for supplement in supplements: 76 for supplement in supplements:
104 AddInclude(supplement) 77 AddInclude(supplement)
105 78
106 return result 79 return result
107 80
108 81
109 def run_gyp(args): 82 def run_gyp(args):
110 rc = gyp.main(args) 83 rc = gyp.main(args)
111 84
112 # Check for landmines (reasons to clobber the build). This must be run here,
113 # rather than a separate runhooks step so that any environment modifications
114 # from above are picked up.
115 print 'Running build/landmines.py...'
116 subprocess.check_call(
117 [sys.executable, os.path.join(script_dir, 'landmines.py')])
118
119 if rc != 0: 85 if rc != 0:
120 print 'Error running GYP' 86 print 'Error running GYP'
121 sys.exit(rc) 87 sys.exit(rc)
122 88
123 89
124 if __name__ == '__main__': 90 if __name__ == '__main__':
125 args = sys.argv[1:] 91 args = sys.argv[1:]
126 92
127 if 'SKIP_V8_GYP_ENV' not in os.environ: 93 gyp_environment.set_environment()
128 # Update the environment based on v8.gyp_env
129 gyp_env_path = os.path.join(os.path.dirname(v8_root), 'v8.gyp_env')
130 apply_gyp_environment(gyp_env_path)
131 94
132 # This could give false positives since it doesn't actually do real option 95 # This could give false positives since it doesn't actually do real option
133 # parsing. Oh well. 96 # parsing. Oh well.
134 gyp_file_specified = False 97 gyp_file_specified = False
135 for arg in args: 98 for arg in args:
136 if arg.endswith('.gyp'): 99 if arg.endswith('.gyp'):
137 gyp_file_specified = True 100 gyp_file_specified = True
138 break 101 break
139 102
140 # If we didn't get a file, check an env var, and then fall back to 103 # If we didn't get a file, check an env var, and then fall back to
(...skipping 30 matching lines...) Expand all
171 if platform.system() == 'Linux' and gyp_generators != 'ninja': 134 if platform.system() == 'Linux' and gyp_generators != 'ninja':
172 # Work around for crbug.com/331475. 135 # Work around for crbug.com/331475.
173 for f in glob.glob(os.path.join(v8_root, 'out', 'Makefile.*')): 136 for f in glob.glob(os.path.join(v8_root, 'out', 'Makefile.*')):
174 os.unlink(f) 137 os.unlink(f)
175 # --generator-output defines where the Makefile goes. 138 # --generator-output defines where the Makefile goes.
176 gyp_args.append('--generator-output=out') 139 gyp_args.append('--generator-output=out')
177 # -Goutput_dir defines where the build output goes, relative to the 140 # -Goutput_dir defines where the build output goes, relative to the
178 # Makefile. Set it to . so that the build output doesn't end up in out/out. 141 # Makefile. Set it to . so that the build output doesn't end up in out/out.
179 gyp_args.append('-Goutput_dir=.') 142 gyp_args.append('-Goutput_dir=.')
180 run_gyp(gyp_args) 143 run_gyp(gyp_args)
OLDNEW
« no previous file with comments | « build/gyp_environment.py ('k') | build/landmine_utils.py » ('j') | build/landmines.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698