aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceParsingActionBuilder.java
diff options
context:
space:
mode:
authorGravatar laszlocsomor <laszlocsomor@google.com>2017-08-08 14:40:00 +0200
committerGravatar Marcel Hlopko <hlopko@google.com>2017-08-09 11:33:11 +0200
commit0535a762b8fe955d2749614c4c3c9c39cd8b89f5 (patch)
tree0914c15d1fe304e52b367edd6ae5abfa17be88b8 /src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceParsingActionBuilder.java
parentece0a14c1196a51828ff17c41bfa597c444b9717 (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.java19
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())