diff options
author | thesayyn <thesayyn@gmail.com> | 2023-11-22 15:33:35 -0800 |
---|---|---|
committer | thesayyn <thesayyn@gmail.com> | 2023-11-23 12:48:10 -0800 |
commit | 7d132a493fd921e6d0464b6ae011d24a5e5f75c3 (patch) | |
tree | 354c570e2bce7824a591e79e93aca7519a1052fc | |
parent | 7188888362a203892dec354f52623f9970bff48c (diff) | |
download | bazelbuild-rules-proto-7d132a493fd921e6d0464b6ae011d24a5e5f75c3.tar.gz |
feat: introduce toolchain helper
-rw-r--r-- | WORKSPACE | 4 | ||||
-rw-r--r-- | proto/proto_common.bzl | 30 | ||||
-rw-r--r-- | tests/proto_common/BUILD.bazel | 4 | ||||
-rw-r--r-- | tests/proto_common/toolchains.bzl | 21 |
4 files changed, 59 insertions, 0 deletions
@@ -11,6 +11,10 @@ load(":dev_deps.bzl", "rules_proto_dev_deps") rules_proto_dev_deps() +load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace") + +bazel_skylib_workspace() + load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") protobuf_deps() diff --git a/proto/proto_common.bzl b/proto/proto_common.bzl index 6184971..26347a8 100644 --- a/proto/proto_common.bzl +++ b/proto/proto_common.bzl @@ -22,3 +22,33 @@ load("//proto/private:native.bzl", "native_proto_common") proto_common = native_proto_common ProtoLangToolchainInfo = proto_common.ProtoLangToolchainInfo + +def _incompatible_toolchains_enabled(): + getattr(proto_common, "INCOMPATIBLE_ENABLE_PROTO_TOOLCHAIN_RESOLUTION", False) + +def _find_toolchain(ctx, legacy_attr, toolchain_type): + if _incompatible_toolchains_enabled(): + toolchain = ctx.toolchains[toolchain_type] + if not toolchain: + fail("No toolchains registered for '%s'." % toolchain_type) + return toolchain.proto + else: + return getattr(ctx.attr, legacy_attr)[ProtoLangToolchainInfo] + +def _use_toolchain(toolchain_type): + if _incompatible_toolchains_enabled(): + return [config_common.toolchain_type(toolchain_type, mandatory = False)] + else: + return [] + +def _if_legacy_toolchain(legacy_attr_dict): + if _incompatible_toolchains_enabled(): + return {} + else: + return legacy_attr_dict + +toolchains = struct( + use_toolchain = _use_toolchain, + find_toolchain = _find_toolchain, + if_legacy_toolchain = _if_legacy_toolchain, +)
\ No newline at end of file diff --git a/tests/proto_common/BUILD.bazel b/tests/proto_common/BUILD.bazel new file mode 100644 index 0000000..4625e52 --- /dev/null +++ b/tests/proto_common/BUILD.bazel @@ -0,0 +1,4 @@ +load(":toolchains.bzl", "unittest_toolchains") + +unittest_toolchains() + diff --git a/tests/proto_common/toolchains.bzl b/tests/proto_common/toolchains.bzl new file mode 100644 index 0000000..3a639af --- /dev/null +++ b/tests/proto_common/toolchains.bzl @@ -0,0 +1,21 @@ +load("@bazel_skylib//lib:unittest.bzl", "asserts", "unittest") +load("//proto:proto_common.bzl", "toolchains") + +def _test_toolchains(ctx): + env = unittest.begin(ctx) + + asserts.equals(env, {}, toolchains.if_legacy_toolchain({})) + asserts.equals(env, None, toolchains.if_legacy_toolchain(None)) + asserts.equals(env, False, toolchains.if_legacy_toolchain(False)) + asserts.equals(env, False, toolchains.if_legacy_toolchain(False)) + + return unittest.end(env) + +toolchains_test = unittest.make(_test_toolchains) + +# buildifier: disable=unnamed-macro +def unittest_toolchains(): + unittest.suite( + "test_toolchains", + toolchains_test + ) |