diff --git a/android/module.go b/android/module.go index 07c4e8fce..4a8e8acf6 100644 --- a/android/module.go +++ b/android/module.go @@ -1220,7 +1220,7 @@ func (ctx *androidModuleContext) ExpandSourcesSubDir(srcFiles, excludes []string 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 @@ func (ctx *androidModuleContext) Glob(globPattern string, excludes []string) Pat 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 3b1cea67d..ffdb39354 100644 --- a/android/paths.go +++ b/android/paths.go @@ -228,14 +228,17 @@ func PathsForModuleSrc(ctx ModuleContext, paths []string) Paths { // 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 e824d0f6e..b573c2e65 100644 --- a/cc/llndk_library.go +++ b/cc/llndk_library.go @@ -100,7 +100,7 @@ func (stub *llndkStubDecorator) linkerFlags(ctx ModuleContext, flags Flags) Flag 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 d7c2a0619..9fabc97cb 100644 --- a/cc/ndk_headers.go +++ b/cc/ndk_headers.go @@ -202,7 +202,7 @@ func (m *preprocessedHeaderModule) GenerateAndroidBuildActions(ctx android.Modul 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 34f05b736..ac88df798 100644 --- a/java/app.go +++ b/java/app.go @@ -342,17 +342,7 @@ func AndroidAppFactory() android.Module { } 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 @@ func (overlaySingleton) GenerateBuildActions(ctx android.SingletonContext) { } 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)) } }