Compare commits

..

65 Commits

Author SHA1 Message Date
Gregory Becker
79e821a43e docs: consistently use 'managed environment' over 'named ...' 2023-02-21 15:53:34 -08:00
psakievich
c16f166dcc Update lib/spack/docs/environments.rst 2023-02-21 16:33:45 -07:00
psakiev
4ae9730ffe remove env's 2023-02-21 12:57:13 -07:00
psakiev
9debeaf4e7 Try to resolve uninstall failure 2023-02-21 12:01:10 -07:00
psakiev
47cdefcbe8 Try setting mutable_mock_env in each func 2023-02-21 11:18:26 -07:00
psakiev
2acc356ed4 Style 2023-02-21 10:09:22 -07:00
psakiev
36bf6c9009 Add unit-tests back 2023-02-21 10:00:50 -07:00
psakiev
29fbad20a2 Undo hoops for avoiding env include 2023-02-21 09:18:44 -07:00
psakiev
5f78703af8 Fixture function scope 2023-02-21 08:53:07 -07:00
psakiev
9b390bdc2c Add back mutable-config 2023-02-15 16:55:33 -07:00
psakiev
bc427e8435 Adjust vars in mutable_mock_env_path 2023-02-15 14:46:54 -07:00
psakiev
3c6e6e22be Undo all unit-tests to see if CI will pass 2023-02-15 13:08:19 -07:00
psakievich
4a8f755632 [@spackbot] updating style on behalf of psakievich 2023-02-13 18:52:06 +00:00
psakievich
51de7ed7ee Merge branch 'develop' into f/env-location 2023-02-13 10:50:53 -07:00
psakiev
047110c086 Debug print statement 2023-01-11 05:37:29 -07:00
psakiev
7fa16089fc Add entry to tmpconfig 2023-01-11 04:46:42 -07:00
Philip Sakievich
065eaa739f Remove accidental bleed over trilinos change 2023-01-10 09:38:51 -07:00
psakiev
8d8e88c177 Try renaming dir 2023-01-09 16:24:14 -07:00
psakiev
8cc69cecfc Add function scope 2023-01-09 15:27:27 -07:00
psakiev
9c690a1ef5 Revert "Try something else"
This reverts commit 3532d6ff16.
2023-01-09 14:20:28 -07:00
psakiev
3532d6ff16 Try something else 2023-01-09 13:22:13 -07:00
psakiev
7494893d3b Drop the hidden dir 2023-01-09 12:46:59 -07:00
psakievich
54e4a72b8e Merge branch 'develop' into f/env-location 2023-01-07 22:23:23 -07:00
psakiev
b86980461f Modify failing test 2023-01-07 20:59:44 -07:00
psakiev
23b5932f73 Make hidden dir for mock env location 2022-12-21 14:56:52 -07:00
psakiev
93760847e8 Use tmpdir for all mutable env paths 2022-12-19 21:18:37 -07:00
psakievich
a35d2f39af Merge branch 'develop' into f/env-location 2022-12-19 17:02:19 -07:00
psakiev
af17cc60a9 Add tmpdir 2022-12-19 16:13:01 -07:00
psakiev
b0528cae3f Improve robustness of env test in parallel 2022-12-19 16:07:34 -07:00
psakiev
372a18392a Add syntax for debugging CI 2022-12-19 13:54:45 -07:00
psakievich
70db49dfed Merge branch 'develop' into f/env-location 2022-12-19 13:50:43 -07:00
psakiev
1d24c196da Use proper import 2022-12-08 12:36:36 -07:00
psakievich
fa3d768947 Update lib/spack/spack/environment/environment.py 2022-12-08 12:34:57 -07:00
psakiev
9b6a109c7e Remove constraint on environments_root creation 2022-12-07 22:24:18 -07:00
psakievich
663967d984 Merge branch 'develop' into f/env-location 2022-12-07 15:03:51 -07:00
psakiev
b47ff2a2de Fix missing function 2022-12-07 14:32:36 -07:00
psakiev
f7b4993810 Address reviewer comments 2022-12-07 14:25:12 -07:00
psakiev
3e07eb8cf0 Fix scope detection issue 2022-12-01 22:21:10 -07:00
psakievich
e773396747 Merge branch 'develop' into f/env-location 2022-12-01 17:00:36 -07:00
psakiev
e19cc2385e Don't automatically create the default env path 2022-12-01 16:50:24 -07:00
psakievich
e867662e1b Merge branch 'develop' into f/env-location 2022-11-09 17:19:41 -07:00
psakiev
6aad926838 Fix unicode error 2022-11-09 15:50:16 -07:00
psakievich
41cf807804 Merge branch 'develop' into f/env-location 2022-11-09 15:09:22 -07:00
psakiev
cf8b919954 Remove accidental changes to bin/sbang 2022-11-09 13:39:56 -07:00
psakiev
47957dccf4 Remove shell driven command from env activation test 2022-11-09 13:19:17 -07:00
Philip Sakievich
38313cadf4 Revert "avoid using realpath, readlink -f is more portable"
This reverts commit 2cae95334c.
2022-11-08 23:40:03 -07:00
Philip Sakievich
730d005a56 Only create default path when used 2022-11-08 23:39:03 -07:00
psakiev
2f7c850a20 style 2022-11-08 23:08:19 -07:00
psakiev
5aa7a564d3 Why do we have mutliple cod paths for env activation? 2022-11-08 22:59:29 -07:00
psakiev
d50c8f1727 Add guard-rail and unit-test (not working) 2022-11-08 22:41:09 -07:00
psakievich
0ac6dfa8f3 Merge branch 'develop' into f/env-location 2022-10-12 08:45:01 -06:00
Philip Sakievich
0b0ffe645d Ugh python 2 🤦‍♂️ 2022-10-11 22:37:57 -06:00
Philip Sakievich
9984c838c8 Fix failing shell tests 2022-10-11 22:18:43 -06:00
psakievich
b1bd61321d Merge branch 'develop' into f/env-location 2022-10-11 21:53:49 -06:00
psakievich
c144558245 Merge branch 'develop' into f/env-location 2022-09-29 11:50:06 -06:00
psakiev
ef43044672 Change name of variable 2022-09-27 22:17:29 -06:00
psakievich
da7294cd90 Update lib/spack/spack/test/config.py
Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-09-27 21:08:32 -06:00
psakievich
addb891f42 Update lib/spack/docs/environments.rst
Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-09-27 21:08:25 -06:00
psakievich
bce2d38bfc Merge branch 'develop' into f/env-location 2022-09-27 14:40:57 -06:00
Tom Scogland
2cae95334c avoid using realpath, readlink -f is more portable 2022-09-27 18:33:52 +00:00
psakiev
076d60ce35 Add check that env_root dir exists 2022-09-27 12:02:43 -06:00
psakiev
9ecdafd8de Add some documentation 2022-09-27 11:25:31 -06:00
psakievich
76fde639e8 Update lib/spack/spack/environment/environment.py
Co-authored-by: Greg Becker <becker33@llnl.gov>

Add back path canonicalization
2022-09-27 11:17:47 -06:00
psakiev
490b5eef7c Rework path access strategy 2022-09-27 10:57:28 -06:00
psakiev
3f2e77e5fa Allow users to specify root env dir
Environments managed by spack have some advantages over anonymous Environments
but they are tucked away inside spack's directory tree. This PR gives
users the ability to specify where the environments should live.

See #32823
2022-09-26 22:31:29 -06:00
38 changed files with 767 additions and 207 deletions

View File

@@ -72,6 +72,7 @@ config:
root: $TMP_DIR/install
misc_cache: $$user_cache_path/cache
source_cache: $$user_cache_path/source
environments_root: $TMP_DIR/envs
EOF
cat >"$SPACK_USER_CONFIG_PATH/bootstrap.yaml" <<EOF
bootstrap:

View File

@@ -81,6 +81,10 @@ config:
source_cache: $spack/var/spack/cache
## Directory where spack managed environments are created and stored
# environments_root: $spack/var/spack/environments
# Cache directory for miscellaneous files, like the package index.
# This can be purged with `spack clean --misc-cache`
misc_cache: $user_cache_path/cache

View File

