Merge "Support filegroup in exclude_srcs"

This commit is contained in:
Treehugger Robot 2018-02-09 06:49:28 +00:00 committed by Gerrit Code Review
commit a9e0fabae1
6 changed files with 77 additions and 22 deletions

View File

@ -1176,15 +1176,24 @@ func (ctx *androidModuleContext) ExpandOptionalSource(srcFile *string, prop stri
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()
for i, e := range excludes { expandedExcludes := make([]string, 0, len(excludes))
j := findStringInSlice(e, srcFiles)
if j != -1 { for _, e := range excludes {
srcFiles = append(srcFiles[:j], srcFiles[j+1:]...) if m := SrcIsModule(e); m != "" {
module := ctx.GetDirectDepWithTag(m, SourceDepTag)
if module == nil {
// Error will have been handled by ExtractSourcesDeps
continue
}
if srcProducer, ok := module.(SourceFileProducer); ok {
expandedExcludes = append(expandedExcludes, srcProducer.Srcs().Strings()...)
} else {
ctx.ModuleErrorf("srcs dependency %q is not a source file producing module", m)
}
} else {
expandedExcludes = append(expandedExcludes, filepath.Join(prefix, e))
} }
excludes[i] = filepath.Join(prefix, e)
} }
expandedSrcFiles := make(Paths, 0, len(srcFiles)) expandedSrcFiles := make(Paths, 0, len(srcFiles))
for _, s := range srcFiles { for _, s := range srcFiles {
if m := SrcIsModule(s); m != "" { if m := SrcIsModule(s); m != "" {
@ -1194,22 +1203,33 @@ func (ctx *androidModuleContext) ExpandSourcesSubDir(srcFiles, excludes []string
continue continue
} }
if srcProducer, ok := module.(SourceFileProducer); ok { if srcProducer, ok := module.(SourceFileProducer); ok {
expandedSrcFiles = append(expandedSrcFiles, srcProducer.Srcs()...) moduleSrcs := srcProducer.Srcs()
for _, e := range expandedExcludes {
for j, ms := range moduleSrcs {
if ms.String() == e {
moduleSrcs = append(moduleSrcs[:j], moduleSrcs[j+1:]...)
}
}
}
expandedSrcFiles = append(expandedSrcFiles, moduleSrcs...)
} else { } else {
ctx.ModuleErrorf("srcs dependency %q is not a source file producing module", m) ctx.ModuleErrorf("srcs dependency %q is not a source file producing module", m)
} }
} else if pathtools.IsGlob(s) { } else if pathtools.IsGlob(s) {
globbedSrcFiles := ctx.Glob(filepath.Join(prefix, s), excludes) globbedSrcFiles := ctx.Glob(filepath.Join(prefix, s), expandedExcludes)
for i, s := range globbedSrcFiles { for i, s := range globbedSrcFiles {
globbedSrcFiles[i] = s.(ModuleSrcPath).WithSubDir(ctx, subDir) globbedSrcFiles[i] = s.(ModuleSrcPath).WithSubDir(ctx, subDir)
} }
expandedSrcFiles = append(expandedSrcFiles, globbedSrcFiles...) expandedSrcFiles = append(expandedSrcFiles, globbedSrcFiles...)
} else { } else {
s := PathForModuleSrc(ctx, s).WithSubDir(ctx, subDir) p := PathForModuleSrc(ctx, s).WithSubDir(ctx, subDir)
expandedSrcFiles = append(expandedSrcFiles, s) j := findStringInSlice(p.String(), expandedExcludes)
if j == -1 {
expandedSrcFiles = append(expandedSrcFiles, p)
}
} }
} }
return expandedSrcFiles return expandedSrcFiles
} }

View File

