Finished merge on these files
This commit is contained in:
parent
9f59c128be
commit
80310a3b7c
44
lib/spack/env/cc
vendored
44
lib/spack/env/cc
vendored
@ -174,6 +174,28 @@ if [[ -z $command ]]; then
|
|||||||
die "ERROR: Compiler '$SPACK_COMPILER_SPEC' does not support compiling $language programs."
|
die "ERROR: Compiler '$SPACK_COMPILER_SPEC' does not support compiling $language programs."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
#
|
||||||
|
# Filter '.' and Spack environment directories out of PATH so that
|
||||||
|
# this script doesn't just call itself
|
||||||
|
#
|
||||||
|
IFS=':' read -ra env_path <<< "$PATH"
|
||||||
|
IFS=':' read -ra spack_env_dirs <<< "$SPACK_ENV_PATH"
|
||||||
|
spack_env_dirs+=("" ".")
|
||||||
|
PATH=""
|
||||||
|
for dir in "${env_path[@]}"; do
|
||||||
|
addpath=true
|
||||||
|
for env_dir in "${spack_env_dirs[@]}"; do
|
||||||
|
if [[ $dir == $env_dir ]]; then
|
||||||
|
addpath=false
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if $addpath; then
|
||||||
|
PATH="${PATH:+$PATH:}$dir"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
export PATH
|
||||||
|
|
||||||
if [[ $mode == vcheck ]]; then
|
if [[ $mode == vcheck ]]; then
|
||||||
exec ${command} "$@"
|
exec ${command} "$@"
|
||||||
fi
|
fi
|
||||||
@ -286,28 +308,6 @@ unset LD_LIBRARY_PATH
|
|||||||
unset LD_RUN_PATH
|
unset LD_RUN_PATH
|
||||||
unset DYLD_LIBRARY_PATH
|
unset DYLD_LIBRARY_PATH
|
||||||
|
|
||||||
#
|
|
||||||
# Filter '.' and Spack environment directories out of PATH so that
|
|
||||||
# this script doesn't just call itself
|
|
||||||
#
|
|
||||||
IFS=':' read -ra env_path <<< "$PATH"
|
|
||||||
IFS=':' read -ra spack_env_dirs <<< "$SPACK_ENV_PATH"
|
|
||||||
spack_env_dirs+=("" ".")
|
|
||||||
PATH=""
|
|
||||||
for dir in "${env_path[@]}"; do
|
|
||||||
addpath=true
|
|
||||||
for env_dir in "${spack_env_dirs[@]}"; do
|
|
||||||
if [[ $dir == $env_dir ]]; then
|
|
||||||
addpath=false
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if $addpath; then
|
|
||||||
PATH="${PATH:+$PATH:}$dir"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
export PATH
|
|
||||||
|
|
||||||
full_command=("$command" "${args[@]}")
|
full_command=("$command" "${args[@]}")
|
||||||
|
|
||||||
# In test command mode, write out full command for Spack tests.
|
# In test command mode, write out full command for Spack tests.
|
||||||
|
@ -44,7 +44,12 @@ class Pgi(Compiler):
|
|||||||
'f77' : 'pgi/pgfortran',
|
'f77' : 'pgi/pgfortran',
|
||||||
'fc' : 'pgi/pgfortran' }
|
'fc' : 'pgi/pgfortran' }
|
||||||
|
|
||||||
#ifdef NEW
|
|
||||||
|
|
||||||
|
PrgEnv = 'PrgEnv-pgi'
|
||||||
|
PrgEnv_compiler = 'pgi'
|
||||||
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def openmp_flag(self):
|
def openmp_flag(self):
|
||||||
return "-mp"
|
return "-mp"
|
||||||
@ -53,12 +58,6 @@ def openmp_flag(self):
|
|||||||
def cxx11_flag(self):
|
def cxx11_flag(self):
|
||||||
return "-std=c++11"
|
return "-std=c++11"
|
||||||
|
|
||||||
|
|
||||||
#else /* not NEW */
|
|
||||||
PrgEnv = 'PrgEnv-pgi'
|
|
||||||
PrgEnv_compiler = 'pgi'
|
|
||||||
|
|
||||||
#endif /* not NEW */
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def default_version(cls, comp):
|
def default_version(cls, comp):
|
||||||
"""The '-V' option works for all the PGI compilers.
|
"""The '-V' option works for all the PGI compilers.
|
||||||
|
@ -167,6 +167,18 @@
|
|||||||
'f77': { 'anyOf': [ {'type' : 'string' },
|
'f77': { 'anyOf': [ {'type' : 'string' },
|
||||||
{'type' : 'null' }]},
|
{'type' : 'null' }]},
|
||||||
'fc': { 'anyOf': [ {'type' : 'string' },
|
'fc': { 'anyOf': [ {'type' : 'string' },
|
||||||
|
{'type' : 'null' }]},
|
||||||
|
'cflags': { 'anyOf': [ {'type' : 'string' },
|
||||||
|
{'type' : 'null' }]},
|
||||||
|
'cxxflags': { 'anyOf': [ {'type' : 'string' },
|
||||||
|
{'type' : 'null' }]},
|
||||||
|
'fflags': { 'anyOf': [ {'type' : 'string' },
|
||||||
|
{'type' : 'null' }]},
|
||||||
|
'cppflags': { 'anyOf': [ {'type' : 'string' },
|
||||||
|
{'type' : 'null' }]},
|
||||||
|
'ldflags': { 'anyOf': [ {'type' : 'string' },
|
||||||
|
{'type' : 'null' }]},
|
||||||
|
'ldlibs': { 'anyOf': [ {'type' : 'string' },
|
||||||
{'type' : 'null' }]}}},
|
{'type' : 'null' }]}}},
|
||||||
'spec': { 'type': 'string'},#r'\w[\w-]*@\w[\w-]*'
|
'spec': { 'type': 'string'},#r'\w[\w-]*@\w[\w-]*'
|
||||||
'operating_system': {
|
'operating_system': {
|
||||||
@ -234,15 +246,11 @@
|
|||||||
'items' : { 'type' : 'string' } }, #compiler specs
|
'items' : { 'type' : 'string' } }, #compiler specs
|
||||||
'buildable': {
|
'buildable': {
|
||||||
'type': 'boolean',
|
'type': 'boolean',
|
||||||
#ifdef NEW
|
|
||||||
'default': True,
|
'default': True,
|
||||||
#else /* not NEW */
|
|
||||||
'default': False,
|
|
||||||
},
|
},
|
||||||
'module': {
|
'modules': {
|
||||||
'anyOf' : [{'type': 'string'},
|
'type' : 'object',
|
||||||
{'type': 'null'}]
|
'default' : {},
|
||||||
#endif /* not NEW */
|
|
||||||
},
|
},
|
||||||
'providers': {
|
'providers': {
|
||||||
'type': 'object',
|
'type': 'object',
|
||||||
@ -687,7 +695,8 @@ def spec_externals(spec):
|
|||||||
|
|
||||||
external_specs = []
|
external_specs = []
|
||||||
pkg_paths = allpkgs.get(name, {}).get('paths', None)
|
pkg_paths = allpkgs.get(name, {}).get('paths', None)
|
||||||
if not pkg_paths:
|
pkg_modules = allpkgs.get(name, {}).get('modules', None)
|
||||||
|
if (not pkg_paths) and (not pkg_modules):
|
||||||
return []
|
return []
|
||||||
|
|
||||||
for external_spec, path in pkg_paths.iteritems():
|
for external_spec, path in pkg_paths.iteritems():
|
||||||
@ -695,20 +704,21 @@ def spec_externals(spec):
|
|||||||
# skip entries without paths (avoid creating extra Specs)
|
# skip entries without paths (avoid creating extra Specs)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
#ifdef NEW
|
|
||||||
external_spec = spack.spec.Spec(external_spec, external=path)
|
external_spec = spack.spec.Spec(external_spec, external=path)
|
||||||
if external_spec.satisfies(spec):
|
if external_spec.satisfies(spec):
|
||||||
external_specs.append(external_spec)
|
external_specs.append(external_spec)
|
||||||
return external_specs
|
|
||||||
#else /* not NEW */
|
for external_spec, module in pkg_modules.iteritems():
|
||||||
module = allpkgs.get(pkg, {}).get('module', None)
|
|
||||||
if not path:
|
|
||||||
if not module:
|
if not module:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
path = get_path_from_module(module)
|
path = get_path_from_module(module)
|
||||||
spec_locations.append( (spack.spec.Spec(pkg), path, module) )
|
|
||||||
return spec_locations
|
external_spec = spack.spec.Spec(external_spec, external=path, external_module=module)
|
||||||
#endif /* not NEW */
|
if external_spec.satisfies(spec):
|
||||||
|
external_specs.append(external_spec)
|
||||||
|
|
||||||
|
return external_specs
|
||||||
|
|
||||||
|
|
||||||
def is_spec_buildable(spec):
|
def is_spec_buildable(spec):
|
||||||
|
@ -497,14 +497,10 @@ def __init__(self, spec_like, *dep_like, **kwargs):
|
|||||||
# package.py files for.
|
# package.py files for.
|
||||||
self._normal = kwargs.get('normal', False)
|
self._normal = kwargs.get('normal', False)
|
||||||
self._concrete = kwargs.get('concrete', False)
|
self._concrete = kwargs.get('concrete', False)
|
||||||
#ifdef NEW
|
|
||||||
|
|
||||||
# Allow a spec to be constructed with an external path.
|
# Allow a spec to be constructed with an external path.
|
||||||
self.external = kwargs.get('external', None)
|
self.external = kwargs.get('external', None)
|
||||||
#else /* not NEW */
|
self.external_module = kwargs.get('external_module', None)
|
||||||
self.external = None
|
|
||||||
self.external_module = None
|
|
||||||
#endif /* not NEW */
|
|
||||||
|
|
||||||
# This allows users to construct a spec DAG with literals.
|
# This allows users to construct a spec DAG with literals.
|
||||||
# Note that given two specs a and b, Spec(a) copies a, but
|
# Note that given two specs a and b, Spec(a) copies a, but
|
||||||
@ -538,8 +534,10 @@ def _add_flag(self, name, value):
|
|||||||
Known flags currently include "arch"
|
Known flags currently include "arch"
|
||||||
"""
|
"""
|
||||||
valid_flags = FlagMap.valid_compiler_flags()
|
valid_flags = FlagMap.valid_compiler_flags()
|
||||||
if name == 'arch':
|
if name == 'os' or name == 'operating_system':
|
||||||
self._set_architecture(value)
|
self._set_os(value)
|
||||||
|
elif name == 'target':
|
||||||
|
self._set_target(value)
|
||||||
elif name in valid_flags:
|
elif name in valid_flags:
|
||||||
assert(self.compiler_flags is not None)
|
assert(self.compiler_flags is not None)
|
||||||
self.compiler_flags[name] = value.split()
|
self.compiler_flags[name] = value.split()
|
||||||
@ -553,12 +551,13 @@ def _set_compiler(self, compiler):
|
|||||||
self.compiler = compiler
|
self.compiler = compiler
|
||||||
|
|
||||||
|
|
||||||
def _set_architecture(self, architecture):
|
def _set_os(self, value):
|
||||||
"""Called by the parser to set the architecture."""
|
"""Called by the parser to set the architecture operating system"""
|
||||||
if self.architecture: raise DuplicateArchitectureError(
|
self.architecture.platform_os = self.architecture.platform.operating_system(value)
|
||||||
"Spec for '%s' cannot have two architectures." % self.name)
|
|
||||||
self.architecture = architecture
|
|
||||||
|
|
||||||
|
def _set_target(self, value):
|
||||||
|
"""Called by the parser to set the architecture target"""
|
||||||
|
self.architecture.target = self.architecture.platform.target(value)
|
||||||
|
|
||||||
def _add_dependency(self, spec):
|
def _add_dependency(self, spec):
|
||||||
"""Called by the parser to add another spec as a dependency."""
|
"""Called by the parser to add another spec as a dependency."""
|
||||||
@ -793,9 +792,9 @@ def to_node_dict(self):
|
|||||||
if self.architecture:
|
if self.architecture:
|
||||||
# TODO: Fix the target.to_dict to account for the tuple
|
# TODO: Fix the target.to_dict to account for the tuple
|
||||||
# Want it to be a dict of dicts
|
# Want it to be a dict of dicts
|
||||||
d['architecture'] = self.architecture.to_dict()
|
d['arch'] = self.architecture.to_dict()
|
||||||
else:
|
else:
|
||||||
d['architecture'] = None
|
d['arch'] = None
|
||||||
|
|
||||||
if self.compiler:
|
if self.compiler:
|
||||||
d.update(self.compiler.to_dict())
|
d.update(self.compiler.to_dict())
|
||||||
@ -824,17 +823,12 @@ def from_node_dict(node):
|
|||||||
spec = Spec(name)
|
spec = Spec(name)
|
||||||
spec.namespace = node.get('namespace', None)
|
spec.namespace = node.get('namespace', None)
|
||||||
spec.versions = VersionList.from_dict(node)
|
spec.versions = VersionList.from_dict(node)
|
||||||
#ifdef NEW
|
|
||||||
spec.architecture = node['arch']
|
|
||||||
|
|
||||||
if 'hash' in node:
|
if 'hash' in node:
|
||||||
spec._hash = node['hash']
|
spec._hash = node['hash']
|
||||||
|
|
||||||
#else /* not NEW */
|
spec.architecture = spack.architecture.arch_from_dict(node['arch'])
|
||||||
# TODO: Need to fix the architecture.Target.from_dict
|
|
||||||
spec.architecture = spack.architecture.arch_from_dict(node['architecture'])
|
|
||||||
|
|
||||||
#endif /* not NEW */
|
|
||||||
if node['compiler'] is None:
|
if node['compiler'] is None:
|
||||||
spec.compiler = None
|
spec.compiler = None
|
||||||
else:
|
else:
|
||||||
@ -1423,9 +1417,19 @@ def constrain(self, other, deps=True):
|
|||||||
|
|
||||||
# TODO: Check out the logic here
|
# TODO: Check out the logic here
|
||||||
if self.architecture is not None and other.architecture is not None:
|
if self.architecture is not None and other.architecture is not None:
|
||||||
if self.architecture != other.architecture:
|
if self.architecture.platform is not None and other.architecture.platform is not None:
|
||||||
|
if self.architecture.platform != other.architecture.platform:
|
||||||
raise UnsatisfiableArchitectureSpecError(self.architecture,
|
raise UnsatisfiableArchitectureSpecError(self.architecture,
|
||||||
other.architecture)
|
other.architecture)
|
||||||
|
if self.architecture.platform_os is not None and other.architecture.platform_os is not None:
|
||||||
|
if self.architecture.platform_os != other.architecture.platform_os:
|
||||||
|
raise UnsatisfiableArchitectureSpecError(self.architecture,
|
||||||
|
other.architecture)
|
||||||
|
if self.architecture.target is not None and other.architecture.target is not None:
|
||||||
|
if self.architecture.target != other.architecture.target:
|
||||||
|
raise UnsatisfiableArchitectureSpecError(self.architecture,
|
||||||
|
other.architecture)
|
||||||
|
|
||||||
|
|
||||||
changed = False
|
changed = False
|
||||||
if self.compiler is not None and other.compiler is not None:
|
if self.compiler is not None and other.compiler is not None:
|
||||||
@ -1440,7 +1444,14 @@ def constrain(self, other, deps=True):
|
|||||||
changed |= self.compiler_flags.constrain(other.compiler_flags)
|
changed |= self.compiler_flags.constrain(other.compiler_flags)
|
||||||
|
|
||||||
old = self.architecture
|
old = self.architecture
|
||||||
|
if self.architecture is None or other.architecture is None:
|
||||||
self.architecture = self.architecture or other.architecture
|
self.architecture = self.architecture or other.architecture
|
||||||
|
elif self.architecture.platform is None or other.architecture.platform is None:
|
||||||
|
self.architecture.platform = self.architecture.platform or other.architecture.platform
|
||||||
|
elif self.architecture.platform_os is None of other.architecture.platform_os is None:
|
||||||
|
self.architecture.platform_os = self.architecture.platform_os or other.architecture.platform_os
|
||||||
|
elif self.architecture.target is None or other.architecture.target is None:
|
||||||
|
self.architecture.target = self.architecture.target or other.architecture.target
|
||||||
changed |= (self.architecture != old)
|
changed |= (self.architecture != old)
|
||||||
|
|
||||||
if deps:
|
if deps:
|
||||||
@ -1572,16 +1583,18 @@ def satisfies(self, other, deps=True, strict=False):
|
|||||||
|
|
||||||
# Architecture satisfaction is currently just string equality.
|
# Architecture satisfaction is currently just string equality.
|
||||||
# If not strict, None means unconstrained.
|
# If not strict, None means unconstrained.
|
||||||
if isinstance(self.architecture, basestring):
|
|
||||||
self.add_architecture_from_string(self.architecture)
|
|
||||||
if isinstance(other.architecture, basestring):
|
|
||||||
other.add_architecture_from_string(other.architecture)
|
|
||||||
|
|
||||||
# TODO: Need to make sure that comparisons can be made via classes
|
# TODO: Need to make sure that comparisons can be made via classes
|
||||||
if self.architecture and other.architecture:
|
if self.architecture and other.architecture:
|
||||||
if self.architecture != other.architecture:
|
if ((self.architecture.platform and other.architecture.platform and self.architecture.platform != other.architecture.platform) or
|
||||||
|
(self.architecture.platform_os and other.architecture.platform_os and self.architecture.platform_os != other.architecture.platform_os) or
|
||||||
|
(self.architecture.target and other.architecture.target and self.architecture.target != other.architecture.target)):
|
||||||
return False
|
return False
|
||||||
elif strict and (other.architecture and not self.architecture):
|
elif strict and ((other.architecture and not self.architecture) or
|
||||||
|
(other.architecture.platform and not self.architecture.platform) or
|
||||||
|
(other.architecture.platform_os and not self.architecture.platform_os) or
|
||||||
|
(other.architecture.target and not self.architecture.target)):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if not self.compiler_flags.satisfies(other.compiler_flags, strict=strict):
|
if not self.compiler_flags.satisfies(other.compiler_flags, strict=strict):
|
||||||
@ -1663,7 +1676,7 @@ def _dup(self, other, **kwargs):
|
|||||||
self.architecture != other.architecture and self.compiler != other.compiler and \
|
self.architecture != other.architecture and self.compiler != other.compiler and \
|
||||||
self.variants != other.variants and self._normal != other._normal and \
|
self.variants != other.variants and self._normal != other._normal and \
|
||||||
self.concrete != other.concrete and self.external != other.external and \
|
self.concrete != other.concrete and self.external != other.external and \
|
||||||
self.external_module != other.external_module)
|
self.external_module != other.external_module and self.compiler_flags != other.compiler_flags)
|
||||||
|
|
||||||
# Local node attributes get copied first.
|
# Local node attributes get copied first.
|
||||||
self.name = other.name
|
self.name = other.name
|
||||||
@ -1677,12 +1690,9 @@ def _dup(self, other, **kwargs):
|
|||||||
self.variants = other.variants.copy()
|
self.variants = other.variants.copy()
|
||||||
self.variants.spec = self
|
self.variants.spec = self
|
||||||
self.external = other.external
|
self.external = other.external
|
||||||
self.namespace = other.namespace
|
|
||||||
#ifdef NEW
|
|
||||||
self._hash = other._hash
|
|
||||||
#else /* not NEW */
|
|
||||||
self.external_module = other.external_module
|
self.external_module = other.external_module
|
||||||
#endif /* not NEW */
|
self.namespace = other.namespace
|
||||||
|
self._hash = other._hash
|
||||||
|
|
||||||
# If we copy dependencies, preserve DAG structure in the new spec
|
# If we copy dependencies, preserve DAG structure in the new spec
|
||||||
if kwargs.get('deps', True):
|
if kwargs.get('deps', True):
|
||||||
@ -1983,7 +1993,7 @@ def write(s, c):
|
|||||||
write(fmt % str(self.variants), '+')
|
write(fmt % str(self.variants), '+')
|
||||||
elif named_str == 'ARCHITECTURE':
|
elif named_str == 'ARCHITECTURE':
|
||||||
if self.architecture:
|
if self.architecture:
|
||||||
write(fmt % str(self.architecture), '=')
|
write(fmt % str(self.architecture), ' arch=')
|
||||||
elif named_str == 'SHA1':
|
elif named_str == 'SHA1':
|
||||||
if self.dependencies:
|
if self.dependencies:
|
||||||
out.write(fmt % str(self.dag_hash(7)))
|
out.write(fmt % str(self.dag_hash(7)))
|
||||||
@ -2202,14 +2212,11 @@ def spec(self, name, check_valid_token = False):
|
|||||||
spec.name = spec_name
|
spec.name = spec_name
|
||||||
spec.versions = VersionList()
|
spec.versions = VersionList()
|
||||||
spec.variants = VariantMap(spec)
|
spec.variants = VariantMap(spec)
|
||||||
spec.architecture = None
|
spec.architecture = spack.architecture.Arch()
|
||||||
spec.compiler = None
|
spec.compiler = None
|
||||||
spec.external = None
|
spec.external = None
|
||||||
#ifdef NEW
|
|
||||||
spec.compiler_flags = FlagMap(spec)
|
|
||||||
#else /* not NEW */
|
|
||||||
spec.external_module = None
|
spec.external_module = None
|
||||||
#endif /* not NEW */
|
spec.compiler_flags = FlagMap(spec)
|
||||||
spec.dependents = DependencyMap()
|
spec.dependents = DependencyMap()
|
||||||
spec.dependencies = DependencyMap()
|
spec.dependencies = DependencyMap()
|
||||||
spec.namespace = spec_namespace
|
spec.namespace = spec_namespace
|
||||||
@ -2284,12 +2291,6 @@ def variant(self,name=None):
|
|||||||
self.check_identifier()
|
self.check_identifier()
|
||||||
return self.token.value
|
return self.token.value
|
||||||
|
|
||||||
def architecture(self):
|
|
||||||
#TODO: Make this work properly as a subcase of variant (includes adding names to grammar)
|
|
||||||
self.expect(ID)
|
|
||||||
return self.token.value
|
|
||||||
|
|
||||||
|
|
||||||
def version(self):
|
def version(self):
|
||||||
start = None
|
start = None
|
||||||
end = None
|
end = None
|
||||||
|
Loading…
Reference in New Issue
Block a user