Support data properties for test binaries
Allow tests to specify a data property that lists files or filegroup modules that will be packaged alongside the test. Also add a path property to filegroup modules to allow shifting the path of the packaged files, and add ExpandSourcesSubDir to expand the filegroup sources while including a shifted relative path in the Paths objects. Test: soong tests, manually adding data to a module Change-Id: I52a48942660e12755d313ef13279313361b4fc35
This commit is contained in:
@@ -86,6 +86,11 @@ type Path interface {
|
||||
|
||||
// Base returns the last element of the path
|
||||
Base() string
|
||||
|
||||
// Rel returns the portion of the path relative to the directory it was created from. For
|
||||
// example, Rel on a PathsForModuleSrc would return the path relative to the module source
|
||||
// directory.
|
||||
Rel() string
|
||||
}
|
||||
|
||||
// WritablePath is a type of path that can be used as an output for build rules.
|
||||
@@ -283,6 +288,7 @@ func (p WritablePaths) Strings() []string {
|
||||
type basePath struct {
|
||||
path string
|
||||
config Config
|
||||
rel string
|
||||
}
|
||||
|
||||
func (p basePath) Ext() string {
|
||||
@@ -293,6 +299,13 @@ func (p basePath) Base() string {
|
||||
return filepath.Base(p.path)
|
||||
}
|
||||
|
||||
func (p basePath) Rel() string {
|
||||
if p.rel != "" {
|
||||
return p.rel
|
||||
}
|
||||
return p.path
|
||||
}
|
||||
|
||||
// SourcePath is a Path representing a file path rooted from SrcDir
|
||||
type SourcePath struct {
|
||||
basePath
|
||||
@@ -304,7 +317,7 @@ var _ Path = SourcePath{}
|
||||
// code that is embedding ninja variables in paths
|
||||
func safePathForSource(ctx PathContext, path string) SourcePath {
|
||||
p := validateSafePath(ctx, path)
|
||||
ret := SourcePath{basePath{p, pathConfig(ctx)}}
|
||||
ret := SourcePath{basePath{p, pathConfig(ctx), ""}}
|
||||
|
||||
abs, err := filepath.Abs(ret.String())
|
||||
if err != nil {
|
||||
@@ -330,7 +343,7 @@ func safePathForSource(ctx PathContext, path string) SourcePath {
|
||||
// will return a usable, but invalid SourcePath, and report a ModuleError.
|
||||
func PathForSource(ctx PathContext, paths ...string) SourcePath {
|
||||
p := validatePath(ctx, paths...)
|
||||
ret := SourcePath{basePath{p, pathConfig(ctx)}}
|
||||
ret := SourcePath{basePath{p, pathConfig(ctx), ""}}
|
||||
|
||||
abs, err := filepath.Abs(ret.String())
|
||||
if err != nil {
|
||||
@@ -365,7 +378,7 @@ func OptionalPathForSource(ctx PathContext, intermediates string, paths ...strin
|
||||
}
|
||||
|
||||
p := validatePath(ctx, paths...)
|
||||
path := SourcePath{basePath{p, pathConfig(ctx)}}
|
||||
path := SourcePath{basePath{p, pathConfig(ctx), ""}}
|
||||
|
||||
abs, err := filepath.Abs(path.String())
|
||||
if err != nil {
|
||||
@@ -476,7 +489,7 @@ var _ Path = OutputPath{}
|
||||
// OutputPath, and report a ModuleError.
|
||||
func PathForOutput(ctx PathContext, paths ...string) OutputPath {
|
||||
path := validatePath(ctx, paths...)
|
||||
return OutputPath{basePath{path, pathConfig(ctx)}}
|
||||
return OutputPath{basePath{path, pathConfig(ctx), ""}}
|
||||
}
|
||||
|
||||
func (p OutputPath) writablePath() {}
|
||||
@@ -516,8 +529,10 @@ var _ resPathProvider = ModuleSrcPath{}
|
||||
// PathForModuleSrc returns a ModuleSrcPath representing the paths... under the
|
||||
// module's local source directory.
|
||||
func PathForModuleSrc(ctx ModuleContext, paths ...string) ModuleSrcPath {
|
||||
path := validatePath(ctx, paths...)
|
||||
return ModuleSrcPath{PathForSource(ctx, ctx.ModuleDir(), path)}
|
||||
p := validatePath(ctx, paths...)
|
||||
path := ModuleSrcPath{PathForSource(ctx, ctx.ModuleDir(), p)}
|
||||
path.basePath.rel = p
|
||||
return path
|
||||
}
|
||||
|
||||
// OptionalPathForModuleSrc returns an OptionalPath. The OptionalPath contains a
|
||||
@@ -542,6 +557,18 @@ 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()
|
||||
var err error
|
||||
rel, err := filepath.Rel(subdir, p.path)
|
||||
if err != nil {
|
||||
ctx.ModuleErrorf("source file %q is not under path %q", p.path, subdir)
|
||||
return p
|
||||
}
|
||||
p.rel = rel
|
||||
return p
|
||||
}
|
||||
|
||||
// ModuleOutPath is a Path representing a module's output directory.
|
||||
type ModuleOutPath struct {
|
||||
OutputPath
|
||||
|
Reference in New Issue
Block a user