diff --git a/lib/spack/spack/spec.py b/lib/spack/spack/spec.py index 0fd9b1f5f5d550314e97c9716ef9a879a8654aaa..4a67614be756fd5e21ffa8694fd8063b8354f7f4 100644 --- a/lib/spack/spack/spec.py +++ b/lib/spack/spack/spec.py @@ -1014,9 +1014,9 @@ def _normalize_helper(self, visited, spec_deps, provider_index): any_change = False changed = True + pkg = spack.db.get(self.name) while changed: changed = False - pkg = spack.db.get(self.name) for dep_name in pkg.dependencies: # Do we depend on dep_name? If so pkg_dep is not None. pkg_dep = self._evaluate_dependency_conditions(dep_name) @@ -1132,16 +1132,19 @@ def constrain(self, other, **kwargs): raise UnsatisfiableArchitectureSpecError(self.architecture, other.architecture) + changed = False if self.compiler is not None and other.compiler is not None: - self.compiler.constrain(other.compiler) + changed |= self.compiler.constrain(other.compiler) elif self.compiler is None: + changed |= (self.compiler != other.compiler) self.compiler = other.compiler - changed = False changed |= self.versions.intersect(other.versions) changed |= self.variants.constrain(other.variants) - changed |= bool(self.architecture) + + old = self.architecture self.architecture = self.architecture or other.architecture + changed |= (self.architecture != old) if constrain_deps: changed |= self._constrain_dependencies(other) diff --git a/lib/spack/spack/test/optional_deps.py b/lib/spack/spack/test/optional_deps.py index 669e02f8c9a08828065d2670a1a1797b0f0845c2..265a983f3fed4c27a4f4abb29ae29a0fe644c8c0 100644 --- a/lib/spack/spack/test/optional_deps.py +++ b/lib/spack/spack/test/optional_deps.py @@ -92,4 +92,3 @@ def test_transitive_chain(self): # the whole chain. self.check_normalize('optional-dep-test+f', Spec('optional-dep-test+f', Spec('f'), Spec('g'), Spec('mpi'))) -