blob: 25a97f8c0cb5c2201f4860906b0d64f891c0b165 [file] [log] [blame]
#!/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."""
import cPickle as pickle
from optparse import OptionParser
import os
import posixpath
import sys
from utilities import write_file
from aggregate_generated_bindings import extract_meta_data
from utilities import read_idl_files_list_from_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
#include "config.h"
%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('--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')
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.')
if options.write_file_only_if_changed is None:
parser.error('Must specify whether file is only written if changed using --write-file-only-if-changed.')
options.write_file_only_if_changed = bool(options.write_file_only_if_changed)
return options
def main():
options = parse_options()
idl_file_names = read_idl_files_list_from_file(options.idl_files_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,
only_if_changed=options.write_file_only_if_changed)
if __name__ == '__main__':
sys.exit(main())