| #!/usr/bin/python |
| # Copyright 2014 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Generate initPartialInterfacesInModules(), which registers partial interfaces in modules to core interfaces.""" |
| |
| # pylint: disable=relative-import |
| |
| from optparse import OptionParser |
| import os |
| import posixpath |
| import sys |
| |
| from utilities import get_file_contents |
| from utilities import idl_filename_to_interface_name |
| from utilities import read_idl_files_list_from_file |
| from utilities import should_generate_impl_file_from_idl |
| from utilities import write_file |
| |
| |
| _COPYRIGHT = """// Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| """ |
| |
| _INIT_PARTIAL_INTERFACE = """%s |
| %s |
| |
| namespace blink { |
| |
| void initPartialInterfacesInModules() { |
| %s |
| } |
| |
| } // namespace blink |
| """ |
| |
| |
| def parse_options(): |
| usage = 'Usage: %prog [options]' |
| parser = OptionParser(usage=usage) |
| parser.add_option('--idl-files-list', help="a text file containing the IDL file paths, so the command line doesn't exceed OS length limits.") |
| parser.add_option('--gyp-format-list', default=False, action='store_true', help="if specified, idl-files-list is newline separated. When unspecified, it's formatted as a Posix command line.") |
| parser.add_option('--output') |
| |
| options, args = parser.parse_args() |
| if options.output is None: |
| parser.error('Must specify output file using --output.') |
| if options.idl_files_list is None: |
| parser.error('Must specify a list of IDL files using --idl-files-list.') |
| return options |
| |
| |
| def extract_meta_data(file_paths): |
| """Extracts interface name from each IDL file.""" |
| meta_data_list = [] |
| |
| for file_path in file_paths: |
| if not file_path.endswith('.idl'): |
| print 'WARNING: non-IDL file passed: "%s"' % file_path |
| continue |
| if not os.path.exists(file_path): |
| print 'WARNING: file not found: "%s"' % file_path |
| continue |
| |
| idl_file_contents = get_file_contents(file_path) |
| if not should_generate_impl_file_from_idl(idl_file_contents): |
| continue |
| |
| # Extract interface name from file name |
| interface_name = idl_filename_to_interface_name(file_path) |
| |
| meta_data = { |
| 'name': interface_name, |
| } |
| meta_data_list.append(meta_data) |
| |
| return meta_data_list |
| |
| |
| def main(): |
| options = parse_options() |
| |
| idl_file_names = read_idl_files_list_from_file(options.idl_files_list, is_gyp_format=options.gyp_format_list) |
| |
| meta_data_list = extract_meta_data(idl_file_names) |
| interface_names = ['V8%sPartial' % meta_data['name'] |
| for meta_data in meta_data_list] |
| interface_names.sort() |
| |
| includes = ['#include "bindings/modules/v8/%s.h"' % interface_name |
| for interface_name in interface_names] |
| initialize_calls = [' %s::initialize();' % interface_name |
| for interface_name in interface_names] |
| |
| content = _INIT_PARTIAL_INTERFACE % ( |
| _COPYRIGHT, |
| '\n'.join(includes), |
| '\n'.join(initialize_calls)) |
| |
| write_file(content, options.output) |
| |
| |
| if __name__ == '__main__': |
| sys.exit(main()) |