diff options
author | laszlocsomor <laszlocsomor@google.com> | 2017-08-08 14:40:00 +0200 |
---|---|---|
committer | Marcel Hlopko <hlopko@google.com> | 2017-08-09 11:33:11 +0200 |
commit | 0535a762b8fe955d2749614c4c3c9c39cd8b89f5 (patch) | |
tree | 0914c15d1fe304e52b367edd6ae5abfa17be88b8 /src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceParsingActionBuilder.java | |
parent | ece0a14c1196a51828ff17c41bfa597c444b9717 (diff) |
Windows, AndroidBusyBox: always use params files
On Windows, Bazel will always use params files for
some BusyBox tools, because some flags of these
tools expect values with special characters in
them.
We need this change so Bazel can safely pass such
flags to the BusyBox on Windows.
See https://github.com/bazelbuild/bazel/issues/3264
RELNOTES: none
PiperOrigin-RevId: 164582899
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceParsingActionBuilder.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceParsingActionBuilder.java | 19 |
1 files changed, 17 insertions, 2 deletions
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 2ff46cd9d7..62ea11d86e 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 @@ -29,6 +29,7 @@ import com.google.devtools.build.lib.analysis.actions.CustomCommandLine; import com.google.devtools.build.lib.analysis.actions.SpawnAction; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; +import com.google.devtools.build.lib.util.OS; import com.google.devtools.build.lib.vfs.PathFragment; import java.util.ArrayList; import java.util.List; @@ -141,10 +142,24 @@ public class AndroidResourceParsingActionBuilder { Preconditions.checkNotNull(output); builder.addExecPath("--output", output); + SpawnAction.Builder spawnActionBuilder = new SpawnAction.Builder(); + 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). + spawnActionBuilder.alwaysUseParameterFile(ParameterFileType.UNQUOTED); + } else { + spawnActionBuilder.useParameterFile(ParameterFileType.UNQUOTED); + } + // Create the spawn action. ruleContext.registerAction( - new SpawnAction.Builder() - .useParameterFile(ParameterFileType.UNQUOTED) + spawnActionBuilder .addTransitiveInputs(inputs.build()) .addOutputs(ImmutableList.of(output)) .setCommandLine(builder.build()) |