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

Side by Side Diff: Source/bindings/scripts/compute_dependencies.py

Issue 137993002: IDL compiler: Move include path handling to compute_dependencies (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 11 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 | Source/bindings/scripts/unstable/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) 2013 Google Inc. All rights reserved. 3 # Copyright (C) 2013 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 17 matching lines...) Expand all
28 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 30
31 import optparse 31 import optparse
32 import os 32 import os
33 import cPickle as pickle 33 import cPickle as pickle
34 import posixpath 34 import posixpath
35 import re 35 import re
36 import string 36 import string
37 37
38 module_path, _ = os.path.split(__file__)
39 source_path = os.path.normpath(os.path.join(module_path, os.pardir, os.pardir))
40
38 41
39 class IdlBadFilenameError(Exception): 42 class IdlBadFilenameError(Exception):
40 """Raised if an IDL filename disagrees with the interface name in the file." "" 43 """Raised if an IDL filename disagrees with the interface name in the file." ""
41 pass 44 pass
42 45
43 46
44 class IdlInterfaceFileNotFoundError(Exception): 47 class IdlInterfaceFileNotFoundError(Exception):
45 """Raised if the IDL file implementing an interface cannot be found.""" 48 """Raised if the IDL file implementing an interface cannot be found."""
46 pass 49 pass
47 50
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 for constructor_attribute in sorted(constructor_attributes_list)] + 232 for constructor_attribute in sorted(constructor_attributes_list)] +
230 ['};\n']) 233 ['};\n'])
231 write_file(lines, destination_filename, only_if_changed) 234 write_file(lines, destination_filename, only_if_changed)
232 235
233 236
234 def generate_dependencies(idl_file_name, interfaces_info, partial_interface_file s): 237 def generate_dependencies(idl_file_name, interfaces_info, partial_interface_file s):
235 interface_name, _ = os.path.splitext(os.path.basename(idl_file_name)) 238 interface_name, _ = os.path.splitext(os.path.basename(idl_file_name))
236 full_path = os.path.realpath(idl_file_name) 239 full_path = os.path.realpath(idl_file_name)
237 idl_file_contents = get_file_contents(full_path) 240 idl_file_contents = get_file_contents(full_path)
238 241
242 extended_attributes = get_interface_extended_attributes_from_idl(idl_file_co ntents)
243 implemented_as = extended_attributes.get('ImplementedAs')
244
245 # Relative path to header file, used in includes
246 relative_path_local = os.path.relpath(idl_file_name, source_path)
247 relative_dir_local = os.path.dirname(relative_path_local)
248 posix_dir = relative_dir_local.replace(os.path.sep, posixpath.sep)
249 cpp_class_name = implemented_as or interface_name
250 include_path = os.path.join(posix_dir, cpp_class_name + '.h')
251
239 # Handle partial interfaces 252 # Handle partial interfaces
240 partial_interface_name = get_partial_interface_name_from_idl(idl_file_conten ts) 253 partial_interface_name = get_partial_interface_name_from_idl(idl_file_conten ts)
241 if partial_interface_name: 254 if partial_interface_name:
242 partial_interface_files.setdefault(partial_interface_name, []).append(fu ll_path) 255 partial_interface_files.setdefault(partial_interface_name, []).append(fu ll_path)
243 return partial_interface_name 256 return partial_interface_name
244 257
245 # Non-partial interfaces default to having bindings generated, 258 # Non-partial interfaces default to having bindings generated,
246 # but are removed later if they are implemented by another interface 259 # but are removed later if they are implemented by another interface
247 interfaces_info[interface_name] = { 260 interfaces_info[interface_name] = {
248 'full_path': full_path, 261 'full_path': full_path,
262 'include_path': include_path,
249 'implements_interfaces': get_implemented_interfaces_from_idl(idl_file_co ntents, interface_name), 263 'implements_interfaces': get_implemented_interfaces_from_idl(idl_file_co ntents, interface_name),
250 'is_callback_interface': is_callback_interface_from_idl(idl_file_content s), 264 'is_callback_interface': is_callback_interface_from_idl(idl_file_content s),
251 } 265 }
252 extended_attributes = get_interface_extended_attributes_from_idl(idl_file_co ntents) 266 if implemented_as:
253 if 'ImplementedAs' in extended_attributes: 267 interfaces_info[interface_name]['implemented_as'] = implemented_as
254 interfaces_info[interface_name]['implemented_as'] = extended_attributes[ 'ImplementedAs']
255 268
256 return None 269 return None
257 270
258 271
259 def remove_interfaces_implemented_somewhere(interfaces_info): 272 def remove_interfaces_implemented_somewhere(interfaces_info):
260 # Interfaces that are implemented by another interface do not have 273 # Interfaces that are implemented by another interface do not have
261 # their own bindings generated, as this would be redundant with the 274 # their own bindings generated, as this would be redundant with the
262 # actual implementation. 275 # actual implementation.
263 implemented_somewhere = set().union(*[ 276 implemented_somewhere = set().union(*[
264 interface_info['implements_interfaces'] 277 interface_info['implements_interfaces']
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 write_pickle_file(options.interfaces_info_file, interfaces_info, only_if_cha nged) 440 write_pickle_file(options.interfaces_info_file, interfaces_info, only_if_cha nged)
428 write_bindings_derived_sources_file(options.bindings_derived_sources_file, b indings_derived_sources, only_if_changed) 441 write_bindings_derived_sources_file(options.bindings_derived_sources_file, b indings_derived_sources, only_if_changed)
429 for interface_name, filename in global_constructors_filenames.iteritems(): 442 for interface_name, filename in global_constructors_filenames.iteritems():
430 if interface_name in interfaces_info: 443 if interface_name in interfaces_info:
431 generate_global_constructors_partial_interface(interface_name, filen ame, global_constructors[interface_name], only_if_changed) 444 generate_global_constructors_partial_interface(interface_name, filen ame, global_constructors[interface_name], only_if_changed)
432 generate_event_names_file(options.event_names_file, event_names, interfaces_ info, interface_extended_attributes, only_if_changed) 445 generate_event_names_file(options.event_names_file, event_names, interfaces_ info, interface_extended_attributes, only_if_changed)
433 446
434 447
435 if __name__ == '__main__': 448 if __name__ == '__main__':
436 main() 449 main()
OLDNEW
« no previous file with comments | « no previous file | Source/bindings/scripts/unstable/code_generator_v8.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698