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

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

Issue 429853002: IDL: Add build target for IDL dictionary impl generation in core (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 3 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 | « Source/bindings/scripts/code_generator_v8.py ('k') | Source/bindings/scripts/idl_compiler.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 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 if options.write_file_only_if_changed is None: 78 if options.write_file_only_if_changed is None:
79 parser.error('Must specify whether file is only written if changed using --write-file-only-if-changed.') 79 parser.error('Must specify whether file is only written if changed using --write-file-only-if-changed.')
80 options.write_file_only_if_changed = bool(options.write_file_only_if_changed ) 80 options.write_file_only_if_changed = bool(options.write_file_only_if_changed )
81 return options, args 81 return options, args
82 82
83 83
84 ################################################################################ 84 ################################################################################
85 # Computations 85 # Computations
86 ################################################################################ 86 ################################################################################
87 87
88 def relative_dir_posix(idl_filename):
89 """Returns relative path to the directory of idl_file in POSIX format."""
90 relative_path_local = os.path.relpath(idl_filename, source_path)
91 relative_dir_local = os.path.dirname(relative_path_local)
92 return relative_dir_local.replace(os.path.sep, posixpath.sep)
93
94
88 def include_path(idl_filename, implemented_as=None): 95 def include_path(idl_filename, implemented_as=None):
89 """Returns relative path to header file in POSIX format; used in includes. 96 """Returns relative path to header file in POSIX format; used in includes.
90 97
91 POSIX format is used for consistency of output, so reference tests are 98 POSIX format is used for consistency of output, so reference tests are
92 platform-independent. 99 platform-independent.
93 """ 100 """
94 relative_path_local = os.path.relpath(idl_filename, source_path) 101 relative_dir = relative_dir_posix(idl_filename)
95 relative_dir_local = os.path.dirname(relative_path_local)
96 relative_dir_posix = relative_dir_local.replace(os.path.sep, posixpath.sep)
97 102
98 # IDL file basename is used even if only a partial interface file 103 # IDL file basename is used even if only a partial interface file
99 idl_file_basename, _ = os.path.splitext(os.path.basename(idl_filename)) 104 idl_file_basename, _ = os.path.splitext(os.path.basename(idl_filename))
100 cpp_class_name = implemented_as or idl_file_basename 105 cpp_class_name = implemented_as or idl_file_basename
101 106
102 return posixpath.join(relative_dir_posix, cpp_class_name + '.h') 107 return posixpath.join(relative_dir, cpp_class_name + '.h')
103 108
104 109
105 def add_paths_to_partials_dict(partial_interface_name, full_path, this_include_p ath=None): 110 def add_paths_to_partials_dict(partial_interface_name, full_path, this_include_p ath=None):
106 paths_dict = partial_interface_files[partial_interface_name] 111 paths_dict = partial_interface_files[partial_interface_name]
107 paths_dict['full_paths'].append(full_path) 112 paths_dict['full_paths'].append(full_path)
108 if this_include_path: 113 if this_include_path:
109 paths_dict['include_paths'].append(this_include_path) 114 paths_dict['include_paths'].append(this_include_path)
110 115
111 116
112 def compute_info_individual(idl_filename, component_dir): 117 def compute_info_individual(idl_filename, component_dir):
113 full_path = os.path.realpath(idl_filename) 118 full_path = os.path.realpath(idl_filename)
114 idl_file_contents = get_file_contents(full_path) 119 idl_file_contents = get_file_contents(full_path)
115 120
116 extended_attributes = get_interface_extended_attributes_from_idl(idl_file_co ntents) 121 extended_attributes = get_interface_extended_attributes_from_idl(idl_file_co ntents)
117 implemented_as = extended_attributes.get('ImplementedAs') 122 implemented_as = extended_attributes.get('ImplementedAs')
118 this_include_path = include_path(idl_filename, implemented_as) 123 this_include_path = include_path(idl_filename, implemented_as)
124 relative_dir = relative_dir_posix(idl_filename)
119 125
120 # Handle partial interfaces 126 # Handle partial interfaces
121 partial_interface_name = get_partial_interface_name_from_idl(idl_file_conten ts) 127 partial_interface_name = get_partial_interface_name_from_idl(idl_file_conten ts)
122 if partial_interface_name: 128 if partial_interface_name:
123 add_paths_to_partials_dict(partial_interface_name, full_path, this_inclu de_path) 129 add_paths_to_partials_dict(partial_interface_name, full_path, this_inclu de_path)
124 return 130 return
125 131
126 # If not a partial interface, the basename is the interface name 132 # If not a partial interface, the basename is the interface name
127 interface_name = idl_filename_to_interface_name(idl_filename) 133 interface_name = idl_filename_to_interface_name(idl_filename)
128 134
(...skipping 17 matching lines...) Expand all
146 # 'implements': http://crbug.com/360435 152 # 'implements': http://crbug.com/360435
147 'is_legacy_treat_as_partial_interface': 'LegacyTreatAsPartialInterface' in extended_attributes, 153 'is_legacy_treat_as_partial_interface': 'LegacyTreatAsPartialInterface' in extended_attributes,
148 'parent': get_parent_interface(idl_file_contents), 154 'parent': get_parent_interface(idl_file_contents),
149 # Interfaces that are referenced (used as types) and that we introspect 155 # Interfaces that are referenced (used as types) and that we introspect
150 # during code generation (beyond interface-level data ([ImplementedAs], 156 # during code generation (beyond interface-level data ([ImplementedAs],
151 # is_callback_interface, ancestors, and inherited extended attributes): 157 # is_callback_interface, ancestors, and inherited extended attributes):
152 # deep dependencies. 158 # deep dependencies.
153 # These cause rebuilds of referrers, due to the dependency, so these 159 # These cause rebuilds of referrers, due to the dependency, so these
154 # should be minimized; currently only targets of [PutForwards]. 160 # should be minimized; currently only targets of [PutForwards].
155 'referenced_interfaces': get_put_forward_interfaces_from_idl(idl_file_co ntents), 161 'referenced_interfaces': get_put_forward_interfaces_from_idl(idl_file_co ntents),
162 'relative_dir': relative_dir,
156 } 163 }
157 164
158 165
159 def info_individual(): 166 def info_individual():
160 """Returns info packaged as a dict.""" 167 """Returns info packaged as a dict."""
161 return { 168 return {
162 'interfaces_info': interfaces_info, 169 'interfaces_info': interfaces_info,
163 # Can't pickle defaultdict, convert to dict 170 # Can't pickle defaultdict, convert to dict
164 'partial_interface_files': dict(partial_interface_files), 171 'partial_interface_files': dict(partial_interface_files),
165 } 172 }
(...skipping 18 matching lines...) Expand all
184 for idl_filename in idl_files: 191 for idl_filename in idl_files:
185 compute_info_individual(idl_filename, options.component_dir) 192 compute_info_individual(idl_filename, options.component_dir)
186 193
187 write_pickle_file(options.interfaces_info_file, 194 write_pickle_file(options.interfaces_info_file,
188 info_individual(), 195 info_individual(),
189 options.write_file_only_if_changed) 196 options.write_file_only_if_changed)
190 197
191 198
192 if __name__ == '__main__': 199 if __name__ == '__main__':
193 sys.exit(main()) 200 sys.exit(main())
OLDNEW
« no previous file with comments | « Source/bindings/scripts/code_generator_v8.py ('k') | Source/bindings/scripts/idl_compiler.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698