aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis
diff options
context:
space:
mode:
authorGravatar Lukacs Berki <lberki@google.com>2015-04-24 05:58:45 +0000
committerGravatar Lukacs Berki <lberki@google.com>2015-04-24 10:14:57 +0000
commita4b66fdbe61845fd4d4ebaebec1e25cdcd99809d (patch)
treeca7de8127b706a5046cb98b4c6db728ed094fb1e /src/main/java/com/google/devtools/build/lib/analysis
parent0d3344eb4272354bd6c32644024feecb7ecddfb9 (diff)
Add a mechanism for configuration fragments to add arbitrary rules to the defaults package.
-- MOS_MIGRATED_REVID=91956723
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/DefaultsPackage.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/FragmentOptions.java13
3 files changed, 30 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java
index 8b44f65470..cee3ceb0e1 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java
@@ -156,6 +156,15 @@ public final class BuildOptions implements Cloneable, Serializable {
return result.build();
}
+ ImmutableList<String> getDefaultsRules() {
+ ImmutableList.Builder<String> result = ImmutableList.builder();
+ for (FragmentOptions fragment : fragmentOptionsMap.values()) {
+ result.addAll(fragment.getDefaultsRules());
+ }
+
+ return result.build();
+ }
+
/**
* The cache key for the options collection. Recomputes cache key every time it's called.
*/
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/DefaultsPackage.java b/src/main/java/com/google/devtools/build/lib/analysis/config/DefaultsPackage.java
index 7d92bcedd7..e04633011f 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/DefaultsPackage.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/DefaultsPackage.java
@@ -15,6 +15,7 @@
package com.google.devtools.build.lib.analysis.config;
import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.syntax.Label;
@@ -93,9 +94,11 @@ public final class DefaultsPackage {
* The map from entries to their values.
*/
private ImmutableMap<String, ImmutableSet<Label>> values;
+ private ImmutableList<String> rules;
private DefaultsPackage(BuildOptions buildOptions) {
values = buildOptions.getDefaultsLabels();
+ rules = buildOptions.getDefaultsRules();
}
private String labelsToString(Set<Label> labels) {
@@ -122,6 +125,11 @@ public final class DefaultsPackage {
.append(" srcs = [")
.append(labelsToString(entry.getValue())).append("])\n");
}
+
+ for (String rule : rules) {
+ result.append(rule).append("\n");
+ }
+
return result.toString();
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentOptions.java b/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentOptions.java
index ce4b2d2689..c7b8c47206 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentOptions.java
@@ -57,6 +57,19 @@ public abstract class FragmentOptions extends OptionsBase implements Cloneable,
}
/**
+ * Returns the extra rules contributed to the default package by this fragment.
+ *
+ * <p>The return value should be a list of strings, which are merged into the BUILD files of the
+ * defaults package.
+ *
+ * <p><strong>WARNING;</strong> this method should only be used when absolutely necessary. Always
+ * prefer {@code getDefaultsLabels()} to this.
+ */
+ public ImmutableList<String> getDefaultsRules() {
+ return ImmutableList.of();
+ }
+
+ /**
* Returns a list of potential split configuration transitions for this fragment. Split
* configurations usually need to be explicitly enabled by passing in an option.
*/