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

Unified Diff: mojo/public/tools/bindings/pylib/mojom/parse/parser_runner.py

Issue 1700443003: Use the new mojom parser from check_mojom_dart.py. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 10 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/pylib/mojom/parse/parser_runner.py
diff --git a/mojo/public/tools/bindings/pylib/mojom/parse/parser_runner.py b/mojo/public/tools/bindings/pylib/mojom/parse/parser_runner.py
new file mode 100755
index 0000000000000000000000000000000000000000..5c211ad84e0982d371cb84bf9c09b853098513a1
--- /dev/null
+++ b/mojo/public/tools/bindings/pylib/mojom/parse/parser_runner.py
@@ -0,0 +1,127 @@
+#!/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 drives the execution of the Mojom parser."""
+
+import os
+import platform
+import subprocess
+import sys
+
+
+# We assume this script is located in the Mojo SDK in
+# tools/bindings/pylib/mojom/parse.
+THIS_DIR = os.path.abspath(os.path.dirname(__file__))
+SDK_ROOT = os.path.abspath(os.path.join(THIS_DIR, os.pardir, os.pardir,
+ os.pardir, 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"))
+
+from mojom.generate.generated import mojom_files_mojom
+from mojom.generate.generated import mojom_types_mojom
+from mojo_bindings import serialization
+
+def RunParser(sdk_root, file_names, import_directories=None,
+ meta_data_only=False):
+ """Runs the mojom parser. Only 64-bit Linux and Mac is supported.
+
+ Args:
+ sdk_root: {str} Absolute path to the root of the Mojo SDK. The parser
+ binary is expected to be found in
+ <sdk_root>/tools/bindings/mojom_parser/bin/<platform>
+
+ file_names {list of str} Paths to mojom files to be parsed. May be either
+ absolute or relative to the current working directory.
+
+ import_directories: {list of str} Optional specification of import
+ directories where mojom imports should be searched. The elements of the
+ list should be absolute paths or paths relative to the current working
+ directory.
+
+ meta_data_only: {bool} If True then the flag -meta-data-only
+ will be passed to the parser.
+
+ Returns:
+ {str} The serialized mojom_files.MojomFileGraph returned by mojom parser,
+ or None if the mojom parser returned a non-zero error code.
+ """
+ system_dirs = {
+ ("Linux", "64bit"): "linux64",
+ ("Darwin", "64bit"): "mac64",
+ }
+ system = (platform.system(), platform.architecture()[0])
+ if system not in system_dirs:
+ raise Exception("The mojom parser only supports Linux or Mac 64 bits.")
+
+ mojom_parser = os.path.join(sdk_root, "tools", "bindings", "mojom_parser",
+ "bin", system_dirs[system], "mojom_parser")
+
+ if not os.path.exists(mojom_parser):
+ raise Exception(
+ "The mojom parser could not be found at %s. "
+ "You may need to run gclient sync."
+ % mojom_parser)
+
+ cmd = [mojom_parser]
+ if import_directories:
+ cmd.extend(["-I", ",".join(import_directories)])
+ if meta_data_only:
+ cmd.extend(["-meta-data-only"])
+
+ cmd.extend(file_names)
+
+ try:
+ return subprocess.check_output(cmd)
+ except subprocess.CalledProcessError:
+ return None
+
+
+def DeserializeMojomFileGraph(serialized_bytes):
+ """Deserializes a mojom_files.MojomFileGraph.
+
+ Args:
+ serialized_bytes: {str} The serialized mojom_files.MojomFileGraph returned
+ by mojom parser
+ Returns:
+ {mojom_files.MojomFileGraph} The deserialized MojomFileGraph.
+ """
+ data = bytearray(serialized_bytes)
+ context = serialization.RootDeserializationContext(data, [])
+ return mojom_files_mojom.MojomFileGraph.Deserialize(context)
+
+def ParseToMojomFileGraph(sdk_root, file_names, import_directories=None,
+ meta_data_only=False):
+ """Runs the mojom parser and deserializes the result. Only 64-bit Linux and
+ Mac is supported.
+
+ Args:
+ sdk_root: {str} Absolute path to the root of the Mojo SDK. The parser
+ binary is expected to be found in
+ <sdk_root>/tools/bindings/mojom_parser/bin/<platform>
+
+ file_names {list of str} Paths to mojom files to be parsed. May be either
+ absolute or relative to the current working directory.
+
+ import_directories: {list of str} Optional specification of import
+ directories where mojom imports should be searched. The elements of the
+ list should be absolute paths or paths relative to the current working
+ directory.
+
+ meta_data_only: {bool} If True then the flag -meta-data-only
+ will be passed to the parser.
+
+ Returns:
+ {mojom_files.MojomFileGraph} The deserialized MojomFileGraph obtained by
+ deserializing the bytes returned by mojom parser, or None if the mojom
+ parser returned a non-zero error code.
+ """
+ serialized_bytes = RunParser(sdk_root, file_names, import_directories,
+ meta_data_only)
+ if serialized_bytes is None:
+ return None
+ return DeserializeMojomFileGraph(serialized_bytes)
« no previous file with comments | « mojo/public/tools/bindings/mojom_bindings_generator_v2.py ('k') | mojo/public/tools/bindings/run_code_generators.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698