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:
Harmen Stoppels 2024-04-30 13:55:48 +02:00 committed by GitHub
parent d47951a1e3
commit 7f2cedd31f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -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)