From 8510efb8a2278a42010fe09ebda816f2458ae5de Mon Sep 17 00:00:00 2001 From: Keith Smiley Date: Wed, 25 Mar 2026 09:15:37 -0700 Subject: [PATCH] Make is_tool_configuration public (https://github.com/bazelbuild/bazel/pull/29056) This is a common ask from rules authors, most of whom check for `-exec-` in `ctx.bin_dir.path` which is potentially fragile with path stripping. Fixes https://github.com/bazelbuild/bazel/issues/14444 Closes #29056. PiperOrigin-RevId: 889280554 Change-Id: Id4380e59603513e5d6bee38de269057500ce6573 --- .../lib/analysis/config/BuildConfigurationValue.java | 6 ------ .../lib/starlarkbuildapi/BuildConfigurationApi.java | 6 ++++-- .../analysis/config/BuildConfigurationStarlarkTest.java | 9 ++++----- 3 files changed, 8 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValue.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValue.java index 3e1d92e11f92dc..b74af335bc9693 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValue.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValue.java @@ -759,12 +759,6 @@ public boolean isToolConfiguration() { return isExecConfiguration(); } - @Override - public boolean isToolConfigurationForStarlark(StarlarkThread thread) throws EvalException { - BuiltinRestriction.failIfCalledOutsideDefaultAllowlist(thread); - return isToolConfiguration(); - } - public boolean checkVisibility() { return options.checkVisibility; } diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/BuildConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/BuildConfigurationApi.java index cfdc0a7d66f4ea..4a08c318895542 100644 --- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/BuildConfigurationApi.java +++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/BuildConfigurationApi.java @@ -97,8 +97,10 @@ public interface BuildConfigurationApi extends StarlarkValue { @StarlarkMethod(name = "stamp_binaries", documented = false, useStarlarkThread = true) boolean stampBinariesForStarlark(StarlarkThread thread) throws EvalException; - @StarlarkMethod(name = "is_tool_configuration", documented = false, useStarlarkThread = true) - boolean isToolConfigurationForStarlark(StarlarkThread thread) throws EvalException; + @StarlarkMethod( + name = "is_tool_configuration", + doc = "Returns true when building in the tool (exec) configuration.") + boolean isToolConfiguration(); @StarlarkMethod( name = "has_separate_genfiles_directory", diff --git a/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationStarlarkTest.java b/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationStarlarkTest.java index e2f280daff5a69..8c4f482c603b3e 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationStarlarkTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationStarlarkTest.java @@ -71,7 +71,7 @@ def _test_rule_impl(ctx): } @Test - public void testIsToolConfigurationIsBlocked() throws Exception { + public void testIsToolConfiguration() throws Exception { scratch.file( "example/BUILD", """ @@ -84,15 +84,14 @@ public void testIsToolConfigurationIsBlocked() throws Exception { "example/rule.bzl", """ def _impl(ctx): - ctx.configuration.is_tool_configuration() + if ctx.configuration.is_tool_configuration(): + fail("should not be tool configuration") return [DefaultInfo()] custom_rule = rule(implementation = _impl) """); - AssertionError e = - assertThrows(AssertionError.class, () -> getConfiguredTarget("//example:custom")); - assertThat(e).hasMessageThat().contains("file '//example:rule.bzl' cannot use private API"); + getConfiguredTarget("//example:custom"); } @Test