aboutsummaryrefslogtreecommitdiffstats
path: root/android/paths.go
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2017-02-01 14:12:44 -0800
committerColin Cross <ccross@android.com>2017-02-02 16:23:30 -0800
commitfaeb7aa1351df6f1d7eae990d0e3d4c68f5c4abf (patch)
treefe410a9a1925ecc8b9492864555cde041d7d9e8d /android/paths.go
parent294941bee9566e76047a230acea451cbc188210b (diff)
downloadbuild_soong-faeb7aa1351df6f1d7eae990d0e3d4c68f5c4abf.tar.gz
build_soong-faeb7aa1351df6f1d7eae990d0e3d4c68f5c4abf.tar.bz2
build_soong-faeb7aa1351df6f1d7eae990d0e3d4c68f5c4abf.zip
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
Diffstat (limited to 'android/paths.go')
-rw-r--r--android/paths.go39
1 files changed, 33 insertions, 6 deletions
diff --git a/android/paths.go b/android/paths.go
index ac7d81e6..037c98dc 100644
--- a/android/paths.go
+++ b/android/paths.go
@@ -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