aboutsummaryrefslogtreecommitdiffstats
path: root/android
diff options
context:
space:
mode:
authorJiyong Park <jiyong@google.com>2019-04-17 21:47:37 +0900
committerJiyong Park <jiyong@google.com>2019-04-20 11:51:22 +0900
commit1570c803b6ed4cc04ae9b3a3221a4211f0681fb6 (patch)
tree31177e6125b4e9c1b62b83868a1ef7b8c1b419e9 /android
parentac9e61536f276a4629bbd237a4b7ff4b952c6f4d (diff)
downloadbuild_soong-1570c803b6ed4cc04ae9b3a3221a4211f0681fb6.tar.gz
build_soong-1570c803b6ed4cc04ae9b3a3221a4211f0681fb6.tar.bz2
build_soong-1570c803b6ed4cc04ae9b3a3221a4211f0681fb6.zip
Fix: PathsForModuleSrc does not work for a replaced dependency
PathsForModuleSrc does not work if a source module is replaced with a prebuilt module. This is because the function uses GetDirectDepWithTag with the name of the original source module. Since the dependency is replaced and the prebuilt module has the name "prebuilt_<name>", the search always fails. Fixing this by re-implementing GetDirectDep* functions inside Soong using VisitDirectDep. Bug: 130627486 Test: m Merged-In: I68d52668283c429d5e93c7f2c81f6a8db1f24893 Change-Id: I68d52668283c429d5e93c7f2c81f6a8db1f24893 (cherry picked from commit f2976304f70fe61b705300f309687317c90a84fb)
Diffstat (limited to 'android')
-rw-r--r--android/module.go33
1 files changed, 33 insertions, 0 deletions
diff --git a/android/module.go b/android/module.go
index 201c27a8..11e9e917 100644
--- a/android/module.go
+++ b/android/module.go
@@ -1034,6 +1034,39 @@ func (a *androidModuleContext) validateAndroidModule(module blueprint.Module) Mo
return aModule
}
+func (a *androidModuleContext) getDirectDepInternal(name string, tag blueprint.DependencyTag) (blueprint.Module, blueprint.DependencyTag) {
+ type dep struct {
+ mod blueprint.Module
+ tag blueprint.DependencyTag
+ }
+ var deps []dep
+ a.VisitDirectDepsBlueprint(func(m blueprint.Module) {
+ if aModule, _ := m.(Module); aModule != nil && aModule.base().BaseModuleName() == name {
+ returnedTag := a.ModuleContext.OtherModuleDependencyTag(aModule)
+ if tag == nil || returnedTag == tag {
+ deps = append(deps, dep{aModule, returnedTag})
+ }
+ }
+ })
+ if len(deps) == 1 {
+ return deps[0].mod, deps[0].tag
+ } else if len(deps) >= 2 {
+ panic(fmt.Errorf("Multiple dependencies having same BaseModuleName() %q found from %q",
+ name, a.ModuleName()))
+ } else {
+ return nil, nil
+ }
+}
+
+func (a *androidModuleContext) GetDirectDepWithTag(name string, tag blueprint.DependencyTag) blueprint.Module {
+ m, _ := a.getDirectDepInternal(name, tag)
+ return m
+}
+
+func (a *androidModuleContext) GetDirectDep(name string) (blueprint.Module, blueprint.DependencyTag) {
+ return a.getDirectDepInternal(name, nil)
+}
+
func (a *androidModuleContext) VisitDirectDepsBlueprint(visit func(blueprint.Module)) {
a.ModuleContext.VisitDirectDeps(visit)
}