hack: drop glibc and musl in old concretizer (#43914)
The old concretizer creates a cyclic graph when expanding virtuals for `iconv`, which is a bug. This hack drops glibc and musl as possible providers for `iconv` in the old concretizer to work around it.
This commit is contained in:
parent
d47951a1e3
commit
7f2cedd31f
1 changed files with 9 additions and 1 deletions
|
@ -74,6 +74,10 @@ class Concretizer:
|
||||||
#: during concretization. Used for testing and for mirror creation
|
#: during concretization. Used for testing and for mirror creation
|
||||||
check_for_compiler_existence = None
|
check_for_compiler_existence = None
|
||||||
|
|
||||||
|
#: Packages that the old concretizer cannot deal with correctly, and cannot build anyway.
|
||||||
|
#: Those will not be considered as providers for virtuals.
|
||||||
|
non_buildable_packages = {"glibc", "musl"}
|
||||||
|
|
||||||
def __init__(self, abstract_spec=None):
|
def __init__(self, abstract_spec=None):
|
||||||
if Concretizer.check_for_compiler_existence is None:
|
if Concretizer.check_for_compiler_existence is None:
|
||||||
Concretizer.check_for_compiler_existence = not spack.config.get(
|
Concretizer.check_for_compiler_existence = not spack.config.get(
|
||||||
|
@ -113,7 +117,11 @@ def _valid_virtuals_and_externals(self, spec):
|
||||||
pref_key = lambda spec: 0 # no-op pref key
|
pref_key = lambda spec: 0 # no-op pref key
|
||||||
|
|
||||||
if spec.virtual:
|
if spec.virtual:
|
||||||
candidates = spack.repo.PATH.providers_for(spec)
|
candidates = [
|
||||||
|
s
|
||||||
|
for s in spack.repo.PATH.providers_for(spec)
|
||||||
|
if s.name not in self.non_buildable_packages
|
||||||
|
]
|
||||||
if not candidates:
|
if not candidates:
|
||||||
raise spack.error.UnsatisfiableProviderSpecError(candidates[0], spec)
|
raise spack.error.UnsatisfiableProviderSpecError(candidates[0], spec)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue