| OLD | NEW |
| 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 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 | 61 |
| 62 * public: | 62 * public: |
| 63 'is_callback_interface': bool, callback interface or not | 63 'is_callback_interface': bool, callback interface or not |
| 64 'implemented_as': value of [ImplementedAs=...] on interface (C++ class name) | 64 'implemented_as': value of [ImplementedAs=...] on interface (C++ class name) |
| 65 | 65 |
| 66 * paths: | 66 * paths: |
| 67 'full_path': path to the IDL file, so can lookup an IDL by interface name | 67 'full_path': path to the IDL file, so can lookup an IDL by interface name |
| 68 'include_path': path for use in C++ #include directives | 68 'include_path': path for use in C++ #include directives |
| 69 'dependencies_full_paths': paths to dependencies (for merging into main) | 69 'dependencies_full_paths': paths to dependencies (for merging into main) |
| 70 'dependencies_include_paths': paths for use in C++ #include directives | 70 'dependencies_include_paths': paths for use in C++ #include directives |
| 71 'dependencies_other_component_full_paths': |
| 72 paths to dependencies (cannot merge because of other component) |
| 73 'dependencies_other_component_include_paths': |
| 74 paths for use in C++ #include directives because of dependencies in |
| 75 other component |
| 71 | 76 |
| 72 Note that all of these are stable information, unlikely to change without | 77 Note that all of these are stable information, unlikely to change without |
| 73 moving or deleting files (hence requiring a full rebuild anyway) or significant | 78 moving or deleting files (hence requiring a full rebuild anyway) or significant |
| 74 code changes (for inherited extended attributes). | 79 code changes (for inherited extended attributes). |
| 75 | 80 |
| 76 Design doc: http://www.chromium.org/developers/design-documents/idl-build | 81 Design doc: http://www.chromium.org/developers/design-documents/idl-build |
| 77 """ | 82 """ |
| 78 | 83 |
| 79 from collections import defaultdict | 84 from collections import defaultdict |
| 80 import cPickle as pickle | 85 import cPickle as pickle |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 261 # Implemented interfaces don't need includes, as this is handled in | 266 # Implemented interfaces don't need includes, as this is handled in |
| 262 # the Blink implementation (they are implemented on |impl| itself, | 267 # the Blink implementation (they are implemented on |impl| itself, |
| 263 # hence header is included in implementing class). | 268 # hence header is included in implementing class). |
| 264 # However, they are needed for legacy implemented interfaces that | 269 # However, they are needed for legacy implemented interfaces that |
| 265 # are being treated as partial interfaces, until we remove these. | 270 # are being treated as partial interfaces, until we remove these. |
| 266 # http://crbug.com/360435 | 271 # http://crbug.com/360435 |
| 267 implemented_interfaces_include_paths = [] | 272 implemented_interfaces_include_paths = [] |
| 268 for implemented_interface_info in implemented_interfaces_info: | 273 for implemented_interface_info in implemented_interfaces_info: |
| 269 if (implemented_interface_info['is_legacy_treat_as_partial_interface
'] and | 274 if (implemented_interface_info['is_legacy_treat_as_partial_interface
'] and |
| 270 implemented_interface_info['include_path']): | 275 implemented_interface_info['include_path']): |
| 271 implemented_interfaces_include_paths.append(implemented_interfac
e_info['include_path']) | 276 implemented_interfaces_include_paths.append( |
| 277 implemented_interface_info['include_path']) |
| 278 |
| 279 dependencies_full_paths = implemented_interfaces_full_paths |
| 280 dependencies_include_paths = implemented_interfaces_include_paths |
| 281 dependencies_other_component_full_paths = [] |
| 282 dependencies_other_component_include_paths = [] |
| 283 |
| 284 component = idl_filename_to_component(interface_info['full_path']) |
| 285 for full_path in partial_interfaces_full_paths: |
| 286 partial_interface_component = idl_filename_to_component(full_path) |
| 287 if component == partial_interface_component: |
| 288 dependencies_full_paths.append(full_path) |
| 289 else: |
| 290 dependencies_other_component_full_paths.append(full_path) |
| 291 |
| 292 for include_path in partial_interfaces_include_paths: |
| 293 partial_interface_component = idl_filename_to_component(include_path
) |
| 294 if component == partial_interface_component: |
| 295 dependencies_include_paths.append(include_path) |
| 296 else: |
| 297 dependencies_other_component_include_paths.append(include_path) |
| 272 | 298 |
| 273 interface_info.update({ | 299 interface_info.update({ |
| 274 'dependencies_full_paths': (partial_interfaces_full_paths + | 300 'dependencies_full_paths': dependencies_full_paths, |
| 275 implemented_interfaces_full_paths), | 301 'dependencies_include_paths': dependencies_include_paths, |
| 276 'dependencies_include_paths': (partial_interfaces_include_paths + | 302 'dependencies_other_component_full_paths': |
| 277 implemented_interfaces_include_paths)
, | 303 dependencies_other_component_full_paths, |
| 304 'dependencies_other_component_include_paths': |
| 305 dependencies_other_component_include_paths, |
| 278 }) | 306 }) |
| 279 | 307 |
| 280 # Clean up temporary private information | 308 # Clean up temporary private information |
| 281 for interface_info in interfaces_info.itervalues(): | 309 for interface_info in interfaces_info.itervalues(): |
| 282 del interface_info['extended_attributes'] | 310 del interface_info['extended_attributes'] |
| 283 del interface_info['is_legacy_treat_as_partial_interface'] | 311 del interface_info['is_legacy_treat_as_partial_interface'] |
| 284 del interface_info['parent'] | 312 del interface_info['parent'] |
| 285 | 313 |
| 286 # Compute global_type_info to interfaces_info so that idl_compiler does | 314 # Compute global_type_info to interfaces_info so that idl_compiler does |
| 287 # not need to always calculate the info in __init__. | 315 # not need to always calculate the info in __init__. |
| 288 compute_global_type_info() | 316 compute_global_type_info() |
| 289 | 317 |
| 290 | 318 |
| 291 ################################################################################ | 319 ################################################################################ |
| 292 | 320 |
| 293 def main(): | 321 def main(): |
| 294 options, args = parse_options() | 322 options, args = parse_options() |
| 295 # args = Input1, Input2, ..., Output | 323 # args = Input1, Input2, ..., Output |
| 296 interfaces_info_filename = args.pop() | 324 interfaces_info_filename = args.pop() |
| 297 info_individuals = read_pickle_files(args) | 325 info_individuals = read_pickle_files(args) |
| 298 | 326 |
| 299 compute_interfaces_info_overall(info_individuals) | 327 compute_interfaces_info_overall(info_individuals) |
| 300 write_pickle_file(interfaces_info_filename, | 328 write_pickle_file(interfaces_info_filename, |
| 301 interfaces_info, | 329 interfaces_info, |
| 302 options.write_file_only_if_changed) | 330 options.write_file_only_if_changed) |
| 303 | 331 |
| 304 | 332 |
| 305 if __name__ == '__main__': | 333 if __name__ == '__main__': |
| 306 sys.exit(main()) | 334 sys.exit(main()) |
| OLD | NEW |