Skip to content

Instantly share code, notes, and snippets.

@lberki
Created May 20, 2016 15:53
Show Gist options
  • Save lberki/8599ef20a5243e326dd3b784e93f7f81 to your computer and use it in GitHub Desktop.
Save lberki/8599ef20a5243e326dd3b784e93f7f81 to your computer and use it in GitHub Desktop.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/Alias.java b/src/main/java/com/google/devtools/build/lib/rules/Alias.java
index a24c537..11abd0e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/Alias.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/Alias.java
@@ -38,6 +38,7 @@ public class Alias implements RuleConfiguredTargetFactory {
public ConfiguredTarget create(RuleContext ruleContext) throws InterruptedException {
ConfiguredTarget actual = (ConfiguredTarget) ruleContext.getPrerequisite("actual", Mode.TARGET);
return new AliasConfiguredTarget(
+ ruleContext.getConfiguration(),
actual,
ImmutableMap.of(
AliasProvider.class, AliasProvider.fromAliasRule(ruleContext.getLabel(), actual),
diff --git a/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java
index c7d2387..074832f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java
@@ -38,13 +38,15 @@ import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
*/
@Immutable
public final class AliasConfiguredTarget implements ConfiguredTarget, ClassObject {
- private final ConfiguredTarget configuredTarget;
+ private final BuildConfiguration configuration;
+ private final ConfiguredTarget actual;
private final ImmutableMap<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider>
overrides;
- public AliasConfiguredTarget(ConfiguredTarget actual,
+ public AliasConfiguredTarget(BuildConfiguration configuration, ConfiguredTarget actual,
ImmutableMap<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> overrides) {
- configuredTarget = actual;
+ this.configuration = configuration;
+ this.actual = actual;
this.overrides = overrides;
}
@@ -54,27 +56,29 @@ public final class AliasConfiguredTarget implements ConfiguredTarget, ClassObjec
return provider.cast(overrides.get(provider));
}
- return configuredTarget == null ? null : configuredTarget.getProvider(provider);
+ return actual == null ? null : actual.getProvider(provider);
}
@Override
public Label getLabel() {
- return configuredTarget.getLabel();
+ return actual.getLabel();
}
@Override
public Object get(String providerKey) {
- return configuredTarget == null ? null : configuredTarget.get(providerKey);
+ return actual == null ? null : actual.get(providerKey);
}
@Override
public Target getTarget() {
- return configuredTarget == null ? null : configuredTarget.getTarget();
+ return actual == null ? null : actual.getTarget();
}
@Override
public BuildConfiguration getConfiguration() {
- return configuredTarget.getConfiguration();
+ // actual might be an input file, in which case its configuration is null and we don't want to
+ // have rules that have a null configuration
+ return configuration;
}
/* ClassObject methods */
@@ -87,18 +91,18 @@ public final class AliasConfiguredTarget implements ConfiguredTarget, ClassObjec
// A shortcut for files to build in Skylark. FileConfiguredTarget and RunleConfiguredTarget
// always has FileProvider and Error- and PackageGroupConfiguredTarget-s shouldn't be
// accessible in Skylark.
- return SkylarkNestedSet.of(Artifact.class, configuredTarget == null
+ return SkylarkNestedSet.of(Artifact.class, actual == null
? NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER)
: getProvider(FileProvider.class).getFilesToBuild());
}
- return configuredTarget == null ? null : configuredTarget.get(name);
+ return actual == null ? null : actual.get(name);
}
@Override
public ImmutableCollection<String> getKeys() {
ImmutableList.Builder<String> result = ImmutableList.<String>builder().add("label", "files");
- if (configuredTarget != null) {
- result.addAll(configuredTarget.getProvider(SkylarkProviders.class).getKeys());
+ if (actual != null) {
+ result.addAll(actual.getProvider(SkylarkProviders.class).getKeys());
}
return result.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/Bind.java b/src/main/java/com/google/devtools/build/lib/rules/repository/Bind.java
index a832903..f042902 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/Bind.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/Bind.java
@@ -37,7 +37,9 @@ public class Bind implements RuleConfiguredTargetFactory {
}
ConfiguredTarget actual = (ConfiguredTarget) ruleContext.getPrerequisite("actual", Mode.TARGET);
- return new AliasConfiguredTarget(actual,
+ return new AliasConfiguredTarget(
+ ruleContext.getConfiguration(),
+ actual,
ImmutableMap.<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider>of(
AliasProvider.class, AliasProvider.fromAliasRule(ruleContext.getLabel(), actual)));
}
diff --git a/src/test/shell/bazel/external_integration_test.sh b/src/test/shell/bazel/external_integration_test.sh
index 3350fc2..41138f3 100755
--- a/src/test/shell/bazel/external_integration_test.sh
+++ b/src/test/shell/bazel/external_integration_test.sh
@@ -831,4 +831,15 @@ EOF
expect_log "//external:androidsdk"
}
+function test_build_with_aliased_input_file() {
+ mkdir -p a
+ cat > a/BUILD <<EOF
+exports_files(['f'])
+alias(name='a', actual=':f')
+EOF
+
+ touch a/f
+ bazel build //a:a || fail "build failed"
+}
+
run_suite "external tests"
diff --git a/tools/jdk/BUILD b/tools/jdk/BUILD
index 96581b0..fe373fc 100644
--- a/tools/jdk/BUILD
+++ b/tools/jdk/BUILD
@@ -128,6 +128,7 @@ java_toolchain(
singlejar = ["//tools/jdk:SingleJar_deploy.jar"],
source_version = "8",
target_version = "8",
+ misc = ["-g:source,lines,vars"],
)
filegroup(
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment