summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/build/protoc_java.py
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/libwebrtc/build/protoc_java.py')
-rwxr-xr-xthird_party/libwebrtc/build/protoc_java.py98
1 files changed, 98 insertions, 0 deletions
diff --git a/third_party/libwebrtc/build/protoc_java.py b/third_party/libwebrtc/build/protoc_java.py
new file mode 100755
index 0000000000..fe602a9fc9
--- /dev/null
+++ b/third_party/libwebrtc/build/protoc_java.py
@@ -0,0 +1,98 @@
+#!/usr/bin/env python
+# Copyright (c) 2012 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 java source files from protobuf files.
+
+This is the action script for the proto_java_library template.
+
+It performs the following steps:
+1. Deletes all old sources (ensures deleted classes are not part of new jars).
+2. Creates source directory.
+3. Generates Java files using protoc (output into either --java-out-dir or
+ --srcjar).
+4. Creates a new stamp file.
+"""
+
+from __future__ import print_function
+
+import argparse
+import os
+import shutil
+import subprocess
+import sys
+
+sys.path.append(os.path.join(os.path.dirname(__file__), 'android', 'gyp'))
+from util import build_utils
+
+
+def _HasJavaPackage(proto_lines):
+ return any(line.strip().startswith('option java_package')
+ for line in proto_lines)
+
+
+def _EnforceJavaPackage(proto_srcs):
+ for proto_path in proto_srcs:
+ with open(proto_path) as in_proto:
+ if not _HasJavaPackage(in_proto.readlines()):
+ raise Exception('Proto files for java must contain a "java_package" '
+ 'line: {}'.format(proto_path))
+
+
+def main(argv):
+ parser = argparse.ArgumentParser()
+ build_utils.AddDepfileOption(parser)
+ parser.add_argument('--protoc', required=True, help='Path to protoc binary.')
+ parser.add_argument('--proto-path',
+ required=True,
+ help='Path to proto directory.')
+ parser.add_argument('--java-out-dir',
+ help='Path to output directory for java files.')
+ parser.add_argument('--srcjar', help='Path to output srcjar.')
+ parser.add_argument('--stamp', help='File to touch on success.')
+ parser.add_argument(
+ '--import-dir',
+ action='append',
+ default=[],
+ help='Extra import directory for protos, can be repeated.')
+ parser.add_argument('protos', nargs='+', help='proto source files')
+ options = parser.parse_args(argv)
+
+ if not options.java_out_dir and not options.srcjar:
+ raise Exception('One of --java-out-dir or --srcjar must be specified.')
+
+ _EnforceJavaPackage(options.protos)
+
+ with build_utils.TempDir() as temp_dir:
+ out_arg = '--java_out=lite:' + temp_dir
+
+ proto_path_args = ['--proto_path', options.proto_path]
+ for path in options.import_dir:
+ proto_path_args += ["--proto_path", path]
+
+ # Generate Java files using protoc.
+ build_utils.CheckOutput(
+ [options.protoc] + proto_path_args + [out_arg] + options.protos,
+ # protoc generates superfluous warnings about LITE_RUNTIME deprecation
+ # even though we are using the new non-deprecated method.
+ stderr_filter=lambda output: build_utils.FilterLines(
+ output, '|'.join([r'optimize_for = LITE_RUNTIME', r'java/lite\.md'])
+ ))
+
+ if options.java_out_dir:
+ build_utils.DeleteDirectory(options.java_out_dir)
+ shutil.copytree(temp_dir, options.java_out_dir)
+ else:
+ build_utils.ZipDir(options.srcjar, temp_dir)
+
+ if options.depfile:
+ assert options.srcjar
+ deps = options.protos + [options.protoc]
+ build_utils.WriteDepfile(options.depfile, options.srcjar, deps)
+
+ if options.stamp:
+ build_utils.Touch(options.stamp)
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv[1:]))