summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAbseil Team <absl-team@google.com>2024-12-23 21:32:38 (GMT)
committerCopybara-Service <copybara-worker@google.com>2024-12-23 21:33:10 (GMT)
commite54519b09463cec3aea77a1739e02c97ca766da5 (patch)
treef4b844c155953c0f344f65452041453c09f5564b
parentf3c355f9dd382bc2c323be2713e351a578b68c61 (diff)
downloadgoogletest-e54519b09463cec3aea77a1739e02c97ca766da5.zip
googletest-e54519b09463cec3aea77a1739e02c97ca766da5.tar.gz
googletest-e54519b09463cec3aea77a1739e02c97ca766da5.tar.bz2
Put the fake Fuchsia SDK in a module extension
This allows users to override the fake SDK with a real one using https://bazel.build/rules/lib/globals/module#override_repo. Without this change, it is impossible for a project that depends on googletest as a `bazel_dep` to build tests using the "real" Fuchsia SDK, because any references to `@fuchsia_sdk` within googletest `BUILD.bazel` files unconditionally resolve to the "fake" Fuchsia SDK. With this change, if you have the real Fuchsia SDK declared in your `MODULE.bazel`, you can add the following lines to coerce googletest to use the real Fuchsia SDK as well: fake_fuchsia_sdk_extension = use_extension("@com_google_googletest//:fake_fuchsia_sdk.bzl", "fuchsia_sdk") override_repo(fake_fuchsia_sdk_extension, "fuchsia_sdk") PiperOrigin-RevId: 709139784 Change-Id: I4d10d441c76b7a2481f15723a24f11525dba3878
-rw-r--r--MODULE.bazel45
-rw-r--r--fake_fuchsia_sdk.bzl36
2 files changed, 59 insertions, 22 deletions
diff --git a/MODULE.bazel b/MODULE.bazel
index c9a52e0..e213d43 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -39,29 +39,38 @@ module(
# Only direct dependencies need to be listed below.
# Please keep the versions in sync with the versions in the WORKSPACE file.
-bazel_dep(name = "abseil-cpp",
- version = "20240116.2")
-
-bazel_dep(name = "platforms",
- version = "0.0.10")
-
-bazel_dep(name = "re2",
- version = "2024-07-02")
+bazel_dep(
+ name = "abseil-cpp",
+ version = "20240116.2",
+)
+bazel_dep(
+ name = "platforms",
+ version = "0.0.10",
+)
+bazel_dep(
+ name = "re2",
+ version = "2024-07-02",
+)
-bazel_dep(name = "rules_python",
- version = "0.34.0",
- dev_dependency = True)
+bazel_dep(
+ name = "rules_python",
+ version = "0.34.0",
+ dev_dependency = True,
+)
# https://rules-python.readthedocs.io/en/stable/toolchains.html#library-modules-with-dev-only-python-usage
python = use_extension(
"@rules_python//python/extensions:python.bzl",
"python",
- dev_dependency = True
+ dev_dependency = True,
+)
+python.toolchain(
+ ignore_root_user_error = True,
+ is_default = True,
+ python_version = "3.12",
)
-python.toolchain(python_version = "3.12",
- is_default = True,
- ignore_root_user_error = True)
-
-fake_fuchsia_sdk = use_repo_rule("//:fake_fuchsia_sdk.bzl", "fake_fuchsia_sdk")
-fake_fuchsia_sdk(name = "fuchsia_sdk")
+# See fake_fuchsia_sdk.bzl for instructions on how to override this with a real SDK, if needed.
+fuchsia_sdk = use_extension("//:fake_fuchsia_sdk.bzl", "fuchsia_sdk")
+fuchsia_sdk.create_fake()
+use_repo(fuchsia_sdk, "fuchsia_sdk")
diff --git a/fake_fuchsia_sdk.bzl b/fake_fuchsia_sdk.bzl
index 2024dc6..bc5b927 100644
--- a/fake_fuchsia_sdk.bzl
+++ b/fake_fuchsia_sdk.bzl
@@ -1,10 +1,20 @@
"""Provides a fake @fuchsia_sdk implementation that's used when the real one isn't available.
-This is needed since bazel queries on targets that depend on //:gtest (eg:
-`bazel query "deps(set(//googletest/test:gtest_all_test))"`) will fail if @fuchsia_sdk is not
-defined when bazel is evaluating the transitive closure of the query target.
+GoogleTest can be used with the [Fuchsia](https://fuchsia.dev/) SDK. However,
+because the Fuchsia SDK does not yet support bzlmod, GoogleTest's `MODULE.bazel`
+file by default provides a "fake" Fuchsia SDK.
-See https://github.com/google/googletest/issues/4472.
+To override this and use the real Fuchsia SDK, you can add the following to your
+project's `MODULE.bazel` file:
+
+ fake_fuchsia_sdk_extension =
+ use_extension("@com_google_googletest//:fake_fuchsia_sdk.bzl", "fuchsia_sdk")
+ override_repo(fake_fuchsia_sdk_extension, "fuchsia_sdk")
+
+NOTE: The `override_repo` built-in is only available in Bazel 8.0 and higher.
+
+See https://github.com/google/googletest/issues/4472 for more details of why the
+fake Fuchsia SDK is needed.
"""
def _fake_fuchsia_sdk_impl(repo_ctx):
@@ -31,3 +41,21 @@ fake_fuchsia_sdk = repository_rule(
),
},
)
+
+_create_fake = tag_class()
+
+def _fuchsia_sdk_impl(module_ctx):
+ create_fake_sdk = False
+ for mod in module_ctx.modules:
+ for _ in mod.tags.create_fake:
+ create_fake_sdk = True
+
+ if create_fake_sdk:
+ fake_fuchsia_sdk(name = "fuchsia_sdk")
+
+ return module_ctx.extension_metadata(reproducible = True)
+
+fuchsia_sdk = module_extension(
+ implementation = _fuchsia_sdk_impl,
+ tag_classes = {"create_fake": _create_fake},
+)