Loading android/filegroup.go +5 −1 Original line number Diff line number Diff line Loading @@ -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 { Loading android/module.go +31 −39 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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 } Loading android/paths.go +30 −7 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -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 { Loading @@ -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 Loading Loading
android/filegroup.go +5 −1 Original line number Diff line number Diff line Loading @@ -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 { Loading
android/module.go +31 −39 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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 } Loading
android/paths.go +30 −7 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -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 { Loading @@ -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 Loading