@@ -58,9 +58,9 @@ Using Environments
Here we follow a typical use case of creating, concretizing,
installing and loading an environment.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Creating a named Environment
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Creating a managed Environment
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
An environment is created by:
@@ -72,7 +72,8 @@ Spack then creates the directory ``var/spack/environments/myenv``.
.. note::
All named environments are stored in the ``var/spack/environments`` folder.
All managed environments by default are stored in the ``var/spack/environments`` folder.
This location can be changed by setting the ``environments_root`` variable in ``config.yaml``.
In the ``var/spack/environments/myenv`` directory, Spack creates the
file ``spack.yaml`` and the hidden directory ``.spack-env``.
@@ -346,7 +347,7 @@ the Environment and then install the concretized specs.
(see :ref:`build-jobs`). To speed up environment builds further, independent
packages can be installed in parallel by launching more Spack instances. For
example, the following will build at most four packages in parallel using
three background jobs:
three background jobs:
.. code-block:: console
@@ -394,7 +395,7 @@ version (and other constraints) passed as the spec argument to the
For packages with ``git`` attributes, git branches, tags, and commits can
also be used as valid concrete versions (see :ref:`version-specifier`).
This means that for a package ``foo``, ``spack develop foo@git.main`` will clone
This means that for a package ``foo``, ``spack develop foo@git.main`` will clone
the ``main`` branch of the package, and ``spack install`` will install from
that git clone if ``foo`` is in the environment.
Further development on ``foo`` can be tested by reinstalling the environment,
@@ -630,35 +631,6 @@ The following two Environment manifests are identical:
Spec matrices can be used to install swaths of software across various
toolchains.
Note that ordering of matrices is important. For example, the
following environments are identical:
.. code-block:: yaml
spack:
specs:
- matrix:
- [hdf5@1.10.2+mpi]
- [^mpich, ^openmpi]
- ['%gcc']
- matrix:
- [hdf5@1.12.1+mpi]
- ['%gcc']
- [^mpich, ^openmpi]
spack:
specs:
- hdf5@1.10.2+mpi ^mpich%gcc
- hdf5@1.10.2+mpi ^openmpi%gcc
- hdf5@1.12.1+mpi %gcc ^mpich
- hdf5@1.12.1+mpi %gcc ^openmpi
Notice how the first matrix applies the compiler constraints to the
mpi dependencies, whereas the second matrix applies the compiler
constraints directly to the root hdf5 node. This gives users the full
breadth of expressiveness of the spec syntax through the matrix
interface.
^^^^^^^^^^^^^^^^^^^^
Spec List References
^^^^^^^^^^^^^^^^^^^^
@@ -1149,19 +1121,19 @@ index once every package is pushed. Note how this target uses the generated
SPACK ?= spack
BUILDCACHE_DIR = $(CURDIR)/tarballs
.PHONY: all
all: push
include env.mk
example/push/%: example/install/%
@mkdir -p $(dir $@)
$(info About to push $(SPEC) to a buildcache)
$(SPACK) -e . buildcache create --allow-root --only=package --directory $(BUILDCACHE_DIR) /$(HASH)
@touch $@
push: $(addprefix example/push/,$(example/SPACK_PACKAGE_IDS))
$(info Updating the buildcache index)
$(SPACK) -e . buildcache update-index --directory $(BUILDCACHE_DIR)

View File

@@ -166,7 +166,7 @@ def env_activate(args):
short_name = os.path.basename(env_path)
ev.Environment(env).write(regenerate=False)
# Named environment
# Managed environment
elif ev.exists(env_name_or_dir) and not args.dir:
env_path = ev.root(env_name_or_dir)
short_name = env_name_or_dir

View File

@@ -95,7 +95,7 @@ def location(parser, args):
spack.cmd.require_active_env("location -e")
path = ev.active_environment().path
else:
# Get named environment path
# Get path of requested environment
if not ev.exists(args.location_env):
tty.die("no such environment: '%s'" % args.location_env)
path = ev.root(args.location_env)

View File

@@ -89,11 +89,6 @@ def cxx14_flag(self):
return "-std=c++14"
return "-h std=c++14"
@property
def cxx17_flag(self):
if self.is_clang_based:
return "-std=c++17"
@property
def c99_flag(self):
if self.is_clang_based:

View File

