concretizer: handle dependencies conditional on other dependencies

This commit is contained in:
Massimiliano Culpo 2020-10-31 05:02:17 +01:00 committed by Todd Gamblin
parent e7208b1598
commit e226523aeb

View File

@ -918,13 +918,12 @@ def package_dependencies_rules(self, pkg, tests):
) )
) )
else: else:
clauses = self.spec_traverse_clauses(named_cond)
self.gen.rule( self.gen.rule(
fn.declared_dependency( fn.declared_dependency(
dep.pkg.name, dep.spec.name, t dep.pkg.name, dep.spec.name, t
), ), self.gen._and(*clauses)
self.gen._and(
*self.spec_clauses(named_cond, body=True)
)
) )
# add constraints on the dependency from dep spec. # add constraints on the dependency from dep spec.
@ -945,11 +944,17 @@ def package_dependencies_rules(self, pkg, tests):
clause, clause,
self.gen._and( self.gen._and(
fn.depends_on(dep.pkg.name, dep.spec.name), fn.depends_on(dep.pkg.name, dep.spec.name),
*self.spec_clauses(named_cond, body=True) *self.spec_traverse_clauses(named_cond)
) )
) )
self.gen.newline() self.gen.newline()
def spec_traverse_clauses(self, named_cond):
clauses = []
for d in named_cond.traverse():
clauses.extend(self.spec_clauses(d, body=True))
return clauses
def virtual_preferences(self, pkg_name, func): def virtual_preferences(self, pkg_name, func):
"""Call func(vspec, provider, i) for each of pkg's provider prefs.""" """Call func(vspec, provider, i) for each of pkg's provider prefs."""
config = spack.config.get("packages") config = spack.config.get("packages")