diff options
author | Dan Willemsen <dwillemsen@google.com> | 2018-03-10 16:25:53 -0800 |
---|---|---|
committer | Dan Willemsen <dwillemsen@google.com> | 2018-04-17 10:34:23 -0700 |
commit | e9216117dd376aa48476c0ef448fcbd818961861 (patch) | |
tree | a9aea6aaafe0df6a03b2d43915f407d669286fc1 | |
parent | bf4f0a0965a95e699458c511016a371e99f4a57f (diff) | |
download | build_soong-e9216117dd376aa48476c0ef448fcbd818961861.tar.gz build_soong-e9216117dd376aa48476c0ef448fcbd818961861.tar.bz2 build_soong-e9216117dd376aa48476c0ef448fcbd818961861.zip |
Add DistPath to reference the dist folder
Instead of open-coding the logic of whether there is one, or where to
find it.
Bug: 76168832
Test: diff out/soong/build.ninja without dist
Test: diff out/soong/build.ninja with dist specified
Change-Id: Ia3f1ef335e2d6e2175343338d04867d778a50300
Merged-In: Ia3f1ef335e2d6e2175343338d04867d778a50300
(cherry picked from commit bc0c5092671cbe7e58ab6a1f886414f864af3024)
-rw-r--r-- | android/paths.go | 40 | ||||
-rw-r--r-- | cc/builder.go | 9 |
2 files changed, 44 insertions, 5 deletions
diff --git a/android/paths.go b/android/paths.go index 3605dcf4..dc89bfdb 100644 --- a/android/paths.go +++ b/android/paths.go @@ -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 diff --git a/cc/builder.go b/cc/builder.go index d438add9..73a91682 100644 --- a/cc/builder.go +++ b/cc/builder.go @@ -199,11 +199,10 @@ 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 - commandStr += " || (echo ' ---- Please update abi references by running platform/development/vndk/tools/header-checker/utils/create_reference_dumps.py -l ${libName} ----'" - if distDir != nil && *distDir != "" { - distAbiDiffDir := *distDir + "/abidiffs/" - commandStr += " && (mkdir -p " + distAbiDiffDir + " && cp ${out} " + distAbiDiffDir + ")" + distAbiDiffDir := android.PathForDist(ctx, "abidiffs") + commandStr += "|| (echo ' ---- Please update abi references by running platform/development/vndk/tools/header-checker/utils/create_reference_dumps.py -l ${libName} ----'" + if distAbiDiffDir.Valid() { + commandStr += " && (mkdir -p " + distAbiDiffDir.String() + " && cp ${out} " + distAbiDiffDir.String() + ")" } commandStr += " && exit 1)" return blueprint.RuleParams{ |