From a753371f05dd116df3f27a18eb6e08e1ed0c1b4f Mon Sep 17 00:00:00 2001
From: Craig Tiller <ctiller@google.com>
Date: Tue, 16 May 2017 13:09:33 -0700
Subject: [PATCH] Rework well_known_protos attr, and some other fixes

---
 bazel/cc_grpc_library.bzl   |  5 ++---
 bazel/generate_cc.bzl       |  8 +++++++-
 bazel/grpc_build_system.bzl |  2 +-
 examples/BUILD              |  2 ++
 src/proto/grpc/status/BUILD |  2 +-
 test/cpp/interop/BUILD      | 18 +++++++++++++-----
 test/cpp/util/BUILD         | 14 +++++++++-----
 tools/grpcz/BUILD           |  4 ++--
 8 files changed, 37 insertions(+), 18 deletions(-)

diff --git a/bazel/cc_grpc_library.bzl b/bazel/cc_grpc_library.bzl
index 0600bb9e30..afc5543795 100644
--- a/bazel/cc_grpc_library.bzl
+++ b/bazel/cc_grpc_library.bzl
@@ -12,9 +12,8 @@ def cc_grpc_library(name, srcs, deps, proto_only, well_known_protos, generate_mo
       srcs: a single proto_library, which wraps the .proto files with services.
       deps: a list of C++ proto_library (or cc_proto_library) which provides
         the compiled code of any message that the services depend on.
-      well_known_protos: The target from protobuf library that exports well
-        known protos. Currently it will only work if the value is
-        "@com_google_protobuf//:well_known_protos"
+      well_known_protos: Should this library additionally depend on well known
+        protos
       use_external: When True the grpc deps are prefixed with //external. This
         allows grpc to be used as a dependency in other bazel projects.
       generate_mock: When true GMOCk code for client stub is generated.
diff --git a/bazel/generate_cc.bzl b/bazel/generate_cc.bzl
index d05509fc15..7fffb58218 100644
--- a/bazel/generate_cc.bzl
+++ b/bazel/generate_cc.bzl
@@ -57,7 +57,7 @@ def generate_cc_impl(ctx):
 
   return struct(files=set(out_files))
 
-generate_cc = rule(
+_generate_cc = rule(
     attrs = {
         "srcs": attr.label_list(
             mandatory = True,
@@ -90,3 +90,9 @@ generate_cc = rule(
     output_to_genfiles = True,
     implementation = generate_cc_impl,
 )
+
+def generate_cc(well_known_protos, **kwargs):
+  if well_known_protos:
+    _generate_cc(well_known_protos="@com_google_protobuf//:well_known_protos", **kwargs)
+  else:
+    _generate_cc(**kwargs)
diff --git a/bazel/grpc_build_system.bzl b/bazel/grpc_build_system.bzl
index 0f66edbcd0..b19c85c962 100644
--- a/bazel/grpc_build_system.bzl
+++ b/bazel/grpc_build_system.bzl
@@ -67,7 +67,7 @@ def grpc_proto_plugin(name, srcs = [], deps = []):
 
 load("//:bazel/cc_grpc_library.bzl", "cc_grpc_library")
 
-def grpc_proto_library(name, srcs = [], deps = [], well_known_protos = None,
+def grpc_proto_library(name, srcs = [], deps = [], well_known_protos = False,
                        has_services = True, use_external = False, generate_mock = False):
   cc_grpc_library(
     name = name,
diff --git a/examples/BUILD b/examples/BUILD
index bd2d3c3150..33131346ac 100644
--- a/examples/BUILD
+++ b/examples/BUILD
@@ -27,6 +27,8 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+licenses(["notice"])  # 3-clause BSD
+
 package(default_visibility = ["//visibility:public"])
 
 load("//bazel:grpc_build_system.bzl", "grpc_proto_library")
diff --git a/src/proto/grpc/status/BUILD b/src/proto/grpc/status/BUILD
index 71363bd1b6..a93bfac419 100644
--- a/src/proto/grpc/status/BUILD
+++ b/src/proto/grpc/status/BUILD
@@ -37,5 +37,5 @@ grpc_proto_library(
     name = "status_proto",
     srcs = ["status.proto"],
     has_services = False,
-    well_known_protos = "@com_google_protobuf//:well_known_protos",
+    well_known_protos = True,
 )
diff --git a/test/cpp/interop/BUILD b/test/cpp/interop/BUILD
index 1a3e8d916f..04c3489adc 100644
--- a/test/cpp/interop/BUILD
+++ b/test/cpp/interop/BUILD
@@ -29,8 +29,11 @@
 
 licenses(["notice"])  # 3-clause BSD
 
-cc_library(
+load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary")
+
+grpc_cc_library(
     name = "server_helper_lib",
+    language = "c++",
     srcs = [
         "server_helper.cc",
     ],
@@ -39,12 +42,15 @@ cc_library(
     ],
     deps = [
         "//test/cpp/util:test_util",
-        "//external:gflags",
+    ],
+    external_deps = [
+        "gflags",
     ],
 )
 
-cc_binary(
+grpc_cc_binary(
     name = "interop_server",
+    language = "c++",
     srcs = [
         "interop_server.cc",
         "interop_server_bootstrap.cc",
@@ -59,8 +65,9 @@ cc_binary(
     ],
 )
 
-cc_library(
+grpc_cc_library(
     name = "client_helper_lib",
+    language = "c++",
     srcs = [
         "client_helper.cc",
         "interop_client.cc",
@@ -79,8 +86,9 @@ cc_library(
     ],
 )
 
-cc_binary(
+grpc_cc_binary(
     name = "interop_client",
+    language = "c++",
     srcs = [
         "client.cc",
     ],
diff --git a/test/cpp/util/BUILD b/test/cpp/util/BUILD
index 453e9b6c0f..9e4701b179 100644
--- a/test/cpp/util/BUILD
+++ b/test/cpp/util/BUILD
@@ -29,7 +29,7 @@
 
 licenses(["notice"])  # 3-clause BSD
 
-load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_binary")
+load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_binary", "grpc_cc_test")
 
 package(default_visibility = ["//visibility:public"])
 
@@ -141,19 +141,21 @@ grpc_cc_library(
     ],
 )
 
-cc_test(
+grpc_cc_test(
     name = "error_details_test",
     srcs = [
         "error_details_test.cc",
     ],
     deps = [
         "//:grpc++_error_details",
-        "//external:gtest",
         "//src/proto/grpc/testing:echo_messages_proto",
     ],
+    external_deps = [
+        "gtest",
+    ],
 )
 
-cc_binary(
+grpc_cc_binary(
     name = "grpc_cli",
     srcs = [
         "cli_call.cc",
@@ -175,7 +177,9 @@ cc_binary(
     ],
     deps = [
         "//:grpc++",
-        "//external:gflags",
         "//src/proto/grpc/reflection/v1alpha:reflection_proto",
     ],
+    external_deps = [
+        "gflags",
+    ],
 )
diff --git a/tools/grpcz/BUILD b/tools/grpcz/BUILD
index cc887a5375..fbd01cbf9a 100644
--- a/tools/grpcz/BUILD
+++ b/tools/grpcz/BUILD
@@ -38,7 +38,7 @@ grpc_proto_library(
     srcs = [
         "monitoring.proto",
     ],
-    well_known_protos = "@com_google_protobuf//:well_known_protos",
+    well_known_protos = True,
     deps = [
         ":census_proto",
     ],
@@ -49,7 +49,7 @@ grpc_proto_library(
     srcs = [
         "census.proto",
     ],
-    well_known_protos = "@com_google_protobuf//:well_known_protos",
+    well_known_protos = True,
 )
 
 cc_binary(
-- 
GitLab