diff options
author | 2015-06-17 13:44:04 +0000 | |
---|---|---|
committer | 2015-06-17 15:24:43 +0000 | |
commit | 9c37ab153ed19a8018e2c76891b63f66042d8f29 (patch) | |
tree | eed65bba27ec107a832bd62bc3b21435ac152fec | |
parent | 54c8be9e14d5ce1f00277eb3ba9d67325ef280e7 (diff) |
Add a tools/android/jack package to the Bazel tree so that Android rules actually work. This is a temporary measure until these targets are integrated into android_sdk .
Also make handling invalid tools/android/jack packages in JackCompilationHelper a bit more robust.
--
MOS_MIGRATED_REVID=96202009
9 files changed, 65 insertions, 11 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java index dd650e04a6..0f52356e57 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java @@ -99,6 +99,9 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { getTransitiveResourceContainers(ruleContext, ImmutableList.of("resources", "deps")), javaCommon, androidCommon, javaSemantics, androidSemantics, tools, ImmutableList.<String>of("deps")); + if (builder == null) { + return null; + } return builder.build(); } catch (RuleConfigurationException e) { Preconditions.checkArgument(ruleContext.hasErrors(), @@ -256,6 +259,9 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { JavaTargetAttributes resourceClasses = androidCommon.init( javaSemantics, androidSemantics, tools, resourceApk, AndroidIdlProvider.EMPTY, ruleContext.getConfiguration().isCodeCoverageEnabled(), true); + if (resourceClasses == null) { + return null; + } Artifact deployJar = createDeployJar(ruleContext, javaSemantics, androidCommon, resourceClasses, ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_BINARY_DEPLOY_JAR)); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java index f3f047e24e..9826c2ec05 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java @@ -330,6 +330,9 @@ public class AndroidCommon { } jackCompilationHelper = initJack(helper.getAttributes(), javaSemantics); + if (jackCompilationHelper == null) { + return null; + } initJava( helper, artifactsBuilder, collectJavaCompilationArgs, resourceApk.getResourceJavaSrcJar()); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java index 9e5559b78b..af4e4fa794 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java @@ -97,8 +97,10 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory { false, null /* proguardCfgOut */); - androidCommon.init(javaSemantics, androidSemantics, tools, - resourceApk, transitiveIdlImportData, false, true); + if (androidCommon.init(javaSemantics, androidSemantics, tools, + resourceApk, transitiveIdlImportData, false, true) == null) { + return null; + } Artifact classesJar = mergeJarsFromSrcs(ruleContext, ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_LIBRARY_CLASS_JAR)); @@ -145,9 +147,10 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory { JavaCommon javaCommon = new JavaCommon(ruleContext, javaSemantics); AndroidCommon androidCommon = new AndroidCommon(ruleContext, javaCommon); ResourceApk resourceApk = ResourceApk.fromTransitiveResources(transitiveResources); - androidCommon.init(javaSemantics, androidSemantics, tools, - resourceApk, transitiveIdlImportData, false, true); - + if (androidCommon.init(javaSemantics, androidSemantics, tools, + resourceApk, transitiveIdlImportData, false, true) == null) { + return null; + } RuleConfiguredTargetBuilder targetBuilder = androidCommon.addTransitiveInfoProviders( new RuleConfiguredTargetBuilder(ruleContext), tools); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java index 103dcc4bc6..9f719402c1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java @@ -551,6 +551,7 @@ public final class AndroidRuleClasses { .value(env.getLabel("//tools/android/jack:resource_extractor"))) .add(attr("$android_jack", LABEL) .cfg(HOST) + .singleArtifact() .value(env.getLabel("//tools/android/jack:android_jack"))) .build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/JackAspect.java b/src/main/java/com/google/devtools/build/lib/rules/android/JackAspect.java index 236ce567d7..61f9fb5165 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/JackAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/JackAspect.java @@ -100,6 +100,9 @@ public final class JackAspect implements ConfiguredAspectFactory { .addDeps(getPotentialDependency(ruleContext, "deps")) .addRuntimeDeps(getPotentialDependency(ruleContext, "runtime_deps")) .build(); + if (jackHelper == null) { + return null; + } JackLibraryProvider result = JavaCommon.isNeverLink(ruleContext) diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/JackCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/android/JackCompilationHelper.java index f0ff9554d8..247a37ffeb 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/JackCompilationHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/JackCompilationHelper.java @@ -808,13 +808,13 @@ public final class JackCompilationHelper { .getConfiguration() .getFragment(AndroidConfiguration.class) .isJackSanityChecked(); - FilesToRunProvider jackBinary = - Preconditions.checkNotNull(ruleContext.getExecutablePrerequisite("$jack", Mode.HOST)); - FilesToRunProvider jillBinary = - Preconditions.checkNotNull(ruleContext.getExecutablePrerequisite("$jill", Mode.HOST)); + FilesToRunProvider jackBinary = ruleContext.getExecutablePrerequisite("$jack", Mode.HOST); + FilesToRunProvider jillBinary = ruleContext.getExecutablePrerequisite("$jill", Mode.HOST); FilesToRunProvider resourceExtractorBinary = - Preconditions.checkNotNull( - ruleContext.getExecutablePrerequisite("$resource_extractor", Mode.HOST)); + ruleContext.getExecutablePrerequisite("$resource_extractor", Mode.HOST); + if (ruleContext.hasErrors()) { + return null; + } return new JackCompilationHelper( Preconditions.checkNotNull(ruleContext), diff --git a/tools/android/jack/BUILD b/tools/android/jack/BUILD new file mode 100644 index 0000000000..fd59375de0 --- /dev/null +++ b/tools/android/jack/BUILD @@ -0,0 +1,23 @@ +# Stub tools for the upcoming Jack support in Bazel. + +package(default_visibility = ["//visibility:public"]) + +sh_binary( + name = "jack", + srcs = ["fail.sh"], +) + +filegroup( + name = "android_jack", + srcs = ["empty"], +) + +sh_binary( + name = "jill", + srcs = ["fail.sh"], +) + +sh_binary( + name = "resource_extractor", + srcs = ["fail.sh"], +) diff --git a/tools/android/jack/empty b/tools/android/jack/empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tools/android/jack/empty diff --git a/tools/android/jack/fail.sh b/tools/android/jack/fail.sh new file mode 100755 index 0000000000..59b453bcbe --- /dev/null +++ b/tools/android/jack/fail.sh @@ -0,0 +1,15 @@ +#!/bin/bash +# Copyright 2015 Google Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http:#www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +exit 1 |