浏览代码

[bazel] Update gtest and deprecate //external:{gtest,gtest_main} (#7237)

This change updates the gtest-version used by Bazel.
Also, `//external:{gtest,gtest_main}` is deprecated so we can remove some
of the uses of the discouraged `bind` function.

RELNOTES[bazel]: Starting with Protobuf 3.13.0, building and running
Protobuf tests requires `@com_google_googletest//:{gtest,gtest_main}`
instead of `//external:{gtest,gtest_main}`. Use
`--@com_google_protobuf//:incompatible_use_com_google_googletest=true`
to verify your workspace is not affected by this change.
Yannic 5 年之前
父节点
当前提交
2e51ad6344
共有 3 个文件被更改,包括 57 次插入11 次删除
  1. 3 0
      .bazelignore
  2. 40 6
      BUILD
  3. 14 5
      WORKSPACE

+ 3 - 0
.bazelignore

@@ -0,0 +1,3 @@
+# These are fetched as external repositories.
+third_party/benchmark
+third_party/googletest

+ 40 - 6
BUILD

@@ -1,5 +1,6 @@
 # Bazel (https://bazel.build/) BUILD file for Protobuf.
 
+load("@bazel_skylib//rules:common_settings.bzl", "string_flag")
 load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test", "objc_library", native_cc_proto_library = "cc_proto_library")
 load("@rules_proto//proto:defs.bzl", "proto_lang_toolchain", "proto_library")
 load("@rules_proto//proto/private:native.bzl", "native_proto_common")
@@ -10,6 +11,42 @@ licenses(["notice"])
 
 exports_files(["LICENSE"])
 
+################################################################################
+# build configuration
+################################################################################
+
+string_flag(
+    name = "incompatible_use_com_google_googletest",
+    # TODO(yannic): Flip to `true` for `3.13.0`.
+    build_setting_default = "false",
+    values = ["true", "false"]
+)
+
+config_setting(
+    name = "use_com_google_googletest",
+    flag_values = {
+        "//:incompatible_use_com_google_googletest": "true"
+    },
+)
+
+GTEST = select({
+    "//:use_com_google_googletest": [
+        "@com_google_googletest//:gtest",
+    ],
+    "//conditions:default": [
+        "//external:gtest",
+    ],
+})
+
+GTEST_MAIN = select({
+    "//:use_com_google_googletest": [
+        "@com_google_googletest//:gtest_main",
+    ],
+    "//conditions:default": [
+        "//external:gtest_main",
+    ],
+})
+
 ################################################################################
 # ZLIB configuration
 ################################################################################
@@ -533,8 +570,7 @@ cc_binary(
     deps = [
         ":protobuf",
         ":protoc_lib",
-        "//external:gtest",
-    ],
+    ] + GTEST,
 )
 
 cc_test(
@@ -546,8 +582,7 @@ cc_test(
     ],
     deps = [
         ":protobuf_lite",
-        "//external:gtest_main",
-    ],
+    ] + GTEST_MAIN,
 )
 
 cc_test(
@@ -650,8 +685,7 @@ cc_test(
         ":cc_test_protos",
         ":protobuf",
         ":protoc_lib",
-        "//external:gtest_main",
-    ] + PROTOBUF_DEPS,
+    ] + PROTOBUF_DEPS + GTEST_MAIN,
 )
 
 ################################################################################

+ 14 - 5
WORKSPACE

@@ -1,13 +1,20 @@
 workspace(name = "com_google_protobuf")
 
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+
 local_repository(
     name = "com_google_protobuf_examples",
     path = "examples",
 )
 
-local_repository(
-    name = "submodule_gmock",
-    path = "third_party/googletest",
+http_archive(
+    name = "com_google_googletest",
+    sha256 = "9dc9157a9a1551ec7a7e43daea9a694a0bb5fb8bec81235d8a1e6ef64c716dcb",
+    strip_prefix = "googletest-release-1.10.0",
+    urls = [
+        "https://mirror.bazel.build/github.com/google/googletest/archive/release-1.10.0.tar.gz",
+        "https://github.com/google/googletest/archive/release-1.10.0.tar.gz",
+    ],
 )
 
 load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
@@ -22,14 +29,16 @@ bind(
     actual = "//util/python:python_headers",
 )
 
+# TODO(yannic): Remove in 3.13.0.
 bind(
     name = "gtest",
-    actual = "@submodule_gmock//:gtest",
+    actual = "@com_google_googletest//:gtest",
 )
 
+# TODO(yannic): Remove in 3.13.0.
 bind(
     name = "gtest_main",
-    actual = "@submodule_gmock//:gtest_main",
+    actual = "@com_google_googletest//:gtest_main",
 )
 
 jvm_maven_import_external(