From 08e28abc4ecd10a0e0ab2dcb683560f9c6331e1b Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Tue, 18 Sep 2018 17:05:15 -0700 Subject: [PATCH] soong_zip: support globs in -f and -D arguments -f and -D arguments can now take globs in the Soong format. Also update the use of soong_zip that jars resources to escape the globs in the arguments, and then shell-escape them when writing to the rsp file so the glob escape are not intepreted by ReadRespFile. Also remove an unused argument to the buildAAR rule that could have contained values that needed escaping. Test: m checkbuild Change-Id: I7f20bb169dc01f952d2a7681ec6ee9c05737ed37 --- java/app_builder.go | 4 ++-- java/builder.go | 2 +- java/java_resources.go | 6 ++++-- zip/cmd/main.go | 5 +++++ zip/zip.go | 15 +++++++++++++-- 5 files changed, 25 insertions(+), 7 deletions(-) diff --git a/java/app_builder.go b/java/app_builder.go index 954ca4464..e27b1b70e 100644 --- a/java/app_builder.go +++ b/java/app_builder.go @@ -103,10 +103,10 @@ var buildAAR = pctx.AndroidStaticRule("buildAAR", `cp ${manifest} ${outDir}/AndroidManifest.xml && ` + `cp ${classesJar} ${outDir}/classes.jar && ` + `cp ${rTxt} ${outDir}/R.txt && ` + - `${config.SoongZipCmd} -jar -o $out -C ${outDir} -D ${outDir} ${resArgs}`, + `${config.SoongZipCmd} -jar -o $out -C ${outDir} -D ${outDir}`, CommandDeps: []string{"${config.SoongZipCmd}"}, }, - "manifest", "classesJar", "rTxt", "resArgs", "outDir") + "manifest", "classesJar", "rTxt", "outDir") func BuildAAR(ctx android.ModuleContext, outputFile android.WritablePath, classesJar, manifest, rTxt android.Path, res android.Paths) { diff --git a/java/builder.go b/java/builder.go index 48b5a7b6c..07af8ebda 100644 --- a/java/builder.go +++ b/java/builder.go @@ -321,7 +321,7 @@ func TransformResourcesToJar(ctx android.ModuleContext, outputFile android.Writa Output: outputFile, Implicits: deps, Args: map[string]string{ - "jarArgs": strings.Join(proptools.NinjaEscape(jarArgs), " "), + "jarArgs": strings.Join(proptools.NinjaAndShellEscape(jarArgs), " "), }, }) } diff --git a/java/java_resources.go b/java/java_resources.go index fdc159063..4d8a757fa 100644 --- a/java/java_resources.go +++ b/java/java_resources.go @@ -20,6 +20,8 @@ import ( "strings" "android/soong/android" + + "github.com/google/blueprint/pathtools" ) var resourceExcludes = []string{ @@ -64,7 +66,7 @@ func ResourceDirsToJarArgs(ctx android.ModuleContext, if !strings.HasPrefix(path, dir.String()) { panic(fmt.Errorf("path %q does not start with %q", path, dir)) } - args = append(args, "-f", path) + args = append(args, "-f", pathtools.MatchEscape(path)) } } } @@ -107,7 +109,7 @@ func resourceFilesToJarArgs(ctx android.ModuleContext, if i == 0 || dir != lastDir { args = append(args, "-C", dir) } - args = append(args, "-f", path) + args = append(args, "-f", pathtools.MatchEscape(path)) lastDir = dir } diff --git a/zip/cmd/main.go b/zip/cmd/main.go index dfd56dc62..f49105a63 100644 --- a/zip/cmd/main.go +++ b/zip/cmd/main.go @@ -199,6 +199,11 @@ func main() { flags.Parse(expandedArgs[1:]) + if flags.NArg() > 0 { + fmt.Fprintf(os.Stderr, "unexpected arguments %s\n", strings.Join(flags.Args(), " ")) + usage() + } + err := zip.Run(zip.ZipArgs{ FileArgs: fArgs, OutputFilePath: *out, diff --git a/zip/zip.go b/zip/zip.go index 6b36e102c..4a02531eb 100644 --- a/zip/zip.go +++ b/zip/zip.go @@ -224,9 +224,20 @@ func Run(args ZipArgs) (err error) { noCompression := args.CompressionLevel == 0 for _, fa := range args.FileArgs { - srcs := fa.SourceFiles + var srcs []string + for _, s := range fa.SourceFiles { + globbed, _, err := pathtools.Glob(s, nil, pathtools.DontFollowSymlinks) + if err != nil { + return err + } + srcs = append(srcs, globbed...) + } if fa.GlobDir != "" { - srcs = append(srcs, recursiveGlobFiles(fa.GlobDir)...) + globbed, _, err := pathtools.Glob(filepath.Join(fa.GlobDir, "**/*"), nil, pathtools.DontFollowSymlinks) + if err != nil { + return err + } + srcs = append(srcs, globbed...) } for _, src := range srcs { err := fillPathPairs(fa, src, &pathMappings, args.NonDeflatedFiles, noCompression)