diff options
author | Colin Cross <ccross@android.com> | 2017-02-01 14:12:44 -0800 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2017-02-02 16:23:30 -0800 |
commit | faeb7aa1351df6f1d7eae990d0e3d4c68f5c4abf (patch) | |
tree | fe410a9a1925ecc8b9492864555cde041d7d9e8d /android/paths.go | |
parent | 294941bee9566e76047a230acea451cbc188210b (diff) | |
download | build_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.go | 39 |
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 |