Add DistPath to reference the dist folder

Instead of open-coding the logic of whether there is one, or where to
find it.

Test: diff out/soong/build.ninja without dist
Test: diff out/soong/build.ninja with dist specified
Change-Id: Ia3f1ef335e2d6e2175343338d04867d778a50300
This commit is contained in:
Dan Willemsen 2018-03-10 16:25:53 -08:00
parent 54daaf0371
commit bc0c509267
2 changed files with 43 additions and 4 deletions

View file

@ -693,6 +693,46 @@ func PathForIntermediates(ctx PathContext, paths ...string) OutputPath {
return PathForOutput(ctx, ".intermediates", path)
}
// DistPath is a Path representing a file path rooted from the dist directory
type DistPath struct {
basePath
}
func (p DistPath) withRel(rel string) DistPath {
p.basePath = p.basePath.withRel(rel)
return p
}
var _ Path = DistPath{}
// PathForDist joins the provided paths and returns a DistPath that is
// validated to not escape the dist dir.
// On error, it will return a usable, but invalid DistPath, and report a ModuleError.
func PathForDist(ctx PathContext, pathComponents ...string) DistPath {
path, err := validatePath(pathComponents...)
if err != nil {
reportPathError(ctx, err)
}
return DistPath{basePath{path, ctx.Config(), ""}}
}
func (p DistPath) writablePath() {}
func (p DistPath) Valid() bool {
return p.config.ProductVariables.DistDir != nil && *p.config.ProductVariables.DistDir != ""
}
func (p DistPath) String() string {
if !p.Valid() {
panic("Requesting an invalid path")
}
return filepath.Join(*p.config.ProductVariables.DistDir, p.path)
}
func (p DistPath) RelPathString() string {
return p.path
}
// ModuleSrcPath is a Path representing a file rooted from a module's local source dir
type ModuleSrcPath struct {
SourcePath

View file

@ -200,10 +200,9 @@ var (
func(ctx android.PackageRuleContext) blueprint.RuleParams {
commandStr := "($sAbiDiffer $allowFlags -lib $libName -arch $arch -check-all-apis -o ${out} -new $in -old $referenceDump)"
distDir := ctx.Config().ProductVariables.DistDir
if distDir != nil && *distDir != "" {
distAbiDiffDir := *distDir + "/abidiffs/"
commandStr += " || (mkdir -p " + distAbiDiffDir + " && cp ${out} " + distAbiDiffDir + " && exit 1)"
distAbiDiffDir := android.PathForDist(ctx, "abidiffs")
if distAbiDiffDir.Valid() {
commandStr += " || (mkdir -p " + distAbiDiffDir.String() + " && cp ${out} " + distAbiDiffDir.String() + " && exit 1)"
}
return blueprint.RuleParams{
Command: commandStr,