mirror of
https://github.com/google/googletest.git
synced 2024-12-26 09:31:02 +08:00
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
This commit is contained in:
parent
f3c355f9dd
commit
e54519b094
43
MODULE.bazel
43
MODULE.bazel
@ -39,29 +39,38 @@ module(
|
|||||||
# Only direct dependencies need to be listed below.
|
# Only direct dependencies need to be listed below.
|
||||||
# Please keep the versions in sync with the versions in the WORKSPACE file.
|
# Please keep the versions in sync with the versions in the WORKSPACE file.
|
||||||
|
|
||||||
bazel_dep(name = "abseil-cpp",
|
bazel_dep(
|
||||||
version = "20240116.2")
|
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 = "platforms",
|
bazel_dep(
|
||||||
version = "0.0.10")
|
name = "rules_python",
|
||||||
|
|
||||||
bazel_dep(name = "re2",
|
|
||||||
version = "2024-07-02")
|
|
||||||
|
|
||||||
bazel_dep(name = "rules_python",
|
|
||||||
version = "0.34.0",
|
version = "0.34.0",
|
||||||
dev_dependency = True)
|
dev_dependency = True,
|
||||||
|
)
|
||||||
|
|
||||||
# https://rules-python.readthedocs.io/en/stable/toolchains.html#library-modules-with-dev-only-python-usage
|
# https://rules-python.readthedocs.io/en/stable/toolchains.html#library-modules-with-dev-only-python-usage
|
||||||
python = use_extension(
|
python = use_extension(
|
||||||
"@rules_python//python/extensions:python.bzl",
|
"@rules_python//python/extensions:python.bzl",
|
||||||
"python",
|
"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",
|
# See fake_fuchsia_sdk.bzl for instructions on how to override this with a real SDK, if needed.
|
||||||
is_default = True,
|
fuchsia_sdk = use_extension("//:fake_fuchsia_sdk.bzl", "fuchsia_sdk")
|
||||||
ignore_root_user_error = True)
|
fuchsia_sdk.create_fake()
|
||||||
|
use_repo(fuchsia_sdk, "fuchsia_sdk")
|
||||||
fake_fuchsia_sdk = use_repo_rule("//:fake_fuchsia_sdk.bzl", "fake_fuchsia_sdk")
|
|
||||||
fake_fuchsia_sdk(name = "fuchsia_sdk")
|
|
||||||
|
@ -1,10 +1,20 @@
|
|||||||
"""Provides a fake @fuchsia_sdk implementation that's used when the real one isn't available.
|
"""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:
|
GoogleTest can be used with the [Fuchsia](https://fuchsia.dev/) SDK. However,
|
||||||
`bazel query "deps(set(//googletest/test:gtest_all_test))"`) will fail if @fuchsia_sdk is not
|
because the Fuchsia SDK does not yet support bzlmod, GoogleTest's `MODULE.bazel`
|
||||||
defined when bazel is evaluating the transitive closure of the query target.
|
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):
|
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},
|
||||||
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user