@@ -64,8 +64,8 @@
_active_environment = None
#: path where environments are stored in the spack tree
env_path = os.path.join(spack.paths.var_path, "environments")
#: default path where environments are stored in the spack tree
default_env_path = os.path.join(spack.paths.var_path, "environments")
#: Name of the input yaml file for an environment
@@ -80,6 +80,26 @@
env_subdir_name = ".spack-env"
def env_root_path():
"""Override default root path if the user specified it"""
return spack.util.path.canonicalize_path(
spack.config.get("config:environments_root", default=default_env_path)
)
def check_disallowed_env_config_mods(scopes):
for scope in scopes:
with spack.config.use_configuration(scope):
if spack.config.get("config:environments_root"):
raise SpackEnvironmentError(
"Spack environments are prohibited from modifying 'config:environments_root' "
"because it can make the definition of the environment ill-posed. Please "
"remove from your environment and place it in a permanent scope such as "
"defaults, system, site, etc."
)
return scopes
def default_manifest_yaml():
"""default spack.yaml file to put in new environments"""
return """\
@@ -216,7 +236,7 @@ def active_environment():
def _root(name):
"""Non-validating version of root(), to be used internally."""
return os.path.join(env_path, name)
return os.path.join(env_root_path(), name)
def root(name):
@@ -251,10 +271,12 @@ def read(name):
def create(name, init_file=None, with_view=None, keep_relative=False):
"""Create a named environment in Spack."""
"""Create a managed environment in Spack."""
if not os.path.isdir(env_root_path()):
fs.mkdirp(env_root_path())
validate_env_name(name)
if exists(name):
raise SpackEnvironmentError("'%s': environment already exists" % name)
raise SpackEnvironmentError("'%s': environment already exists at %s" % (name, root(name)))
return Environment(root(name), init_file, with_view, keep_relative)
@@ -268,10 +290,10 @@ def all_environment_names():
"""List the names of environments that currently exist."""
# just return empty if the env path does not exist. A read-only
# operation like list should not try to create a directory.
if not os.path.exists(env_path):
if not os.path.exists(env_root_path()):
return []
candidates = sorted(os.listdir(env_path))
candidates = sorted(os.listdir(env_root_path()))
names = []
for candidate in candidates:
yaml_path = os.path.join(_root(candidate), manifest_name)
@@ -281,7 +303,7 @@ def all_environment_names():
def all_environments():
"""Generator for all named Environments."""
"""Generator for all managed Environments."""
for name in all_environment_names():
yield read(name)
@@ -849,14 +871,14 @@ def clear(self, re_read=False):
@property
def internal(self):
"""Whether this environment is managed by Spack."""
return self.path.startswith(env_path)
return self.path.startswith(env_root_path())
@property
def name(self):
"""Human-readable representation of the environment.
This is the path for directory environments, and just the name
for named environments.
for managed environments.
"""
if self.internal:
return os.path.basename(self.path)
@@ -1036,7 +1058,9 @@ def env_file_config_scope(self):
def config_scopes(self):
"""A list of all configuration scopes for this environment."""
return self.included_config_scopes() + [self.env_file_config_scope()]
return check_disallowed_env_config_mods(
self.included_config_scopes() + [self.env_file_config_scope()]
)
def destroy(self):
"""Remove this environment from Spack entirely."""
@@ -2265,12 +2289,15 @@ def _concretize_from_constraints(spec_constraints, tests=False):
m += "concretization target. all specs must have a single name "
m += "constraint for concretization."
raise InvalidSpecConstraintError(m)
spec_constraints.remove(root_spec[0])
invalid_constraints = []
while True:
# Combine constraints into a single spec
s = Spec(" ".join([str(c) for c in spec_constraints if c not in invalid_constraints]))
# Attach all anonymous constraints to one named spec
s = root_spec[0].copy()
for c in spec_constraints:
if c not in invalid_constraints:
s.constrain(c)
try:
return s.concretized(tests=tests)
except spack.spec.InvalidDependencyError as e:

View File

@@ -459,7 +459,7 @@ def make_argument_parser(**kwargs):
dest="env_dir",
metavar="DIR",
action="store",
help="run with an environment directory (ignore named environments)",
help="run with an environment directory (ignore managed environments)",
)
env_group.add_argument(
"-E",

View File

@@ -67,6 +67,7 @@
"license_dir": {"type": "string"},
"source_cache": {"type": "string"},
"misc_cache": {"type": "string"},
"environments_root": {"type": "string"},
"connect_timeout": {"type": "integer", "minimum": 0},
"verify_ssl": {"type": "boolean"},
"suppress_gpg_warnings": {"type": "boolean"},

View File

@@ -51,9 +51,7 @@ def specs_as_constraints(self):
constraints = []
for item in self.specs_as_yaml_list:
if isinstance(item, dict): # matrix of specs
expanded = _expand_matrix_constraints(item)
for e in expanded:
constraints.append([Spec(x) for x in e])
constraints.extend(_expand_matrix_constraints(item))
else: # individual spec
constraints.append([Spec(item)])
self._constraints = constraints
@@ -64,11 +62,13 @@ def specs_as_constraints(self):
def specs(self):
if self._specs is None:
specs = []
for item in self.specs_as_yaml_list:
if isinstance(item, dict): # matrix of specs
specs.extend([Spec(" ".join(x)) for x in _expand_matrix_constraints(item)])
else: # individual spec
specs.append(Spec(item))
# This could be slightly faster done directly from yaml_list,
# but this way is easier to maintain.
for constraint_list in self.specs_as_constraints:
spec = constraint_list[0].copy()
for const in constraint_list[1:]:
spec.constrain(const)
specs.append(spec)
self._specs = specs
return self._specs
@@ -193,7 +193,11 @@ def _expand_matrix_constraints(matrix_config):
for combo in itertools.product(*expanded_rows):
# Construct a combined spec to test against excludes
flat_combo = [constraint for constraint_list in combo for constraint in constraint_list]
test_spec = Spec(" ".join(flat_combo))
flat_combo = [Spec(x) for x in flat_combo]
test_spec = flat_combo[0].copy()
for constraint in flat_combo[1:]:
test_spec.constrain(constraint)
# Abstract variants don't have normal satisfaction semantics
# Convert all variants to concrete types.
@@ -209,7 +213,7 @@ def _expand_matrix_constraints(matrix_config):
continue
if sigil:
flat_combo[0] = sigil + flat_combo[0]
flat_combo[0] = Spec(sigil + str(flat_combo[0]))
# Add to list of constraints
results.append(flat_combo)

View File

@@ -9,8 +9,7 @@
import spack.environment as ev
from spack.main import SpackCommand
# everything here uses the mock_env_path
pytestmark = pytest.mark.usefixtures("mutable_mock_env_path", "config", "mutable_mock_repo")
pytestmark = pytest.mark.usefixtures("config", "mutable_mock_repo")
env = SpackCommand("env")
add = SpackCommand("add")
@@ -21,7 +20,7 @@
@pytest.mark.parametrize("unify", unification_strategies)
def test_concretize_all_test_dependencies(unify):
def test_concretize_all_test_dependencies(unify, mutable_mock_env_path):
"""Check all test dependencies are concretized."""
env("create", "test")
@@ -33,7 +32,7 @@ def test_concretize_all_test_dependencies(unify):
@pytest.mark.parametrize("unify", unification_strategies)
def test_concretize_root_test_dependencies_not_recursive(unify):
def test_concretize_root_test_dependencies_not_recursive(unify, mutable_mock_env_path):
"""Check that test dependencies are not concretized recursively."""
env("create", "test")
@@ -45,7 +44,7 @@ def test_concretize_root_test_dependencies_not_recursive(unify):
@pytest.mark.parametrize("unify", unification_strategies)
def test_concretize_root_test_dependencies_are_concretized(unify):
def test_concretize_root_test_dependencies_are_concretized(unify, mutable_mock_env_path):
"""Check that root test dependencies are concretized."""
env("create", "test")

View File

@@ -3236,3 +3236,20 @@ def test_relative_view_path_on_command_line_is_made_absolute(tmpdir, config):
env("create", "--with-view", "view", "--dir", "env")
environment = ev.Environment(os.path.join(".", "env"))
assert os.path.samefile("view", environment.default_view.root)
def test_environment_created_in_users_location(mutable_config, tmpdir):
"""Test that an environment is created in a location based on the config"""
spack.config.set("config:environments_root", str(tmpdir.join("envs")))
env_dir = spack.config.get("config:environments_root")
assert tmpdir.strpath in env_dir
assert not os.path.isdir(env_dir)
dir_name = "user_env"
env("create", dir_name)
out = env("list")
assert dir_name in out
assert env_dir in ev.root(dir_name)
assert os.path.isdir(os.path.join(env_dir, dir_name))

View File

@@ -223,7 +223,7 @@ class TestUninstallFromEnv(object):
concretize = SpackCommand("concretize")
find = SpackCommand("find")
@pytest.fixture
@pytest.fixture(scope="function")
def environment_setup(
self, mutable_mock_env_path, config, mock_packages, mutable_database, install_mockery
):
@@ -242,6 +242,9 @@ def environment_setup(
TestUninstallFromEnv.add("dt-diamond-bottom")
TestUninstallFromEnv.concretize()
install("--fake")
yield "environment_setup"
TestUninstallFromEnv.env("rm", "e1", "-y")
TestUninstallFromEnv.env("rm", "e2", "-y")
def test_basic_env_sanity(self, environment_setup):
for env_name in ["e1", "e2"]:

View File

@@ -1551,14 +1551,14 @@ def get_rev():
yield t
@pytest.fixture()
def mutable_mock_env_path(tmpdir_factory):
@pytest.fixture(scope="function")
def mutable_mock_env_path(tmpdir_factory, mutable_config):
"""Fixture for mocking the internal spack environments directory."""
saved_path = ev.environment.env_path
saved_path = ev.environment.default_env_path
mock_path = tmpdir_factory.mktemp("mock-env-path")
ev.environment.env_path = str(mock_path)
ev.environment.default_env_path = str(mock_path)
yield mock_path
ev.environment.env_path = saved_path
ev.environment.default_env_path = saved_path
@pytest.fixture()

View File

@@ -75,8 +75,8 @@ def test_env_change_spec(tmpdir, mock_packages, config):
- desired_specs: ["mpileaks@2.1"]
specs:
- matrix:
- [$desired_specs]
- [$compilers]
- [$desired_specs]
"""
@@ -143,3 +143,21 @@ def test_user_view_path_is_not_canonicalized_in_yaml(tmpdir, config):
snd = ev.Environment(env_path)
assert snd.yaml["spack"]["view"] == view
assert os.path.samefile(snd.default_view.root, absolute_view)
def test_environment_cant_modify_environments_root(tmpdir):
filename = str(tmpdir.join("spack.yaml"))
with open(filename, "w") as f:
f.write(
"""\
spack:
config:
environments_root: /a/black/hole
view: false
specs: []
"""
)
with tmpdir.as_cwd():
with pytest.raises(ev.SpackEnvironmentError):
e = ev.Environment(tmpdir.strpath)
ev.activate(e)

View File

