Merge changes If54d9c69,Ibc253514

* changes:
  Fix PathForPhony
  Allow java manifest property to reference filegroups
This commit is contained in:
Treehugger Robot 2017-12-12 04:05:22 +00:00 committed by Gerrit Code Review
commit ae6bd3d758
3 changed files with 43 additions and 13 deletions

View File

@ -106,6 +106,7 @@ type ModuleContext interface {
ModuleBuild(pctx PackageContext, params ModuleBuildParams) ModuleBuild(pctx PackageContext, params ModuleBuildParams)
ExpandSources(srcFiles, excludes []string) Paths ExpandSources(srcFiles, excludes []string) Paths
ExpandSource(srcFile, prop string) Path
ExpandSourcesSubDir(srcFiles, excludes []string, subDir string) Paths ExpandSourcesSubDir(srcFiles, excludes []string, subDir string) Paths
Glob(globPattern string, excludes []string) Paths Glob(globPattern string, excludes []string) Paths
@ -1005,8 +1006,8 @@ type sourceDependencyTag struct {
var SourceDepTag sourceDependencyTag var SourceDepTag sourceDependencyTag
// Returns a list of modules that must be depended on to satisfy filegroup or generated sources // Adds necessary dependencies to satisfy filegroup or generated sources modules listed in srcFiles
// modules listed in srcFiles using ":module" syntax // using ":module" syntax, if any.
func ExtractSourcesDeps(ctx BottomUpMutatorContext, srcFiles []string) { func ExtractSourcesDeps(ctx BottomUpMutatorContext, srcFiles []string) {
var deps []string var deps []string
set := make(map[string]bool) set := make(map[string]bool)
@ -1025,6 +1026,16 @@ func ExtractSourcesDeps(ctx BottomUpMutatorContext, srcFiles []string) {
ctx.AddDependency(ctx.Module(), SourceDepTag, deps...) ctx.AddDependency(ctx.Module(), SourceDepTag, deps...)
} }
// Adds necessary dependencies to satisfy filegroup or generated sources modules specified in s
// using ":module" syntax, if any.
func ExtractSourceDeps(ctx BottomUpMutatorContext, s *string) {
if s != nil {
if m := SrcIsModule(*s); m != "" {
ctx.AddDependency(ctx.Module(), SourceDepTag, m)
}
}
}
type SourceFileProducer interface { type SourceFileProducer interface {
Srcs() Paths Srcs() Paths
} }
@ -1035,6 +1046,18 @@ func (ctx *androidModuleContext) ExpandSources(srcFiles, excludes []string) Path
return ctx.ExpandSourcesSubDir(srcFiles, excludes, "") return ctx.ExpandSourcesSubDir(srcFiles, excludes, "")
} }
// Returns a single path expanded from globs and modules referenced using ":module" syntax.
// ExtractSourceDeps must have already been called during the dependency resolution phase.
func (ctx *androidModuleContext) ExpandSource(srcFile, prop string) Path {
srcFiles := ctx.ExpandSourcesSubDir([]string{srcFile}, nil, "")
if len(srcFiles) == 1 {
return srcFiles[0]
} else {
ctx.PropertyErrorf(prop, "module providing %s must produce exactly one file", prop)
return nil
}
}
func (ctx *androidModuleContext) ExpandSourcesSubDir(srcFiles, excludes []string, subDir string) Paths { func (ctx *androidModuleContext) ExpandSourcesSubDir(srcFiles, excludes []string, subDir string) Paths {
prefix := PathForModuleSrc(ctx).String() prefix := PathForModuleSrc(ctx).String()

View File

@ -906,9 +906,18 @@ func PathForPhony(ctx PathContext, phony string) WritablePath {
if strings.ContainsAny(phony, "$/") { if strings.ContainsAny(phony, "$/") {
reportPathError(ctx, "Phony target contains invalid character ($ or /): %s", phony) reportPathError(ctx, "Phony target contains invalid character ($ or /): %s", phony)
} }
return OutputPath{basePath{phony, ctx.Config(), ""}} return PhonyPath{basePath{phony, ctx.Config(), ""}}
} }
type PhonyPath struct {
basePath
}
func (p PhonyPath) writablePath() {}
var _ Path = PhonyPath{}
var _ WritablePath = PhonyPath{}
type testPath struct { type testPath struct {
basePath basePath
} }

View File

@ -390,6 +390,7 @@ func (j *Module) deps(ctx android.BottomUpMutatorContext) {
android.ExtractSourcesDeps(ctx, j.properties.Srcs) android.ExtractSourcesDeps(ctx, j.properties.Srcs)
android.ExtractSourcesDeps(ctx, j.properties.Java_resources) android.ExtractSourcesDeps(ctx, j.properties.Java_resources)
android.ExtractSourceDeps(ctx, j.properties.Manifest)
if j.hasSrcExt(".proto") { if j.hasSrcExt(".proto") {
protoDeps(ctx, &j.protoProperties) protoDeps(ctx, &j.protoProperties)
@ -764,7 +765,10 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars ...android.Path
// static classpath jars have the resources in them, so the resource jars aren't necessary here // static classpath jars have the resources in them, so the resource jars aren't necessary here
jars = append(jars, deps.staticJars...) jars = append(jars, deps.staticJars...)
manifest := android.OptionalPathForModuleSrc(ctx, j.properties.Manifest) var manifest android.OptionalPath
if j.properties.Manifest != nil {
manifest = android.OptionalPathForPath(ctx.ExpandSource(*j.properties.Manifest, "manifest"))
}
// Combine the classes built from sources, any manifests, and any static libraries into // Combine the classes built from sources, any manifests, and any static libraries into
// classes.jar. If there is only one input jar this step will be skipped. // classes.jar. If there is only one input jar this step will be skipped.
@ -1088,14 +1092,8 @@ func (j *Binary) GenerateAndroidBuildActions(ctx android.ModuleContext) {
// Handle the binary wrapper // Handle the binary wrapper
j.isWrapperVariant = true j.isWrapperVariant = true
if String(j.binaryProperties.Wrapper) != "" { if j.binaryProperties.Wrapper != nil {
wrapperSrcs := ctx.ExpandSources([]string{String(j.binaryProperties.Wrapper)}, nil) j.wrapperFile = ctx.ExpandSource(*j.binaryProperties.Wrapper, "wrapper")
if len(wrapperSrcs) == 1 {
j.wrapperFile = wrapperSrcs[0]
} else {
ctx.PropertyErrorf("wrapper", "module providing wrapper must produce exactly one file")
return
}
} else { } else {
j.wrapperFile = android.PathForSource(ctx, "build/soong/scripts/jar-wrapper.sh") j.wrapperFile = android.PathForSource(ctx, "build/soong/scripts/jar-wrapper.sh")
} }
@ -1113,7 +1111,7 @@ func (j *Binary) DepsMutator(ctx android.BottomUpMutatorContext) {
if ctx.Arch().ArchType == android.Common { if ctx.Arch().ArchType == android.Common {
j.deps(ctx) j.deps(ctx)
} else { } else {
android.ExtractSourcesDeps(ctx, []string{String(j.binaryProperties.Wrapper)}) android.ExtractSourceDeps(ctx, j.binaryProperties.Wrapper)
} }
} }