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

Unified Diff: build/gyp_chromium

Issue 73623005: Move GYP_DEFINES parsing to Python for GN (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/gyp_chromium
diff --git a/build/gyp_chromium b/build/gyp_chromium
index 5bf5386081d197618313330df3ffa7018a7a3047..964639f5c0ff69708fba8c1641814863d5b86bcd 100755
--- a/build/gyp_chromium
+++ b/build/gyp_chromium
@@ -54,10 +54,47 @@ else:
psyco = None
-def additional_include_files(args=[]):
+def GetSupplementalFiles():
+ """Returns a list of the supplemental files that are included in all GYP
bradn 2013/11/19 17:45:58 FWIW These are usually meant to fix on one line.
+ sources."""
+ return glob.glob(os.path.join(chrome_src, '*', 'supplement.gypi'))
+
+
+def GetVarsStringForGN(supplemental_files):
+ vars_dict = {}
+
+ for supplement in supplemental_files:
+ with open(supplement, 'r') as f:
+ try:
+ file_data = eval(f.read(), {'__builtins__': None}, None)
+ except SyntaxError, e:
+ e.filename = os.path.abspath(supplement)
+ raise
+ variables = file_data.get('variables')
+ for v in variables:
+ vars_dict[v] = '"' + variables[v] + '"'
+
+ env_string = os.environ.get('GYP_DEFINES', [])
+ items = shlex.split(env_string)
+ for item in items:
+ tokens = item.split('=', 1)
+ if len(tokens) == 2:
+ vars_dict[tokens[0]] = '"' + tokens[1] + '"'
+ else:
+ # No value supplied, treat it as a boolean and set it.
+ vars_dict[tokens[0]] = 'true'
+
+ vars_string = ''
+ for v in vars_dict:
+ vars_string = vars_string + v + '=' + vars_dict[v] + ' '
+ return vars_string.strip() # Remove trailing space.
+
+
+def additional_include_files(supplemental_files, args=[]):
"""
- Returns a list of additional (.gypi) files to include, without
- duplicating ones that are already specified on the command line.
+ Returns a list of additional (.gypi) files to include, without duplicating
+ ones that are already specified on the command line. The list of supplemental
+ include files is passed in as an argument.
"""
# Determine the include files specified on the command line.
# This doesn't cover all the different option formats you can use,
@@ -77,16 +114,16 @@ def additional_include_files(args=[]):
AddInclude(os.path.join(script_dir, 'common.gypi'))
# Optionally add supplemental .gypi files if present.
- supplements = glob.glob(os.path.join(chrome_src, '*', 'supplement.gypi'))
- for supplement in supplements:
+ for supplement in supplemental_files:
AddInclude(supplement)
return result
-def RunGN():
+def RunGN(supplemental_includes):
"""Runs GN, returning True if it succeeded, printing an error and returning
false if not."""
+
# The binaries in platform-specific subdirectories in src/tools/gn/bin.
gnpath = SRC_DIR + '/tools/gn/bin/'
if sys.platform == 'win32':
@@ -100,13 +137,15 @@ def RunGN():
return False
print 'Generating gyp files from GN...'
- print 'platform = ', sys.platform
- print 'binary = ', gnpath
+ gyp_vars = GetVarsStringForGN(supplemental_includes)
# Need to pass both the source root (the bots don't run this command from
# within the source tree) as well as set the is_gyp value so the BUILD files
# to know they're being run under GYP.
- args = [gnpath, 'gyp', '-q', '--root=' + chrome_src, '--args=is_gyp=true']
+ args = [gnpath, 'gyp', '-q',
+ '--root=' + chrome_src,
+ '--args=is_gyp=true',
+ '--gyp_vars=' + gyp_vars + '']
return subprocess.call(args) == 0
@@ -118,9 +157,6 @@ if __name__ == '__main__':
psyco.profile()
print "Enabled Psyco JIT."
- if not RunGN():
- sys.exit(1)
-
# Fall back on hermetic python if we happen to get run under cygwin.
# TODO(bradnelson): take this out once this issue is fixed:
# http://code.google.com/p/gyp/issues/detail?id=177
@@ -155,7 +191,13 @@ if __name__ == '__main__':
else:
args.append(os.path.join(script_dir, 'all.gyp'))
- args.extend(['-I' + i for i in additional_include_files(args)])
+ supplemental_includes = GetSupplementalFiles()
+
+ if not RunGN(supplemental_includes):
+ sys.exit(1)
+
+ args.extend(
+ ['-I' + i for i in additional_include_files(supplemental_includes, args)])
# There shouldn't be a circular dependency relationship between .gyp files,
# but in Chromium's .gyp files, on non-Mac platforms, circular relationships
« 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