Support long commands in RuleBuilder
If a command exceeds the linux max command line length, it will be put
into a script instead.
Fixes: 380945706
Test: Presubmits
Change-Id: I9bc4b293d6d638b38e7fb11e6c2bc35196306d9f
diff --git a/android/packaging.go b/android/packaging.go
index dcd8844..d96cccd 100644
--- a/android/packaging.go
+++ b/android/packaging.go
@@ -18,7 +18,6 @@
"fmt"
"path/filepath"
"sort"
- "strings"
"github.com/google/blueprint"
"github.com/google/blueprint/gobtools"
@@ -594,10 +593,6 @@
}
seenDir := make(map[string]bool)
- preparerPath := PathForModuleOut(ctx, "preparer.sh")
- cmd := builder.Command().Tool(preparerPath)
- var sb strings.Builder
- sb.WriteString("set -e\n")
dirs := make([]WritablePath, 0, len(dirsToSpecs))
for dir, _ := range dirsToSpecs {
@@ -616,22 +611,19 @@
entries = append(entries, ps.relPathInPackage)
if _, ok := seenDir[destDir]; !ok {
seenDir[destDir] = true
- sb.WriteString(fmt.Sprintf("mkdir -p %s\n", destDir))
+ builder.Command().Textf("mkdir -p %s", destDir)
}
if ps.symlinkTarget == "" {
- cmd.Implicit(ps.srcPath)
- sb.WriteString(fmt.Sprintf("cp %s %s\n", ps.srcPath, destPath))
+ builder.Command().Text("cp").Input(ps.srcPath).Text(destPath)
} else {
- sb.WriteString(fmt.Sprintf("ln -sf %s %s\n", ps.symlinkTarget, destPath))
+ builder.Command().Textf("ln -sf %s %s", ps.symlinkTarget, destPath)
}
if ps.executable {
- sb.WriteString(fmt.Sprintf("chmod a+x %s\n", destPath))
+ builder.Command().Textf("chmod a+x %s", destPath)
}
}
}
- WriteExecutableFileRuleVerbatim(ctx, preparerPath, sb.String())
-
return entries
}