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

Side by Side Diff: bindings/scripts/aggregate_generated_bindings.py

Issue 2786203002: Roll 50: Copied IDLs, PYTHON scripts from WebKit removed deleted files in WebCore (Closed)
Patch Set: Created 3 years, 8 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 | « bindings/dart/gyp/scripts/build_dart_snapshot.py ('k') | bindings/scripts/code_generator_v8.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/python 1 #!/usr/bin/python
2 # 2 #
3 # Copyright (C) 2009 Google Inc. All rights reserved. 3 # Copyright (C) 2009 Google Inc. All rights reserved.
4 # 4 #
5 # Redistribution and use in source and binary forms, with or without 5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions are 6 # modification, are permitted provided that the following conditions are
7 # met: 7 # met:
8 # 8 #
9 # * Redistributions of source code must retain the above copyright 9 # * Redistributions of source code must retain the above copyright
10 # notice, this list of conditions and the following disclaimer. 10 # notice, this list of conditions and the following disclaimer.
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 Design doc: http://www.chromium.org/developers/design-documents/idl-build 48 Design doc: http://www.chromium.org/developers/design-documents/idl-build
49 """ 49 """
50 50
51 import errno 51 import errno
52 import os 52 import os
53 import re 53 import re
54 import sys 54 import sys
55 55
56 from utilities import should_generate_impl_file_from_idl, get_file_contents, idl _filename_to_component, idl_filename_to_interface_name, read_idl_files_list_from _file 56 from utilities import should_generate_impl_file_from_idl, get_file_contents, idl _filename_to_component, idl_filename_to_interface_name, read_idl_files_list_from _file
57 57
58 # A regexp for finding Conditional attributes in interface definitions.
59 CONDITIONAL_PATTERN = re.compile(
60 r'\['
61 r'[^\]]*'
62 r'Conditional=([\_0-9a-zA-Z]*)'
63 r'[^\]]*'
64 r'\]\s*'
65 r'((callback|partial)\s+)?'
66 r'interface\s+'
67 r'\w+\s*'
68 r'(:\s*\w+\s*)?'
69 r'{',
70 re.MULTILINE)
71
72 COPYRIGHT_TEMPLATE = """/* 58 COPYRIGHT_TEMPLATE = """/*
73 * THIS FILE WAS AUTOMATICALLY GENERATED, DO NOT EDIT. 59 * THIS FILE WAS AUTOMATICALLY GENERATED, DO NOT EDIT.
74 * 60 *
75 * This file was generated by the action_derivedsourcesallinone.py script. 61 * This file was generated by the action_derivedsourcesallinone.py script.
76 * 62 *
77 * Copyright (C) 2009 Google Inc. All rights reserved. 63 * Copyright (C) 2009 Google Inc. All rights reserved.
78 * 64 *
79 * Redistribution and use in source and binary forms, with or without 65 * Redistribution and use in source and binary forms, with or without
80 * modification, are permitted provided that the following conditions 66 * modification, are permitted provided that the following conditions
81 * are met: 67 * are met:
(...skipping 11 matching lines...) Expand all
93 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 79 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
94 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 80 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
95 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 81 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
96 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 82 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
97 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 83 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
98 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 84 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
99 */ 85 */
100 """ 86 """
101 87
102 88
103 def extract_conditional(idl_contents):
104 """Find [Conditional] interface extended attribute."""
105
106 match = CONDITIONAL_PATTERN.search(idl_contents)
107 if not match:
108 return None
109 return match.group(1)
110
111
112 def extract_meta_data(file_paths): 89 def extract_meta_data(file_paths):
113 """Extracts conditional and interface name from each IDL file.""" 90 """Extracts interface name from each IDL file."""
114 meta_data_list = [] 91 meta_data_list = []
115 92
116 for file_path in file_paths: 93 for file_path in file_paths:
117 if not file_path.endswith('.idl'): 94 if not file_path.endswith('.idl'):
118 print 'WARNING: non-IDL file passed: "%s"' % file_path 95 print 'WARNING: non-IDL file passed: "%s"' % file_path
119 continue 96 continue
120 if not os.path.exists(file_path): 97 if not os.path.exists(file_path):
121 print 'WARNING: file not found: "%s"' % file_path 98 print 'WARNING: file not found: "%s"' % file_path
122 continue 99 continue
123 100
124 idl_file_contents = get_file_contents(file_path) 101 idl_file_contents = get_file_contents(file_path)
125 if not should_generate_impl_file_from_idl(idl_file_contents): 102 if not should_generate_impl_file_from_idl(idl_file_contents):
126 continue 103 continue
127 104
128 # Extract interface name from file name 105 # Extract interface name from file name
129 interface_name = idl_filename_to_interface_name(file_path) 106 interface_name = idl_filename_to_interface_name(file_path)
130 107
131 meta_data = { 108 meta_data = {
132 'conditional': extract_conditional(idl_file_contents),
133 'name': interface_name, 109 'name': interface_name,
134 } 110 }
135 meta_data_list.append(meta_data) 111 meta_data_list.append(meta_data)
136 112
137 return meta_data_list 113 return meta_data_list
138 114
139 115
140 def generate_content(component_dir, aggregate_partial_interfaces, files_meta_dat a_this_partition): 116 def generate_content(component_dir, aggregate_partial_interfaces, files_meta_dat a_this_partition):
141 # Add fixed content. 117 # Add fixed content.
142 output = [COPYRIGHT_TEMPLATE, 118 output = [COPYRIGHT_TEMPLATE,
143 '#define NO_IMPLICIT_ATOMICSTRING\n\n'] 119 '#define NO_IMPLICIT_ATOMICSTRING\n\n']
144 120
145 # List all includes segmented by if and endif. 121 # List all includes.
146 prev_conditional = None 122 files_meta_data_this_partition.sort()
147 files_meta_data_this_partition.sort(key=lambda e: e['conditional'])
148 for meta_data in files_meta_data_this_partition: 123 for meta_data in files_meta_data_this_partition:
149 conditional = meta_data['conditional']
150 if prev_conditional != conditional:
151 if prev_conditional:
152 output.append('#endif\n')
153 if conditional:
154 output.append('\n#if ENABLE(%s)\n' % conditional)
155 prev_conditional = conditional
156
157 if aggregate_partial_interfaces: 124 if aggregate_partial_interfaces:
158 cpp_filename = 'V8%sPartial.cpp' % meta_data['name'] 125 cpp_filename = 'V8%sPartial.cpp' % meta_data['name']
159 else: 126 else:
160 cpp_filename = 'V8%s.cpp' % meta_data['name'] 127 cpp_filename = 'V8%s.cpp' % meta_data['name']
161 128
162 output.append('#include "bindings/%s/v8/%s"\n' % 129 output.append('#include "bindings/%s/v8/%s"\n' %
163 (component_dir, cpp_filename)) 130 (component_dir, cpp_filename))
164 131
165 if prev_conditional:
166 output.append('#endif\n')
167
168 return ''.join(output) 132 return ''.join(output)
169 133
170 134
171 def write_content(content, output_file_name): 135 def write_content(content, output_file_name):
172 parent_path, file_name = os.path.split(output_file_name) 136 parent_path, file_name = os.path.split(output_file_name)
173 if not os.path.exists(parent_path): 137 if not os.path.exists(parent_path):
174 print 'Creating directory: %s' % parent_path 138 print 'Creating directory: %s' % parent_path
175 os.makedirs(parent_path) 139 os.makedirs(parent_path)
176 with open(output_file_name, 'w') as f: 140 with open(output_file_name, 'w') as f:
177 f.write(content) 141 f.write(content)
178 142
179 143
180 def main(args): 144 def main(args):
181 if len(args) <= 4: 145 if len(args) <= 4:
182 raise Exception('Expected at least 5 arguments.') 146 raise Exception('Expected at least 5 arguments.')
183 component_dir = args[1] 147 component_dir = args[1]
184 input_file_name = args[2] 148 input_file_name = args[2]
185 in_out_break_index = args.index('--') 149 in_out_break_index = args.index('--')
186 output_file_names = args[in_out_break_index + 1:] 150 output_file_names = args[in_out_break_index + 1:]
187 151
188 idl_file_names = read_idl_files_list_from_file(input_file_name) 152 idl_file_names = read_idl_files_list_from_file(input_file_name,
153 is_gyp_format=True)
189 components = set([idl_filename_to_component(filename) 154 components = set([idl_filename_to_component(filename)
190 for filename in idl_file_names]) 155 for filename in idl_file_names])
191 if len(components) != 1: 156 if len(components) != 1:
192 raise Exception('Cannot aggregate generated codes in different component s') 157 raise Exception('Cannot aggregate generated codes in different component s')
193 aggregate_partial_interfaces = component_dir not in components 158 aggregate_partial_interfaces = component_dir not in components
194 159
195 files_meta_data = extract_meta_data(idl_file_names) 160 files_meta_data = extract_meta_data(idl_file_names)
196 total_partitions = len(output_file_names) 161 total_partitions = len(output_file_names)
197 for partition, file_name in enumerate(output_file_names): 162 for partition, file_name in enumerate(output_file_names):
198 files_meta_data_this_partition = [ 163 files_meta_data_this_partition = [
199 meta_data for meta_data in files_meta_data 164 meta_data for meta_data in files_meta_data
200 if hash(meta_data['name']) % total_partitions == partition] 165 if hash(meta_data['name']) % total_partitions == partition]
201 file_contents = generate_content(component_dir, 166 file_contents = generate_content(component_dir,
202 aggregate_partial_interfaces, 167 aggregate_partial_interfaces,
203 files_meta_data_this_partition) 168 files_meta_data_this_partition)
204 write_content(file_contents, file_name) 169 write_content(file_contents, file_name)
205 170
206 171
207 if __name__ == '__main__': 172 if __name__ == '__main__':
208 sys.exit(main(sys.argv)) 173 sys.exit(main(sys.argv))
OLDNEW
« no previous file with comments | « bindings/dart/gyp/scripts/build_dart_snapshot.py ('k') | bindings/scripts/code_generator_v8.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698