fa7189b480
Modifications: - [x] Removed `centos:6` unit test, adjusted vermin checks - [x] Removed backport of `collections.OrderedDict` - [x] Removed backport of `functools.total_ordering` - [x] Removed Python 2.6 specific skip markers in unit tests - [x] Fixed a few minor Python 2.6 related TODOs in code Updating the vendored dependencies will be done in separate PRs
98 lines
3.3 KiB
Python
Executable file
98 lines
3.3 KiB
Python
Executable file
#!/bin/sh
|
|
# -*- python -*-
|
|
#
|
|
# Copyright 2013-2021 Lawrence Livermore National Security, LLC and other
|
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
|
#
|
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
|
|
|
# This file is bilingual. The following shell code finds our preferred python.
|
|
# Following line is a shell no-op, and starts a multi-line Python comment.
|
|
# See https://stackoverflow.com/a/47886254
|
|
""":"
|
|
# prefer SPACK_PYTHON environment variable, python3, python, then python2
|
|
SPACK_PREFERRED_PYTHONS="python3 python python2 /usr/libexec/platform-python"
|
|
for cmd in "${SPACK_PYTHON:-}" ${SPACK_PREFERRED_PYTHONS}; do
|
|
if command -v > /dev/null "$cmd"; then
|
|
export SPACK_PYTHON="$(command -v "$cmd")"
|
|
exec "${SPACK_PYTHON}" "$0" "$@"
|
|
fi
|
|
done
|
|
|
|
echo "==> Error: spack could not find a python interpreter!" >&2
|
|
exit 1
|
|
":"""
|
|
# Line above is a shell no-op, and ends a python multi-line comment.
|
|
# The code above runs this file with our preferred python interpreter.
|
|
|
|
from __future__ import print_function
|
|
|
|
import os
|
|
import os.path
|
|
import sys
|
|
|
|
min_python3 = (3, 5)
|
|
|
|
if sys.version_info[:2] < (2, 7) or (
|
|
sys.version_info[:2] >= (3, 0) and sys.version_info[:2] < min_python3
|
|
):
|
|
v_info = sys.version_info[:3]
|
|
msg = "Spack requires Python 2.7 or %d.%d or higher " % min_python3
|
|
msg += "You are running spack with Python %d.%d.%d." % v_info
|
|
sys.exit(msg)
|
|
|
|
# Find spack's location and its prefix.
|
|
spack_file = os.path.realpath(os.path.expanduser(__file__))
|
|
spack_prefix = os.path.dirname(os.path.dirname(spack_file))
|
|
|
|
# Allow spack libs to be imported in our scripts
|
|
spack_lib_path = os.path.join(spack_prefix, "lib", "spack")
|
|
sys.path.insert(0, spack_lib_path)
|
|
|
|
# Add external libs
|
|
spack_external_libs = os.path.join(spack_lib_path, "external")
|
|
|
|
if sys.version_info[:2] <= (2, 7):
|
|
sys.path.insert(0, os.path.join(spack_external_libs, "py2"))
|
|
|
|
sys.path.insert(0, spack_external_libs)
|
|
|
|
# Here we delete ruamel.yaml in case it has been already imported from site
|
|
# (see #9206 for a broader description of the issue).
|
|
#
|
|
# Briefly: ruamel.yaml produces a .pth file when installed with pip that
|
|
# makes the site installed package the preferred one, even though sys.path
|
|
# is modified to point to another version of ruamel.yaml.
|
|
if "ruamel.yaml" in sys.modules:
|
|
del sys.modules["ruamel.yaml"]
|
|
|
|
if "ruamel" in sys.modules:
|
|
del sys.modules["ruamel"]
|
|
|
|
# The following code is here to avoid failures when updating
|
|
# the develop version, due to spurious argparse.pyc files remaining
|
|
# in the libs/spack/external directory, see:
|
|
# https://github.com/spack/spack/pull/25376
|
|
# TODO: Remove in v0.18.0 or later
|
|
try:
|
|
import argparse
|
|
except ImportError:
|
|
argparse_pyc = os.path.join(spack_external_libs, 'argparse.pyc')
|
|
if not os.path.exists(argparse_pyc):
|
|
raise
|
|
try:
|
|
os.remove(argparse_pyc)
|
|
import argparse # noqa
|
|
except Exception:
|
|
msg = ('The file\n\n\t{0}\n\nis corrupted and cannot be deleted by Spack. '
|
|
'Either delete it manually or ask some administrator to '
|
|
'delete it for you.')
|
|
print(msg.format(argparse_pyc))
|
|
sys.exit(1)
|
|
|
|
|
|
import spack.main # noqa
|
|
|
|
# Once we've set up the system path, run the spack main method
|
|
if __name__ == "__main__":
|
|
sys.exit(spack.main.main())
|