@ -202,6 +202,7 @@ func (compiler *baseCompiler) compilerDeps(ctx DepsContext, deps Deps) Deps {
deps.GeneratedHeaders = append(deps.GeneratedHeaders, compiler.Properties.Generated_headers...) deps.GeneratedHeaders = append(deps.GeneratedHeaders, compiler.Properties.Generated_headers...)
android.ExtractSourcesDeps(ctx, compiler.Properties.Srcs) android.ExtractSourcesDeps(ctx, compiler.Properties.Srcs)
android.ExtractSourcesDeps(ctx, compiler.Properties.Exclude_srcs)
if compiler.hasSrcExt(".proto") { if compiler.hasSrcExt(".proto") {
deps = protoDeps(ctx, deps, &compiler.Proto, Bool(compiler.Properties.Proto.Static)) deps = protoDeps(ctx, deps, &compiler.Proto, Bool(compiler.Properties.Proto.Static))

View File

@ -62,6 +62,7 @@ func FileGroupFactory() android.Module {
func (fg *fileGroup) DepsMutator(ctx android.BottomUpMutatorContext) { func (fg *fileGroup) DepsMutator(ctx android.BottomUpMutatorContext) {
android.ExtractSourcesDeps(ctx, fg.properties.Srcs) android.ExtractSourcesDeps(ctx, fg.properties.Srcs)
android.ExtractSourcesDeps(ctx, fg.properties.Exclude_srcs)
} }
func (fg *fileGroup) GenerateAndroidBuildActions(ctx android.ModuleContext) { func (fg *fileGroup) GenerateAndroidBuildActions(ctx android.ModuleContext) {

View File

@ -466,6 +466,7 @@ func (j *Module) deps(ctx android.BottomUpMutatorContext) {
ctx.AddDependency(ctx.Module(), libTag, j.properties.Annotation_processors...) ctx.AddDependency(ctx.Module(), libTag, j.properties.Annotation_processors...)
android.ExtractSourcesDeps(ctx, j.properties.Srcs) android.ExtractSourcesDeps(ctx, j.properties.Srcs)
android.ExtractSourcesDeps(ctx, j.properties.Exclude_srcs)
android.ExtractSourcesDeps(ctx, j.properties.Java_resources) android.ExtractSourcesDeps(ctx, j.properties.Java_resources)
android.ExtractSourceDeps(ctx, j.properties.Manifest) android.ExtractSourceDeps(ctx, j.properties.Manifest)

View File

@ -131,16 +131,19 @@ func testContext(config android.Config, bp string,
} }
mockFS := map[string][]byte{ mockFS := map[string][]byte{
"Android.bp": []byte(bp), "Android.bp": []byte(bp),
"a.java": nil, "a.java": nil,
"b.java": nil, "b.java": nil,
"c.java": nil, "c.java": nil,
"b.kt": nil, "b.kt": nil,
"a.jar": nil, "a.jar": nil,
"b.jar": nil, "b.jar": nil,
"java-res/a": nil, "java-res/a": nil,
"java-res/b": nil, "java-res/b": nil,
"java-res2/a": nil, "java-res2/a": nil,
"java-fg/a.java": nil,
"java-fg/b.java": nil,
"java-fg/c.java": nil,
"prebuilts/sdk/14/android.jar": nil, "prebuilts/sdk/14/android.jar": nil,
"prebuilts/sdk/14/framework.aidl": nil, "prebuilts/sdk/14/framework.aidl": nil,
@ -907,6 +910,32 @@ func TestJarGenrules(t *testing.T) {
} }
} }
func TestExcludeFileGroupInSrcs(t *testing.T) {
ctx := testJava(t, `
java_library {
name: "foo",
srcs: ["a.java", ":foo-srcs"],
exclude_srcs: ["a.java", ":foo-excludes"],
}
filegroup {
name: "foo-srcs",
srcs: ["java-fg/a.java", "java-fg/b.java", "java-fg/c.java"],
}
filegroup {
name: "foo-excludes",
srcs: ["java-fg/a.java", "java-fg/b.java"],
}
`)
javac := ctx.ModuleForTests("foo", "android_common").Rule("javac")
if len(javac.Inputs) != 1 || javac.Inputs[0].String() != "java-fg/c.java" {
t.Errorf(`foo inputs %v != ["java-fg/c.java"]`, javac.Inputs)
}
}
func fail(t *testing.T, errs []error) { func fail(t *testing.T, errs []error) {
t.Helper() t.Helper()
if len(errs) > 0 { if len(errs) > 0 {

View File

@ -266,11 +266,13 @@ func (p *Module) DepsMutator(ctx android.BottomUpMutatorContext) {
android.ExtractSourcesDeps(ctx, p.properties.Data) android.ExtractSourcesDeps(ctx, p.properties.Data)
// deps from "srcs". // deps from "srcs".
android.ExtractSourcesDeps(ctx, p.properties.Srcs) android.ExtractSourcesDeps(ctx, p.properties.Srcs)
android.ExtractSourcesDeps(ctx, p.properties.Exclude_srcs)
switch p.properties.Actual_version { switch p.properties.Actual_version {
case pyVersion2: case pyVersion2:
// deps from "version.py2.srcs" property. // deps from "version.py2.srcs" property.
android.ExtractSourcesDeps(ctx, p.properties.Version.Py2.Srcs) android.ExtractSourcesDeps(ctx, p.properties.Version.Py2.Srcs)
android.ExtractSourcesDeps(ctx, p.properties.Version.Py2.Exclude_srcs)
ctx.AddVariationDependencies(nil, pythonLibTag, ctx.AddVariationDependencies(nil, pythonLibTag,
uniqueLibs(ctx, p.properties.Libs, "version.py2.libs", uniqueLibs(ctx, p.properties.Libs, "version.py2.libs",
@ -286,6 +288,7 @@ func (p *Module) DepsMutator(ctx android.BottomUpMutatorContext) {
case pyVersion3: case pyVersion3:
// deps from "version.py3.srcs" property. // deps from "version.py3.srcs" property.
android.ExtractSourcesDeps(ctx, p.properties.Version.Py3.Srcs) android.ExtractSourcesDeps(ctx, p.properties.Version.Py3.Srcs)
android.ExtractSourcesDeps(ctx, p.properties.Version.Py3.Exclude_srcs)
ctx.AddVariationDependencies(nil, pythonLibTag, ctx.AddVariationDependencies(nil, pythonLibTag,
uniqueLibs(ctx, p.properties.Libs, "version.py3.libs", uniqueLibs(ctx, p.properties.Libs, "version.py3.libs",