diff options
author | 2017-08-08 14:40:00 +0200 | |
---|---|---|
committer | 2017-08-09 11:33:11 +0200 | |
commit | 0535a762b8fe955d2749614c4c3c9c39cd8b89f5 (patch) | |
tree | 0914c15d1fe304e52b367edd6ae5abfa17be88b8 /src/main/java/com/google/devtools/build/lib/rules/android/ManifestMergerActionBuilder.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/ManifestMergerActionBuilder.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/ManifestMergerActionBuilder.java | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ManifestMergerActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/ManifestMergerActionBuilder.java index d9846b3c53..7e6aaad3e7 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ManifestMergerActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ManifestMergerActionBuilder.java @@ -18,6 +18,7 @@ import com.google.common.base.Functions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.actions.ParameterFile.ParameterFileType; import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.actions.ActionConstructionContext; @@ -25,6 +26,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.cmdline.Label; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; +import com.google.devtools.build.lib.util.OS; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; @@ -88,7 +90,7 @@ public class ManifestMergerActionBuilder { NestedSetBuilder<Artifact> inputs = NestedSetBuilder.naiveLinkOrder(); ImmutableList.Builder<Artifact> outputs = ImmutableList.builder(); CustomCommandLine.Builder builder = new CustomCommandLine.Builder(); - + // Set the busybox tool. builder.add("--tool").add("MERGE_MANIFEST").add("--"); @@ -130,6 +132,18 @@ public class ManifestMergerActionBuilder { outputs.add(logOut); } + 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). + this.spawnActionBuilder.alwaysUseParameterFile(ParameterFileType.UNQUOTED); + } + ruleContext.registerAction( this.spawnActionBuilder .addTransitiveInputs(inputs.build()) |