Added method to concretize target and os pair
This commit is contained in:
parent
d0ae6dd401
commit
fb234205c2
1 changed files with 61 additions and 14 deletions
|
@ -33,6 +33,7 @@
|
||||||
TODO: make this customizable and allow users to configure
|
TODO: make this customizable and allow users to configure
|
||||||
concretization policies.
|
concretization policies.
|
||||||
"""
|
"""
|
||||||
|
import collections
|
||||||
from llnl.util.filesystem import join_path
|
from llnl.util.filesystem import join_path
|
||||||
import spack
|
import spack
|
||||||
import spack.spec
|
import spack.spec
|
||||||
|
@ -209,6 +210,22 @@ def concretize_version(self, spec):
|
||||||
|
|
||||||
return True # Things changed
|
return True # Things changed
|
||||||
|
|
||||||
|
def _concretize_operating_system(self, arch, platform):
|
||||||
|
""" Future method for concretizing operating system """
|
||||||
|
if isinstance(arch.arch_os, OperatingSystem):
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
arch.arch_os = platform.operating_system('default')
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def _concretize_arch_target(self, arch, platform):
|
||||||
|
if isinstance(arch.target, spack.architecture.Target):
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
arch.target = platform.target('default')
|
||||||
|
return True
|
||||||
|
|
||||||
def concretize_target(self, spec):
|
def concretize_target(self, spec):
|
||||||
"""If the spec already has an target and it is a an target type,
|
"""If the spec already has an target and it is a an target type,
|
||||||
return. Otherwise, if it has a target that is a string type, generate a
|
return. Otherwise, if it has a target that is a string type, generate a
|
||||||
|
@ -216,23 +233,53 @@ def concretize_target(self, spec):
|
||||||
DAG has an target, then use that. Otherwise, take the system's default
|
DAG has an target, then use that. Otherwise, take the system's default
|
||||||
target.
|
target.
|
||||||
"""
|
"""
|
||||||
if spec.target is not None:
|
platform = spack.architecture.sys_type()
|
||||||
if isinstance(spec.target,spack.architecture.Target):
|
|
||||||
return False
|
|
||||||
else:
|
|
||||||
spec.add_target_from_string(spec.target)
|
|
||||||
return True #changed
|
|
||||||
|
|
||||||
if spec.root.target:
|
if spec.target is None:
|
||||||
if isinstance(spec.root.target,spack.architecture.Target):
|
# Create an empty tuple
|
||||||
spec.target = spec.root.target
|
Arch = collections.namedtuple("Arch", "arch_os target")
|
||||||
else:
|
spec.target = Arch(arch_os=platform.operating_system('default'),
|
||||||
spec.add_target_from_string(spec.root.target)
|
target=platform.target('default'))
|
||||||
|
|
||||||
|
return True
|
||||||
|
# If there is a target and it is a tuple and has both filled return
|
||||||
|
# False
|
||||||
|
if not isinstance(spec.target, basestring):
|
||||||
|
return any((self._concretize_operating_system(spec.target, platform),
|
||||||
|
self._concretize_arch_target(spec.target, plarform)))
|
||||||
else:
|
else:
|
||||||
platform = spack.architecture.sys_type()
|
spec.add_target_from_string(spec.target)
|
||||||
spec.target = platform.target('default')
|
|
||||||
|
|
||||||
return True #changed
|
if spec.root.target and \
|
||||||
|
not isinstance(spec.root.target, basestring):
|
||||||
|
bool_flag = any(
|
||||||
|
(self._concretize_operating_system(spec.root.target, platform),
|
||||||
|
self._concretize_arch_target(spec.root.target, platform)))
|
||||||
|
spec.target =spec.root.target
|
||||||
|
return bool_flag
|
||||||
|
else:
|
||||||
|
spec.add_target_from_string(spec.root.target)
|
||||||
|
|
||||||
|
|
||||||
|
# if there is no target specified used the defaults
|
||||||
|
|
||||||
|
#if spec.target is not None:
|
||||||
|
# if isinstance(spec.target,spack.architecture.Target):
|
||||||
|
# return False
|
||||||
|
# else:
|
||||||
|
# spec.add_target_from_string(spec.target)
|
||||||
|
# return True #changed
|
||||||
|
|
||||||
|
#if spec.root.target:
|
||||||
|
# if isinstance(spec.root.target,spack.architecture.Target):
|
||||||
|
# spec.target = spec.root.target
|
||||||
|
# else:
|
||||||
|
# spec.add_target_from_string(spec.root.target)
|
||||||
|
#else:
|
||||||
|
# platform = spack.architecture.sys_type()
|
||||||
|
# spec.target = platform.target('default')
|
||||||
|
|
||||||
|
#return True #changed
|
||||||
|
|
||||||
|
|
||||||
def concretize_variants(self, spec):
|
def concretize_variants(self, spec):
|
||||||
|
|
Loading…
Reference in a new issue