aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java9
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java20
4 files changed, 35 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
index f7558ffa75..317d52db40 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
@@ -995,6 +995,10 @@ public final class CppConfiguration extends BuildConfiguration.Fragment
return cppOptions.useInterfaceSharedObjects;
}
+ public boolean getExpandLinkoptsLabels() {
+ return cppOptions.expandLinkoptsLabels;
+ }
+
/**
* Returns the path to the GNU binutils 'objcopy' binary to use for this build. (Corresponds to
* $(OBJCOPY) in make-dbg.) Relative paths are relative to the execution root.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
index 646ad4c9e6..0b19fd488f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
@@ -200,7 +200,8 @@ public class CppHelper {
List<String> result = new ArrayList<>();
Expander expander = ruleContext.getExpander().withDataExecLocations();
for (String value : values) {
- if (isLinkoptLabel(value)) {
+ if (ruleContext.getFragment(CppConfiguration.class).getExpandLinkoptsLabels()
+ && isLinkoptLabel(value)) {
if (!expandLabel(ruleContext, result, value)) {
ruleContext.attributeError(attrName, "could not resolve label '" + value + "'");
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
index c5adab6cad..04e197ce62 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
@@ -966,6 +966,15 @@ public class CppOptions extends FragmentOptions {
)
public boolean useLLVMCoverageMapFormat;
+ @Option(
+ name = "experimental_expand_linkopts_labels",
+ defaultValue = "true",
+ documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
+ effectTags = {OptionEffectTag.LOADING_AND_ANALYSIS},
+ metadataTags = {OptionMetadataTag.EXPERIMENTAL},
+ help = "If true, entries in linkopts that are not preceded by - or $ will be expanded.")
+ public boolean expandLinkoptsLabels;
+
@Override
public FragmentOptions getHost() {
CppOptions host = (CppOptions) getDefault();
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java
index 6dfc222072..e7114af55e 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java
@@ -1513,4 +1513,24 @@ public class CcLibraryConfiguredTargetTest extends BuildViewTestCase {
useConfiguration("--experimental_stl=//a:stl");
getConfiguredTarget("//a:a");
}
+
+ @Test
+ public void testNoExpandLinkoptsLabels() throws Exception {
+ useConfiguration("--noexperimental_expand_linkopts_labels");
+ scratchConfiguredTarget(
+ "b", "b", "cc_library(", " name = 'b',", " linkopts=['//foo/bar'])");
+ assertNoEvents();
+ }
+
+ @Test
+ public void testExpandLinkoptsLabels() throws Exception {
+ useConfiguration("--experimental_expand_linkopts_labels");
+ checkError(
+ "b",
+ "b",
+ "could not resolve label",
+ "cc_library(",
+ " name = 'b',",
+ " linkopts=['//foo/bar'])");
+ }
}