@@ -61,25 +61,25 @@ def test_spec_list_expansions(self):
@pytest.mark.parametrize(
"specs,expected",
[
# Constraints are ordered carefully to apply to appropriate node
# Constraints are ordered randomly
(
[
{
"matrix": [
["hypre", "libelf"],
["~shared"],
["^foo"],
["^zmpi"],
["%gcc@4.5.0"],
["hypre", "libelf"],
["~shared"],
["cflags=-O3", 'cflags="-g -O0"'],
["^foo"],
]
}
],
[
"hypre ~shared ^foo ^zmpi cflags=-O3 %gcc@4.5.0",
'hypre ~shared ^foo ^zmpi cflags="-g -O0" %gcc@4.5.0',
"libelf ~shared ^foo ^zmpi cflags=-O3 %gcc@4.5.0",
'libelf ~shared ^foo ^zmpi cflags="-g -O0" %gcc@4.5.0',
"hypre cflags=-O3 ~shared %gcc@4.5.0 ^foo ^zmpi",
'hypre cflags="-g -O0" ~shared %gcc@4.5.0 ^foo ^zmpi',
"libelf cflags=-O3 ~shared %gcc@4.5.0 ^foo ^zmpi",
'libelf cflags="-g -O0" ~shared %gcc@4.5.0 ^foo ^zmpi',
],
),
# A constraint affects both the root and a dependency

View File

@@ -59,6 +59,8 @@ spack:
specs:
- kokkos +rocm amdgpu_target=gfx90a
- kokkos +wrapper +cuda cuda_arch=80 ^cuda@11.7.1
- raja +cuda cuda_arch=80 ^cuda@11.7.1
- raja +cuda cuda_arch=80 ^cuda@12.0.0
# FAILURES
@@ -107,6 +109,14 @@ spack:
variables:
CI_JOB_SIZE: large
- match:
- kokkos +cuda cuda_arch=80 ^cuda@11.7.1
- raja +cuda cuda_arch=80 ^cuda@11.7.1
runner-attributes:
tags: [ "nvidia-515.65.01", "cuda-11.7", "a100" ]
variables:
CI_JOB_SIZE: large
- match:
- kokkos +cuda cuda_arch=80 ^cuda@12.0.0
- raja +cuda cuda_arch=80 ^cuda@12.0.0

View File

@@ -1,50 +0,0 @@
# Copyright 2013-2023 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)
from spack.package import *
class GslLite(CMakePackage):
"""A single-file header-only version of ISO C++ Guidelines Support Library
(GSL) for C++98, C++11, and later"""
homepage = "https://github.com/gsl-lite/gsl-lite"
git = "https://github.com/gsl-lite/gsl-lite.git"
url = "https://github.com/gsl-lite/gsl-lite/archive/refs/tags/v0.38.1.tar.gz"
maintainers("AlexanderRichert-NOAA", "climbfuji", "edwardhartnett", "Hang-Lei-NOAA")
version("0.40.0", commit="d6c8af99a1d95b3db36f26b4f22dc3bad89952de")
version("0.39.0", commit="d0903fa87ff579c30f608bc363582e6563570342")
version("0.38.1", sha256="c2fa2315fff312f3897958903ed4d4e027f73fa44235459ecb467ad7b7d62b18")
version("0.38.0", sha256="5d25fcd31ea66dac9e14da1cad501d95450ccfcb2768fffcd1a4170258fcbc81")
version("0.37.0", sha256="a31d51b73742bb234acab8d2411223cf299e760ed713f0840ffed0dabe57ca38")
version("0.36.0", sha256="c052cc4547b33cedee6f000393a7005915c45c6c06b35518d203db117f75c71c")
version("0.34.0", sha256="a7d5b2672b78704ca03df9ef65bc274d8f8cacad3ca950365eef9e25b50324c5")
variant("tests", default=False)
variant("cuda_tests", default=False)
variant("examples", default=False)
variant("static_analysis_demos", default=False)
variant("cmake_export_package_registry", default=False)
variant("compat_header", default=False)
variant("legacy_headers", default=False)
def cmake_args(self):
args = [
self.define_from_variant("GSL_LITE_OPT_BUILD_TESTS", "tests"),
self.define_from_variant("GSL_LITE_OPT_BUILD_CUDA_TESTS", "cuda_tests"),
self.define_from_variant("GSL_LITE_OPT_BUILD_EXAMPLES", "examples"),
self.define_from_variant(
"GSL_LITE_LOPT_BUILD_STATIC_ANALYSIS_DEMOS", "static_analysis_demos"
),
self.define_from_variant(
"CMAKE_EXPORT_PACKAGE_REGISTRY", "cmake_export_package_registry"
),
self.define_from_variant("GSL_LITE_OPT_INSTALL_COMPAT_HEADER", "compat_header"),
self.define_from_variant("GSL_LITE_OPT_INSTALL_LEGACY_HEADERS", "legacy_headers"),
]
return args

View File

@@ -255,7 +255,7 @@ def build(self, pkg, spec, prefix):
#
self.coerce_to_spack("build")
if spec.satisfies("%clang") or spec.satisfies("%apple-clang") or spec.satisfies("%rocmcc"):
if spec.satisfies("%clang") or spec.satisfies("%apple-clang"):
tbb_compiler = "clang"
elif spec.satisfies("%intel"):
tbb_compiler = "icc"

View File

@@ -16,7 +16,6 @@ class Libmonitor(AutotoolsPackage):
maintainers("mwkrentel")
version("master", branch="master")
version("2023.02.13", commit="6db182b25202552f75a087116ab57193652d150f")
version("2022.09.02", commit="4ae16dab0ba5fbda0ffe28df523613ea22cb85ae")
version("2021.11.08", commit="22aa52c621534f12d401fa37f6963bfca7441e20")
version("2021.04.27", commit="a2d1b6be23410ef1ad2c9d0006672453803243c2")

View File

@@ -0,0 +1,124 @@
--- a/configure
+++ b/configure
@@ -9584,6 +9584,10 @@ for cc_temp in $compiler""; do
esac
done
cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+case $cc_basename in
+ nagfor*) ;;
+ *) $cc_temp -V 2>&1 | $GREP '^NAG Fortran Compiler Release' >/dev/null 2>&1 && cc_basename='nagfor-wrapper' ;;
+esac
# Only perform the check for file, if the check method requires it
@@ -10657,6 +10661,10 @@ _LT_EOF
lf95*) # Lahey Fortran 8.1
whole_archive_flag_spec=
tmp_sharedflag='--shared' ;;
+ nagfor*)
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ compiler_needs_object=yes
+ tmp_sharedflag='-Wl,-shared' ;;
xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
tmp_sharedflag='-qmkshrobj'
tmp_addflag= ;;
@@ -13415,6 +13423,10 @@ $RM -r conftest*
esac
done
cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+case $cc_basename in
+ nagfor*) ;;
+ *) $cc_temp -V 2>&1 | $GREP '^NAG Fortran Compiler Release' >/dev/null 2>&1 && cc_basename='nagfor-wrapper' ;;
+esac
GCC=$G77
if test -n "$compiler"; then
@@ -14252,6 +14264,10 @@ _LT_EOF
lf95*) # Lahey Fortran 8.1
whole_archive_flag_spec_F77=
tmp_sharedflag='--shared' ;;
+ nagfor*)
+ whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ compiler_needs_object_F77=yes
+ tmp_sharedflag='-Wl,-shared' ;;
xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
tmp_sharedflag='-qmkshrobj'
tmp_addflag= ;;
@@ -16142,6 +16158,10 @@ $RM -r conftest*
esac
done
cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+case $cc_basename in
+ nagfor*) ;;
+ *) $cc_temp -V 2>&1 | $GREP '^NAG Fortran Compiler Release' >/dev/null 2>&1 && cc_basename='nagfor-wrapper' ;;
+esac
if test -n "$compiler"; then
@@ -17142,6 +17162,10 @@ _LT_EOF
lf95*) # Lahey Fortran 8.1
whole_archive_flag_spec_FC=
tmp_sharedflag='--shared' ;;
+ nagfor*)
+ whole_archive_flag_spec_FC='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ compiler_needs_object_FC=yes
+ tmp_sharedflag='-Wl,-shared' ;;
xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
tmp_sharedflag='-qmkshrobj'
tmp_addflag= ;;
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -180,6 +180,24 @@ func_basename ()
func_basename_result=`$ECHO "${1}" | $SED "$basename"`
} # func_basename may be replaced by extended shell implementation
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+ for cc_temp in $*""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+ done
+ func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+ case $func_cc_basename_result in
+ nagfor*) ;;
+ *) $cc_temp -V 2>&1 | $GREP '^NAG Fortran Compiler Release' >/dev/null 2>&1 && func_cc_basename_result='nagfor-wrapper' ;;
+ esac
+}
+
# func_dirname_and_basename file append nondir_replacement
# perform func_basename and func_dirname in a single function
@@ -6422,6 +6440,13 @@ func_mode_link ()
# Convert "-framework foo" to "foo.ltframework"
if test -n "$inherited_linker_flags"; then
tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
+
+ # Additionally convert " -pthread" to " -Wl,-pthread" for nagfor
+ func_cc_basename $CC
+ case $func_cc_basename_result in
+ nagfor*) tmp_inherited_linker_flags=`$ECHO "$tmp_inherited_linker_flags" | $SED 's/ -pthread/ -Wl,-pthread/g'` ;;
+ esac
+
for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
case " $new_inherited_linker_flags " in
*" $tmp_inherited_linker_flag "*) ;;
@@ -8007,6 +8032,14 @@ EOF
;;
esac
+ # Time to revert the changes made for nagfor.
+
+ func_cc_basename $CC
+ case $func_cc_basename_result in
+ nagfor*)
+ new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% -Wl,-pthread% -pthread%g'` ;;
+ esac
+
# move library search paths that coincide with paths to not yet
# installed libraries to the beginning of the library search list
new_libs=

