aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cc/cc.go2
-rw-r--r--common/glob.go39
-rw-r--r--common/module.go40
-rw-r--r--genrule/genrule.go4
-rw-r--r--java/app.go4
-rw-r--r--java/java.go2
-rw-r--r--java/resources.go2
7 files changed, 53 insertions, 40 deletions
diff --git a/cc/cc.go b/cc/cc.go
index 61e25684..051bbaf9 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -531,7 +531,7 @@ func (c *CCBase) customCompileObjs(ctx common.AndroidModuleContext, flags CCFlag
buildFlags := ccFlagsToBuilderFlags(flags)
- srcFiles = common.ExpandSources(ctx, srcFiles)
+ srcFiles = ctx.ExpandSources(srcFiles)
srcFiles, deps := genSources(ctx, srcFiles, buildFlags)
return TransformSourceToObj(ctx, subdir, srcFiles, buildFlags, deps)
diff --git a/common/glob.go b/common/glob.go
index 669d1857..d63f87a2 100644
--- a/common/glob.go
+++ b/common/glob.go
@@ -66,41 +66,20 @@ func hasGlob(in []string) bool {
return false
}
-func expandGlobs(ctx AndroidModuleContext, in []string) []string {
- if !hasGlob(in) {
- return in
- }
-
- var excludes []string
- for _, s := range in {
- if s[0] == '-' {
- excludes = append(excludes, s[1:])
- }
- }
-
- out := make([]string, 0, len(in))
- for _, s := range in {
- if s[0] == '-' {
- continue
- } else if glob.IsGlob(s) {
- out = append(out, Glob(ctx, s, excludes)...)
- } else {
- out = append(out, s)
- }
- }
-
- return out
+// The subset of ModuleContext and SingletonContext needed by Glob
+type globContext interface {
+ Build(pctx *blueprint.PackageContext, params blueprint.BuildParams)
+ AddNinjaFileDeps(deps ...string)
}
-func Glob(ctx AndroidModuleContext, globPattern string, excludes []string) []string {
- fileListFile := filepath.Join(ModuleOutDir(ctx), "glob", globToString(globPattern))
+func Glob(ctx globContext, outDir string, globPattern string, excludes []string) ([]string, error) {
+ fileListFile := filepath.Join(outDir, "glob", globToString(globPattern))
depFile := fileListFile + ".d"
// Get a globbed file list, and write out fileListFile and depFile
files, err := glob.GlobWithDepFile(globPattern, fileListFile, depFile, excludes)
if err != nil {
- ctx.ModuleErrorf("glob: %s", err.Error())
- return []string{globPattern}
+ return nil, err
}
GlobRule(ctx, globPattern, excludes, fileListFile, depFile)
@@ -108,10 +87,10 @@ func Glob(ctx AndroidModuleContext, globPattern string, excludes []string) []str
// Make build.ninja depend on the fileListFile
ctx.AddNinjaFileDeps(fileListFile)
- return files
+ return files, nil
}
-func GlobRule(ctx AndroidModuleContext, globPattern string, excludes []string,
+func GlobRule(ctx globContext, globPattern string, excludes []string,
fileListFile, depFile string) {
// Create a rule to rebuild fileListFile if a directory in depFile changes. fileListFile
diff --git a/common/module.go b/common/module.go
index 327aeca5..33c586cd 100644
--- a/common/module.go
+++ b/common/module.go
@@ -18,6 +18,8 @@ import (
"path/filepath"
"runtime"
+ "android/soong/glob"
+
"github.com/google/blueprint"
)
@@ -49,6 +51,9 @@ type AndroidModuleContext interface {
blueprint.ModuleContext
androidBaseContext
+ ExpandSources(srcFiles []string) []string
+ Glob(globPattern string, excludes []string) []string
+
InstallFile(installPath, srcPath string, deps ...string) string
InstallFileName(installPath, name, srcPath string, deps ...string) string
CheckbuildFile(srcPath string)
@@ -465,7 +470,7 @@ func isAndroidModule(m blueprint.Module) bool {
return ok
}
-func ExpandSources(ctx AndroidModuleContext, srcFiles []string) []string {
+func (ctx *androidModuleContext) ExpandSources(srcFiles []string) []string {
prefix := ModuleSrcDir(ctx)
for i, srcFile := range srcFiles {
if srcFile[0] == '-' {
@@ -475,8 +480,37 @@ func ExpandSources(ctx AndroidModuleContext, srcFiles []string) []string {
}
}
- srcFiles = expandGlobs(ctx, srcFiles)
- return srcFiles
+ if !hasGlob(srcFiles) {
+ return srcFiles
+ }
+
+ var excludes []string
+ for _, s := range srcFiles {
+ if s[0] == '-' {
+ excludes = append(excludes, s[1:])
+ }
+ }
+
+ globbedSrcFiles := make([]string, 0, len(srcFiles))
+ for _, s := range srcFiles {
+ if s[0] == '-' {
+ continue
+ } else if glob.IsGlob(s) {
+ globbedSrcFiles = append(globbedSrcFiles, ctx.Glob(s, excludes)...)
+ } else {
+ globbedSrcFiles = append(globbedSrcFiles, s)
+ }
+ }
+
+ return globbedSrcFiles
+}
+
+func (ctx *androidModuleContext) Glob(globPattern string, excludes []string) []string {
+ ret, err := Glob(ctx, ModuleOutDir(ctx), globPattern, excludes)
+ if err != nil {
+ ctx.ModuleErrorf("glob: %s", err.Error())
+ }
+ return ret
}
func BuildTargetSingleton() blueprint.Singleton {
diff --git a/genrule/genrule.go b/genrule/genrule.go
index 42ab047a..ea30e3d1 100644
--- a/genrule/genrule.go
+++ b/genrule/genrule.go
@@ -132,7 +132,7 @@ func GenSrcsFactory() (blueprint.Module, []interface{}) {
properties := &genSrcsProperties{}
tasks := func(ctx common.AndroidModuleContext) []generateTask {
- srcFiles := common.ExpandSources(ctx, properties.Srcs)
+ srcFiles := ctx.ExpandSources(properties.Srcs)
tasks := make([]generateTask, 0, len(srcFiles))
for _, in := range srcFiles {
out := pathtools.ReplaceExtension(in, properties.Output_extension)
@@ -159,7 +159,7 @@ func GenRuleFactory() (blueprint.Module, []interface{}) {
tasks := func(ctx common.AndroidModuleContext) []generateTask {
return []generateTask{
{
- in: common.ExpandSources(ctx, properties.Srcs),
+ in: ctx.ExpandSources(properties.Srcs),
out: filepath.Join(common.ModuleGenDir(ctx), properties.Out),
},
}
diff --git a/java/app.go b/java/app.go
index 869cfea0..5f153cf4 100644
--- a/java/app.go
+++ b/java/app.go
@@ -244,14 +244,14 @@ func (a *AndroidApp) aaptFlags(ctx common.AndroidModuleContext) ([]string, []str
var aaptDeps []string
var hasResources bool
for _, d := range resourceDirs {
- newDeps := common.Glob(ctx, filepath.Join(d, "**/*"), aaptIgnoreFilenames)
+ newDeps := ctx.Glob(filepath.Join(d, "**/*"), aaptIgnoreFilenames)
aaptDeps = append(aaptDeps, newDeps...)
if len(newDeps) > 0 {
hasResources = true
}
}
for _, d := range assetDirs {
- newDeps := common.Glob(ctx, filepath.Join(d, "**/*"), aaptIgnoreFilenames)
+ newDeps := ctx.Glob(filepath.Join(d, "**/*"), aaptIgnoreFilenames)
aaptDeps = append(aaptDeps, newDeps...)
}
diff --git a/java/java.go b/java/java.go
index d22f47a7..9787d602 100644
--- a/java/java.go
+++ b/java/java.go
@@ -292,7 +292,7 @@ func (j *javaBase) GenerateJavaBuildActions(ctx common.AndroidModuleContext) {
javacDeps = append(javacDeps, classpath...)
}
- srcFiles := common.ExpandSources(ctx, j.properties.Srcs)
+ srcFiles := ctx.ExpandSources(j.properties.Srcs)
srcFiles = j.genSources(ctx, srcFiles, flags)
diff --git a/java/resources.go b/java/resources.go
index 7aa909ee..f9d7a05b 100644
--- a/java/resources.go
+++ b/java/resources.go
@@ -47,7 +47,7 @@ func ResourceDirsToJarSpecs(ctx common.AndroidModuleContext, resourceDirs []stri
continue
}
resourceDir := filepath.Join(common.ModuleSrcDir(ctx), resourceDir)
- dirs := common.Glob(ctx, resourceDir, nil)
+ dirs := ctx.Glob(resourceDir, nil)
for _, dir := range dirs {
fileListFile := filepath.Join(common.ModuleOutDir(ctx), "res", dir, "resources.list")
depFile := fileListFile + ".d"