aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
diff options
context:
space:
mode:
authorGravatar hlopko <hlopko@google.com>2017-08-01 22:26:37 +0200
committerGravatar Dmitry Lomov <dslomov@google.com>2017-08-02 10:40:10 +0200
commit646cfd81793fc3b87979089aab873310d14e95e6 (patch)
tree1178e4eebd43353445dc582e3024a42f85899f55 /src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
parent04304925be5cd767db834f442e3ef9f9d91ed4ff (diff)
Simplify copts handling and expose them as a build variable
This cl changes copts to be immutable (and changes addCopts methods into setCopts, so it's simpler to reason about copts) and exposes copts as a build variable. It also introduces CompileBuildVariablesTest, similar to LinkBuildVariablesTest, to test that right build variables are exposed for right actions. RELNOTES: None. PiperOrigin-RevId: 163876774
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
index 2cb61198bf..b06e89d71c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
@@ -30,6 +30,7 @@ import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
import com.google.common.collect.Sets.SetView;
+import com.google.common.collect.Streams;
import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
@@ -825,6 +826,20 @@ public class CcToolchainFeatures implements Serializable {
public static final Variables EMPTY = new Variables.Builder().build();
/**
+ * Retrieves a {@link StringSequence} variable named {@code variableName} from {@code variables}
+ * and converts it into a list of plain strings.
+ *
+ * <p>Throws {@link ExpansionException} when the variable is not a {@link StringSequence}.
+ */
+ public static final ImmutableList<String> toStringList(
+ CcToolchainFeatures.Variables variables, String variableName) {
+ return Streams
+ .stream(variables.getSequenceVariable(variableName))
+ .map(variable -> variable.getStringValue(variableName))
+ .collect(ImmutableList.toImmutableList());
+ }
+
+ /**
* Variables can be either String values or an arbitrarily deeply nested recursive sequences,
* which we represent as a tree of {@code VariableValue} nodes. The nodes are {@code Sequence}
* objects, while the leafs are {@code StringSequence} objects. We do not allow {@code
@@ -1144,7 +1159,7 @@ public class CcToolchainFeatures implements Serializable {
* objects significantly reduces memory overhead.
*/
@Immutable
- private static final class StringSequence implements VariableValue {
+ static final class StringSequence implements VariableValue {
private final Iterable<String> values;