Spec.__contains__: traverse only lin/run + direct build
This commit is contained in:
parent
7edcc4da88
commit
eb270afa0c
@ -97,14 +97,16 @@ class LmodConfiguration(BaseConfiguration):
|
|||||||
|
|
||||||
default_projections = {"all": "{name}/{version}"}
|
default_projections = {"all": "{name}/{version}"}
|
||||||
|
|
||||||
|
compiler: Optional[spack.spec.Spec]
|
||||||
|
|
||||||
def __init__(self, spec: spack.spec.Spec, module_set_name: str, explicit: bool) -> None:
|
def __init__(self, spec: spack.spec.Spec, module_set_name: str, explicit: bool) -> None:
|
||||||
super().__init__(spec, module_set_name, explicit)
|
super().__init__(spec, module_set_name, explicit)
|
||||||
|
|
||||||
# FIXME (compiler as nodes): make this a bit more robust
|
# FIXME (compiler as nodes): make this a bit more robust
|
||||||
candidates = collections.defaultdict(list)
|
candidates = collections.defaultdict(list)
|
||||||
for node in spec.traverse(deptype=("link", "run")):
|
for node in spec.traverse(deptype=("link", "run")):
|
||||||
candidates["c"].extend(node.dependencies(virtuals="c"))
|
candidates["c"].extend(node.dependencies(virtuals=("c",)))
|
||||||
candidates["cxx"].extend(node.dependencies(virtuals="c"))
|
candidates["cxx"].extend(node.dependencies(virtuals=("c",)))
|
||||||
|
|
||||||
# FIXME (compiler as nodes): decide what to do when we have more than one C compiler
|
# FIXME (compiler as nodes): decide what to do when we have more than one C compiler
|
||||||
if candidates["c"] and len(set(candidates["c"])) == 1:
|
if candidates["c"] and len(set(candidates["c"])) == 1:
|
||||||
@ -224,7 +226,7 @@ def provides(self):
|
|||||||
# All the other tokens in the hierarchy must be virtual dependencies
|
# All the other tokens in the hierarchy must be virtual dependencies
|
||||||
for x in self.hierarchy_tokens:
|
for x in self.hierarchy_tokens:
|
||||||
if self.spec.package.provides(x):
|
if self.spec.package.provides(x):
|
||||||
provides[x] = self.spec[x]
|
provides[x] = self.spec
|
||||||
return provides
|
return provides
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -3776,16 +3776,10 @@ def __getitem__(self, name: str):
|
|||||||
self.edges_to_dependencies(depflag=dt.BUILD | dt.TEST),
|
self.edges_to_dependencies(depflag=dt.BUILD | dt.TEST),
|
||||||
)
|
)
|
||||||
|
|
||||||
# Consider runtime dependencies and direct build/test deps before transitive dependencies,
|
# Consider runtime dependencies and direct build/test deps only
|
||||||
# and prefer matches closest to the root.
|
|
||||||
try:
|
try:
|
||||||
child: Spec = next(
|
child: Spec = next(
|
||||||
e.spec
|
e.spec for e in order() if e.spec.name == name or name in e.virtuals
|
||||||
for e in itertools.chain(
|
|
||||||
(e for e in order() if e.spec.name == name or name in e.virtuals),
|
|
||||||
# for historical reasons
|
|
||||||
(e for e in order() if e.spec.concrete and e.spec.package.provides(name)),
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
except StopIteration:
|
except StopIteration:
|
||||||
raise KeyError(f"No spec with name {name} in {self}")
|
raise KeyError(f"No spec with name {name} in {self}")
|
||||||
|
Loading…
Reference in New Issue
Block a user