[bazel] Fix blacklisted_protos in cc_toolchain and add test (#7075)

pull/7101/head
Yannic 5 years ago committed by Rafi Kamal
parent 2d9b1788e7
commit 948740bc9d
  1. 16
      BUILD
  2. 5
      WORKSPACE
  3. 38
      cc_proto_blacklist_test.bzl
  4. 5
      kokoro/linux/bazel/build.sh
  5. 8
      protobuf_deps.bzl

16
BUILD

@ -1,10 +1,11 @@
# Bazel (https://bazel.build/) BUILD file for Protobuf.
load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test", "objc_library")
load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test", "objc_library", native_cc_proto_library = "cc_proto_library")
load("@rules_java//java:defs.bzl", "java_library")
load("@rules_proto//proto:defs.bzl", "proto_lang_toolchain", "proto_library")
load("@rules_proto//proto/private:native.bzl", "native_proto_common")
load("@rules_python//python:defs.bzl", "py_library")
load(":cc_proto_blacklist_test.bzl", "cc_proto_blacklist_test")
licenses(["notice"])
@ -315,6 +316,17 @@ cc_proto_library(
deps = [dep + "_proto" for dep in proto[1][1]],
) for proto in WELL_KNOWN_PROTO_MAP.items()]
[native_cc_proto_library(
name = proto + "_cc_proto",
deps = [proto + "_proto"],
visibility = ["//visibility:private"],
) for proto in WELL_KNOWN_PROTO_MAP.keys()]
cc_proto_blacklist_test(
name = "cc_proto_blacklist_test",
deps = [proto + "_cc_proto" for proto in WELL_KNOWN_PROTO_MAP.keys()]
)
################################################################################
# Protocol Buffers Compiler
################################################################################
@ -989,7 +1001,7 @@ cc_library(
# Note: We use `native_proto_common` here because we depend on an implementation-detail of
# `proto_lang_toolchain`, which may not be available on `proto_common`.
reject_blacklisted_files = not hasattr(native_proto_common, "proto_lang_toolchain_rejects_files_do_not_use_or_we_will_break_you_without_mercy")
reject_blacklisted_files = hasattr(native_proto_common, "proto_lang_toolchain_rejects_files_do_not_use_or_we_will_break_you_without_mercy")
cc_toolchain_blacklisted_protos = [proto + "_proto" for proto in WELL_KNOWN_PROTO_MAP.keys()] if reject_blacklisted_files else [":well_known_protos"]
proto_lang_toolchain(
name = "cc_toolchain",

@ -76,3 +76,8 @@ bind(
name = "error_prone_annotations",
actual = "@error_prone_annotations_maven//jar",
)
# For `cc_proto_blacklist_test`.
load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")
bazel_skylib_workspace()

@ -0,0 +1,38 @@
"""Contains a unittest to verify that `cc_proto_library` does not generate code for blacklisted `.proto` sources (i.e. WKPs)."""
load("@bazel_skylib//lib:unittest.bzl", "asserts", "unittest")
def _cc_proto_blacklist_test_impl(ctx):
"""Verifies that there are no C++ compile actions for Well-Known-Protos.
Args:
ctx: The rule context.
Returns: A (not further specified) sequence of providers.
"""
env = unittest.begin(ctx)
for dep in ctx.attr.deps:
files = len(dep.files.to_list())
asserts.equals(
env,
0,
files,
"Expected that target '{}' does not provide files, got {}".format(
dep.label,
files,
),
)
return unittest.end(env)
cc_proto_blacklist_test = unittest.make(
impl = _cc_proto_blacklist_test_impl,
attrs = {
"deps": attr.label_list(
mandatory = True,
providers = [CcInfo],
),
},
)

@ -23,7 +23,10 @@ cd $(dirname $0)/../../..
git submodule update --init --recursive
trap print_test_logs EXIT
bazel test :build_files_updated_unittest :protobuf_test --copt=-Werror --host_copt=-Werror
bazel test --copt=-Werror --host_copt=-Werror \
//:build_files_updated_unittest \
//:protobuf_test \
@com_google_protobuf//:cc_proto_blacklist_test
trap - EXIT
cd examples

@ -8,9 +8,11 @@ def protobuf_deps():
if not native.existing_rule("bazel_skylib"):
http_archive(
name = "bazel_skylib",
sha256 = "bbccf674aa441c266df9894182d80de104cabd19be98be002f6d478aaa31574d",
strip_prefix = "bazel-skylib-2169ae1c374aab4a09aa90e65efe1a3aad4e279b",
urls = ["https://github.com/bazelbuild/bazel-skylib/archive/2169ae1c374aab4a09aa90e65efe1a3aad4e279b.tar.gz"],
sha256 = "97e70364e9249702246c0e9444bccdc4b847bed1eb03c5a3ece4f83dfe6abc44",
urls = [
"https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.0.2/bazel-skylib-1.0.2.tar.gz",
"https://github.com/bazelbuild/bazel-skylib/releases/download/1.0.2/bazel-skylib-1.0.2.tar.gz",
],
)
if not native.existing_rule("zlib"):

Loading…
Cancel
Save