| Index: mojo/public/tools/bindings/run_code_generators.py
|
| diff --git a/mojo/public/tools/bindings/run_code_generators.py b/mojo/public/tools/bindings/run_code_generators.py
|
| deleted file mode 100755
|
| index 7d8e5f1db7cd4f006e6376341d0542c1e28dc443..0000000000000000000000000000000000000000
|
| --- a/mojo/public/tools/bindings/run_code_generators.py
|
| +++ /dev/null
|
| @@ -1,185 +0,0 @@
|
| -#!/usr/bin/env python
|
| -# Copyright 2015 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.
|
| -#
|
| -# This script accepts the output of the mojom parser and uses that
|
| -# data to invoke the code generators.
|
| -
|
| -import argparse
|
| -import imp
|
| -import os
|
| -import sys
|
| -
|
| -
|
| -def _ParseCLIArgs():
|
| - """Parses the command line arguments.
|
| -
|
| - Returns:
|
| - tuple<Namespace, list<str>> The first value of the tuple is a Namespace
|
| - holding the value of the optional args. The second value of the tuple is
|
| - a list of the remaining arguments.
|
| - """
|
| - parser = argparse.ArgumentParser(
|
| - description='Generate bindings from mojom parser output.')
|
| - parser.add_argument('filenames', nargs='*',
|
| - help='Filter on the set of .mojom files for which code '
|
| - 'will be generated.')
|
| - parser.add_argument('-f', '--file-graph', dest='file_graph',
|
| - help='Location of the parser output. "-" for stdin. '
|
| - '(default "-")', default='-')
|
| - parser.add_argument("-o", "--output-dir", dest="output_dir", default=".",
|
| - help="output directory for generated files")
|
| - parser.add_argument("-g", "--generators", dest="generators_string",
|
| - metavar="GENERATORS",
|
| - default="c++,dart,javascript,java,python",
|
| - help="comma-separated list of generators")
|
| - parser.add_argument("-s", "--src-root-path", dest="src_root_path",
|
| - default=".",
|
| - help="relative path to the root of the source tree.")
|
| - parser.add_argument("--no-gen-imports", action="store_true",
|
| - help="Generate code only for the files that are "
|
| - "specified on the command line. By default, code "
|
| - "is generated for all specified files and their "
|
| - "transitive imports.")
|
| - parser.add_argument("--generate-type-info", dest="generate_type_info",
|
| - action="store_true",
|
| - help="generate mojom type descriptors")
|
| - parser.set_defaults(generate_type_info=False)
|
| -
|
| - return parser.parse_known_args()
|
| -
|
| -# We assume this script is located in the Mojo SDK in tools/bindings.
|
| -# If __file__ is a link, we look for the real location of the script.
|
| -BINDINGS_DIR = os.path.dirname(os.path.realpath(os.path.abspath(__file__)))
|
| -SDK_ROOT = os.path.abspath(os.path.join(BINDINGS_DIR, os.pardir, os.pardir))
|
| -PYTHON_SDK_DIR = os.path.abspath(os.path.join(SDK_ROOT, "python"))
|
| -
|
| -sys.path.insert(0, PYTHON_SDK_DIR)
|
| -# In order to use mojom_files_mojom we need to make sure the dummy mojo_system
|
| -# can be found on the python path.
|
| -sys.path.insert(0, os.path.join(PYTHON_SDK_DIR, "dummy_mojo_system"))
|
| -
|
| -sys.path.insert(0, os.path.join(BINDINGS_DIR, "pylib"))
|
| -
|
| -
|
| -from mojom.generate.generated import mojom_files_mojom
|
| -from mojom.generate import mojom_translator
|
| -from mojom.parse import parser_runner
|
| -from mojo_bindings import serialization
|
| -
|
| -
|
| -def LoadGenerators(generators_string):
|
| - if not generators_string:
|
| - return [] # No generators.
|
| -
|
| - generators_dir = os.path.join(BINDINGS_DIR, "generators")
|
| - generators = []
|
| - for generator_name in [s.strip() for s in generators_string.split(",")]:
|
| - generator_name_lower = generator_name.lower()
|
| - # "Built-in" generators:
|
| - if generator_name_lower == "c++":
|
| - generator_py_name = os.path.join(generators_dir,
|
| - "mojom_cpp_generator.py")
|
| - elif generator_name_lower == "dart":
|
| - generator_py_name = os.path.join(generators_dir,
|
| - "mojom_dart_generator.py")
|
| - elif generator_name_lower == "go":
|
| - generator_py_name = os.path.join(generators_dir,
|
| - "mojom_go_generator.py")
|
| - elif generator_name_lower == "javascript":
|
| - generator_py_name = os.path.join(generators_dir,
|
| - "mojom_js_generator.py")
|
| - elif generator_name_lower == "java":
|
| - generator_py_name = os.path.join(generators_dir,
|
| - "mojom_java_generator.py")
|
| - elif generator_name_lower == "python":
|
| - generator_py_name = os.path.join(generators_dir,
|
| - "mojom_python_generator.py")
|
| - # Specified generator python module:
|
| - elif generator_name.endswith(".py"):
|
| - generator_py_name = generator_name
|
| - else:
|
| - print "Unknown generator name %s" % generator_name
|
| - sys.exit(1)
|
| - generator_module = imp.load_source(os.path.basename(generator_py_name)[:-3],
|
| - generator_py_name)
|
| - generators.append(generator_module)
|
| - return generators
|
| -
|
| -
|
| -def ReadMojomFileGraphFromFile(fp):
|
| - """Reads a mojom_files_mojom.MojomFileGraph from a file.
|
| -
|
| - Args:
|
| - fp: A file pointer from which a serialized mojom_fileS_mojom.MojomFileGraph
|
| - can be read.
|
| -
|
| - Returns:
|
| - The mojom_files_mojom.MojomFileGraph that was deserialized from the file.
|
| - """
|
| - return parser_runner.DeserializeMojomFileGraph(fp.read())
|
| -
|
| -def FixModulePath(module, abs_src_root_path):
|
| - """Fix the path attribute of the provided module and its imports.
|
| -
|
| - The path provided for the various modules is the absolute path to the mojom
|
| - file which the module represents. But the generators expect the path to be
|
| - relative to the root of the source tree.
|
| -
|
| - Args:
|
| - module: {module.Module} whose path is to be updated.
|
| - abs_src_root_path: {str} absolute path to the root of the source tree.
|
| - """
|
| - module.path = os.path.relpath(module.path, abs_src_root_path)
|
| - if not hasattr(module, 'imports'):
|
| - return
|
| - for import_dict in module.imports:
|
| - FixModulePath(import_dict['module'], abs_src_root_path)
|
| -
|
| -
|
| -def main():
|
| - args, remaining_args = _ParseCLIArgs()
|
| -
|
| - if args.file_graph == '-':
|
| - fp = sys.stdin
|
| - else:
|
| - fp = open(args.file_graph)
|
| -
|
| - mojom_file_graph = ReadMojomFileGraphFromFile(fp)
|
| - mojom_modules = mojom_translator.TranslateFileGraph(mojom_file_graph)
|
| -
|
| - # Note that we are using the word "module" in two unrelated ways here.
|
| - # A mojom module is the Python data structure defined in module.py that
|
| - # represents a Mojom file (sometimes referred to as a Mojom module.)
|
| - # A generator module is a Python module in the sense of the entity the Python
|
| - # runtime loads corresponding to a .py file.
|
| - generator_modules = LoadGenerators(args.generators_string)
|
| -
|
| - abs_src_root_path = os.path.abspath(args.src_root_path)
|
| - for _, mojom_module in mojom_modules.iteritems():
|
| - # If --no-gen-imports is specified then skip the code generation step for
|
| - # any modules that do not have the |specified_name| field set. This field
|
| - # being set indicates that the module was translated from a .mojom file
|
| - # whose name was explicitly requested during parsing. Otherwise the module
|
| - # is included only becuase of a mojom import statement.
|
| - if args.no_gen_imports and not mojom_module.specified_name:
|
| - continue
|
| - FixModulePath(mojom_module, abs_src_root_path)
|
| - for generator_module in generator_modules:
|
| - generator = generator_module.Generator(mojom_module, args.output_dir)
|
| -
|
| - # Look at unparsed args for generator-specific args.
|
| - filtered_args = []
|
| - if hasattr(generator_module, 'GENERATOR_PREFIX'):
|
| - prefix = '--' + generator_module.GENERATOR_PREFIX + '_'
|
| - filtered_args = [arg for arg in remaining_args
|
| - if arg.startswith(prefix)]
|
| - if args.generate_type_info:
|
| - filtered_args.append("--generate_type_info")
|
| -
|
| - generator.GenerateFiles(filtered_args)
|
| -
|
| -
|
| -if __name__ == "__main__":
|
| - sys.exit(main())
|
|
|