aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar ulfjack <ulfjack@google.com>2017-09-27 10:57:52 -0400
committerGravatar John Cater <jcater@google.com>2017-09-28 08:54:13 -0400
commit097eba7f5b687f3a3a6de3c1295569a972ed97d2 (patch)
treea30dc602edbf14cd6bd7ff5114fb565b0d84ba82 /src/main
parent567e9abccc701a2c69f0fd3d7d0d3c844b6fa2fd (diff)
Simplify make variable expansion call sites
Progress on #2475. PiperOrigin-RevId: 170197341
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntime.java5
4 files changed, 19 insertions, 14 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
index 64be9bbb4a..8aaaaa44e0 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
@@ -1134,6 +1134,18 @@ public final class RuleContext extends TargetContext
*
* @param attributeName the name of the attribute from which "expression" comes; used for error
* reporting.
+ * @return the expanded string.
+ */
+ public String expandedMakeVariables(String attributeName) {
+ String expression = attributes().get(attributeName, Type.STRING);
+ return expandMakeVariables(attributeName, expression, getConfigurationMakeVariableContext());
+ }
+
+ /**
+ * Expands the make variables in {@code expression}.
+ *
+ * @param attributeName the name of the attribute from which "expression" comes; used for error
+ * reporting.
* @param expression the string to expand.
* @return the expanded string.
*/
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java
index bf03b95333..a11dbe2de4 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java
@@ -41,7 +41,6 @@ import com.google.devtools.build.lib.rules.cpp.CcLinkParamsStore;
import com.google.devtools.build.lib.rules.python.PyCommon;
import com.google.devtools.build.lib.rules.python.PythonConfiguration;
import com.google.devtools.build.lib.rules.python.PythonSemantics;
-import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.FileTypeSet;
import com.google.devtools.build.lib.util.OS;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -102,8 +101,7 @@ public class BazelPythonSemantics implements PythonSemantics {
// adjusted to be relative to the workspace name.
packageFragment = PathFragment.create(ruleContext.getWorkspaceName())
.getRelative(packageFragment);
- for (String importsAttr : ruleContext.attributes().get("imports", Type.STRING_LIST)) {
- importsAttr = ruleContext.expandMakeVariables("includes", importsAttr);
+ for (String importsAttr : ruleContext.expandedMakeVariablesList("imports")) {
if (importsAttr.startsWith("/")) {
ruleContext.attributeWarning("imports",
"ignoring invalid absolute path '" + importsAttr + "'");
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
index 343d3c7dd0..602b5d4ed6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
@@ -360,9 +360,7 @@ public final class CcCommon {
if (!ruleContext.getRule().isAttrDefined(NO_COPTS_ATTRIBUTE, Type.STRING)) {
return null;
}
- String nocoptsAttr =
- ruleContext.expandMakeVariables(
- NO_COPTS_ATTRIBUTE, ruleContext.attributes().get(NO_COPTS_ATTRIBUTE, Type.STRING));
+ String nocoptsAttr = ruleContext.expandedMakeVariables(NO_COPTS_ATTRIBUTE);
try {
return Pattern.compile(nocoptsAttr);
} catch (PatternSyntaxException e) {
@@ -397,11 +395,10 @@ public final class CcCommon {
*/
public List<String> getDefines() {
List<String> defines = new ArrayList<>();
- for (String define :
- ruleContext.attributes().get(DEFINES_ATTRIBUTE, Type.STRING_LIST)) {
+ for (String define : ruleContext.expandedMakeVariablesList(DEFINES_ATTRIBUTE)) {
List<String> tokens = new ArrayList<>();
try {
- ShellUtils.tokenize(tokens, ruleContext.expandMakeVariables(DEFINES_ATTRIBUTE, define));
+ ShellUtils.tokenize(tokens, define);
if (tokens.size() == 1) {
defines.add(tokens.get(0));
} else if (tokens.isEmpty()) {
@@ -457,8 +454,7 @@ public final class CcCommon {
List<PathFragment> result = new ArrayList<>();
PackageIdentifier packageIdentifier = ruleContext.getLabel().getPackageIdentifier();
PathFragment packageFragment = packageIdentifier.getPathUnderExecRoot();
- for (String includesAttr : ruleContext.attributes().get("includes", Type.STRING_LIST)) {
- includesAttr = ruleContext.expandMakeVariables("includes", includesAttr);
+ for (String includesAttr : ruleContext.expandedMakeVariablesList("includes")) {
if (includesAttr.startsWith("/")) {
ruleContext.attributeWarning("includes",
"ignoring invalid absolute path '" + includesAttr + "'");
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntime.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntime.java
index fe73990891..5f0cbdbcb3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntime.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntime.java
@@ -30,7 +30,6 @@ import com.google.devtools.build.lib.analysis.RunfilesProvider;
import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
-import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.OsUtils;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -47,8 +46,8 @@ public class JavaRuntime implements RuleConfiguredTargetFactory {
PrerequisiteArtifacts.nestedSet(ruleContext, "srcs", Mode.TARGET);
PathFragment javaHome = defaultJavaHome(ruleContext.getLabel());
if (ruleContext.attributes().isAttributeValueExplicitlySpecified("java_home")) {
- PathFragment javaHomeAttribute = PathFragment.create(ruleContext.expandMakeVariables(
- "java_home", ruleContext.attributes().get("java_home", Type.STRING)));
+ PathFragment javaHomeAttribute =
+ PathFragment.create(ruleContext.expandedMakeVariables("java_home"));
if (!filesToBuild.isEmpty() && javaHomeAttribute.isAbsolute()) {
ruleContext.ruleError("'java_home' with an absolute path requires 'srcs' to be empty.");
}