Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
Spack
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
eic_tools
Spack
Commits
00280936
Commit
00280936
authored
9 years ago
by
Paul Hopkins
Browse files
Options
Downloads
Patches
Plain Diff
Flake8 fixes to ensure qa tests pass
parent
480fe9cb
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
lib/spack/spack/concretize.py
+103
-71
103 additions, 71 deletions
lib/spack/spack/concretize.py
with
103 additions
and
71 deletions
lib/spack/spack/concretize.py
+
103
−
71
View file @
00280936
...
@@ -40,12 +40,12 @@
...
@@ -40,12 +40,12 @@
import
spack.error
import
spack.error
from
spack.version
import
*
from
spack.version
import
*
from
functools
import
partial
from
functools
import
partial
from
spec
import
DependencyMap
from
itertools
import
chain
from
itertools
import
chain
from
spack.config
import
*
from
spack.config
import
*
class
DefaultConcretizer
(
object
):
class
DefaultConcretizer
(
object
):
"""
This class doesn
'
t have any state, it just provides some methods for
"""
This class doesn
'
t have any state, it just provides some methods for
concretization. You can subclass it to override just some of the
concretization. You can subclass it to override just some of the
default concretization strategies, or you can override all of them.
default concretization strategies, or you can override all of them.
...
@@ -61,14 +61,17 @@ def _valid_virtuals_and_externals(self, spec):
...
@@ -61,14 +61,17 @@ def _valid_virtuals_and_externals(self, spec):
if
not
providers
:
if
not
providers
:
raise
UnsatisfiableProviderSpecError
(
providers
[
0
],
spec
)
raise
UnsatisfiableProviderSpecError
(
providers
[
0
],
spec
)
spec_w_preferred_providers
=
find_spec
(
spec_w_preferred_providers
=
find_spec
(
spec
,
lambda
(
x
)
:
spack
.
pkgsort
.
spec_has_preferred_provider
(
x
.
name
,
spec
.
name
))
spec
,
lambda
x
:
spack
.
pkgsort
.
spec_has_preferred_provider
(
x
.
name
,
spec
.
name
))
# NOQA: ignore=E501
if
not
spec_w_preferred_providers
:
if
not
spec_w_preferred_providers
:
spec_w_preferred_providers
=
spec
spec_w_preferred_providers
=
spec
provider_cmp
=
partial
(
spack
.
pkgsort
.
provider_compare
,
spec_w_preferred_providers
.
name
,
spec
.
name
)
provider_cmp
=
partial
(
spack
.
pkgsort
.
provider_compare
,
spec_w_preferred_providers
.
name
,
spec
.
name
)
candidates
=
sorted
(
providers
,
cmp
=
provider_cmp
)
candidates
=
sorted
(
providers
,
cmp
=
provider_cmp
)
# For each candidate package, if it has externals, add those to the usable list.
# For each candidate package, if it has externals, add those
# if it's not buildable, then *only* add the externals.
# to the usable list. if it's not buildable, then *only* add
# the externals.
usable
=
[]
usable
=
[]
for
cspec
in
candidates
:
for
cspec
in
candidates
:
if
is_spec_buildable
(
cspec
):
if
is_spec_buildable
(
cspec
):
...
@@ -85,7 +88,7 @@ def _valid_virtuals_and_externals(self, spec):
...
@@ -85,7 +88,7 @@ def _valid_virtuals_and_externals(self, spec):
def
cmp_externals
(
a
,
b
):
def
cmp_externals
(
a
,
b
):
if
a
.
name
!=
b
.
name
and
(
not
a
.
external
or
a
.
external_module
and
if
a
.
name
!=
b
.
name
and
(
not
a
.
external
or
a
.
external_module
and
not
b
.
external
and
b
.
external_module
):
not
b
.
external
and
b
.
external_module
):
# We're choosing between different providers, so
# We're choosing between different providers, so
# maintain order from provider sort
# maintain order from provider sort
return
candidates
.
index
(
a
)
-
candidates
.
index
(
b
)
return
candidates
.
index
(
a
)
-
candidates
.
index
(
b
)
...
@@ -114,26 +117,26 @@ def choose_virtual_or_external(self, spec):
...
@@ -114,26 +117,26 @@ def choose_virtual_or_external(self, spec):
# Find the nearest spec in the dag that has a compiler. We'll
# Find the nearest spec in the dag that has a compiler. We'll
# use that spec to calibrate compiler compatibility.
# use that spec to calibrate compiler compatibility.
abi_exemplar
=
find_spec
(
spec
,
lambda
(
x
)
:
x
.
compiler
)
abi_exemplar
=
find_spec
(
spec
,
lambda
x
:
x
.
compiler
)
if
not
abi_exemplar
:
if
not
abi_exemplar
:
abi_exemplar
=
spec
.
root
abi_exemplar
=
spec
.
root
# Make a list including ABI compatibility of specs with the exemplar.
# Make a list including ABI compatibility of specs with the exemplar.
strict
=
[
spack
.
abi
.
compatible
(
c
,
abi_exemplar
)
for
c
in
candidates
]
strict
=
[
spack
.
abi
.
compatible
(
c
,
abi_exemplar
)
for
c
in
candidates
]
loose
=
[
spack
.
abi
.
compatible
(
c
,
abi_exemplar
,
loose
=
True
)
for
c
in
candidates
]
loose
=
[
spack
.
abi
.
compatible
(
c
,
abi_exemplar
,
loose
=
True
)
for
c
in
candidates
]
keys
=
zip
(
strict
,
loose
,
candidates
)
keys
=
zip
(
strict
,
loose
,
candidates
)
# Sort candidates from most to least compatibility.
# Sort candidates from most to least compatibility.
# Note:
# Note:
# 1. We reverse because True > False.
# 1. We reverse because True > False.
# 2. Sort is stable, so c's keep their order.
# 2. Sort is stable, so c's keep their order.
keys
.
sort
(
key
=
lambda
k
:
k
[:
2
],
reverse
=
True
)
keys
.
sort
(
key
=
lambda
k
:
k
[:
2
],
reverse
=
True
)
# Pull the candidates back out and return them in order
# Pull the candidates back out and return them in order
candidates
=
[
c
for
s
,
l
,
c
in
keys
]
candidates
=
[
c
for
s
,
l
,
c
in
keys
]
return
candidates
return
candidates
def
concretize_version
(
self
,
spec
):
def
concretize_version
(
self
,
spec
):
"""
If the spec is already concrete, return. Otherwise take
"""
If the spec is already concrete, return. Otherwise take
the preferred version from spackconfig, and default to the package
'
s
the preferred version from spackconfig, and default to the package
'
s
...
@@ -167,7 +170,8 @@ def prefer_key(v):
...
@@ -167,7 +170,8 @@ def prefer_key(v):
if
valid_versions
:
if
valid_versions
:
# Disregard @develop and take the next valid version
# Disregard @develop and take the next valid version
if
ver
(
valid_versions
[
0
])
==
ver
(
'
develop
'
)
and
len
(
valid_versions
)
>
1
:
if
ver
(
valid_versions
[
0
])
==
ver
(
'
develop
'
)
and
\
len
(
valid_versions
)
>
1
:
spec
.
versions
=
ver
([
valid_versions
[
1
]])
spec
.
versions
=
ver
([
valid_versions
[
1
]])
else
:
else
:
spec
.
versions
=
ver
([
valid_versions
[
0
]])
spec
.
versions
=
ver
([
valid_versions
[
0
]])
...
@@ -193,40 +197,45 @@ def prefer_key(v):
...
@@ -193,40 +197,45 @@ def prefer_key(v):
return
True
# Things changed
return
True
# Things changed
def
_concretize_operating_system
(
self
,
spec
):
def
_concretize_operating_system
(
self
,
spec
):
platform
=
spec
.
architecture
.
platform
if
spec
.
architecture
.
platform_os
is
not
None
and
isinstance
(
if
spec
.
architecture
.
platform_os
is
not
None
and
isinstance
(
spec
.
architecture
.
platform_os
,
spack
.
architecture
.
OperatingSystem
):
spec
.
architecture
.
platform_os
,
spack
.
architecture
.
OperatingSystem
):
return
False
return
False
if
spec
.
root
.
architecture
and
spec
.
root
.
architecture
.
platform_os
:
if
spec
.
root
.
architecture
and
spec
.
root
.
architecture
.
platform_os
:
if
isinstance
(
spec
.
root
.
architecture
.
platform_os
,
spack
.
architecture
.
OperatingSystem
):
if
isinstance
(
spec
.
root
.
architecture
.
platform_os
,
spec
.
architecture
.
platform_os
=
spec
.
root
.
architecture
.
platform_os
spack
.
architecture
.
OperatingSystem
):
spec
.
architecture
.
platform_os
=
\
spec
.
root
.
architecture
.
platform_os
else
:
else
:
spec
.
architecture
.
platform_os
=
spec
.
architecture
.
platform
.
operating_system
(
'
default_os
'
)
spec
.
architecture
.
platform_os
=
\
return
True
#changed
spec
.
architecture
.
platform
.
operating_system
(
'
default_os
'
)
return
True
# changed
def
_concretize_target
(
self
,
spec
):
def
_concretize_target
(
self
,
spec
):
platform
=
spec
.
architecture
.
platform
if
spec
.
architecture
.
target
is
not
None
and
isinstance
(
if
spec
.
architecture
.
target
is
not
None
and
isinstance
(
spec
.
architecture
.
target
,
spack
.
architecture
.
Target
):
spec
.
architecture
.
target
,
spack
.
architecture
.
Target
):
return
False
return
False
if
spec
.
root
.
architecture
and
spec
.
root
.
architecture
.
target
:
if
spec
.
root
.
architecture
and
spec
.
root
.
architecture
.
target
:
if
isinstance
(
spec
.
root
.
architecture
.
target
,
spack
.
architecture
.
Target
):
if
isinstance
(
spec
.
root
.
architecture
.
target
,
spack
.
architecture
.
Target
):
spec
.
architecture
.
target
=
spec
.
root
.
architecture
.
target
spec
.
architecture
.
target
=
spec
.
root
.
architecture
.
target
else
:
else
:
spec
.
architecture
.
target
=
spec
.
architecture
.
platform
.
target
(
'
default_target
'
)
spec
.
architecture
.
target
=
spec
.
architecture
.
platform
.
target
(
return
True
#changed
'
default_target
'
)
return
True
# changed
def
_concretize_platform
(
self
,
spec
):
def
_concretize_platform
(
self
,
spec
):
if
spec
.
architecture
.
platform
is
not
None
and
isinstance
(
if
spec
.
architecture
.
platform
is
not
None
and
isinstance
(
spec
.
architecture
.
platform
,
spack
.
architecture
.
Platform
):
spec
.
architecture
.
platform
,
spack
.
architecture
.
Platform
):
return
False
return
False
if
spec
.
root
.
architecture
and
spec
.
root
.
architecture
.
platform
:
if
spec
.
root
.
architecture
and
spec
.
root
.
architecture
.
platform
:
if
isinstance
(
spec
.
root
.
architecture
.
platform
,
spack
.
architecture
.
Platform
):
if
isinstance
(
spec
.
root
.
architecture
.
platform
,
spack
.
architecture
.
Platform
):
spec
.
architecture
.
platform
=
spec
.
root
.
architecture
.
platform
spec
.
architecture
.
platform
=
spec
.
root
.
architecture
.
platform
else
:
else
:
spec
.
architecture
.
platform
=
spack
.
architecture
.
platform
()
spec
.
architecture
.
platform
=
spack
.
architecture
.
platform
()
return
True
#
changed?
return
True
#
changed?
def
concretize_architecture
(
self
,
spec
):
def
concretize_architecture
(
self
,
spec
):
"""
If the spec is empty provide the defaults of the platform. If the
"""
If the spec is empty provide the defaults of the platform. If the
...
@@ -245,30 +254,29 @@ def concretize_architecture(self, spec):
...
@@ -245,30 +254,29 @@ def concretize_architecture(self, spec):
return
True
return
True
# Concretize the operating_system and target based of the spec
# Concretize the operating_system and target based of the spec
ret
=
any
((
self
.
_concretize_platform
(
spec
),
ret
=
any
((
self
.
_concretize_platform
(
spec
),
self
.
_concretize_operating_system
(
spec
),
self
.
_concretize_operating_system
(
spec
),
self
.
_concretize_target
(
spec
)))
self
.
_concretize_target
(
spec
)))
return
ret
return
ret
def
concretize_variants
(
self
,
spec
):
def
concretize_variants
(
self
,
spec
):
"""
If the spec already has variants filled in, return. Otherwise, add
"""
If the spec already has variants filled in, return. Otherwise, add
the user preferences from packages.yaml or the default variants from
the user preferences from packages.yaml or the default variants from
the package specification.
the package specification.
"""
"""
changed
=
False
changed
=
False
preferred_variants
=
spack
.
pkgsort
.
spec_preferred_variants
(
spec
.
package_class
.
name
)
preferred_variants
=
spack
.
pkgsort
.
spec_preferred_variants
(
spec
.
package_class
.
name
)
for
name
,
variant
in
spec
.
package_class
.
variants
.
items
():
for
name
,
variant
in
spec
.
package_class
.
variants
.
items
():
if
name
not
in
spec
.
variants
:
if
name
not
in
spec
.
variants
:
changed
=
True
changed
=
True
if
name
in
preferred_variants
:
if
name
in
preferred_variants
:
spec
.
variants
[
name
]
=
preferred_variants
.
get
(
name
)
spec
.
variants
[
name
]
=
preferred_variants
.
get
(
name
)
else
:
else
:
spec
.
variants
[
name
]
=
spack
.
spec
.
VariantSpec
(
name
,
variant
.
default
)
spec
.
variants
[
name
]
=
\
spack
.
spec
.
VariantSpec
(
name
,
variant
.
default
)
return
changed
return
changed
def
concretize_compiler
(
self
,
spec
):
def
concretize_compiler
(
self
,
spec
):
"""
If the spec already has a compiler, we
'
re done. If not, then take
"""
If the spec already has a compiler, we
'
re done. If not, then take
the compiler used for the nearest ancestor with a compiler
the compiler used for the nearest ancestor with a compiler
...
@@ -283,30 +291,32 @@ def concretize_compiler(self, spec):
...
@@ -283,30 +291,32 @@ def concretize_compiler(self, spec):
"""
"""
# Pass on concretizing the compiler if the target is not yet determined
# Pass on concretizing the compiler if the target is not yet determined
if
not
spec
.
architecture
.
platform_os
:
if
not
spec
.
architecture
.
platform_os
:
#Although this usually means changed, this means awaiting other changes
# Although this usually means changed, this means awaiting other
# changes
return
True
return
True
# Only use a matching compiler if it is of the proper style
# Only use a matching compiler if it is of the proper style
# Takes advantage of the proper logic already existing in compiler_for_spec
# Takes advantage of the proper logic already existing in
# Should think whether this can be more efficient
# compiler_for_spec Should think whether this can be more
# efficient
def
_proper_compiler_style
(
cspec
,
arch
):
def
_proper_compiler_style
(
cspec
,
arch
):
platform
=
arch
.
platform
platform
=
arch
.
platform
compilers
=
spack
.
compilers
.
compilers_for_spec
(
cspec
,
compilers
=
spack
.
compilers
.
compilers_for_spec
(
cspec
,
platform
=
platform
)
platform
=
platform
)
return
filter
(
lambda
c
:
c
.
operating_system
==
return
filter
(
lambda
c
:
c
.
operating_system
==
arch
.
platform_os
,
compilers
)
arch
.
platform_os
,
compilers
)
#return compilers
# return compilers
all_compilers
=
spack
.
compilers
.
all_compilers
()
all_compilers
=
spack
.
compilers
.
all_compilers
()
if
(
spec
.
compiler
and
if
(
spec
.
compiler
and
spec
.
compiler
.
concrete
and
spec
.
compiler
.
concrete
and
spec
.
compiler
in
all_compilers
):
spec
.
compiler
in
all_compilers
):
return
False
return
False
#Find the another spec that has a compiler, or the root if none do
# Find the another spec that has a compiler, or the root if none do
other_spec
=
spec
if
spec
.
compiler
else
find_spec
(
spec
,
lambda
(
x
)
:
x
.
compiler
)
other_spec
=
spec
if
spec
.
compiler
else
find_spec
(
spec
,
lambda
x
:
x
.
compiler
)
if
not
other_spec
:
if
not
other_spec
:
other_spec
=
spec
.
root
other_spec
=
spec
.
root
...
@@ -318,9 +328,12 @@ def _proper_compiler_style(cspec, arch):
...
@@ -318,9 +328,12 @@ def _proper_compiler_style(cspec, arch):
spec
.
compiler
=
other_compiler
.
copy
()
spec
.
compiler
=
other_compiler
.
copy
()
return
True
return
True
# Filter the compilers into a sorted list based on the compiler_order from spackconfig
# Filter the compilers into a sorted list based on the compiler_order
compiler_list
=
all_compilers
if
not
other_compiler
else
spack
.
compilers
.
find
(
other_compiler
)
# from spackconfig
cmp_compilers
=
partial
(
spack
.
pkgsort
.
compiler_compare
,
other_spec
.
name
)
compiler_list
=
all_compilers
if
not
other_compiler
else
\
spack
.
compilers
.
find
(
other_compiler
)
cmp_compilers
=
partial
(
spack
.
pkgsort
.
compiler_compare
,
other_spec
.
name
)
matches
=
sorted
(
compiler_list
,
cmp
=
cmp_compilers
)
matches
=
sorted
(
compiler_list
,
cmp
=
cmp_compilers
)
if
not
matches
:
if
not
matches
:
raise
UnavailableCompilerVersionError
(
other_compiler
)
raise
UnavailableCompilerVersionError
(
other_compiler
)
...
@@ -335,7 +348,6 @@ def _proper_compiler_style(cspec, arch):
...
@@ -335,7 +348,6 @@ def _proper_compiler_style(cspec, arch):
assert
(
spec
.
compiler
.
concrete
)
assert
(
spec
.
compiler
.
concrete
)
return
True
# things changed.
return
True
# things changed.
def
concretize_compiler_flags
(
self
,
spec
):
def
concretize_compiler_flags
(
self
,
spec
):
"""
"""
The compiler flags are updated to match those of the spec whose
The compiler flags are updated to match those of the spec whose
...
@@ -343,54 +355,66 @@ def concretize_compiler_flags(self, spec):
...
@@ -343,54 +355,66 @@ def concretize_compiler_flags(self, spec):
Default specs set at the compiler level will still be added later.
Default specs set at the compiler level will still be added later.
"""
"""
if
not
spec
.
architecture
.
platform_os
:
if
not
spec
.
architecture
.
platform_os
:
#Although this usually means changed, this means awaiting other changes
# Although this usually means changed, this means awaiting other
# changes
return
True
return
True
ret
=
False
ret
=
False
for
flag
in
spack
.
spec
.
FlagMap
.
valid_compiler_flags
():
for
flag
in
spack
.
spec
.
FlagMap
.
valid_compiler_flags
():
try
:
try
:
nearest
=
next
(
p
for
p
in
spec
.
traverse
(
direction
=
'
parents
'
)
nearest
=
next
(
p
for
p
in
spec
.
traverse
(
direction
=
'
parents
'
)
if
((
p
.
compiler
==
spec
.
compiler
and
p
is
not
spec
)
if
((
p
.
compiler
==
spec
.
compiler
and
and
flag
in
p
.
compiler_flags
))
p
is
not
spec
)
and
if
not
flag
in
spec
.
compiler_flags
or
\
flag
in
p
.
compiler_flags
))
not
(
sorted
(
spec
.
compiler_flags
[
flag
])
>=
sorted
(
nearest
.
compiler_flags
[
flag
])):
if
flag
not
in
spec
.
compiler_flags
or
\
not
(
sorted
(
spec
.
compiler_flags
[
flag
])
>=
sorted
(
nearest
.
compiler_flags
[
flag
])):
if
flag
in
spec
.
compiler_flags
:
if
flag
in
spec
.
compiler_flags
:
spec
.
compiler_flags
[
flag
]
=
list
(
set
(
spec
.
compiler_flags
[
flag
])
|
spec
.
compiler_flags
[
flag
]
=
list
(
set
(
nearest
.
compiler_flags
[
flag
]))
set
(
spec
.
compiler_flags
[
flag
])
|
set
(
nearest
.
compiler_flags
[
flag
]))
else
:
else
:
spec
.
compiler_flags
[
flag
]
=
nearest
.
compiler_flags
[
flag
]
spec
.
compiler_flags
[
flag
]
=
nearest
.
compiler_flags
[
flag
]
ret
=
True
ret
=
True
except
StopIteration
:
except
StopIteration
:
if
(
flag
in
spec
.
root
.
compiler_flags
and
((
not
flag
in
spec
.
compiler_flags
)
or
if
(
flag
in
spec
.
root
.
compiler_flags
and
sorted
(
spec
.
compiler_flags
[
flag
])
!=
sorted
(
spec
.
root
.
compiler_flags
[
flag
]))):
((
flag
not
in
spec
.
compiler_flags
)
or
sorted
(
spec
.
compiler_flags
[
flag
])
!=
sorted
(
spec
.
root
.
compiler_flags
[
flag
]))):
if
flag
in
spec
.
compiler_flags
:
if
flag
in
spec
.
compiler_flags
:
spec
.
compiler_flags
[
flag
]
=
list
(
set
(
spec
.
compiler_flags
[
flag
])
|
spec
.
compiler_flags
[
flag
]
=
list
(
set
(
spec
.
root
.
compiler_flags
[
flag
]))
set
(
spec
.
compiler_flags
[
flag
])
|
set
(
spec
.
root
.
compiler_flags
[
flag
]))
else
:
else
:
spec
.
compiler_flags
[
flag
]
=
spec
.
root
.
compiler_flags
[
flag
]
spec
.
compiler_flags
[
flag
]
=
spec
.
root
.
compiler_flags
[
flag
]
ret
=
True
ret
=
True
else
:
else
:
if
not
flag
in
spec
.
compiler_flags
:
if
flag
not
in
spec
.
compiler_flags
:
spec
.
compiler_flags
[
flag
]
=
[]
spec
.
compiler_flags
[
flag
]
=
[]
# Include the compiler flag defaults from the config files
# Include the compiler flag defaults from the config files
# This ensures that spack will detect conflicts that stem from a change
# This ensures that spack will detect conflicts that stem from a change
# in default compiler flags.
# in default compiler flags.
compiler
=
spack
.
compilers
.
compiler_for_spec
(
spec
.
compiler
,
spec
.
architecture
)
compiler
=
spack
.
compilers
.
compiler_for_spec
(
spec
.
compiler
,
spec
.
architecture
)
for
flag
in
compiler
.
flags
:
for
flag
in
compiler
.
flags
:
if
flag
not
in
spec
.
compiler_flags
:
if
flag
not
in
spec
.
compiler_flags
:
spec
.
compiler_flags
[
flag
]
=
compiler
.
flags
[
flag
]
spec
.
compiler_flags
[
flag
]
=
compiler
.
flags
[
flag
]
if
compiler
.
flags
[
flag
]
!=
[]:
if
compiler
.
flags
[
flag
]
!=
[]:
ret
=
True
ret
=
True
else
:
else
:
if
((
sorted
(
spec
.
compiler_flags
[
flag
])
!=
sorted
(
compiler
.
flags
[
flag
]))
and
if
((
sorted
(
spec
.
compiler_flags
[
flag
])
!=
(
not
set
(
spec
.
compiler_flags
[
flag
])
>=
set
(
compiler
.
flags
[
flag
]))):
sorted
(
compiler
.
flags
[
flag
]))
and
(
not
set
(
spec
.
compiler_flags
[
flag
])
>=
set
(
compiler
.
flags
[
flag
]))):
ret
=
True
ret
=
True
spec
.
compiler_flags
[
flag
]
=
list
(
set
(
spec
.
compiler_flags
[
flag
])
|
spec
.
compiler_flags
[
flag
]
=
list
(
set
(
compiler
.
flags
[
flag
]))
set
(
spec
.
compiler_flags
[
flag
])
|
set
(
compiler
.
flags
[
flag
]))
return
ret
return
ret
...
@@ -401,8 +425,8 @@ def find_spec(spec, condition):
...
@@ -401,8 +425,8 @@ def find_spec(spec, condition):
# First search parents, then search children
# First search parents, then search children
deptype
=
(
'
build
'
,
'
link
'
)
deptype
=
(
'
build
'
,
'
link
'
)
dagiter
=
chain
(
dagiter
=
chain
(
spec
.
traverse
(
direction
=
'
parents
'
,
deptype
=
deptype
,
root
=
False
),
spec
.
traverse
(
direction
=
'
parents
'
,
deptype
=
deptype
,
root
=
False
),
spec
.
traverse
(
direction
=
'
children
'
,
deptype
=
deptype
,
root
=
False
))
spec
.
traverse
(
direction
=
'
children
'
,
deptype
=
deptype
,
root
=
False
))
visited
=
set
()
visited
=
set
()
for
relative
in
dagiter
:
for
relative
in
dagiter
:
if
condition
(
relative
):
if
condition
(
relative
):
...
@@ -411,8 +435,10 @@ def find_spec(spec, condition):
...
@@ -411,8 +435,10 @@ def find_spec(spec, condition):
# Then search all other relatives in the DAG *except* spec
# Then search all other relatives in the DAG *except* spec
for
relative
in
spec
.
root
.
traverse
(
deptypes
=
spack
.
alldeps
):
for
relative
in
spec
.
root
.
traverse
(
deptypes
=
spack
.
alldeps
):
if
relative
is
spec
:
continue
if
relative
is
spec
:
if
id
(
relative
)
in
visited
:
continue
continue
if
id
(
relative
)
in
visited
:
continue
if
condition
(
relative
):
if
condition
(
relative
):
return
relative
return
relative
...
@@ -459,8 +485,10 @@ def cmp_specs(lhs, rhs):
...
@@ -459,8 +485,10 @@ def cmp_specs(lhs, rhs):
class
UnavailableCompilerVersionError
(
spack
.
error
.
SpackError
):
class
UnavailableCompilerVersionError
(
spack
.
error
.
SpackError
):
"""
Raised when there is no available compiler that satisfies a
"""
Raised when there is no available compiler that satisfies a
compiler spec.
"""
compiler spec.
"""
def
__init__
(
self
,
compiler_spec
):
def
__init__
(
self
,
compiler_spec
):
super
(
UnavailableCompilerVersionError
,
self
).
__init__
(
super
(
UnavailableCompilerVersionError
,
self
).
__init__
(
"
No available compiler version matches
'
%s
'"
%
compiler_spec
,
"
No available compiler version matches
'
%s
'"
%
compiler_spec
,
...
@@ -468,16 +496,20 @@ def __init__(self, compiler_spec):
...
@@ -468,16 +496,20 @@ def __init__(self, compiler_spec):
class
NoValidVersionError
(
spack
.
error
.
SpackError
):
class
NoValidVersionError
(
spack
.
error
.
SpackError
):
"""
Raised when there is no way to have a concrete version for a
"""
Raised when there is no way to have a concrete version for a
particular spec.
"""
particular spec.
"""
def
__init__
(
self
,
spec
):
def
__init__
(
self
,
spec
):
super
(
NoValidVersionError
,
self
).
__init__
(
super
(
NoValidVersionError
,
self
).
__init__
(
"
There are no valid versions for %s that match
'
%s
'"
%
(
spec
.
name
,
spec
.
versions
))
"
There are no valid versions for %s that match
'
%s
'"
%
(
spec
.
name
,
spec
.
versions
))
# NOQA: ignore=E501
class
NoBuildError
(
spack
.
error
.
SpackError
):
class
NoBuildError
(
spack
.
error
.
SpackError
):
"""
Raised when a package is configured with the buildable option False, but
"""
Raised when a package is configured with the buildable option False, but
no satisfactory external versions can be found
"""
no satisfactory external versions can be found
"""
def
__init__
(
self
,
spec
):
def
__init__
(
self
,
spec
):
super
(
NoBuildError
,
self
).
__init__
(
super
(
NoBuildError
,
self
).
__init__
(
"
The spec
'
%s
'
is configured as not buildable,
and no matching external installs were found
"
%
spec
.
name
)
"
The spec
'
%s
'
is configured as not buildable,and no matching external installs were found
"
%
spec
.
name
)
# NOQA: ignore=E501
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment