From c0d649e45d01346ead79a172d6a26e1a2d9be4ea Mon Sep 17 00:00:00 2001 From: Yannic Bonenberger Date: Fri, 21 Feb 2020 14:39:54 +0100 Subject: [PATCH] [bazel] Update gtest and deprecate //external:{gtest,gtest_main} 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. --- .bazelignore | 3 +++ BUILD | 46 ++++++++++++++++++++++++++++++++++++++++------ WORKSPACE | 19 ++++++++++++++----- 3 files changed, 57 insertions(+), 11 deletions(-) create mode 100644 .bazelignore diff --git a/.bazelignore b/.bazelignore new file mode 100644 index 000000000000..201f851370eb --- /dev/null +++ b/.bazelignore @@ -0,0 +1,3 @@ +# These are fetched as external repositories. +third_party/benchmark +third_party/googletest diff --git a/BUILD b/BUILD index c45fc455b17a..f7cf3e9dd25b 100644 --- a/BUILD +++ b/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, ) ################################################################################ diff --git a/WORKSPACE b/WORKSPACE index 39672c88280c..cb16ae882c12 100644 --- a/WORKSPACE +++ b/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(