From e226523aeb7df132aab50275e8591e6a941de536 Mon Sep 17 00:00:00 2001 From: Massimiliano Culpo Date: Sat, 31 Oct 2020 05:02:17 +0100 Subject: concretizer: handle dependencies conditional on other dependencies --- lib/spack/spack/solver/asp.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/lib/spack/spack/solver/asp.py b/lib/spack/spack/solver/asp.py index c1e483577f..eb54026bf8 100644 --- a/lib/spack/spack/solver/asp.py +++ b/lib/spack/spack/solver/asp.py @@ -918,13 +918,12 @@ class SpackSolverSetup(object): ) ) else: + clauses = self.spec_traverse_clauses(named_cond) + self.gen.rule( fn.declared_dependency( dep.pkg.name, dep.spec.name, t - ), - self.gen._and( - *self.spec_clauses(named_cond, body=True) - ) + ), self.gen._and(*clauses) ) # add constraints on the dependency from dep spec. @@ -945,11 +944,17 @@ class SpackSolverSetup(object): clause, self.gen._and( 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() + 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): """Call func(vspec, provider, i) for each of pkg's provider prefs.""" config = spack.config.get("packages") -- cgit v1.2.3-70-g09d2