diff options
| author | Jiyong Park <jiyong@google.com> | 2019-04-17 21:47:37 +0900 |
|---|---|---|
| committer | Jiyong Park <jiyong@google.com> | 2019-04-20 11:51:22 +0900 |
| commit | 1570c803b6ed4cc04ae9b3a3221a4211f0681fb6 (patch) | |
| tree | 31177e6125b4e9c1b62b83868a1ef7b8c1b419e9 /android | |
| parent | ac9e61536f276a4629bbd237a4b7ff4b952c6f4d (diff) | |
| download | build_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.go | 33 |
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) } |
