Change the syntax for labels in static_deps and exported_by
The syntax now matches visibility's. This is less confusing than
before, we now have:
- targets like //foo, //foo:foo or //foo:bar
- same package match like //foo:__pkg__
- subpackages like //foo:__subpackages__
RELNOTES:none
PiperOrigin-RevId: 298598757
Change-Id: I6d02cf03c3c67d78998dda27a6529d53d0ef2708
diff --git a/examples/experimental_cc_shared_library.bzl b/examples/experimental_cc_shared_library.bzl
index dc63965..90b1cf5 100644
--- a/examples/experimental_cc_shared_library.bzl
+++ b/examples/experimental_cc_shared_library.bzl
@@ -143,21 +143,15 @@
additional_inputs = depset(direct = linker_input.additional_inputs),
)
-def _check_if_target_under_path(path, target, target_specified):
- if not _same_package_or_above(path, target):
+def _check_if_target_under_path(value, pattern):
+ if pattern.workspace_name != value.workspace_name:
return False
- if target_specified:
- return path.name == target.name
- return True
+ if pattern.name == "__pkg__":
+ return pattern.package == value.package
+ if pattern.name == "__subpackages__":
+ return _same_package_or_above(pattern, value)
-def _is_target_specified(path):
- if path.startswith("//") or path.startswith("@"):
- if path.find(":") != -1:
- return True
- else:
- return False
- else:
- return True
+ return pattern.package == value.package and pattern.name == value.name
def _filter_inputs(
ctx,
@@ -218,10 +212,9 @@
can_be_linked_statically = False
for static_dep_path in ctx.attr.static_deps:
- target_specified = _is_target_specified(static_dep_path)
static_dep_path_label = ctx.label.relative(static_dep_path)
owner_label = linker_input.owner
- if _check_if_target_under_path(linker_input.owner, static_dep_path_label, target_specified):
+ if _check_if_target_under_path(linker_input.owner, static_dep_path_label):
can_be_linked_statically = True
break
if can_be_linked_statically:
@@ -267,9 +260,8 @@
if not can_be_exported:
for exported_by in export[GraphNodeInfo].exported_by:
- target_specified = _is_target_specified(exported_by)
exported_by_label = Label(exported_by)
- if _check_if_target_under_path(ctx.label, exported_by_label, target_specified):
+ if _check_if_target_under_path(ctx.label, exported_by_label):
can_be_exported = True
break
if not can_be_exported:
@@ -393,3 +385,5 @@
toolchains = ["@rules_cc//cc:toolchain_type"], # copybara-use-repo-external-label
fragments = ["cpp"],
)
+
+for_testing_dont_use_check_if_target_under_path = _check_if_target_under_path
diff --git a/examples/test_cc_shared_library/BUILD b/examples/test_cc_shared_library/BUILD
index c3b2d6a..141b1aa 100644
--- a/examples/test_cc_shared_library/BUILD
+++ b/examples/test_cc_shared_library/BUILD
@@ -1,6 +1,6 @@
load("//cc:defs.bzl", "cc_binary", "cc_library", "cc_test")
load("//examples:experimental_cc_shared_library.bzl", "LINKABLE_MORE_THAN_ONCE", "cc_shared_library")
-load(":starlark_tests.bzl", "additional_inputs_test", "link_once_repeated_test", "linking_suffix_test")
+load(":starlark_tests.bzl", "additional_inputs_test", "link_once_repeated_test", "linking_suffix_test", "paths_test")
package(
default_visibility = ["//examples/test_cc_shared_library:__subpackages__"],
@@ -178,3 +178,7 @@
name = "link_once_repeated_test",
target_under_test = "//examples/test_cc_shared_library/failing_targets:should_fail_binary",
)
+
+paths_test(
+ name = "path_matching_test",
+)
diff --git a/examples/test_cc_shared_library/starlark_tests.bzl b/examples/test_cc_shared_library/starlark_tests.bzl
index 9543df2..f301498 100644
--- a/examples/test_cc_shared_library/starlark_tests.bzl
+++ b/examples/test_cc_shared_library/starlark_tests.bzl
@@ -1,6 +1,7 @@
"""Starlark tests for cc_shared_library"""
-load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
+load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts", "unittest")
+load("//examples:experimental_cc_shared_library.bzl", "for_testing_dont_use_check_if_target_under_path")
def _linking_suffix_test_impl(ctx):
env = analysistest.begin(ctx)
@@ -43,3 +44,25 @@
return analysistest.end(env)
link_once_repeated_test = analysistest.make(_link_once_repeated_test_impl, expect_failure = True)
+
+def _paths_test_impl(ctx):
+ env = unittest.begin(ctx)
+
+ asserts.false(env, for_testing_dont_use_check_if_target_under_path(Label("//foo"), Label("//bar")))
+ asserts.false(env, for_testing_dont_use_check_if_target_under_path(Label("@foo//foo"), Label("@bar//bar")))
+ asserts.false(env, for_testing_dont_use_check_if_target_under_path(Label("//bar"), Label("@foo//bar")))
+ asserts.true(env, for_testing_dont_use_check_if_target_under_path(Label("@foo//bar"), Label("@foo//bar")))
+ asserts.true(env, for_testing_dont_use_check_if_target_under_path(Label("@foo//bar:bar"), Label("@foo//bar")))
+ asserts.true(env, for_testing_dont_use_check_if_target_under_path(Label("//bar:bar"), Label("//bar")))
+
+ asserts.false(env, for_testing_dont_use_check_if_target_under_path(Label("@foo//bar/baz"), Label("@foo//bar")))
+ asserts.false(env, for_testing_dont_use_check_if_target_under_path(Label("@foo//bar/baz"), Label("@foo//bar:__pkg__")))
+ asserts.true(env, for_testing_dont_use_check_if_target_under_path(Label("@foo//bar/baz"), Label("@foo//bar:__subpackages__")))
+ asserts.true(env, for_testing_dont_use_check_if_target_under_path(Label("@foo//bar:qux"), Label("@foo//bar:__pkg__")))
+
+ asserts.false(env, for_testing_dont_use_check_if_target_under_path(Label("@foo//bar"), Label("@foo//bar/baz:__subpackages__")))
+ asserts.false(env, for_testing_dont_use_check_if_target_under_path(Label("//bar"), Label("//bar/baz:__pkg__")))
+
+ return unittest.end(env)
+
+paths_test = unittest.make(_paths_test_impl)