diff options
author | Alex Humesky <ahumesky@google.com> | 2016-04-04 18:07:42 +0000 |
---|---|---|
committer | Kristina Chodorow <kchodorow@google.com> | 2016-04-05 14:04:15 +0000 |
commit | eefd80803ddcc3173970ad7c2fcfbb824b7ebc1b (patch) | |
tree | 4041e94c0df98675bdc25f564bd93048c7149daa /src/main/java | |
parent | 9f2e673077b340ee6c88c0075726d03cc75d3eaa (diff) |
Adds the output of -printconfiguration from proguard to the implicit outputs of
android_binary (and java_binary).
RELNOTES[NEW]: The output of -printconfiguration of proguard is available
through an implicit "[target_name]_proguard.confg" output of android_binary (and
java_binary).
--
MOS_MIGRATED_REVID=118958246
Diffstat (limited to 'src/main/java')
4 files changed, 25 insertions, 7 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 662efcfd06..4a76c10303 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 @@ -857,8 +857,9 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { private static ProguardOutput createEmptyProguardAction(RuleContext ruleContext, Artifact proguardOutputJar, Artifact deployJarArtifact) throws InterruptedException { - ImmutableList.Builder<Artifact> failures = - ImmutableList.<Artifact>builder().add(proguardOutputJar); + ImmutableList.Builder<Artifact> failures = ImmutableList.<Artifact>builder() + .add(proguardOutputJar) + .add(ruleContext.getImplicitOutputArtifact(JavaSemantics.JAVA_BINARY_PROGUARD_CONFIG)); if (ruleContext.attributes().get("proguard_generate_mapping", Type.BOOLEAN)) { failures.add(ruleContext.getImplicitOutputArtifact(JavaSemantics.JAVA_BINARY_PROGUARD_MAP)); } 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 e0f7a61783..159f00d523 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 @@ -281,6 +281,7 @@ public final class AndroidRuleClasses { if (hasProguardSpecs) { functions.add(AndroidRuleClasses.ANDROID_BINARY_PROGUARD_JAR); + functions.add(JavaSemantics.JAVA_BINARY_PROGUARD_CONFIG); if (mapping) { functions.add(JavaSemantics.JAVA_BINARY_PROGUARD_MAP); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java index 96cff5445d..cd54d70f9d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java @@ -70,6 +70,8 @@ public interface JavaSemantics { fromTemplates("%{name}_deploy.jar.unstripped"); SafeImplicitOutputsFunction JAVA_BINARY_PROGUARD_MAP = fromTemplates("%{name}_proguard.map"); + SafeImplicitOutputsFunction JAVA_BINARY_PROGUARD_CONFIG = + fromTemplates("%{name}_proguard.config"); SafeImplicitOutputsFunction JAVA_BINARY_DEPLOY_SOURCE_JAR = fromTemplates("%{name}_deploy-src.jar"); diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardHelper.java index 3dbdc860af..0ac94586be 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardHelper.java @@ -257,6 +257,9 @@ public abstract class ProguardHelper { proguardOutputMap = null; } + Artifact proguardConfigOutput = + ruleContext.getImplicitOutputArtifact(JavaSemantics.JAVA_BINARY_PROGUARD_CONFIG); + if (optimizationPasses == null) { // Run proguard as a single step. Builder builder = makeBuilder( @@ -266,7 +269,8 @@ public abstract class ProguardHelper { proguardMapping, libraryJars, proguardOutputJar, - proguardOutputMap) + proguardOutputMap, + proguardConfigOutput) .setProgressMessage("Trimming binary with Proguard") .addOutput(proguardOutputJar); @@ -284,7 +288,8 @@ public abstract class ProguardHelper { proguardMapping, libraryJars, proguardOutputJar, - /* proguardOutputMap */ null) + /* proguardOutputMap */ null, + /* proguardConfigOutput */ null) .setProgressMessage("Trimming binary with Proguard: Verification/Shrinking Pass") .addArgument("-runtype INITIAL") .addArgument("-nextstageoutput") @@ -302,7 +307,8 @@ public abstract class ProguardHelper { proguardMapping, libraryJars, proguardOutputJar, - /* proguardOutputMap */ null) + /* proguardOutputMap */ null, + /* proguardConfigOutput */ null) .setProgressMessage("Trimming binary with Proguard: Optimization Pass " + (i + 1)) .addArgument("-runtype OPTIMIZATION") .addArgument("-laststageoutput") @@ -320,7 +326,8 @@ public abstract class ProguardHelper { proguardMapping, libraryJars, proguardOutputJar, - proguardOutputMap) + proguardOutputMap, + proguardConfigOutput) .setProgressMessage("Trimming binary with Proguard: Obfuscation and Final Ouput Pass") .addArgument("-runtype FINAL") .addArgument("-laststageoutput") @@ -340,7 +347,8 @@ public abstract class ProguardHelper { @Nullable Artifact proguardMapping, Iterable<Artifact> libraryJars, Artifact proguardOutputJar, - @Nullable Artifact proguardOutputMap) { + @Nullable Artifact proguardOutputMap, + @Nullable Artifact proguardConfigOutput) { Builder builder = new SpawnAction.Builder() .addInputs(libraryJars) @@ -380,6 +388,12 @@ public abstract class ProguardHelper { .addOutputArgument(proguardOutputMap); } + if (proguardConfigOutput != null) { + builder + .addArgument("-printconfiguration") + .addOutputArgument(proguardConfigOutput); + } + return builder; } |