diff options
author | 2017-10-17 19:51:38 +0200 | |
---|---|---|
committer | 2017-10-18 10:28:23 +0200 | |
commit | d8f2e2d03c9469c612fe8cb2a1a9856c28e14c94 (patch) | |
tree | 73c875e061b018c51a534b479661f18fe94faa63 /src/main/java/com | |
parent | 20264552e18d8413f77b22b124e84e0267ce2b5e (diff) |
Migrate ResourceProcessorBusyBox Android actions to using SHELL_QUOTED param files.
RELNOTES: None.
PiperOrigin-RevId: 172485548
Diffstat (limited to 'src/main/java/com')
8 files changed, 35 insertions, 25 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AarGeneratorBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/AarGeneratorBuilder.java index a98bca904d..eb6169eee6 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AarGeneratorBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AarGeneratorBuilder.java @@ -128,25 +128,23 @@ public class AarGeneratorBuilder { args.add("--throwOnResourceConflict"); } - ParamFileInfo paramFileInfo = null; - if (OS.getCurrent() == OS.WINDOWS) { - // Some flags (e.g. --mainData) may specify lists (or lists of lists) separated by special - // characters (colon, semicolon, hashmark, ampersand) that don't work on Windows, and quoting - // semantics are very complicated (more so than in Bash), so let's just always use a parameter - // file. - // TODO(laszlocsomor), TODO(corysmith): restructure the Android BusyBux's flags by deprecating - // list-type and list-of-list-type flags that use such problematic separators in favor of - // multi-value flags (to remove one level of listing) and by changing all list separators to a - // platform-safe character (= comma). - paramFileInfo = ParamFileInfo.builder(ParameterFileType.UNQUOTED).setUseAlways(true).build(); - } + ParamFileInfo.Builder paramFileInfo = ParamFileInfo.builder(ParameterFileType.SHELL_QUOTED); + // Some flags (e.g. --mainData) may specify lists (or lists of lists) separated by special + // characters (colon, semicolon, hashmark, ampersand) that don't work on Windows, and quoting + // semantics are very complicated (more so than in Bash), so let's just always use a parameter + // file. + // TODO(laszlocsomor), TODO(corysmith): restructure the Android BusyBux's flags by deprecating + // list-type and list-of-list-type flags that use such problematic separators in favor of + // multi-value flags (to remove one level of listing) and by changing all list separators to a + // platform-safe character (= comma). + paramFileInfo.setUseAlways(OS.getCurrent() == OS.WINDOWS); ruleContext.registerAction( this.builder .useDefaultShellEnvironment() .addInputs(ImmutableList.<Artifact>copyOf(ins)) .addOutputs(ImmutableList.<Artifact>copyOf(outs)) - .addCommandLine(CommandLine.of(args), paramFileInfo) + .addCommandLine(CommandLine.of(args), paramFileInfo.build()) .setExecutable( ruleContext.getExecutablePrerequisite("$android_resources_busybox", Mode.HOST)) .setProgressMessage("Building AAR package for %s", ruleContext.getLabel()) diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceMergingActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceMergingActionBuilder.java index 3ae392f1fc..34a8ddcab0 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceMergingActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceMergingActionBuilder.java @@ -183,7 +183,7 @@ public class AndroidResourceMergingActionBuilder { } SpawnAction.Builder spawnActionBuilder = new SpawnAction.Builder(); - ParamFileInfo.Builder paramFileInfo = ParamFileInfo.builder(ParameterFileType.UNQUOTED); + ParamFileInfo.Builder paramFileInfo = ParamFileInfo.builder(ParameterFileType.SHELL_QUOTED); // Some flags (e.g. --mainData) may specify lists (or lists of lists) separated by special // characters (colon, semicolon, hashmark, ampersand) that don't work on Windows, and quoting // semantics are very complicated (more so than in Bash), so let's just always use a parameter diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceParsingActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceParsingActionBuilder.java index 51a67dbe34..84ab6f9161 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceParsingActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceParsingActionBuilder.java @@ -146,7 +146,7 @@ public class AndroidResourceParsingActionBuilder { builder.addExecPath("--output", output); SpawnAction.Builder spawnActionBuilder = new SpawnAction.Builder(); - ParamFileInfo.Builder paramFileInfo = ParamFileInfo.builder(ParameterFileType.UNQUOTED); + ParamFileInfo.Builder paramFileInfo = ParamFileInfo.builder(ParameterFileType.SHELL_QUOTED); // Some flags (e.g. --mainData) may specify lists (or lists of lists) separated by special // characters (colon, semicolon, hashmark, ampersand) that don't work on Windows, and quoting // semantics are very complicated (more so than in Bash), so let's just always use a parameter @@ -199,9 +199,7 @@ public class AndroidResourceParsingActionBuilder { .useDefaultShellEnvironment() .addTransitiveInputs(inputs.build()) .addOutputs(ImmutableList.copyOf(outs)) - .addCommandLine( - flatFileBuilder.build(), - ParamFileInfo.builder(ParameterFileType.UNQUOTED).build()) + .addCommandLine(flatFileBuilder.build(), paramFileInfo.build()) .setExecutable( ruleContext.getExecutablePrerequisite("$android_resources_busybox", Mode.HOST)) .setProgressMessage("Compiling Android resources for %s", ruleContext.getLabel()) diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceValidatorActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceValidatorActionBuilder.java index 74d30bc033..af55c61526 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceValidatorActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceValidatorActionBuilder.java @@ -199,7 +199,7 @@ public class AndroidResourceValidatorActionBuilder { .addInputs(inputs.build()) .addOutputs(outs.build()) .addCommandLine( - builder.build(), ParamFileInfo.builder(ParameterFileType.UNQUOTED).build()) + builder.build(), ParamFileInfo.builder(ParameterFileType.SHELL_QUOTED).build()) .setExecutable( ruleContext.getExecutablePrerequisite("$android_resources_busybox", Mode.HOST)) .setProgressMessage( @@ -275,7 +275,7 @@ public class AndroidResourceValidatorActionBuilder { .addInputs(inputs.build()) .addOutputs(ImmutableList.copyOf(outs)) .addCommandLine( - builder.build(), ParamFileInfo.builder(ParameterFileType.UNQUOTED).build()) + builder.build(), ParamFileInfo.builder(ParameterFileType.SHELL_QUOTED).build()) .setExecutable( ruleContext.getExecutablePrerequisite("$android_resources_busybox", Mode.HOST)) .setProgressMessage("Validating Android resources for %s", ruleContext.getLabel()) diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java index cb59ea4302..63c7d38f73 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java @@ -273,7 +273,7 @@ public class AndroidResourcesProcessorBuilder { configureCommonFlags(outs, inputs, builder); - ParamFileInfo.Builder paramFileInfo = ParamFileInfo.builder(ParameterFileType.UNQUOTED); + ParamFileInfo.Builder paramFileInfo = ParamFileInfo.builder(ParameterFileType.SHELL_QUOTED); // Some flags (e.g. --mainData) may specify lists (or lists of lists) separated by special // characters (colon, semicolon, hashmark, ampersand) that don't work on Windows, and quoting // semantics are very complicated (more so than in Bash), so let's just always use a parameter @@ -336,7 +336,7 @@ public class AndroidResourcesProcessorBuilder { builder.addExecPath("--aapt", sdk.getAapt().getExecutable()); configureCommonFlags(outs, inputs, builder); - ParamFileInfo.Builder paramFileInfo = ParamFileInfo.builder(ParameterFileType.UNQUOTED); + ParamFileInfo.Builder paramFileInfo = ParamFileInfo.builder(ParameterFileType.SHELL_QUOTED); // Some flags (e.g. --mainData) may specify lists (or lists of lists) separated by special // characters (colon, semicolon, hashmark, ampersand) that don't work on Windows, and quoting // semantics are very complicated (more so than in Bash), so let's just always use a parameter diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/LibraryRGeneratorActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/LibraryRGeneratorActionBuilder.java index 544106762d..b3bcefc89e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/LibraryRGeneratorActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/LibraryRGeneratorActionBuilder.java @@ -94,7 +94,7 @@ public class LibraryRGeneratorActionBuilder { .addTransitiveInputs(inputs.build()) .addOutputs(ImmutableList.<Artifact>of(rJavaClassJar)) .addCommandLine( - builder.build(), ParamFileInfo.builder(ParameterFileType.UNQUOTED).build()) + builder.build(), ParamFileInfo.builder(ParameterFileType.SHELL_QUOTED).build()) .setExecutable(executable) .setProgressMessage("Generating Library R Classes: %s", ruleContext.getLabel()) .setMnemonic("LibraryRClassGenerator") diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java index 806a413bbf..5394db5a65 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java @@ -17,15 +17,18 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.actions.ParameterFile.ParameterFileType; import com.google.devtools.build.lib.analysis.FilesToRunProvider; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.VectorArg; +import com.google.devtools.build.lib.analysis.actions.ParamFileInfo; import com.google.devtools.build.lib.analysis.actions.SpawnAction; import com.google.devtools.build.lib.analysis.config.CompilationMode; import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidAaptVersion; +import com.google.devtools.build.lib.util.OS; import java.util.Collections; import java.util.List; @@ -224,13 +227,24 @@ public class ResourceShrinkerActionBuilder { commandLine.addExecPath("--log", logOut); outputs.add(logOut); + ParamFileInfo.Builder paramFileInfo = ParamFileInfo.builder(ParameterFileType.SHELL_QUOTED); + // Some flags (e.g. --mainData) may specify lists (or lists of lists) separated by special + // characters (colon, semicolon, hashmark, ampersand) that don't work on Windows, and quoting + // semantics are very complicated (more so than in Bash), so let's just always use a parameter + // file. + // TODO(laszlocsomor), TODO(corysmith): restructure the Android BusyBux's flags by deprecating + // list-type and list-of-list-type flags that use such problematic separators in favor of + // multi-value flags (to remove one level of listing) and by changing all list separators to a + // platform-safe character (= comma). + paramFileInfo.setUseAlways(OS.getCurrent() == OS.WINDOWS); + ruleContext.registerAction( spawnActionBuilder .useDefaultShellEnvironment() .addTool(aapt) .addInputs(inputs.build()) .addOutputs(outputs.build()) - .addCommandLine(commandLine.build()) + .addCommandLine(commandLine.build(), paramFileInfo.build()) .setExecutable( ruleContext.getExecutablePrerequisite("$android_resources_busybox", Mode.HOST)) .setProgressMessage("Shrinking resources for %s", ruleContext.getLabel()) diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/RobolectricResourceSymbolsActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/RobolectricResourceSymbolsActionBuilder.java index b7470e0065..f724986bd5 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/RobolectricResourceSymbolsActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/RobolectricResourceSymbolsActionBuilder.java @@ -93,7 +93,7 @@ public class RobolectricResourceSymbolsActionBuilder { builder.addExecPath("--classJarOutput", classJarOut); SpawnAction.Builder spawnActionBuilder = new SpawnAction.Builder(); - ParamFileInfo.Builder paramFile = ParamFileInfo.builder(ParameterFileType.UNQUOTED); + ParamFileInfo.Builder paramFile = ParamFileInfo.builder(ParameterFileType.SHELL_QUOTED); // Some flags (e.g. --mainData) may specify lists (or lists of lists) separated by special // characters (colon, semicolon, hashmark, ampersand) that don't work on Windows, and quoting // semantics are very complicated (more so than in Bash), so let's just always use a parameter |