diff options
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()) |