"""A wrapper that enables a `config_setting` matcher for label_flag flags.""" load("@bazel_skylib//rules:common_settings.bzl", "BuildSettingInfo") load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain", "use_cpp_toolchain") def _match_label_flag_impl(ctx): matches = str(ctx.attr.expected_value.label) == str(ctx.attr.flag.label) return [ config_common.FeatureFlagInfo(value = str(matches)), BuildSettingInfo(value = matches), ] _match_label_flag = rule( implementation = _match_label_flag_impl, attrs = { "expected_value": attr.label( mandatory = True, doc = "The expected flag value", ), "flag": attr.label( mandatory = True, doc = "The flag to extract a value from", ), }, ) def label_flag_matches(*, name, flag, value): _match_label_flag( name = name + "._impl", expected_value = native.package_relative_label(value), flag = flag, ) native.config_setting( name = name, flag_values = {":{}".format(name + "._impl"): "True"}, )