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

Side by Side Diff: build/gypi_to_gn.py

Issue 305013009: Handle more types of gypis in gypi_to_gn. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | net/BUILD.gn » ('j') | net/BUILD.gn » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Converts a given gypi file to a python scope and writes the result to stdout. 5 """Converts a given gypi file to a python scope and writes the result to stdout.
6 6
7 It is assumed that the file contains a toplevel dictionary, and this script 7 It is assumed that the file contains a toplevel dictionary, and this script
8 will return that dictionary as a GN "scope" (see example below). This script 8 will return that dictionary as a GN "scope" (see example below). This script
9 does not know anything about GYP and it will not expand variables or execute 9 does not know anything about GYP and it will not expand variables or execute
10 conditions. 10 conditions.
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 try: 78 try:
79 file_data = eval(file_string, {'__builtins__': None}, None) 79 file_data = eval(file_string, {'__builtins__': None}, None)
80 except SyntaxError, e: 80 except SyntaxError, e:
81 e.filename = path 81 e.filename = path
82 raise 82 raise
83 except Exception, e: 83 except Exception, e:
84 raise Exception("Unexpected error while reading %s: %s" % (path, str(e))) 84 raise Exception("Unexpected error while reading %s: %s" % (path, str(e)))
85 85
86 assert isinstance(file_data, dict), "%s does not eval to a dictionary" % path 86 assert isinstance(file_data, dict), "%s does not eval to a dictionary" % path
87 87
88 # Flatten any variables to the top level.
89 if 'variables' in file_data:
90 file_data.update(file_data['variables'])
91 del file_data['variables']
92
88 # Strip any conditions. 93 # Strip any conditions.
89 if 'conditions' in file_data: 94 if 'conditions' in file_data:
90 del file_data['conditions'] 95 del file_data['conditions']
91 if 'target_conditions' in file_data: 96 if 'target_conditions' in file_data:
92 del file_data['target_conditions'] 97 del file_data['target_conditions']
93 98
94 # Flatten any varaiables to the top level.
95 if 'variables' in file_data:
96 file_data.update(file_data['variables'])
97 del file_data['variables']
98
99 # If the contents of the root is a dictionary with exactly one kee
100 # "variables", promote the contents of that to the top level. Some .gypi
101 # files contain this and some don't depending on how they expect to be
102 # embedded in a .gyp file. We don't actually care either way so collapse it
103 # away.
104 if len(file_data) == 1 and 'variables' in file_data:
105 return file_data['variables']
106
107 return file_data 99 return file_data
108 100
109 101
110 def ReplaceSubstrings(values, search_for, replace_with): 102 def ReplaceSubstrings(values, search_for, replace_with):
111 """Recursively replaces substrings in a value. 103 """Recursively replaces substrings in a value.
112 104
113 Replaces all substrings of the "search_for" with "repace_with" for all 105 Replaces all substrings of the "search_for" with "repace_with" for all
114 strings occurring in "values". This is done by recursively iterating into 106 strings occurring in "values". This is done by recursively iterating into
115 lists as well as the keys and values of dictionaries.""" 107 lists as well as the keys and values of dictionaries."""
116 if isinstance(values, str): 108 if isinstance(values, str):
(...skipping 27 matching lines...) Expand all
144 if options.replace: 136 if options.replace:
145 # Do replacements for all specified patterns. 137 # Do replacements for all specified patterns.
146 for replace in options.replace: 138 for replace in options.replace:
147 split = replace.split('=') 139 split = replace.split('=')
148 # Allow "foo=" to replace with nothing. 140 # Allow "foo=" to replace with nothing.
149 if len(split) == 1: 141 if len(split) == 1:
150 split.append('') 142 split.append('')
151 assert len(split) == 2, "Replacement must be of the form 'key=value'." 143 assert len(split) == 2, "Replacement must be of the form 'key=value'."
152 data = ReplaceSubstrings(data, split[0], split[1]) 144 data = ReplaceSubstrings(data, split[0], split[1])
153 145
146 # Sometimes .gypi files use the GYP syntax with percents at the end of the
147 # variable name (to indicate not to overwrite a previously-defined value):
148 # 'foo%': 'bar',
149 # Convert these to regular variables.
150 for key in data:
151 if len(key) > 1 and key[len(key) - 1] == '%':
152 data[key[:-1]] = data[key]
153 del data[key]
154
154 print gn_helpers.ToGNString(data) 155 print gn_helpers.ToGNString(data)
155 156
156 if __name__ == '__main__': 157 if __name__ == '__main__':
157 try: 158 try:
158 main() 159 main()
159 except Exception, e: 160 except Exception, e:
160 print str(e) 161 print str(e)
161 sys.exit(1) 162 sys.exit(1)
OLDNEW
« no previous file with comments | « no previous file | net/BUILD.gn » ('j') | net/BUILD.gn » ('J')

Powered by Google App Engine
This is Rietveld 408576698