Turn GlobFiles into a Glob for files, use it
GlobFiles had allowed results to be anywhere in the source tree,
restrict it to results within the current module directory.
Then use it for ExpandSources and other places where we only want files.
This fixes using '*' in cc_test's `data` property, which can only
support files.
The only thing this changes today is that java_resource_dirs and
java_resources no longer pass directories to soong_zip's -f argument.
core-libart previously added some icu directories, now it only passes
files.
Bug: 71906438
Test: only expected changes in out/soong/build.ninja
Test: add data: ["**/*"] to a cc_test, build successfully
Change-Id: Iff1bd8c005a48e431c740706d7e23f4f957d8b1d
diff --git a/android/module.go b/android/module.go
index 07c4e8f..4a8e8ac 100644
--- a/android/module.go
+++ b/android/module.go
@@ -1220,7 +1220,7 @@
ctx.ModuleErrorf("srcs dependency %q is not a source file producing module", m)
}
} else if pathtools.IsGlob(s) {
- globbedSrcFiles := ctx.Glob(filepath.Join(prefix, s), expandedExcludes)
+ globbedSrcFiles := ctx.GlobFiles(filepath.Join(prefix, s), expandedExcludes)
for i, s := range globbedSrcFiles {
globbedSrcFiles[i] = s.(ModuleSrcPath).WithSubDir(ctx, subDir)
}
@@ -1246,25 +1246,15 @@
if err != nil {
ctx.ModuleErrorf("glob: %s", err.Error())
}
- return pathsForModuleSrcFromFullPath(ctx, ret)
+ return pathsForModuleSrcFromFullPath(ctx, ret, true)
}
-// glob only "files" under the directory relative to top of the source tree.
func (ctx *androidModuleContext) GlobFiles(globPattern string, excludes []string) Paths {
- paths, err := ctx.GlobWithDeps(globPattern, excludes)
+ ret, err := ctx.GlobWithDeps(globPattern, excludes)
if err != nil {
ctx.ModuleErrorf("glob: %s", err.Error())
}
- var ret []Path
- for _, p := range paths {
- if isDir, err := ctx.Fs().IsDir(p); err != nil {
- ctx.ModuleErrorf("error in IsDir(%s): %s", p, err.Error())
- return nil
- } else if !isDir {
- ret = append(ret, PathForSource(ctx, p))
- }
- }
- return ret
+ return pathsForModuleSrcFromFullPath(ctx, ret, false)
}
func init() {
diff --git a/android/paths.go b/android/paths.go
index 3b1cea6..ffdb393 100644
--- a/android/paths.go
+++ b/android/paths.go
@@ -228,14 +228,17 @@
// pathsForModuleSrcFromFullPath returns Paths rooted from the module's local
// source directory, but strip the local source directory from the beginning of
-// each string.
-func pathsForModuleSrcFromFullPath(ctx ModuleContext, paths []string) Paths {
+// each string. If incDirs is false, strip paths with a trailing '/' from the list.
+func pathsForModuleSrcFromFullPath(ctx ModuleContext, paths []string, incDirs bool) Paths {
prefix := filepath.Join(ctx.Config().srcDir, ctx.ModuleDir()) + "/"
if prefix == "./" {
prefix = ""
}
ret := make(Paths, 0, len(paths))
for _, p := range paths {
+ if !incDirs && strings.HasSuffix(p, "/") {
+ continue
+ }
path := filepath.Clean(p)
if !strings.HasPrefix(path, prefix) {
reportPathErrorf(ctx, "Path '%s' is not in module source directory '%s'", p, prefix)
diff --git a/cc/llndk_library.go b/cc/llndk_library.go
index e824d0f..b573c2e 100644
--- a/cc/llndk_library.go
+++ b/cc/llndk_library.go
@@ -100,7 +100,7 @@
func (stub *llndkStubDecorator) processHeaders(ctx ModuleContext, srcHeaderDir string, outDir android.ModuleGenPath) android.Path {
srcDir := android.PathForModuleSrc(ctx, srcHeaderDir)
- srcFiles := ctx.Glob(filepath.Join(srcDir.String(), "**/*.h"), nil)
+ srcFiles := ctx.GlobFiles(filepath.Join(srcDir.String(), "**/*.h"), nil)
var installPaths []android.WritablePath
for _, header := range srcFiles {
diff --git a/cc/ndk_headers.go b/cc/ndk_headers.go
index d7c2a06..9fabc97 100644
--- a/cc/ndk_headers.go
+++ b/cc/ndk_headers.go
@@ -202,7 +202,7 @@
fromSrcPath := android.PathForModuleSrc(ctx, String(m.properties.From))
toOutputPath := getCurrentIncludePath(ctx).Join(ctx, String(m.properties.To))
- srcFiles := ctx.Glob(filepath.Join(fromSrcPath.String(), "**/*.h"), nil)
+ srcFiles := ctx.GlobFiles(filepath.Join(fromSrcPath.String(), "**/*.h"), nil)
var installPaths []android.WritablePath
for _, header := range srcFiles {
installDir := getHeaderInstallDir(ctx, header, String(m.properties.From), String(m.properties.To))
diff --git a/java/app.go b/java/app.go
index 34f05b7..ac88df7 100644
--- a/java/app.go
+++ b/java/app.go
@@ -342,17 +342,7 @@
}
func resourceGlob(ctx android.ModuleContext, dir android.Path) android.Paths {
- var ret android.Paths
- files := ctx.Glob(filepath.Join(dir.String(), "**/*"), aaptIgnoreFilenames)
- for _, f := range files {
- if isDir, err := ctx.Fs().IsDir(f.String()); err != nil {
- ctx.ModuleErrorf("error in IsDir(%s): %s", f.String(), err.Error())
- return nil
- } else if !isDir {
- ret = append(ret, f)
- }
- }
- return ret
+ return ctx.GlobFiles(filepath.Join(dir.String(), "**/*"), aaptIgnoreFilenames)
}
type overlayGlobResult struct {
@@ -440,10 +430,7 @@
}
var paths android.Paths
for _, f := range files {
- if isDir, err := ctx.Fs().IsDir(f); err != nil {
- ctx.Errorf("error in IsDir(%s): %s", f, err.Error())
- return
- } else if !isDir {
+ if !strings.HasSuffix(f, "/") {
paths = append(paths, android.PathForSource(ctx, f))
}
}