View File

@@ -0,0 +1,96 @@
--- a/configure
+++ b/configure
@@ -9034,6 +9034,12 @@ func_cc_basename ()
esac
done
func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+
+ # Set result to 'nagfor-wrapper' when NAG compiler is called via a wrapper (e.g. mpif90).
+ case $func_cc_basename_result in
+ nagfor*) ;;
+ *) $cc_temp -V 2>&1 | $GREP '^NAG Fortran Compiler Release' >/dev/null 2>&1 && func_cc_basename_result='nagfor-wrapper' ;;
+ esac
}
# Check whether --enable-libtool-lock was given.
@@ -11811,6 +11817,8 @@ _LT_EOF
whole_archive_flag_spec=
tmp_sharedflag='--shared' ;;
nagfor*) # NAGFOR 5.3
+ whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ compiler_needs_object=yes
tmp_sharedflag='-Wl,-shared' ;;
xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
tmp_sharedflag='-qmkshrobj'
@@ -15663,6 +15671,8 @@ _LT_EOF
whole_archive_flag_spec_F77=
tmp_sharedflag='--shared' ;;
nagfor*) # NAGFOR 5.3
+ whole_archive_flag_spec_F77='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ compiler_needs_object_F77=yes
tmp_sharedflag='-Wl,-shared' ;;
xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
tmp_sharedflag='-qmkshrobj'
@@ -18788,6 +18798,8 @@ _LT_EOF
whole_archive_flag_spec_FC=
tmp_sharedflag='--shared' ;;
nagfor*) # NAGFOR 5.3
+ whole_archive_flag_spec_FC='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ compiler_needs_object_FC=yes
tmp_sharedflag='-Wl,-shared' ;;
xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
tmp_sharedflag='-qmkshrobj'
@@ -26086,6 +26098,12 @@ func_cc_basename ()
esac
done
func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+
+ # Set result to 'nagfor-wrapper' when NAG compiler is called via a wrapper (e.g. mpif90).
+ case $func_cc_basename_result in
+ nagfor*) ;;
+ *) $cc_temp -V 2>&1 | $GREP '^NAG Fortran Compiler Release' >/dev/null 2>&1 && func_cc_basename_result='nagfor-wrapper' ;;
+ esac
}
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -7868,6 +7868,13 @@ func_mode_link ()
# Convert "-framework foo" to "foo.ltframework"
if test -n "$inherited_linker_flags"; then
tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
+
+ # Additionally convert " -pthread" to " -Wl,-pthread" for nagfor
+ func_cc_basename $CC
+ case $func_cc_basename_result in
+ nagfor*) tmp_inherited_linker_flags=`$ECHO "$tmp_inherited_linker_flags" | $SED 's/ -pthread/ -Wl,-pthread/g'` ;;
+ esac
+
for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
case " $new_inherited_linker_flags " in
*" $tmp_inherited_linker_flag "*) ;;
@@ -8890,7 +8897,8 @@ func_mode_link ()
xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
# On Darwin other compilers
- case $CC in
+ func_cc_basename $CC
+ case $func_cc_basename_result in
nagfor*)
verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
;;
@@ -9502,6 +9510,14 @@ EOF
;;
esac
+ # Time to revert the changes made for nagfor.
+
+ func_cc_basename $CC
+ case $func_cc_basename_result in
+ nagfor*)
+ new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% -Wl,-pthread% -pthread%g'` ;;
+ esac
+
# move library search paths that coincide with paths to not yet
# installed libraries to the beginning of the library search list
new_libs=

View File

@@ -37,6 +37,14 @@ class NetcdfFortran(AutotoolsPackage):
depends_on("netcdf-c@4.7.4:", when="@4.5.3:") # nc_def_var_szip required
depends_on("doxygen", when="+doc", type="build")
# The default libtool.m4 is too old to handle NAG compiler properly:
# https://github.com/Unidata/netcdf-fortran/issues/94
# Moreover, Libtool can't handle '-pthread' flag coming from libcurl,
# doesn't inject convenience libraries into the shared ones, and is unable
# to detect NAG when it is called with an MPI wrapper.
patch("nag_libtool_2.4.2.patch", when="@:4.4.4%nag")
patch("nag_libtool_2.4.6.patch", when="@4.4.5:%nag")
# Enable 'make check' for NAG, which is too strict.
patch("nag_testing.patch", when="@4.4.5%nag")
@@ -128,6 +136,54 @@ def configure_args(self):
return config_args
@run_after("configure")
def patch_libtool(self):
"""AOCC support for NETCDF-F"""
if "%aocc" in self.spec:
# Libtool does not fully support the compiler toolchain, therefore
# we have to patch the script. The C compiler normally gets
# configured correctly, the variables of interest in the
# 'BEGIN LIBTOOL CONFIG' section are set to non-empty values and,
# therefore, are not affected by the replacements below. A more
# robust solution would be to extend the filter_file function with
# an additional argument start_at and perform the replacements
# between the '# ### BEGIN LIBTOOL TAG CONFIG: FC' and
# '# ### END LIBTOOL TAG CONFIG: FC' markers for the Fortran
# compiler, and between the '# ### BEGIN LIBTOOL TAG CONFIG: F77'
# and '# ### END LIBTOOL TAG CONFIG: F77' markers for the Fortran 77
# compiler.
# How to pass a linker flag through the compiler:
filter_file(r'^wl=""$', 'wl="{0}"'.format(self.compiler.linker_arg), "libtool")
# Additional compiler flags for building library objects (we need
# this to enable shared libraries when building with ~pic). Note
# that the following will set fc_pic_flag for both FC and F77, which
# in the case of AOCC, should not be a problem. If it is, the
# aforementioned modification of the filter_file function could be
# a solution.
filter_file(
r'^pic_flag=""$', 'pic_flag=" {0}"'.format(self.compiler.fc_pic_flag), "libtool"
)
# The following is supposed to tell the compiler to use the GNU
# linker. However, the replacement does not happen (at least for
# NetCDF-Fortran 4.5.3) because the replaced substring (i.e. the
# first argument passed to the filter_file function) is not present
# in the file. The flag should probably be added to 'ldflags' in the
# flag_handler method above (another option is to add the flag to
# 'ldflags' in compilers.yaml automatically as it was done for other
# flags in https://github.com/spack/spack/pull/22219).
filter_file(
r"\${wl}-soname \$wl\$soname",
r"-fuse-ld=ld -Wl,-soname,\$soname",
"libtool",
string=True,
)
# TODO: resolve the NAG-related issues in a similar way: remove the
# respective patch files and tune the generated libtool script instead.
@when("@:4.4.5")
def check(self):
with working_dir(self.build_directory):

View File

@@ -89,7 +89,7 @@ class Octave(AutotoolsPackage, GNUMirrorPackage):
# Optional dependencies
depends_on("arpack-ng", when="+arpack")
depends_on("curl", when="+curl")
depends_on("fftw-api@3", when="+fftw")
depends_on("fftw", when="+fftw")
depends_on("fltk", when="+fltk")
depends_on("fontconfig", when="+fontconfig")
depends_on("freetype", when="+freetype")
@@ -222,13 +222,12 @@ def configure_args(self):
config_args.append("--without-curl")
if "+fftw" in spec:
fftw_string = "fftw-api"
config_args.extend(
[
"--with-fftw3-includedir=%s" % spec[fftw_string].prefix.include,
"--with-fftw3-libdir=%s" % spec[fftw_string].prefix.lib,
"--with-fftw3f-includedir=%s" % spec[fftw_string].prefix.include,
"--with-fftw3f-libdir=%s" % spec[fftw_string].prefix.lib,
"--with-fftw3-includedir=%s" % spec["fftw"].prefix.include,
"--with-fftw3-libdir=%s" % spec["fftw"].prefix.lib,
"--with-fftw3f-includedir=%s" % spec["fftw"].prefix.include,
"--with-fftw3f-libdir=%s" % spec["fftw"].prefix.lib,
]
)
else:

