aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2015-06-17 15:09:06 -0700
committerColin Cross <ccross@android.com>2015-06-17 15:36:48 -0700
commit8f101b45fc876b63f2a556c5b19801dbc8ac5fdc (patch)
tree2be41986a7a55669b2a6632f84685c6a46e343a8
parent1f8c52be73d31f3347bcf7f8fb29b49e87b3864e (diff)
downloadbuild_soong-8f101b45fc876b63f2a556c5b19801dbc8ac5fdc.tar.gz
build_soong-8f101b45fc876b63f2a556c5b19801dbc8ac5fdc.tar.bz2
build_soong-8f101b45fc876b63f2a556c5b19801dbc8ac5fdc.zip
Allow common.Glob to be called by singletons
Make common.Glob take an interface that is the intersection of blueprint.ModuleContext and blueprint.SingletonContext used by Glob and GlobRule, allowing it to be called on either. Also move ExpandSources and Glob into AndroidModuleContext. Change-Id: I8d1a3160c5dd201033afdb37210e82d8065b137d
-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"