make check_for_compiler_existence an instance variable
This commit is contained in:
parent
e9a3e3bfbb
commit
5ef30e0a51
@ -169,7 +169,7 @@ def mirror_create(args):
|
|||||||
"""Create a directory to be used as a spack mirror, and fill it with
|
"""Create a directory to be used as a spack mirror, and fill it with
|
||||||
package archives."""
|
package archives."""
|
||||||
# try to parse specs from the command line first.
|
# try to parse specs from the command line first.
|
||||||
with spack.concretize.disable_compiler_existence_check():
|
with spack.concretize.concretizer.disable_compiler_existence_check():
|
||||||
specs = spack.cmd.parse_specs(args.specs, concretize=True)
|
specs = spack.cmd.parse_specs(args.specs, concretize=True)
|
||||||
|
|
||||||
# If there is a file, parse each line as a spec and add it to the list.
|
# If there is a file, parse each line as a spec and add it to the list.
|
||||||
|
@ -50,10 +50,6 @@
|
|||||||
from spack.version import ver, Version, VersionList, VersionRange
|
from spack.version import ver, Version, VersionList, VersionRange
|
||||||
from spack.package_prefs import PackagePrefs, spec_externals, is_spec_buildable
|
from spack.package_prefs import PackagePrefs, spec_externals, is_spec_buildable
|
||||||
|
|
||||||
#: controls whether we check that compiler versions actually exist during
|
|
||||||
#: concretization. Used for testing.
|
|
||||||
check_for_compiler_existence = True
|
|
||||||
|
|
||||||
|
|
||||||
#: Concretizer singleton
|
#: Concretizer singleton
|
||||||
concretizer = llnl.util.lang.Singleton(lambda: Concretizer())
|
concretizer = llnl.util.lang.Singleton(lambda: Concretizer())
|
||||||
@ -63,19 +59,21 @@
|
|||||||
_abi = llnl.util.lang.Singleton(lambda: spack.abi.ABI())
|
_abi = llnl.util.lang.Singleton(lambda: spack.abi.ABI())
|
||||||
|
|
||||||
|
|
||||||
@contextmanager
|
|
||||||
def disable_compiler_existence_check():
|
|
||||||
global check_for_compiler_existence
|
|
||||||
saved = check_for_compiler_existence
|
|
||||||
check_for_compiler_existence = False
|
|
||||||
yield
|
|
||||||
check_for_compiler_existence = saved
|
|
||||||
|
|
||||||
|
|
||||||
class Concretizer(object):
|
class Concretizer(object):
|
||||||
"""You can subclass this class to override some of the default
|
"""You can subclass this class to override some of the default
|
||||||
concretization strategies, or you can override all of them.
|
concretization strategies, or you can override all of them.
|
||||||
"""
|
"""
|
||||||
|
def __init__(self):
|
||||||
|
# controls whether we check that compiler versions actually exist
|
||||||
|
# during concretization. Used for testing and for mirror creation
|
||||||
|
self.check_for_compiler_existence = True
|
||||||
|
|
||||||
|
@contextmanager
|
||||||
|
def disable_compiler_existence_check(self):
|
||||||
|
saved = self.check_for_compiler_existence
|
||||||
|
self.check_for_compiler_existence = False
|
||||||
|
yield
|
||||||
|
self.check_for_compiler_existence = saved
|
||||||
|
|
||||||
def _valid_virtuals_and_externals(self, spec):
|
def _valid_virtuals_and_externals(self, spec):
|
||||||
"""Returns a list of candidate virtual dep providers and external
|
"""Returns a list of candidate virtual dep providers and external
|
||||||
@ -311,7 +309,7 @@ def _proper_compiler_style(cspec, aspec):
|
|||||||
return spack.compilers.compilers_for_spec(cspec, arch_spec=aspec)
|
return spack.compilers.compilers_for_spec(cspec, arch_spec=aspec)
|
||||||
|
|
||||||
if spec.compiler and spec.compiler.concrete:
|
if spec.compiler and spec.compiler.concrete:
|
||||||
if (check_for_compiler_existence and not
|
if (self.check_for_compiler_existence and not
|
||||||
_proper_compiler_style(spec.compiler, spec.architecture)):
|
_proper_compiler_style(spec.compiler, spec.architecture)):
|
||||||
_compiler_concretization_failure(
|
_compiler_concretization_failure(
|
||||||
spec.compiler, spec.architecture)
|
spec.compiler, spec.architecture)
|
||||||
@ -325,7 +323,7 @@ def _proper_compiler_style(cspec, aspec):
|
|||||||
|
|
||||||
# Check if the compiler is already fully specified
|
# Check if the compiler is already fully specified
|
||||||
if (other_compiler and other_compiler.concrete and
|
if (other_compiler and other_compiler.concrete and
|
||||||
not check_for_compiler_existence):
|
not self.check_for_compiler_existence):
|
||||||
spec.compiler = other_compiler.copy()
|
spec.compiler = other_compiler.copy()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@ -419,7 +417,7 @@ def concretize_compiler_flags(self, spec):
|
|||||||
compiler = spack.compilers.compiler_for_spec(
|
compiler = spack.compilers.compiler_for_spec(
|
||||||
spec.compiler, spec.architecture)
|
spec.compiler, spec.architecture)
|
||||||
except spack.compilers.NoCompilerForSpecError:
|
except spack.compilers.NoCompilerForSpecError:
|
||||||
if check_for_compiler_existence:
|
if self.check_for_compiler_existence:
|
||||||
raise
|
raise
|
||||||
return ret
|
return ret
|
||||||
for flag in compiler.flags:
|
for flag in compiler.flags:
|
||||||
|
@ -153,7 +153,7 @@ def test_concretize_disable_compiler_existence_check(self):
|
|||||||
with pytest.raises(spack.concretize.UnavailableCompilerVersionError):
|
with pytest.raises(spack.concretize.UnavailableCompilerVersionError):
|
||||||
check_concretize('dttop %gcc@100.100')
|
check_concretize('dttop %gcc@100.100')
|
||||||
|
|
||||||
with spack.concretize.disable_compiler_existence_check():
|
with spack.concretize.concretizer.disable_compiler_existence_check():
|
||||||
spec = check_concretize('dttop %gcc@100.100')
|
spec = check_concretize('dttop %gcc@100.100')
|
||||||
assert spec.satisfies('%gcc@100.100')
|
assert spec.satisfies('%gcc@100.100')
|
||||||
assert spec['dtlink3'].satisfies('%gcc@100.100')
|
assert spec['dtlink3'].satisfies('%gcc@100.100')
|
||||||
|
Loading…
Reference in New Issue
Block a user