Merge branch 'develop' into correct-cc
This commit is contained in:
14
lib/spack/env/cc
vendored
14
lib/spack/env/cc
vendored
@@ -86,22 +86,22 @@ done
|
||||
#
|
||||
command=$(basename "$0")
|
||||
case "$command" in
|
||||
cc|gcc|c89|c99|clang|xlc)
|
||||
cc|c89|c99|gcc|clang|icc|pgcc|xlc)
|
||||
command="$SPACK_CC"
|
||||
language="C"
|
||||
;;
|
||||
c++|CC|g++|clang++|xlC)
|
||||
c++|CC|g++|clang++|icpc|pgCC|xlc++)
|
||||
command="$SPACK_CXX"
|
||||
language="C++"
|
||||
;;
|
||||
f77|xlf)
|
||||
command="$SPACK_F77"
|
||||
language="Fortran 77"
|
||||
;;
|
||||
fc|f90|f95|xlf90)
|
||||
f90|fc|f95|gfortran|ifort|pgf90|xlf90)
|
||||
command="$SPACK_FC"
|
||||
language="Fortran 90"
|
||||
;;
|
||||
f77|gfortran|ifort|pgf77|xlf)
|
||||
command="$SPACK_F77"
|
||||
language="Fortran 77"
|
||||
;;
|
||||
cpp)
|
||||
mode=cpp
|
||||
;;
|
||||
|
||||
1
lib/spack/env/clang/clang
vendored
Symbolic link
1
lib/spack/env/clang/clang
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/clang/clang++
vendored
Symbolic link
1
lib/spack/env/clang/clang++
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/gcc/g++
vendored
Symbolic link
1
lib/spack/env/gcc/g++
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/gcc/gcc
vendored
Symbolic link
1
lib/spack/env/gcc/gcc
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/gcc/gfortran
vendored
Symbolic link
1
lib/spack/env/gcc/gfortran
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/intel/icc
vendored
Symbolic link
1
lib/spack/env/intel/icc
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/intel/icpc
vendored
Symbolic link
1
lib/spack/env/intel/icpc
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/intel/ifort
vendored
Symbolic link
1
lib/spack/env/intel/ifort
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/pgi/case-insensitive/pgCC
vendored
Symbolic link
1
lib/spack/env/pgi/case-insensitive/pgCC
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../../cc
|
||||
1
lib/spack/env/pgi/pgcc
vendored
Symbolic link
1
lib/spack/env/pgi/pgcc
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/pgi/pgf77
vendored
Symbolic link
1
lib/spack/env/pgi/pgf77
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/pgi/pgf90
vendored
Symbolic link
1
lib/spack/env/pgi/pgf90
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/xl/xlc
vendored
Symbolic link
1
lib/spack/env/xl/xlc
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/xl/xlc++
vendored
Symbolic link
1
lib/spack/env/xl/xlc++
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/xl/xlf
vendored
Symbolic link
1
lib/spack/env/xl/xlf
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
1
lib/spack/env/xl/xlf90
vendored
Symbolic link
1
lib/spack/env/xl/xlf90
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cc
|
||||
3
lib/spack/external/pyqver2.py
vendored
3
lib/spack/external/pyqver2.py
vendored
@@ -30,7 +30,8 @@
|
||||
StandardModules = {
|
||||
"__future__": (2, 1),
|
||||
"abc": (2, 6),
|
||||
"argparse": (2, 7),
|
||||
# skip argparse now that it's in lib/spack/external
|
||||
# "argparse": (2, 7),
|
||||
"ast": (2, 6),
|
||||
"atexit": (2, 0),
|
||||
"bz2": (2, 3),
|
||||
|
||||
@@ -88,10 +88,14 @@ def set_compiler_environment_variables(pkg):
|
||||
compiler = pkg.compiler
|
||||
|
||||
# Set compiler variables used by CMake and autotools
|
||||
os.environ['CC'] = join_path(spack.build_env_path, 'cc')
|
||||
os.environ['CXX'] = join_path(spack.build_env_path, 'c++')
|
||||
os.environ['F77'] = join_path(spack.build_env_path, 'f77')
|
||||
os.environ['FC'] = join_path(spack.build_env_path, 'f90')
|
||||
assert all(key in pkg.compiler.link_paths
|
||||
for key in ('cc', 'cxx', 'f77', 'fc'))
|
||||
|
||||
link_dir = spack.build_env_path
|
||||
os.environ['CC'] = join_path(link_dir, pkg.compiler.link_paths['cc'])
|
||||
os.environ['CXX'] = join_path(link_dir, pkg.compiler.link_paths['cxx'])
|
||||
os.environ['F77'] = join_path(link_dir, pkg.compiler.link_paths['f77'])
|
||||
os.environ['FC'] = join_path(link_dir, pkg.compiler.link_paths['fc'])
|
||||
|
||||
# Set SPACK compiler variables so that our wrapper knows what to call
|
||||
if compiler.cc:
|
||||
@@ -110,11 +114,23 @@ def set_build_environment_variables(pkg):
|
||||
"""This ensures a clean install environment when we build packages.
|
||||
"""
|
||||
# Add spack build environment path with compiler wrappers first in
|
||||
# the path. We handle case sensitivity conflicts like "CC" and
|
||||
# "cc" by putting one in the <build_env_path>/case-insensitive
|
||||
# the path. We add both spack.env_path, which includes default
|
||||
# wrappers (cc, c++, f77, f90), AND a subdirectory containing
|
||||
# compiler-specific symlinks. The latter ensures that builds that
|
||||
# are sensitive to the *name* of the compiler see the right name
|
||||
# when we're building wtih the wrappers.
|
||||
#
|
||||
# Conflicts on case-insensitive systems (like "CC" and "cc") are
|
||||
# handled by putting one in the <build_env_path>/case-insensitive
|
||||
# directory. Add that to the path too.
|
||||
env_paths = [spack.build_env_path,
|
||||
join_path(spack.build_env_path, 'case-insensitive')]
|
||||
env_paths = []
|
||||
def add_env_path(path):
|
||||
env_paths.append(path)
|
||||
ci = join_path(path, 'case-insensitive')
|
||||
if os.path.isdir(ci): env_paths.append(ci)
|
||||
add_env_path(spack.build_env_path)
|
||||
add_env_path(join_path(spack.build_env_path, pkg.compiler.name))
|
||||
|
||||
path_put_first("PATH", env_paths)
|
||||
path_set(SPACK_ENV_PATH, env_paths)
|
||||
|
||||
|
||||
@@ -54,7 +54,9 @@ def extensions(parser, args):
|
||||
if not args.spec:
|
||||
tty.die("extensions requires a package spec.")
|
||||
|
||||
#
|
||||
# Checks
|
||||
#
|
||||
spec = spack.cmd.parse_specs(args.spec)
|
||||
if len(spec) > 1:
|
||||
tty.die("Can only list extensions for one package.")
|
||||
@@ -70,7 +72,9 @@ def extensions(parser, args):
|
||||
if not args.mode:
|
||||
args.mode = 'short'
|
||||
|
||||
#
|
||||
# List package names of extensions
|
||||
#
|
||||
extensions = spack.db.extensions_for(spec)
|
||||
if not extensions:
|
||||
tty.msg("%s has no extensions." % spec.cshort_spec)
|
||||
@@ -79,7 +83,9 @@ def extensions(parser, args):
|
||||
tty.msg("%d extensions:" % len(extensions))
|
||||
colify(ext.name for ext in extensions)
|
||||
|
||||
#
|
||||
# List specs of installed extensions.
|
||||
#
|
||||
installed = [s.spec for s in spack.installed_db.installed_extensions_for(spec)]
|
||||
print
|
||||
if not installed:
|
||||
@@ -88,7 +94,9 @@ def extensions(parser, args):
|
||||
tty.msg("%d installed:" % len(installed))
|
||||
spack.cmd.find.display_specs(installed, mode=args.mode)
|
||||
|
||||
#
|
||||
# List specs of activated extensions.
|
||||
#
|
||||
activated = spack.install_layout.extension_map(spec)
|
||||
print
|
||||
if not activated:
|
||||
|
||||
@@ -33,10 +33,13 @@ def setup_parser(subparser):
|
||||
subparser.add_argument(
|
||||
'-n', '--no-checksum', action='store_true', dest='no_checksum',
|
||||
help="Do not check packages against checksum")
|
||||
subparser.add_argument(
|
||||
'-m', '--missing', action='store_true', help="Also fetch all missing dependencies")
|
||||
subparser.add_argument(
|
||||
'-D', '--dependencies', action='store_true', help="Also fetch all dependencies")
|
||||
subparser.add_argument(
|
||||
'packages', nargs=argparse.REMAINDER, help="specs of packages to fetch")
|
||||
|
||||
|
||||
def fetch(parser, args):
|
||||
if not args.packages:
|
||||
tty.die("fetch requires at least one package argument")
|
||||
@@ -46,5 +49,13 @@ def fetch(parser, args):
|
||||
|
||||
specs = spack.cmd.parse_specs(args.packages, concretize=True)
|
||||
for spec in specs:
|
||||
if args.missing or args.dependencies:
|
||||
to_fetch = set()
|
||||
for s in spec.traverse():
|
||||
package = spack.db.get(s)
|
||||
if args.missing and package.installed:
|
||||
continue
|
||||
package.do_fetch()
|
||||
|
||||
package = spack.db.get(spec)
|
||||
package.do_fetch()
|
||||
|
||||
@@ -54,6 +54,8 @@ def setup_parser(subparser):
|
||||
'specs', nargs=argparse.REMAINDER, help="Specs of packages to put in mirror")
|
||||
create_parser.add_argument(
|
||||
'-f', '--file', help="File with specs of packages to put in mirror.")
|
||||
create_parser.add_argument(
|
||||
'-D', '--dependencies', action='store_true', help="Also fetch all dependencies")
|
||||
create_parser.add_argument(
|
||||
'-o', '--one-version-per-spec', action='store_const', const=1, default=0,
|
||||
help="Only fetch one 'preferred' version per spec, not all known versions.")
|
||||
@@ -118,7 +120,7 @@ def mirror_create(args):
|
||||
"""Create a directory to be used as a spack mirror, and fill it with
|
||||
package archives."""
|
||||
# try to parse specs from the command line first.
|
||||
specs = spack.cmd.parse_specs(args.specs)
|
||||
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 args.file:
|
||||
@@ -131,6 +133,14 @@ def mirror_create(args):
|
||||
specs = [Spec(n) for n in spack.db.all_package_names()]
|
||||
specs.sort(key=lambda s: s.format("$_$@").lower())
|
||||
|
||||
if args.dependencies:
|
||||
new_specs = set()
|
||||
for spec in specs:
|
||||
spec.concretize()
|
||||
for s in spec.traverse():
|
||||
new_specs.add(s)
|
||||
specs = list(new_specs)
|
||||
|
||||
# Default name for directory is spack-mirror-<DATESTAMP>
|
||||
directory = args.directory
|
||||
if not directory:
|
||||
|
||||
@@ -31,6 +31,8 @@
|
||||
import spack
|
||||
|
||||
def setup_parser(subparser):
|
||||
subparser.add_argument(
|
||||
'-c', dest='python_command', help='Command to execute.')
|
||||
subparser.add_argument(
|
||||
'python_args', nargs=argparse.REMAINDER, help="File to run plus arguments.")
|
||||
|
||||
@@ -38,7 +40,8 @@ def setup_parser(subparser):
|
||||
|
||||
def python(parser, args):
|
||||
# Fake a main python shell by setting __name__ to __main__.
|
||||
console = code.InteractiveConsole({'__name__' : '__main__'})
|
||||
console = code.InteractiveConsole({'__name__' : '__main__',
|
||||
'spack' : spack})
|
||||
|
||||
if "PYTHONSTARTUP" in os.environ:
|
||||
startup_file = os.environ["PYTHONSTARTUP"]
|
||||
@@ -47,7 +50,10 @@ def python(parser, args):
|
||||
console.runsource(startup.read(), startup_file, 'exec')
|
||||
|
||||
python_args = args.python_args
|
||||
if python_args:
|
||||
python_command = args.python_command
|
||||
if python_command:
|
||||
console.runsource(python_command)
|
||||
elif python_args:
|
||||
sys.argv = python_args
|
||||
with open(python_args[0]) as file:
|
||||
console.runsource(file.read(), python_args[0], 'exec')
|
||||
|
||||
@@ -42,9 +42,9 @@ def setup_parser(subparser):
|
||||
help="Remove regardless of whether other packages depend on this one.")
|
||||
subparser.add_argument(
|
||||
'-a', '--all', action='store_true', dest='all',
|
||||
help="USE CAREFULLY. Remove ALL installed packages that match each supplied spec. " +
|
||||
"i.e., if you say uninstall libelf, ALL versions of libelf are uninstalled. " +
|
||||
"This is both useful and dangerous, like rm -r.")
|
||||
help="USE CAREFULLY. Remove ALL installed packages that match each " +
|
||||
"supplied spec. i.e., if you say uninstall libelf, ALL versions of " +
|
||||
"libelf are uninstalled. This is both useful and dangerous, like rm -r.")
|
||||
subparser.add_argument(
|
||||
'packages', nargs=argparse.REMAINDER, help="specs of packages to uninstall")
|
||||
|
||||
@@ -81,7 +81,8 @@ def uninstall(parser, args):
|
||||
pkgs.append(s.package)
|
||||
|
||||
except spack.packages.UnknownPackageError, e:
|
||||
# The package.py file has gone away -- but still want to uninstall.
|
||||
# The package.py file has gone away -- but still want to
|
||||
# uninstall.
|
||||
spack.Package(s).do_uninstall(force=True)
|
||||
|
||||
# Sort packages to be uninstalled by the number of installed dependents
|
||||
|
||||
@@ -37,6 +37,12 @@ class Clang(Compiler):
|
||||
# Subclasses use possible names of Fortran 90 compiler
|
||||
fc_names = []
|
||||
|
||||
# Named wrapper links within spack.build_env_path
|
||||
link_paths = { 'cc' : 'clang/clang',
|
||||
'cxx' : 'clang/clang++',
|
||||
# Use default wrappers for fortran, in case provided in compilers.yaml
|
||||
'f77' : 'f77',
|
||||
'fc' : 'f90' }
|
||||
|
||||
@classmethod
|
||||
def default_version(self, comp):
|
||||
|
||||
@@ -42,6 +42,12 @@ class Gcc(Compiler):
|
||||
# MacPorts builds gcc versions with prefixes and -mp-X.Y suffixes.
|
||||
suffixes = [r'-mp-\d\.\d']
|
||||
|
||||
# Named wrapper links within spack.build_env_path
|
||||
link_paths = {'cc' : 'gcc/gcc',
|
||||
'cxx' : 'gcc/g++',
|
||||
'f77' : 'gcc/gfortran',
|
||||
'fc' : 'gcc/gfortran' }
|
||||
|
||||
@property
|
||||
def cxx11_flag(self):
|
||||
if self.version < ver('4.3'):
|
||||
|
||||
@@ -37,6 +37,12 @@ class Intel(Compiler):
|
||||
# Subclasses use possible names of Fortran 90 compiler
|
||||
fc_names = ['ifort']
|
||||
|
||||
# Named wrapper links within spack.build_env_path
|
||||
link_paths = { 'cc' : 'intel/icc',
|
||||
'cxx' : 'intel/icpc',
|
||||
'f77' : 'intel/ifort',
|
||||
'fc' : 'intel/ifort' }
|
||||
|
||||
@property
|
||||
def cxx11_flag(self):
|
||||
if self.version < ver('11.1'):
|
||||
|
||||
@@ -37,6 +37,12 @@ class Pgi(Compiler):
|
||||
# Subclasses use possible names of Fortran 90 compiler
|
||||
fc_names = ['pgf95', 'pgf90']
|
||||
|
||||
# Named wrapper links within spack.build_env_path
|
||||
link_paths = { 'cc' : 'pgi/pgcc',
|
||||
'cxx' : 'pgi/case-insensitive/pgCC',
|
||||
'f77' : 'pgi/pgf77',
|
||||
'fc' : 'pgi/pgf90' }
|
||||
|
||||
@classmethod
|
||||
def default_version(cls, comp):
|
||||
"""The '-V' option works for all the PGI compilers.
|
||||
|
||||
@@ -38,6 +38,12 @@ class Xl(Compiler):
|
||||
# Subclasses use possible names of Fortran 90 compiler
|
||||
fc_names = ['xlf90','xlf90_r','xlf95','xlf95_r','xlf2003','xlf2003_r','xlf2008','xlf2008_r']
|
||||
|
||||
# Named wrapper links within spack.build_env_path
|
||||
link_paths = { 'cc' : 'xl/xlc',
|
||||
'cxx' : 'xl/xlc++',
|
||||
'f77' : 'xl/xlf',
|
||||
'fc' : 'xl/xlf90' }
|
||||
|
||||
@property
|
||||
def cxx11_flag(self):
|
||||
if self.version < ver('13.1'):
|
||||
|
||||
@@ -54,6 +54,7 @@
|
||||
from spack.version import Version
|
||||
from spack.spec import Spec
|
||||
from spack.error import SpackError
|
||||
from spack.packages import UnknownPackageError
|
||||
|
||||
# DB goes in this directory underneath the root
|
||||
_db_dirname = '.spack-db'
|
||||
|
||||
@@ -27,9 +27,7 @@
|
||||
|
||||
|
||||
def pre_uninstall(pkg):
|
||||
# Need to do this b/c uninstall does not automatically do it.
|
||||
# TODO: store full graph info in stored .spec file.
|
||||
pkg.spec.normalize()
|
||||
assert(pkg.spec.concrete)
|
||||
|
||||
if pkg.is_extension:
|
||||
if pkg.activated:
|
||||
|
||||
@@ -146,7 +146,7 @@ def create(path, specs, **kwargs):
|
||||
stage = None
|
||||
try:
|
||||
# create a subdirectory for the current package@version
|
||||
archive_path = os.path.abspath(join_path(path, mirror_archive_path(spec)))
|
||||
archive_path = os.path.abspath(join_path(mirror_root, mirror_archive_path(spec)))
|
||||
subdir = os.path.dirname(archive_path)
|
||||
mkdirp(subdir)
|
||||
|
||||
|
||||
@@ -487,9 +487,15 @@ def extendee_spec(self):
|
||||
if name == dep.name:
|
||||
return dep
|
||||
|
||||
# Otherwise return the spec from the extends() directive
|
||||
spec, kwargs = self.extendees[name]
|
||||
return spec
|
||||
# if the spec is concrete already, then it extends something
|
||||
# that is an *optional* dependency, and the dep isn't there.
|
||||
if self.spec._concrete:
|
||||
return None
|
||||
else:
|
||||
# If it's not concrete, then return the spec from the
|
||||
# extends() directive since that is all we know so far.
|
||||
spec, kwargs = self.extendees[name]
|
||||
return spec
|
||||
|
||||
|
||||
@property
|
||||
@@ -497,18 +503,28 @@ def extendee_args(self):
|
||||
"""Spec of the extendee of this package, or None if it is not an extension."""
|
||||
if not self.extendees:
|
||||
return None
|
||||
|
||||
# TODO: allow multiple extendees.
|
||||
name = next(iter(self.extendees))
|
||||
return self.extendees[name][1]
|
||||
|
||||
|
||||
@property
|
||||
def is_extension(self):
|
||||
return len(self.extendees) > 0
|
||||
# if it is concrete, it's only an extension if it actually
|
||||
# dependes on the extendee.
|
||||
if self.spec._concrete:
|
||||
return self.extendee_spec is not None
|
||||
else:
|
||||
# If not, then it's an extension if it *could* be an extension
|
||||
return bool(self.extendees)
|
||||
|
||||
|
||||
def extends(self, spec):
|
||||
return (spec.name in self.extendees and
|
||||
spec.satisfies(self.extendees[spec.name][0]))
|
||||
if not spec.name in self.extendees:
|
||||
return False
|
||||
s = self.extendee_spec
|
||||
return s and s.satisfies(spec)
|
||||
|
||||
|
||||
@property
|
||||
|
||||
@@ -63,10 +63,6 @@ def check_python_versions(self, *files):
|
||||
all_issues = {}
|
||||
|
||||
for fn in files:
|
||||
if fn != '/Users/gamblin2/src/spack/var/spack/packages/vim/package.py':
|
||||
continue
|
||||
print fn
|
||||
|
||||
with open(fn) as pyfile:
|
||||
versions = pyqver2.get_versions(pyfile.read())
|
||||
for ver, reasons in versions.items():
|
||||
|
||||
Reference in New Issue
Block a user