summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--android/filegroup.go6
-rw-r--r--android/module.go70
-rw-r--r--android/paths.go37
3 files changed, 66 insertions, 47 deletions
diff --git a/android/filegroup.go b/android/filegroup.go
index c2be22a32..0b716c649 100644
--- a/android/filegroup.go
+++ b/android/filegroup.go
@@ -60,7 +60,11 @@ func FileGroupFactory() Module {
}
func (fg *fileGroup) GenerateAndroidBuildActions(ctx ModuleContext) {
- fg.srcs = ctx.ExpandSourcesSubDir(fg.properties.Srcs, fg.properties.Exclude_srcs, String(fg.properties.Path))
+ fg.srcs = ctx.ExpandSources(fg.properties.Srcs, fg.properties.Exclude_srcs)
+
+ if fg.properties.Path != nil {
+ fg.srcs = PathsWithModuleSrcSubDir(ctx, fg.srcs, String(fg.properties.Path))
+ }
}
func (fg *fileGroup) Srcs() Paths {
diff --git a/android/module.go b/android/module.go
index 9a69a2631..dfeb45d14 100644
--- a/android/module.go
+++ b/android/module.go
@@ -117,7 +117,6 @@ type ModuleContext interface {
ExpandSources(srcFiles, excludes []string) Paths
ExpandSource(srcFile, prop string) Path
ExpandOptionalSource(srcFile *string, prop string) OptionalPath
- ExpandSourcesSubDir(srcFiles, excludes []string, subDir string) Paths
Glob(globPattern string, excludes []string) Paths
GlobFiles(globPattern string, excludes []string) Paths
@@ -1421,39 +1420,6 @@ type SourceFileProducer interface {
// Returns a list of paths expanded from globs and modules referenced using ":module" syntax. The property must
// be tagged with `android:"path" to support automatic source module dependency resolution.
func (ctx *androidModuleContext) ExpandSources(srcFiles, excludes []string) Paths {
- return ctx.ExpandSourcesSubDir(srcFiles, excludes, "")
-}
-
-// Returns a single path expanded from globs and modules referenced using ":module" syntax. The property must
-// be tagged with `android:"path" to support automatic source module dependency resolution.
-func (ctx *androidModuleContext) ExpandSource(srcFile, prop string) Path {
- srcFiles := ctx.ExpandSourcesSubDir([]string{srcFile}, nil, "")
- if len(srcFiles) == 1 {
- return srcFiles[0]
- } else if len(srcFiles) == 0 {
- if ctx.Config().AllowMissingDependencies() {
- ctx.AddMissingDependencies([]string{srcFile})
- } else {
- ctx.PropertyErrorf(prop, "%s path %s does not exist", prop, srcFile)
- }
- return nil
- } else {
- ctx.PropertyErrorf(prop, "module providing %s must produce exactly one file", prop)
- return nil
- }
-}
-
-// Returns an optional single path expanded from globs and modules referenced using ":module" syntax if
-// the srcFile is non-nil. The property must be tagged with `android:"path" to support automatic source module
-// dependency resolution.
-func (ctx *androidModuleContext) ExpandOptionalSource(srcFile *string, prop string) OptionalPath {
- if srcFile != nil {
- return OptionalPathForPath(ctx.ExpandSource(*srcFile, prop))
- }
- return OptionalPath{}
-}
-
-func (ctx *androidModuleContext) ExpandSourcesSubDir(srcFiles, excludes []string, subDir string) Paths {
prefix := PathForModuleSrc(ctx).String()
var expandedExcludes []string
@@ -1508,22 +1474,48 @@ func (ctx *androidModuleContext) ExpandSourcesSubDir(srcFiles, excludes []string
}
} else if pathtools.IsGlob(s) {
globbedSrcFiles := ctx.GlobFiles(filepath.Join(prefix, s), expandedExcludes)
- for i, s := range globbedSrcFiles {
- globbedSrcFiles[i] = s.(ModuleSrcPath).WithSubDir(ctx, subDir)
- }
+ globbedSrcFiles = PathsWithModuleSrcSubDir(ctx, globbedSrcFiles, "")
expandedSrcFiles = append(expandedSrcFiles, globbedSrcFiles...)
} else {
- p := PathForModuleSrc(ctx, s).WithSubDir(ctx, subDir)
+ p := PathForModuleSrc(ctx, s)
j := findStringInSlice(p.String(), expandedExcludes)
if j == -1 {
expandedSrcFiles = append(expandedSrcFiles, p)
}
-
}
}
return expandedSrcFiles
}
+// Returns a single path expanded from globs and modules referenced using ":module" syntax. The property must
+// be tagged with `android:"path" to support automatic source module dependency resolution.
+func (ctx *androidModuleContext) ExpandSource(srcFile, prop string) Path {
+ srcFiles := ctx.ExpandSources([]string{srcFile}, nil)
+ if len(srcFiles) == 1 {
+ return srcFiles[0]
+ } else if len(srcFiles) == 0 {
+ if ctx.Config().AllowMissingDependencies() {
+ ctx.AddMissingDependencies([]string{srcFile})
+ } else {
+ ctx.PropertyErrorf(prop, "%s path %s does not exist", prop, srcFile)
+ }
+ return nil
+ } else {
+ ctx.PropertyErrorf(prop, "module providing %s must produce exactly one file", prop)
+ return nil
+ }
+}
+
+// Returns an optional single path expanded from globs and modules referenced using ":module" syntax if
+// the srcFile is non-nil. The property must be tagged with `android:"path" to support automatic source module
+// dependency resolution.
+func (ctx *androidModuleContext) ExpandOptionalSource(srcFile *string, prop string) OptionalPath {
+ if srcFile != nil {
+ return OptionalPathForPath(ctx.ExpandSource(*srcFile, prop))
+ }
+ return OptionalPath{}
+}
+
func (ctx *androidModuleContext) RequiredModuleNames() []string {
return ctx.module.base().commonProperties.Required
}
diff --git a/android/paths.go b/android/paths.go
index afde55e02..a0ea7535b 100644
--- a/android/paths.go
+++ b/android/paths.go
@@ -620,6 +620,15 @@ func (p SourcePath) Join(ctx PathContext, paths ...string) SourcePath {
return p.withRel(path)
}
+// join is like Join but does less path validation.
+func (p SourcePath) join(ctx PathContext, paths ...string) SourcePath {
+ path, err := validateSafePath(paths...)
+ if err != nil {
+ reportPathError(ctx, err)
+ }
+ return p.withRel(path)
+}
+
// OverlayPath returns the overlay for `path' if it exists. This assumes that the
// SourcePath is the path to a resource overlay directory.
func (p SourcePath) OverlayPath(ctx ModuleContext, path Path) OptionalPath {
@@ -773,10 +782,30 @@ func PathForModuleSrc(ctx ModuleContext, paths ...string) ModuleSrcPath {
} else if !exists {
reportPathErrorf(ctx, "module source path %q does not exist", path)
}
-
return path
}
+// PathsWithModuleSrcSubDir takes a list of Paths and returns a new list of Paths where Rel() on each path
+// will return the path relative to subDir in the module's source directory. If any input paths are not located
+// inside subDir then a path error will be reported.
+func PathsWithModuleSrcSubDir(ctx ModuleContext, paths Paths, subDir string) Paths {
+ paths = append(Paths(nil), paths...)
+ subDirFullPath := PathForModuleSrc(ctx, subDir)
+ for i, path := range paths {
+ rel := Rel(ctx, subDirFullPath.String(), path.String())
+ paths[i] = subDirFullPath.join(ctx, rel)
+ }
+ return paths
+}
+
+// PathWithModuleSrcSubDir takes a Path and returns a Path where Rel() will return the path relative to subDir in the
+// module's source directory. If the input path is not located inside subDir then a path error will be reported.
+func PathWithModuleSrcSubDir(ctx ModuleContext, path Path, subDir string) Path {
+ subDirFullPath := PathForModuleSrc(ctx, subDir)
+ rel := Rel(ctx, subDirFullPath.String(), path.String())
+ return subDirFullPath.Join(ctx, rel)
+}
+
// OptionalPathForModuleSrc returns an OptionalPath. The OptionalPath contains a
// valid path if p is non-nil.
func OptionalPathForModuleSrc(ctx ModuleContext, p *string) OptionalPath {
@@ -799,12 +828,6 @@ func (p ModuleSrcPath) resPathWithName(ctx ModuleContext, name string) ModuleRes
return PathForModuleRes(ctx, p.path, name)
}
-func (p ModuleSrcPath) WithSubDir(ctx ModuleContext, subdir string) ModuleSrcPath {
- subdir = PathForModuleSrc(ctx, subdir).String()
- p.rel = Rel(ctx, subdir, p.path)
- return p
-}
-
// ModuleOutPath is a Path representing a module's output directory.
type ModuleOutPath struct {
OutputPath