View File

@@ -0,0 +1,49 @@
--- a/config/ltmain.sh
+++ b/config/ltmain.sh
@@ -7860,14 +7860,15 @@ func_mode_link ()
func_source "$lib"
# Convert "-framework foo" to "foo.ltframework"
- # and "-pthread" to "-Wl,-pthread" if NAG compiler
if test -n "$inherited_linker_flags"; then
- case "$CC" in
- nagfor*)
- tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g' | $SED 's/-pthread/-Wl,-pthread'`;;
- *)
- tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`;;
- esac
+ tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
+
+ # Additionally convert " -pthread" to " -Wl,-pthread" for nagfor
+ func_cc_basename $CC
+ case $func_cc_basename_result in
+ nagfor*) tmp_inherited_linker_flags=`$ECHO "$tmp_inherited_linker_flags" | $SED 's/ -pthread/ -Wl,-pthread/g'` ;;
+ esac
+
for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
case " $new_inherited_linker_flags " in
*" $tmp_inherited_linker_flag "*) ;;
@@ -8887,7 +8888,8 @@ func_mode_link ()
xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
# On Darwin other compilers
- case $CC in
+ func_cc_basename $CC
+ case $func_cc_basename_result in
nagfor*)
verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
;;
@@ -9499,6 +9501,13 @@ EOF
;;
esac
+ # Time to revert the changes made for nagfor.
+ func_cc_basename $CC
+ case $func_cc_basename_result in
+ nagfor*)
+ new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% -Wl,-pthread% -pthread%g'` ;;
+ esac
+
# move library search paths that coincide with paths to not yet
# installed libraries to the beginning of the library search list
new_libs=

View File

@@ -0,0 +1,40 @@
--- a/config/ltmain.sh
+++ b/config/ltmain.sh
@@ -7862,6 +7862,13 @@ func_mode_link ()
# Convert "-framework foo" to "foo.ltframework"
if test -n "$inherited_linker_flags"; then
tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
+
+ # Additionally convert " -pthread" to " -Wl,-pthread" for nagfor
+ func_cc_basename $CC
+ case $func_cc_basename_result in
+ nagfor*) tmp_inherited_linker_flags=`$ECHO "$tmp_inherited_linker_flags" | $SED 's/ -pthread/ -Wl,-pthread/g'` ;;
+ esac
+
for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
case " $new_inherited_linker_flags " in
*" $tmp_inherited_linker_flag "*) ;;
@@ -8881,7 +8888,8 @@ func_mode_link ()
xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
# On Darwin other compilers
- case $CC in
+ func_cc_basename $CC
+ case $func_cc_basename_result in
nagfor*)
verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
;;
@@ -9493,6 +9501,13 @@ EOF
;;
esac
+ # Time to revert the changes made for nagfor.
+ func_cc_basename $CC
+ case $func_cc_basename_result in
+ nagfor*)
+ new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% -Wl,-pthread% -pthread%g'` ;;
+ esac
+
# move library search paths that coincide with paths to not yet
# installed libraries to the beginning of the library search list
new_libs=

View File

@@ -0,0 +1,49 @@
--- a/config/ltmain.sh
+++ b/config/ltmain.sh
@@ -7860,14 +7860,15 @@ func_mode_link ()
func_source "$lib"
# Convert "-framework foo" to "foo.ltframework"
- # and "-pthread" to "-Wl,-pthread" if NAG compiler
if test -n "$inherited_linker_flags"; then
- case "$CC" in
- nagfor*)
- tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g' | $SED 's/-pthread/-Wl,-pthread/g'`;;
- *)
- tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`;;
- esac
+ tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
+
+ # Additionally convert " -pthread" to " -Wl,-pthread" for nagfor
+ func_cc_basename $CC
+ case $func_cc_basename_result in
+ nagfor*) tmp_inherited_linker_flags=`$ECHO "$tmp_inherited_linker_flags" | $SED 's/ -pthread/ -Wl,-pthread/g'` ;;
+ esac
+
for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
case " $new_inherited_linker_flags " in
*" $tmp_inherited_linker_flag "*) ;;
@@ -8887,7 +8888,8 @@ func_mode_link ()
xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
# On Darwin other compilers
- case $CC in
+ func_cc_basename $CC
+ case $func_cc_basename_result in
nagfor*)
verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
;;
@@ -9499,6 +9501,13 @@ EOF
;;
esac
+ # Time to revert the changes made for nagfor.
+ func_cc_basename $CC
+ case $func_cc_basename_result in
+ nagfor*)
+ new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% -Wl,-pthread% -pthread%g'` ;;
+ esac
+
# move library search paths that coincide with paths to not yet
# installed libraries to the beginning of the library search list
new_libs=

View File

@@ -0,0 +1,49 @@
--- a/config/ltmain.sh
+++ b/config/ltmain.sh
@@ -7860,14 +7860,15 @@ func_mode_link ()
func_source "$lib"
# Convert "-framework foo" to "foo.ltframework"
- # and "-pthread" to "-Wl,-pthread" if NAG compiler
if test -n "$inherited_linker_flags"; then
- case "$CC" in
- *nagfor*)
- tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g' | $SED 's/-pthread/-Wl,-pthread/g'`;;
- *)
- tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`;;
- esac
+ tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
+
+ # Additionally convert " -pthread" to " -Wl,-pthread" for nagfor
+ func_cc_basename $CC
+ case $func_cc_basename_result in
+ nagfor*) tmp_inherited_linker_flags=`$ECHO "$tmp_inherited_linker_flags" | $SED 's/ -pthread/ -Wl,-pthread/g'` ;;
+ esac
+
for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
case " $new_inherited_linker_flags " in
*" $tmp_inherited_linker_flag "*) ;;
@@ -8887,7 +8888,8 @@ func_mode_link ()
xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
# On Darwin other compilers
- case $CC in
+ func_cc_basename $CC
+ case $func_cc_basename_result in
nagfor*)
verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
;;
@@ -9499,6 +9501,13 @@ EOF
;;
esac
+ # Time to revert the changes made for nagfor.
+ func_cc_basename $CC
+ case $func_cc_basename_result in
+ nagfor*)
+ new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% -Wl,-pthread% -pthread%g'` ;;
+ esac
+
# move library search paths that coincide with paths to not yet
# installed libraries to the beginning of the library search list
new_libs=

View File

@@ -382,6 +382,14 @@ class Openmpi(AutotoolsPackage, CudaPackage):
patch("btl_vader.patch", when="@3.0.1:3.0.2")
patch("btl_vader.patch", when="@3.1.0:3.1.2")
# Make NAG compiler pass the -pthread option to the linker:
# https://github.com/open-mpi/ompi/pull/6378
# We support only versions based on Libtool 2.4.6.
patch("nag_pthread/2.1.4_2.1.999_3.0.1_4.patch", when="@2.1.4:2.1,3.0.1:4%nag")
patch("nag_pthread/2.1.2_2.1.3_3.0.0.patch", when="@2.1.2:2.1.3,3.0.0%nag")
patch("nag_pthread/2.0.0_2.1.1.patch", when="@2.0.0:2.1.1%nag")
patch("nag_pthread/1.10.4_1.10.999.patch", when="@1.10.4:1.10%nag")
# Fix MPI_Sizeof() in the "mpi" Fortran module for compilers that do not
# support "IGNORE TKR" functionality (e.g. NAG).
# The issue has been resolved upstream in two steps:

View File

@@ -0,0 +1,10 @@
--- a/m4/libtool.m4
+++ b/m4/libtool.m4
@@ -5282,7 +5282,6 @@ _LT_EOF
tmp_sharedflag='-shared'
case $cc_basename,$host_cpu in
pgcc*) # Portland Group C compiler
- _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
tmp_addflag=' $pic_flag'
;;
pgf77* | pgf90* | pgf95* | pgfortran*)

View File

