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
diff --git a/java/java_test.go b/java/java_test.go
index a4a3f52..c2c7ee2 100644
--- a/java/java_test.go
+++ b/java/java_test.go
@@ -408,16 +408,16 @@
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 @@
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 @@
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 @@
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 d552428..a596fd7 100644
--- a/java/resources.go
+++ b/java/resources.go
@@ -19,8 +19,6 @@
"path/filepath"
"strings"
- "github.com/google/blueprint/bootstrap"
-
"android/soong/android"
)
@@ -33,15 +31,6 @@
"**/*~",
}
-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 @@
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 @@
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