From af9c55b780c713676670b83f20f6dda7101817a6 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Tue, 3 Oct 2017 14:50:08 -0700 Subject: [PATCH] Correctly add dependencies to java_resource_dirs files java_resource_dirs was using a file list file that was generated at ninja time to get the list of files to include, which meant there were no dependencies on the files to cause res.jar to get rebuilt. Switch to using a glob at soong time instead. This is substantially similar to a glob in java_resources, except that java_resource_dirs strips the listed directories off the paths that end up in the jar. Test: TestResources in java_test.go Change-Id: I4b9b38f7b6b38a013cbb4e211187e7282a6795c0 --- java/java_test.go | 16 +++++++-------- java/resources.go | 52 +++++++++++++++++++++-------------------------- 2 files changed, 31 insertions(+), 37 deletions(-) diff --git a/java/java_test.go b/java/java_test.go index a4a3f52bf..c2c7ee265 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -408,16 +408,16 @@ func TestResources(t *testing.T) { args string }{ { - // Test that a module with java_resource_dirs includes a file list file + // Test that a module with java_resource_dirs includes the files name: "resource dirs", prop: `java_resource_dirs: ["res"]`, - args: "-C res -l ", + args: "-C res -f res/a -f res/b", }, { // Test that a module with java_resources includes the files name: "resource files", prop: `java_resources: ["res/a", "res/b"]`, - args: "-C . -f res/a -C . -f res/b", + args: "-C . -f res/a -f res/b", }, { // Test that a module with a filegroup in java_resources includes the files with the @@ -430,13 +430,13 @@ func TestResources(t *testing.T) { path: "res", srcs: ["res/a", "res/b"], }`, - args: "-C res -f res/a -C res -f res/b", + args: "-C res -f res/a -f res/b", }, { // Test that a module with "include_srcs: true" includes its source files in the resources jar name: "include sources", prop: `include_srcs: true`, - args: "-C . -f a.java -C . -f b.java -C . -f c.java", + args: "-C . -f a.java -f b.java -f c.java", }, } @@ -462,8 +462,8 @@ func TestResources(t *testing.T) { foo.Inputs.Strings(), fooRes.Output.String()) } - if !strings.Contains(fooRes.Args["jarArgs"], test.args) { - t.Errorf("foo resource jar args %q does not contain %q", + if fooRes.Args["jarArgs"] != test.args { + t.Errorf("foo resource jar args %q is not %q", fooRes.Args["jarArgs"], test.args) } }) @@ -489,7 +489,7 @@ func TestExcludeResources(t *testing.T) { fooRes := ctx.ModuleForTests("foo", "android_common").Output("res.jar") - expected := "-C res -l " + fooRes.Implicits[0].String() + expected := "-C res -f res/a -f res/b" if fooRes.Args["jarArgs"] != expected { t.Errorf("foo resource jar args %q is not %q", fooRes.Args["jarArgs"], expected) diff --git a/java/resources.go b/java/resources.go index d552428a1..a596fd7e6 100644 --- a/java/resources.go +++ b/java/resources.go @@ -19,8 +19,6 @@ import ( "path/filepath" "strings" - "github.com/google/blueprint/bootstrap" - "android/soong/android" ) @@ -33,15 +31,6 @@ var resourceExcludes = []string{ "**/*~", } -func isStringInSlice(str string, slice []string) bool { - for _, s := range slice { - if s == str { - return true - } - } - return false -} - func ResourceDirsToJarArgs(ctx android.ModuleContext, resourceDirs, excludeDirs []string) (args []string, deps android.Paths) { var excludes []string @@ -53,22 +42,22 @@ func ResourceDirsToJarArgs(ctx android.ModuleContext, excludes = append(excludes, resourceExcludes...) - for _, resourceDir := range resourceDirs { - if isStringInSlice(resourceDir, excludeDirs) { - continue - } - resourceDir := android.PathForModuleSrc(ctx, resourceDir) - dirs := ctx.Glob(resourceDir.String(), nil) - for _, dir := range dirs { - fileListFile := android.ResPathWithName(ctx, dir, "resources.list") - depFile := fileListFile.String() + ".d" + for _, dir := range resourceDirs { + dir := android.PathForModuleSrc(ctx, dir).String() + files := ctx.Glob(filepath.Join(dir, "**/*"), excludes) - pattern := filepath.Join(dir.String(), "**/*") - bootstrap.GlobFile(ctx, pattern, excludes, fileListFile.String(), depFile) - args = append(args, - "-C", dir.String(), - "-l", fileListFile.String()) - deps = append(deps, fileListFile) + deps = append(deps, files...) + + if len(files) > 0 { + args = append(args, "-C", dir) + + for _, f := range files { + path := f.String() + if !strings.HasPrefix(path, dir) { + panic(fmt.Errorf("path %q does not start with %q", path, dir)) + } + args = append(args, "-f", path) + } } } @@ -98,14 +87,19 @@ func resourceFilesToJarArgs(ctx android.ModuleContext, files := ctx.ExpandSources(res, exclude) - for _, f := range files { + lastDir := "" + for i, f := range files { rel := f.Rel() path := f.String() if !strings.HasSuffix(path, rel) { panic(fmt.Errorf("path %q does not end with %q", path, rel)) } - path = filepath.Clean(strings.TrimSuffix(path, rel)) - args = append(args, "-C", filepath.Clean(path), "-f", f.String()) + dir := filepath.Clean(strings.TrimSuffix(path, rel)) + if i == 0 || dir != lastDir { + args = append(args, "-C", dir) + } + args = append(args, "-f", path) + lastDir = dir } return args, files