@@ -0,0 +1,26 @@
--- a/configure
+++ b/configure
@@ -11858,7 +11858,6 @@ _LT_EOF
tmp_sharedflag='-shared'
case $cc_basename,$host_cpu in
pgcc*) # Portland Group C compiler
- whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
tmp_addflag=' $pic_flag'
;;
pgf77* | pgf90* | pgf95* | pgfortran*)
@@ -21326,7 +21325,6 @@ _LT_EOF
tmp_sharedflag='-shared'
case $cc_basename,$host_cpu in
pgcc*) # Portland Group C compiler
- whole_archive_flag_spec_F77='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
tmp_addflag=' $pic_flag'
;;
pgf77* | pgf90* | pgf95* | pgfortran*)
@@ -25066,7 +25064,6 @@ _LT_EOF
tmp_sharedflag='-shared'
case $cc_basename,$host_cpu in
pgcc*) # Portland Group C compiler
- whole_archive_flag_spec_FC='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
tmp_addflag=' $pic_flag'
;;
pgf77* | pgf90* | pgf95* | pgfortran*)

View File

@@ -0,0 +1,69 @@
--- a/configure
+++ b/configure
@@ -11745,6 +11745,8 @@ _LT_EOF
whole_archive_flag_spec=
tmp_sharedflag='--shared' ;;
nagfor*) # NAGFOR 5.3
+ whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ compiler_needs_object=yes
tmp_sharedflag='-Wl,-shared' ;;
xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
tmp_sharedflag='-qmkshrobj'
@@ -21030,6 +21032,8 @@ _LT_EOF
whole_archive_flag_spec_F77=
tmp_sharedflag='--shared' ;;
nagfor*) # NAGFOR 5.3
+ whole_archive_flag_spec_F77='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ compiler_needs_object_F77=yes
tmp_sharedflag='-Wl,-shared' ;;
xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
tmp_sharedflag='-qmkshrobj'
@@ -24765,6 +24769,8 @@ _LT_EOF
whole_archive_flag_spec_FC=
tmp_sharedflag='--shared' ;;
nagfor*) # NAGFOR 5.3
+ whole_archive_flag_spec_FC='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ compiler_needs_object_FC=yes
tmp_sharedflag='-Wl,-shared' ;;
xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
tmp_sharedflag='-qmkshrobj'
--- a/scripts/ltmain.sh
+++ b/scripts/ltmain.sh
@@ -7862,6 +7862,13 @@ func_mode_link ()
# Convert "-framework foo" to "foo.ltframework"
if test -n "$inherited_linker_flags"; then
tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
+
+ # Additionally convert " -pthread" to " -Wl,-pthread" for nagfor
+ func_cc_basename $CC
+ case $func_cc_basename_result in
+ nagfor*) tmp_inherited_linker_flags=`$ECHO "$tmp_inherited_linker_flags" | $SED 's/ -pthread/ -Wl,-pthread/g'` ;;
+ esac
+
for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
case " $new_inherited_linker_flags " in
*" $tmp_inherited_linker_flag "*) ;;
@@ -8881,7 +8888,8 @@ func_mode_link ()
xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
# On Darwin other compilers
- case $CC in
+ func_cc_basename $CC
+ case $func_cc_basename_result in
nagfor*)
verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
;;
@@ -9493,6 +9501,13 @@ EOF
;;
esac
+ # Time to revert the changes made for nagfor.
+ func_cc_basename $CC
+ case $func_cc_basename_result in
+ nagfor*)
+ new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% -Wl,-pthread% -pthread%g'` ;;
+ esac
+
# move library search paths that coincide with paths to not yet
# installed libraries to the beginning of the library search list
new_libs=

View File

@@ -79,6 +79,23 @@ def url_for_version(self, version):
# (see below).
conflicts("+shared", when="@:1.9%nag+fortran")
# https://github.com/Parallel-NetCDF/PnetCDF/pull/59
patch("nag_libtool.patch", when="@1.9:1.12.1%nag")
# We could apply the patch unconditionally. However, it fixes a problem
# that manifests itself only when we build shared libraries with Spack on
# a Cray system with PGI compiler. Based on the name of the $CC executable,
# Libtool "thinks" that it works with PGI compiler directly but on a Cray
# system it actually works with the Cray's wrapper. PGI compiler (at least
# since the version 15.7) "understands" two formats of the
# '--whole-archive' argument. Unluckily, Cray's wrapper "understands" only
# one of them but Libtool switches to another one. The following patch
# discards the switching.
patch("cray_pgi_libtool_release.patch", when="@1.8:999%pgi+shared platform=cray")
# Given that the bug manifests itself in rather specific conditions, it is
# not reported upstream.
patch("cray_pgi_libtool_master.patch", when="@master%pgi+shared platform=cray")
@property
def libs(self):
libraries = ["libpnetcdf"]

View File

@@ -1,26 +0,0 @@
# Copyright 2013-2023 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)
from spack.package import *
class PyFortls(PythonPackage):
"""A Language Server for Fortran providing code completion, diagnostics, hovering and more."""
homepage = "https://fortls.fortran-lang.org"
pypi = "fortls/fortls-2.13.0.tar.gz"
maintainers("RMeli")
version("2.13.0", sha256="23c5013e8dd8e1d65bf07be610d0827bc48aa7331a7a7ce13612d4c646d0db31")
depends_on("py-setuptools@45:", type="build")
depends_on("py-packaging", type=("build", "run"))
depends_on("py-setuptools-scm@6.2:+toml", type="build")
depends_on("py-setuptools-scm-git-archive", type="build")
depends_on("py-json5", type=("build", "run"))
depends_on("py-importlib-metadata", type=("build", "run"), when="^python@:3.7")
depends_on("py-typing-extensions", type=("build", "run"), when="^python@:3.7")

View File

@@ -37,7 +37,6 @@ class PyMatplotlib(PythonPackage):
"pylab",
]
version("3.7.0", sha256="8f6efd313430d7ef70a38a3276281cb2e8646b3a22b3b21eb227da20e15e6813")
version("3.6.3", sha256="1f4d69707b1677560cd952544ee4962f68ff07952fb9069ff8c12b56353cb8c9")
version("3.6.2", sha256="b03fd10a1709d0101c054883b550f7c4c5e974f751e2680318759af005964990")
version("3.6.1", sha256="e2d1b7225666f7e1bcc94c0bc9c587a82e3e8691da4757e357e5c2515222ee37")
@@ -139,12 +138,16 @@ class PyMatplotlib(PythonPackage):
# https://matplotlib.org/stable/devel/dependencies.html
# Runtime dependencies
# Mandatory dependencies
extends("python", ignore=r"bin/nosetests.*$|bin/pbr$")
depends_on("python@3.8:", when="@3.6:", type=("build", "link", "run"))
depends_on("python@3.7:", when="@3.4:", type=("build", "link", "run"))
depends_on("python@3.6:", when="@3.1:", type=("build", "link", "run"))
depends_on("python@3.5:", when="@3:", type=("build", "link", "run"))
depends_on("python@2.7:2.8,3.4:", when="@:2", type=("build", "link", "run"))
depends_on("py-contourpy@1.0.1:", when="@3.6:", type=("build", "run"))
depends_on("py-cycler@0.10:", type=("build", "run"))
depends_on("py-fonttools@4.22:", when="@3.5:", type=("build", "run"))
depends_on("py-kiwisolver@1.0.1:", type=("build", "run"), when="@2.2.0:")
depends_on("py-numpy@1.20:", when="@3.7:", type=("build", "run"))
depends_on("py-numpy@1.19:", when="@3.6:", type=("build", "run"))
depends_on("py-numpy@1.17:", when="@3.5:", type=("build", "run"))
depends_on("py-numpy@1.16:", when="@3.4:", type=("build", "run"))
@@ -153,13 +156,11 @@ class PyMatplotlib(PythonPackage):
depends_on("py-packaging@20:", when="@3.6:", type=("build", "run"))
depends_on("py-packaging", when="@3.5:", type=("build", "run"))
depends_on("pil@6.2:", when="@3.3:", type=("build", "run"))
depends_on("py-pyparsing@2.3.1:", when="@3.7:", type=("build", "run"))
depends_on("py-pyparsing@2.2.1:", when="@3.4:", type=("build", "run"))
depends_on("py-pyparsing@2.0.3,2.0.5:2.1.1,2.1.3:2.1.5,2.1.7:", type=("build", "run"))
depends_on("py-python-dateutil@2.7:", when="@3.4:", type=("build", "run"))
depends_on("py-python-dateutil@2.1:", type=("build", "run"))
depends_on("py-setuptools", type=("build", "run"))
depends_on("py-importlib-resources@3.2:", when="@3.7: ^python@:3.9", type=("build", "run"))
# Historical dependencies
depends_on("py-pytz", type=("build", "run"), when="@:2")
@@ -224,7 +225,6 @@ class PyMatplotlib(PythonPackage):
# Dependencies for building matplotlib
# Setup dependencies
depends_on("py-certifi@2020.6.20:", when="@3.3.1:", type="build")
depends_on("py-pybind11@2.6:", when="@3.7:", type="build")
depends_on("py-setuptools-scm@7:", when="@3.6:", type="build")
depends_on("py-setuptools-scm@4:6", when="@3.5", type="build")
depends_on("py-setuptools-scm-git-archive", when="@3.5", type="build")

