diff --git a/common/glob.go b/common/glob.go index 7bb623df4..f4e083a4a 100644 --- a/common/glob.go +++ b/common/glob.go @@ -17,7 +17,6 @@ package common import ( "fmt" "path/filepath" - "strings" "github.com/google/blueprint" "github.com/google/blueprint/bootstrap" @@ -113,10 +112,6 @@ func Glob(ctx AndroidModuleContext, globPattern string, excludes []string) []str func GlobRule(ctx AndroidModuleContext, globPattern string, excludes []string, fileListFile, depFile string) { - var excludeArgs []string - for _, e := range excludes { - excludeArgs = append(excludeArgs, "-e "+e) - } // Create a rule to rebuild fileListFile if a directory in depFile changes. fileListFile // will only be rewritten if it has changed, preventing unnecesary build.ninja regenerations. @@ -126,7 +121,7 @@ func GlobRule(ctx AndroidModuleContext, globPattern string, excludes []string, Implicits: []string{globCmd}, Args: map[string]string{ "glob": globPattern, - "excludes": strings.Join(excludeArgs, " "), + "excludes": JoinWithPrefixAndQuote(excludes, "-e "), }, }) diff --git a/common/util.go b/common/util.go index 190e09254..599b3b17a 100644 --- a/common/util.go +++ b/common/util.go @@ -38,3 +38,30 @@ func JoinWithPrefix(strs []string, prefix string) string { } return string(ret) } + +func JoinWithPrefixAndQuote(strs []string, prefix string) string { + if len(strs) == 0 { + return "" + } + + if len(strs) == 1 { + return prefix + `"` + strs[0] + `"` + } + + n := len(" ") * (len(strs) - 1) + for _, s := range strs { + n += len(prefix) + len(s) + len(`""`) + } + + ret := make([]byte, 0, n) + for i, s := range strs { + if i != 0 { + ret = append(ret, ' ') + } + ret = append(ret, prefix...) + ret = append(ret, '"') + ret = append(ret, s...) + ret = append(ret, '"') + } + return string(ret) +}