mirror of
https://github.com/google/googletest.git
synced 2025-12-14 23:50:00 +08:00
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 unconditionally resolve to the "fake" Fuchsia SDK. With this change, 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")
52 lines
1.6 KiB
Python
52 lines
1.6 KiB
Python
"""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.
|
|
|
|
See https://github.com/google/googletest/issues/4472.
|
|
"""
|
|
|
|
def _fake_fuchsia_sdk_impl(repo_ctx):
|
|
for stub_target in repo_ctx.attr._stub_build_targets:
|
|
stub_package = stub_target
|
|
stub_target_name = stub_target.split("/")[-1]
|
|
repo_ctx.file("%s/BUILD.bazel" % stub_package, """
|
|
filegroup(
|
|
name = "%s",
|
|
)
|
|
""" % stub_target_name)
|
|
|
|
fake_fuchsia_sdk = repository_rule(
|
|
doc = "Used to create a fake @fuchsia_sdk repository with stub build targets.",
|
|
implementation = _fake_fuchsia_sdk_impl,
|
|
attrs = {
|
|
"_stub_build_targets": attr.string_list(
|
|
doc = "The stub build targets to initialize.",
|
|
default = [
|
|
"pkg/fdio",
|
|
"pkg/syslog",
|
|
"pkg/zx",
|
|
],
|
|
),
|
|
},
|
|
)
|
|
|
|
_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},
|
|
)
|