diff options
author | 2017-08-01 22:26:37 +0200 | |
---|---|---|
committer | 2017-08-02 10:40:10 +0200 | |
commit | 646cfd81793fc3b87979089aab873310d14e95e6 (patch) | |
tree | 1178e4eebd43353445dc582e3024a42f85899f55 /src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java | |
parent | 04304925be5cd767db834f442e3ef9f9d91ed4ff (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.java | 17 |
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; |