| 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 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 | 71 |
| 72 Note that all of these are stable information, unlikely to change without | 72 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 | 73 moving or deleting files (hence requiring a full rebuild anyway) or significant |
| 74 code changes (for inherited extended attributes). | 74 code changes (for inherited extended attributes). |
| 75 | 75 |
| 76 FIXME: also generates EventNames.in; factor out. http://crbug.com/341748 | 76 FIXME: also generates EventNames.in; factor out. http://crbug.com/341748 |
| 77 FIXME: also generates InterfaceDependencies.txt for Perl. http://crbug.com/2397
71 | |
| 78 | 77 |
| 79 Design doc: http://www.chromium.org/developers/design-documents/idl-build | 78 Design doc: http://www.chromium.org/developers/design-documents/idl-build |
| 80 """ | 79 """ |
| 81 | 80 |
| 82 import optparse | 81 import optparse |
| 83 import os | 82 import os |
| 84 import posixpath | 83 import posixpath |
| 85 import sys | 84 import sys |
| 86 | 85 |
| 87 from utilities import get_file_contents, write_file, write_pickle_file, get_inte
rface_extended_attributes_from_idl, is_callback_interface_from_idl, get_partial_
interface_name_from_idl, get_implemented_interfaces_from_idl, get_parent_interfa
ce, get_put_forward_interfaces_from_idl | 86 from utilities import get_file_contents, write_file, write_pickle_file, get_inte
rface_extended_attributes_from_idl, is_callback_interface_from_idl, get_partial_
interface_name_from_idl, get_implemented_interfaces_from_idl, get_parent_interfa
ce, get_put_forward_interfaces_from_idl |
| (...skipping 19 matching lines...) Expand all Loading... |
| 107 class IdlInterfaceFileNotFoundError(Exception): | 106 class IdlInterfaceFileNotFoundError(Exception): |
| 108 """Raised if the IDL file implementing an interface cannot be found.""" | 107 """Raised if the IDL file implementing an interface cannot be found.""" |
| 109 pass | 108 pass |
| 110 | 109 |
| 111 | 110 |
| 112 def parse_options(): | 111 def parse_options(): |
| 113 usage = 'Usage: %prog [options] [generated1.idl]...' | 112 usage = 'Usage: %prog [options] [generated1.idl]...' |
| 114 parser = optparse.OptionParser(usage=usage) | 113 parser = optparse.OptionParser(usage=usage) |
| 115 parser.add_option('--event-names-file', help='output file') | 114 parser.add_option('--event-names-file', help='output file') |
| 116 parser.add_option('--idl-files-list', help='file listing IDL files') | 115 parser.add_option('--idl-files-list', help='file listing IDL files') |
| 117 parser.add_option('--interface-dependencies-file', help='output file') | |
| 118 parser.add_option('--interfaces-info-file', help='output pickle file') | 116 parser.add_option('--interfaces-info-file', help='output pickle file') |
| 119 parser.add_option('--write-file-only-if-changed', type='int', help='if true,
do not write an output file if it would be identical to the existing one, which
avoids unnecessary rebuilds in ninja') | 117 parser.add_option('--write-file-only-if-changed', type='int', help='if true,
do not write an output file if it would be identical to the existing one, which
avoids unnecessary rebuilds in ninja') |
| 120 options, args = parser.parse_args() | 118 options, args = parser.parse_args() |
| 121 if options.event_names_file is None: | 119 if options.event_names_file is None: |
| 122 parser.error('Must specify an output file using --event-names-file.') | 120 parser.error('Must specify an output file using --event-names-file.') |
| 123 if options.interface_dependencies_file is None: | |
| 124 parser.error('Must specify an output file using --interface-dependencies
-file.') | |
| 125 if options.interfaces_info_file is None: | 121 if options.interfaces_info_file is None: |
| 126 parser.error('Must specify an output file using --interfaces-info-file.'
) | 122 parser.error('Must specify an output file using --interfaces-info-file.'
) |
| 127 if options.idl_files_list is None: | 123 if options.idl_files_list is None: |
| 128 parser.error('Must specify a file listing IDL files using --idl-files-li
st.') | 124 parser.error('Must specify a file listing IDL files using --idl-files-li
st.') |
| 129 if options.write_file_only_if_changed is None: | 125 if options.write_file_only_if_changed is None: |
| 130 parser.error('Must specify whether file is only written if changed using
--write-file-only-if-changed.') | 126 parser.error('Must specify whether file is only written if changed using
--write-file-only-if-changed.') |
| 131 options.write_file_only_if_changed = bool(options.write_file_only_if_changed
) | 127 options.write_file_only_if_changed = bool(options.write_file_only_if_changed
) |
| 132 return options, args | 128 return options, args |
| 133 | 129 |
| 134 | 130 |
| 135 ################################################################################ | 131 ################################################################################ |
| 136 # Write files | 132 # Write files |
| 137 ################################################################################ | 133 ################################################################################ |
| 138 | 134 |
| 139 def write_dependencies_file(dependencies_filename, only_if_changed): | |
| 140 """Write the interface dependencies file. | |
| 141 | |
| 142 The format is as follows: | |
| 143 | |
| 144 Document.idl P.idl | |
| 145 Event.idl | |
| 146 Window.idl Q.idl R.idl S.idl | |
| 147 ... | |
| 148 | |
| 149 The above indicates that: | |
| 150 Document.idl depends on P.idl, | |
| 151 Event.idl depends on no other IDL files, and | |
| 152 Window.idl depends on Q.idl, R.idl, and S.idl. | |
| 153 | |
| 154 An IDL that is a dependency of another IDL (e.g. P.idl) does not have its | |
| 155 own line in the dependency file. | |
| 156 """ | |
| 157 # FIXME: remove this file once Perl is gone http://crbug.com/239771 | |
| 158 dependencies_list = sorted( | |
| 159 (interface_info['full_path'], sorted(interface_info['dependencies_full_p
aths'])) | |
| 160 for interface_info in interfaces_info.values()) | |
| 161 lines = ['%s %s\n' % (idl_file, ' '.join(dependency_files)) | |
| 162 for idl_file, dependency_files in dependencies_list] | |
| 163 write_file(lines, dependencies_filename, only_if_changed) | |
| 164 | |
| 165 | |
| 166 def write_event_names_file(destination_filename, only_if_changed): | 135 def write_event_names_file(destination_filename, only_if_changed): |
| 167 # Generate event names for all interfaces that inherit from Event, | 136 # Generate event names for all interfaces that inherit from Event, |
| 168 # including Event itself. | 137 # including Event itself. |
| 169 # FIXME: factor out. http://crbug.com/341748 | 138 # FIXME: factor out. http://crbug.com/341748 |
| 170 event_names = set( | 139 event_names = set( |
| 171 interface_name | 140 interface_name |
| 172 for interface_name, interface_info in interfaces_info.iteritems() | 141 for interface_name, interface_info in interfaces_info.iteritems() |
| 173 if (interface_name == 'Event' or | 142 if (interface_name == 'Event' or |
| 174 ('ancestors' in interface_info and | 143 ('ancestors' in interface_info and |
| 175 interface_info['ancestors'][-1] == 'Event'))) | 144 interface_info['ancestors'][-1] == 'Event'))) |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 356 with open(options.idl_files_list) as idl_files_list: | 325 with open(options.idl_files_list) as idl_files_list: |
| 357 idl_files = [line.rstrip('\n') for line in idl_files_list] | 326 idl_files = [line.rstrip('\n') for line in idl_files_list] |
| 358 # Generated IDL files are passed at the command line, since these are in the | 327 # Generated IDL files are passed at the command line, since these are in the |
| 359 # build directory, which is determined at build time, not GYP time, so these | 328 # build directory, which is determined at build time, not GYP time, so these |
| 360 # cannot be included in the file listing static files | 329 # cannot be included in the file listing static files |
| 361 idl_files.extend(args) | 330 idl_files.extend(args) |
| 362 | 331 |
| 363 only_if_changed = options.write_file_only_if_changed | 332 only_if_changed = options.write_file_only_if_changed |
| 364 compute_interfaces_info(idl_files) | 333 compute_interfaces_info(idl_files) |
| 365 write_pickle_file(options.interfaces_info_file, interfaces_info, only_if_cha
nged) | 334 write_pickle_file(options.interfaces_info_file, interfaces_info, only_if_cha
nged) |
| 366 write_dependencies_file(options.interface_dependencies_file, only_if_changed
) | |
| 367 write_event_names_file(options.event_names_file, only_if_changed) | 335 write_event_names_file(options.event_names_file, only_if_changed) |
| 368 | 336 |
| 369 | 337 |
| 370 if __name__ == '__main__': | 338 if __name__ == '__main__': |
| 371 sys.exit(main()) | 339 sys.exit(main()) |
| OLD | NEW |