View File

@@ -14,8 +14,6 @@ class PyRadiantMlhub(PythonPackage):
maintainers("adamjstewart")
version("0.5.5", sha256="93cabc3c8e9ba343cdb3b0bfaec01bf7a36aae75704fabfe96c8bf5cab9fa899")
version("0.5.3", sha256="f111983910e41f2ce40bf401ccf9e33b393e52cc1989f8f8b74c6b4e2bdd0127")
version("0.5.2", sha256="d310afce962508a44c60f5738fef164c50e78f76c3e85813653824b39a189ca3")
version("0.5.1", sha256="b7daff4a127e96e27c64eda66e393d9727e61a87c887f86738753486cc44fa46")
version("0.5.0", sha256="fff788aaa5f8afcb0f6eabff4147eaaf7de375f0a43ecaf2238033fc3a62e2c2")
@@ -25,9 +23,10 @@ class PyRadiantMlhub(PythonPackage):
version("0.3.0", sha256="dd66479f12317e7bf366abe8d692841485e9497918c30ab14cd6db9e69ce3dbb")
version("0.2.2", sha256="0d9f634b7e29c7f7294b81a10cf712ac63251949a9c5a07aa6c64c0d5b77e1ba")
version("0.2.1", sha256="75a2f096b09a87191238fe557dc64dda8c44156351b4026c784c848c7d84b6fb")
version("0.2.0", sha256="4a3e4c301c5e74f282bbf77b7d65db5a1d6c2a4dc6d18637eff6e1228ca2eb9d")
depends_on("python@3.8:", when="@0.5:", type=("build", "run"))
depends_on("python@3.7:", when="@0.3:", type=("build", "run"))
depends_on("python@3.6:", type=("build", "run"))
depends_on("py-setuptools", type="build")
depends_on("py-click@7.1.2:8", when="@0.3:", type=("build", "run"))
depends_on("py-click@7.1.2:7.1", when="@:0.2", type=("build", "run"))
@@ -49,7 +48,4 @@ class PyRadiantMlhub(PythonPackage):
depends_on("py-tqdm@4.64:4", when="@0.5.0:0.5.1", type=("build", "run"))
depends_on("py-tqdm@4.56:4", when="@0.3:0.4", type=("build", "run"))
depends_on("py-tqdm@4.56", when="@:0.2", type=("build", "run"))
depends_on("py-urllib3@1.26.11:1.26", when="@0.5.5:", type=("build", "run"))
# Historical dependencies
depends_on("py-typing-extensions@3.7:", when="@0.4.1:0.4 ^python@:3.7", type=("build", "run"))

View File

@@ -20,7 +20,6 @@ class PyRasterio(PythonPackage):
maintainers("adamjstewart")
version("master", branch="master")
version("1.3.6", sha256="c8b90eb10e16102d1ab0334a7436185f295de1c07f0d197e206d1c005fc33905")
version("1.3.5", sha256="92358c3d4d5d6f3c7cd2812c8832d5175abce02b11bc101ac9548ff07163e8e2")
version("1.3.4", sha256="5a8771405276ecf00b8ee927bd0a81ec21778dcfc97e4a37d0b388f10c9a41a8")
version("1.3.3", sha256="b6fb1f12489f3a678c05ddcb78a74f0b6f63836219f51c0541e505f5e5208e7d")
@@ -34,32 +33,32 @@ class PyRasterio(PythonPackage):
version("1.0.24", sha256="4839479621045211f66868ec49625979693450bc2e476f23e7e8ac4804eaf452")
version("1.0a12", sha256="47d460326e04c64590ff56952271a184a6307f814efc34fb319c12e690585f3c")
# From pyproject.toml
depends_on("py-cython@0.29.29:", when="@1.3.3:", type="build")
depends_on("py-cython@0.29.24:0.29", when="@1.3.0:1.3.2", type="build")
# From setup.py
# From README.rst
depends_on("python@3.8:", when="@1.3:", type=("build", "link", "run"))
depends_on("python@3.6:3.9", when="@1.2", type=("build", "link", "run"))
depends_on("python@2.7:2.8,3.5:3.8", when="@1.1", type=("build", "link", "run"))
depends_on("python@2.7:2.8,3.5:3.7", when="@:1.0", type=("build", "link", "run"))
depends_on("py-affine", type=("build", "run"))
depends_on("py-attrs", type=("build", "run"))
depends_on("py-certifi", when="@1.2:", type=("build", "run"))
depends_on("py-click@4:", when="@1.2.4:", type=("build", "run"))
depends_on("py-click@4:7", when="@:1.2.3", type=("build", "run"))
depends_on("py-cligj@0.5:", type=("build", "run"))
depends_on("py-numpy@1.18:", when="@1.3:", type=("build", "link", "run"))
depends_on("py-numpy@1.15:", when="@1.2:", type=("build", "link", "run"))
depends_on("py-numpy", type=("build", "link", "run"))
depends_on("py-snuggs@1.4.1:", type=("build", "run"))
depends_on("py-click-plugins", type=("build", "run"))
depends_on("py-setuptools", type=("build", "run"))
# From README.rst and setup.py
depends_on("gdal@3.1:", when="@1.3:")
depends_on("gdal@2.4:3.3", when="@1.2.7:1.2")
depends_on("gdal@2.3:3.2", when="@1.2.0:1.2.6")
depends_on("gdal@1.11:3.2", when="@1.1.0:1.1")
depends_on("gdal@1.11:3.0", when="@1.0.25:1.0")
depends_on("gdal@1.11:2", when="@:1.0.24")
# From pyproject.toml
depends_on("py-cython@0.29.29:", when="@1.3.3:", type="build")
depends_on("py-cython@0.29.24:0.29", when="@1.3.0:1.3.2", type="build")
# From setup.py
depends_on("py-affine", type=("build", "run"))
depends_on("py-attrs", type=("build", "run"))
depends_on("py-certifi", when="@1.2:", type=("build", "run"))
depends_on("py-click@4:", when="@1.2.4:", type=("build", "run"))
depends_on("py-click@4:7", when="@:1.2.3", type=("build", "run"))
depends_on("py-cligj@0.5:", type=("build", "run"))
depends_on("py-snuggs@1.4.1:", type=("build", "run"))
depends_on("py-click-plugins", type=("build", "run"))
depends_on("py-setuptools", type=("build", "run"))

View File

@@ -14,7 +14,6 @@ class Shtools(MakefilePackage):
maintainers("eschnett")
version("4.10.1", sha256="f4fb5c86841fe80136b520d2040149eafd4bc2d49da6b914d8a843b812f20b61")
version("4.9.1", sha256="5c22064f9daf6e9aa08cace182146993aa6b25a6ea593d92572c59f4013d53c2")
version("4.8", sha256="c36fc86810017e544abbfb12f8ddf6f101a1ac8b89856a76d7d9801ffc8dac44")
version("4.5", sha256="1975a2a2bcef8c527d321be08c13c2bc479e0d6b81c468a3203f95df59be4f89")
@@ -25,12 +24,12 @@ class Shtools(MakefilePackage):
# The Makefile expects the "other" libtool, not the GNU libtool we have in
# Spack
patch("nolibtool.patch", when="@:4.9")
patch("nolibtool.patch")
variant("openmp", default=True, description="Enable OpenMP support")
depends_on("blas")
depends_on("fftw precision=double")
depends_on("fftw")
depends_on("lapack")
depends_on("py-flake8", type="test")