aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/build_rules
diff options
context:
space:
mode:
authorGravatar Jakob Buchgraber <buchgr@google.com>2017-06-06 11:58:26 -0400
committerGravatar John Cater <jcater@google.com>2017-06-06 12:37:03 -0400
commit6073f1d41a102b70007356d1445c57b7f7533d78 (patch)
tree9ce021a4d4c91ca032946e1dc440159a055a3f1c /tools/build_rules
parentd9223e00c18466bd286a5e400007acb78ddeb9de (diff)
protobuf: Use bazel's native java_proto_library rules.
Additional changes: - Introduce a Skylark macro java_library_srcs that provides the source jars of a java_*_library rule. - Remove bazel's own java_proto_library implementation. Change-Id: I18f2259bc75ca0fb32dcd8a6a857c609bd2c7773 PiperOrigin-RevId: 158146210
Diffstat (limited to 'tools/build_rules')
-rw-r--r--tools/build_rules/genproto.bzl92
-rwxr-xr-xtools/build_rules/gensrcjar.sh83
-rw-r--r--tools/build_rules/utilities.bzl38
3 files changed, 38 insertions, 175 deletions
diff --git a/tools/build_rules/genproto.bzl b/tools/build_rules/genproto.bzl
index 5ccd934122..f935e52b68 100644
--- a/tools/build_rules/genproto.bzl
+++ b/tools/build_rules/genproto.bzl
@@ -17,73 +17,6 @@
proto_filetype = [".proto"]
-def gensrcjar_impl(ctx):
- out = ctx.outputs.srcjar
-
- ctx.action(
- command=' '.join([
- "JAR='%s'" % ctx.executable._jar.path,
- "OUTPUT='%s'" % out.path,
- "PROTO_COMPILER='%s'" % ctx.executable._proto_compiler.path,
- "GRPC_JAVA_PLUGIN='%s'" % ctx.executable.grpc_java_plugin.path if \
- ctx.executable.grpc_java_plugin else "",
- "SOURCE='%s'" % ctx.file.src.path,
- ctx.executable._gensrcjar.path,
- ]),
- inputs=([ctx.file.src] + ctx.files._gensrcjar + ctx.files._jar +
- ctx.files._jdk + ctx.files._proto_compiler +
- ctx.files.grpc_java_plugin),
- outputs=[out],
- mnemonic="GenProtoSrcJar",
- use_default_shell_env=True)
-
- return struct(runfiles=ctx.runfiles(collect_default=True))
-
-gensrcjar = rule(
- gensrcjar_impl,
- attrs = {
- "src": attr.label(
- allow_files = proto_filetype,
- single_file = True,
- ),
- "grpc_java_plugin": attr.label(
- cfg = "host",
- executable = True,
- single_file = True,
- ),
- "_gensrcjar": attr.label(
- default = Label("//tools/build_rules:gensrcjar"),
- cfg = "host",
- executable = True,
- ),
- # TODO(bazel-team): this should be a hidden attribute with a default
- # value, but Skylark needs to support select first.
- "_proto_compiler": attr.label(
- default = Label("//third_party/protobuf:protoc"),
- allow_files = True,
- cfg = "host",
- executable = True,
- single_file = True,
- ),
- "_jar": attr.label(
- default = Label("@bazel_tools//tools/jdk:jar"),
- allow_files = True,
- cfg = "host",
- executable = True,
- single_file = True,
- ),
- # The jdk dependency is required to ensure dependent libraries are found
- # when we invoke jar (see issue #938).
- # TODO(bazel-team): Figure out why we need to pull this in explicitly;
- # the jar dependency above should just do the right thing on its own.
- "_jdk": attr.label(
- default = Label("@bazel_tools//tools/jdk:jdk"),
- allow_files = True,
- ),
- },
- outputs = {"srcjar": "lib%{name}.srcjar"},
-)
-
def cc_grpc_library(name, src):
basename = src[:-len(".proto")]
protoc_label = str(Label("//third_party/protobuf:protoc"))
@@ -107,28 +40,3 @@ def cc_grpc_library(name, src):
deps = [str(Label("//third_party/grpc:grpc++_unsecure"))],
includes = ["."])
-# TODO(bazel-team): support proto => proto dependencies too
-def java_proto_library(name, src, use_grpc_plugin=False):
- grpc_java_plugin = None
- if use_grpc_plugin:
- grpc_java_plugin = str(Label("//third_party/grpc:grpc-java-plugin"))
-
- gensrcjar(name=name + "_srcjar", src=src, grpc_java_plugin=grpc_java_plugin)
- deps = [str(Label("//third_party/protobuf:protobuf_java"))]
- if use_grpc_plugin:
- deps += [
- str(Label("//third_party/grpc:grpc-jar")),
- str(Label("//third_party:guava")),
- ]
- native.java_library(
- name=name,
- srcs=[name + "_srcjar"],
- deps=deps,
- # The generated code has lots of 'rawtypes' warnings.
- javacopts=["-Xlint:-rawtypes"],
-)
-
-def proto_java_library(name, src):
- print("Deprecated: use java_proto_library() instead, proto_java_library " +
- "will be removed in version 0.2.1")
- java_proto_library(name, src)
diff --git a/tools/build_rules/gensrcjar.sh b/tools/build_rules/gensrcjar.sh
deleted file mode 100755
index c1674a3950..0000000000
--- a/tools/build_rules/gensrcjar.sh
+++ /dev/null
@@ -1,83 +0,0 @@
-#! /bin/sh
-# Copyright 2016 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# List of environment variables that must be defined as input.
-#
-# We use environment variables instead of positional arguments or flags for
-# clarity in the caller .bzl file and for simplicity of processing. There is no
-# need to implement a full-blown argument parser for this simple script.
-INPUT_VARS="JAR OUTPUT PREPROCESSOR PROTO_COMPILER SOURCE"
-
-# Now set defaults for optional input variables.
-: "${PREPROCESSOR:=cat}"
-
-# Basename of the script for error reporting purposes.
-PROGRAM_NAME="${0##*/}"
-
-# A timestamp to mark all generated files with to get deterministic JAR outputs.
-TIMESTAMP=198001010000
-
-# Prints an error and exits.
-#
-# Args:
-# ...: list(str). Parts of the message to print; all of them are joined
-# with a single space in between.
-err() {
- echo "${PROGRAM_NAME}: ${*}" 1>&2
- exit 1
-}
-
-# Entry point.
-main() {
- [ ${#} -eq 0 ] || err "No arguments allowed; set the following environment" \
- "variables for configuration instead: ${INPUT_VARS}"
- for var in ${INPUT_VARS}; do
- local value
- eval "value=\"\$${var}\""
- [ -n "${value}" ] || err "Input environment variable ${var} is not set"
- done
-
- rm -f "${OUTPUT}"
-
- local proto_output="${OUTPUT}.proto_output"
- rm -rf "${proto_output}"
- mkdir -p "${proto_output}"
-
- # Apply desired preprocessing to the input proto file. For this to work, we
- # must maintain the name of the original .proto file or else the generated
- # classes in the JAR file would have an invalid name.
- local processed_dir="${OUTPUT}.preprocessed"
- rm -rf "${processed_dir}"
- mkdir -p "${processed_dir}"
- local processed_source="${processed_dir}/$(basename "${SOURCE}")"
- "${PREPROCESSOR}" <"${SOURCE}" >"${processed_source}" \
- || err "Preprocessor ${PREPROCESSOR} failed"
-
- if [ -n "${GRPC_JAVA_PLUGIN}" ]; then
- "${PROTO_COMPILER}" --plugin=protoc-gen-grpc="${GRPC_JAVA_PLUGIN}" \
- --grpc_out="${proto_output}" --java_out="${proto_output}" "${processed_source}" \
- || err "proto_compiler failed"
- else
- "${PROTO_COMPILER}" --java_out="${proto_output}" "${processed_source}" \
- || err "proto_compiler failed"
- fi
- find "${proto_output}" -exec touch -t "${TIMESTAMP}" '{}' \; \
- || err "Failed to reset timestamps"
- "${JAR}" cMf "${OUTPUT}.tmp" -C "${proto_output}" . \
- || err "jar failed"
- mv "${OUTPUT}.tmp" "${OUTPUT}"
-}
-
-main "${@}"
diff --git a/tools/build_rules/utilities.bzl b/tools/build_rules/utilities.bzl
new file mode 100644
index 0000000000..5574c63187
--- /dev/null
+++ b/tools/build_rules/utilities.bzl
@@ -0,0 +1,38 @@
+# Copyright 2017 Google Inc. All Rights Reserved.
+# Copyright 2017 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""This rule exposes the source jar of a java_*_library rule as a label."""
+
+def _java_library_srcs_impl(ctx):
+ if len(ctx.attr.deps) != 1:
+ fail("Only one deps value supported", "deps")
+ dep = ctx.attr.deps[0]
+ return [DefaultInfo(files=depset(dep.java.source_jars))]
+
+
+_java_library_srcs = rule(
+ implementation=_java_library_srcs_impl,
+ attrs={
+ "deps":
+ attr.label_list(
+ mandatory=True,
+ non_empty=True,
+ providers=["java"],)
+ })
+
+
+def java_library_srcs(name, deps, visibility=None, **kwargs):
+ """Provides the source jars generated by a java_*_library rule."""
+ _java_library_srcs(name=name, deps=deps, visibility=visibility, **kwargs)