Snap for 7396315 from a90cba820b6b51ee23a404d048600b4816f8773b to sc-mainline-release
Change-Id: I9265f3aa1e32abe58666bca226f9709264f963dd
diff --git a/context.go b/context.go
index f55b4b6..e891c23 100644
--- a/context.go
+++ b/context.go
@@ -747,6 +747,7 @@
type newModuleInfo struct {
*moduleInfo
+ deps []string
added chan<- struct{}
}
@@ -772,12 +773,12 @@
// registered by name. This allows load hooks to set and/or modify any aspect
// of the module (including names) using information that is not available when
// the module factory is called.
- newModules, errs := runAndRemoveLoadHooks(c, config, module, &scopedModuleFactories)
+ newModules, newDeps, errs := runAndRemoveLoadHooks(c, config, module, &scopedModuleFactories)
if len(errs) > 0 {
return errs
}
- moduleCh <- newModuleInfo{module, addedCh}
+ moduleCh <- newModuleInfo{module, newDeps, addedCh}
<-addedCh
for _, n := range newModules {
errs = addModule(n)
@@ -820,6 +821,7 @@
doneCh <- struct{}{}
}()
+ var hookDeps []string
loop:
for {
select {
@@ -827,6 +829,7 @@
errs = append(errs, newErrs...)
case module := <-moduleCh:
newErrs := c.addModule(module.moduleInfo)
+ hookDeps = append(hookDeps, module.deps...)
if module.added != nil {
module.added <- struct{}{}
}
@@ -841,6 +844,7 @@
}
}
+ deps = append(deps, hookDeps...)
return deps, errs
}
diff --git a/module_ctx.go b/module_ctx.go
index da07062..a074e37 100644
--- a/module_ctx.go
+++ b/module_ctx.go
@@ -297,13 +297,20 @@
// OtherModuleDependencyVariantExists returns true if a module with the
// specified name and variant exists. The variant must match the given
// variations. It must also match all the non-local variations of the current
- // module. In other words, it checks for the module AddVariationDependencies
+ // module. In other words, it checks for the module that AddVariationDependencies
// would add a dependency on with the same arguments.
OtherModuleDependencyVariantExists(variations []Variation, name string) bool
+ // OtherModuleFarDependencyVariantExists returns true if a module with the
+ // specified name and variant exists. The variant must match the given
+ // variations, but not the non-local variations of the current module. In
+ // other words, it checks for the module that AddFarVariationDependencies
+ // would add a dependency on with the same arguments.
+ OtherModuleFarDependencyVariantExists(variations []Variation, name string) bool
+
// OtherModuleReverseDependencyVariantExists returns true if a module with the
// specified name exists with the same variations as the current module. In
- // other words, it checks for the module AddReverseDependency would add a
+ // other words, it checks for the module that AddReverseDependency would add a
// dependency on with the same argument.
OtherModuleReverseDependencyVariantExists(name string) bool
@@ -539,6 +546,15 @@
return found != nil
}
+func (m *baseModuleContext) OtherModuleFarDependencyVariantExists(variations []Variation, name string) bool {
+ possibleDeps := m.context.moduleGroupFromName(name, m.module.namespace())
+ if possibleDeps == nil {
+ return false
+ }
+ found, _ := findVariant(m.module, possibleDeps, variations, true, false)
+ return found != nil
+}
+
func (m *baseModuleContext) OtherModuleReverseDependencyVariantExists(name string) bool {
possibleDeps := m.context.moduleGroupFromName(name, m.module.namespace())
if possibleDeps == nil {
@@ -1323,7 +1339,7 @@
}
func runAndRemoveLoadHooks(ctx *Context, config interface{}, module *moduleInfo,
- scopedModuleFactories *map[string]ModuleFactory) (newModules []*moduleInfo, errs []error) {
+ scopedModuleFactories *map[string]ModuleFactory) (newModules []*moduleInfo, deps []string, errs []error) {
if v, exists := pendingHooks.Load(module.logicModule); exists {
hooks := v.(*[]LoadHook)
@@ -1339,14 +1355,15 @@
for _, hook := range *hooks {
hook(mctx)
newModules = append(newModules, mctx.newModules...)
+ deps = append(deps, mctx.ninjaFileDeps...)
errs = append(errs, mctx.errs...)
}
pendingHooks.Delete(module.logicModule)
- return newModules, errs
+ return newModules, deps, errs
}
- return nil, nil
+ return nil, nil, nil
}
// Check the syntax of a generated blueprint file.