Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(31)

Unified Diff: mojo/public/tools/bindings/run_code_generators.py

Issue 2250183003: Make the fuchsia mojo/public repo the source of truth. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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())
« no previous file with comments | « mojo/public/tools/bindings/pylib/mojom_tests/support/run_bindings_generator.py ('k') | mojo/public/tools/dart_analyze.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698