Repository: eth-cscs/stackinator (language: python)

Issue:
feature: better spack repo management.
Spack packages in uenv are defined in three different locations:
1. the builtin packages in `spack/var/spack/repos/builtin`
2. the repo path provided by stackinator
    * primarily for providing cray-mpich and it's dependencies, which are custom packages
4. the repo path in a recipe

Recently we have started puting packages in stackinator to provide up to date versions and fixes on Santis
* the latest `cuda` and `nvhpc` packages 
* gcc with patches for Grace

There are two issues with this
1. if a recipe provides a package that is also provided by stackinator, there is a conflict during stack configuration.
2. by providing packages for an in-development system like Santis as part of stackinator, we enforce changes on all vClusters.

We can fix this by:
1. handle the case where multiple repos provide the same package with clear precidence
2. provide per-vCluster repos

I think the following precidence for packages from the different repos would be the best:

recipe > cluster > stackinator > spack



Discussion / hints:

Fix patch:
diff --git a/.flake8 b/.flake8
index 2840302e..e337d7ab 100644
--- a/.flake8
+++ b/.flake8
@@ -1,4 +1,4 @@
 [flake8]
- max-line-length = 88
- exclude = stackinator/repo/packages/, unittests/recipes/with-repo/repo/packages/, external/
+ max-line-length = 120
+ exclude = unittests/recipes/with-repo/repo/packages/, external/
  extend-ignore = E203
diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml
index 690bd427..7b7975bf 100644
--- a/.github/workflows/lint.yaml
+++ b/.github/workflows/lint.yaml
@@ -19,7 +19,7 @@ jobs:
         python -m pip install black flake8 isort mypy
     - name: Black
       run: |
-        black --check --verbose --exclude stackinator/repo stackinator unittests
+        black --check --verbose stackinator unittests
     - name: isort
       run: |
         isort --check --skip stackinator/repo --diff .
diff --git a/MANIFEST.in b/MANIFEST.in
index 4ff6c5d1..d948aafa 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,5 +1,4 @@
 graft stackinator/etc
-graft stackinator/repo
 graft stackinator/schema
 graft stackinator/share
 graft stackinator/templates
diff --git a/docs/cluster-config.md b/docs/cluster-config.md
index 4b14fbf4..a3a57599 100644
--- a/docs/cluster-config.md
+++ b/docs/cluster-config.md
@@ -7,7 +7,8 @@ A cluster configuration is a directory with the following structure:
 /path/to/cluster/configuration
 ├─ compilers.yaml   # system compiler
 ├─ packages.yaml    # external system packages
-└─ concretiser.yaml
+├─ concretiser.yaml
+└─ repos.yaml       # optional reference to additional site packages
 ```
 
 The configuration is provided during the [configuration](configuring.md) step with the `--system/-s` flag.
@@ -31,3 +32,41 @@ If there are additional system packages that you want to use in a recipe, consid
     * the more dependencies, the more potential that software stacks will have to be rebuilt when the system is updated, and the more potential there are for breaking changes;
     * the external packages are part of the Spack upstream configuration generated with the Stack - you might be constraining the choices of downstream users.
 
+## Site and System Configurations
+
+The `repo.yaml` configuration can be used to provide a list of additional Spack package repositories to use on the target system.
+
+These are applied automatically to every recipe built on the target cluster.
+
+To provide site wide defaults, links to additional package repositories can be provdided in the the cluster definition.
+For example, the following definition would link to a set of site-wide package definitions
+
+```yaml
+repos:
+- ../site/repo
+```
+
+The paths are always interpretted as relative to the system configuration.
+This is designed to make it encourage putting cluster definitions and the site description in the same git repository.
+
+```
+/path/to/cluster-configs
+├─ my_cluster
+│   ├─ compilers.yaml
+│   ├─ packages.yaml
+│   ├─ concretiser.yaml
+│   └─ repos.yaml    # refers to ../site/repo
+└─ site
+   └─ repo           # the site wide repo
+       └─ packages
+
+## Package Precedence
+
+If custom package definitions are provided for the same package in more than one location, Stackinator has to choose which definition to use.
+
+There following precedence is applied, in descending order of precidence:
+* packages defined in the (optional) `repo` path in the [recipe](recipes.md#custom-spack-packages)
+* packages defined in the (optional) site repo(s) defined in the `repo/repos.yaml` file of cluster configuration (documented here)
+* packages provided by Spack (in the `var/spack/repos/builtin` path)
+
+As of Stackinator v4, the definitions of some custom repositories (mainly CSCS' custom cray-mpich and its dependencies) was removed from Stackinator, and moved to the the site configuration
diff --git a/docs/recipes.md b/docs/recipes.md
index e6131415..b6337edf 100644
--- a/docs/recipes.md
+++ b/docs/recipes.md
@@ -161,18 +161,23 @@ rocm-env:
   # ...
 ```
 
-As new versions of cray-mpich are released with CPE, they are added to Stackinator.
-The following versions of cray-mpich are currently provided:
+!!! alps
 
-|   cray-mpich  |   CPE     |   notes                  |
-| :------------ | :-------- | :----------------------- |
-|  8.1.25       | 23.03     | released 2023-02-26 **default** |
-|  8.1.24       | 23.02     | released 2023-01-19  |
-|  8.1.23       | 22.12     | released 2022-11-29  |
-|  8.1.21.1     | 22.11     | released 2022-10-25  |
-|  8.1.18.4     | 22.08     | released 2022-07-21  |
+    As new versions of cray-mpich are released with CPE, they are provided on Alps vClusters, via the Spack package repo in the [CSCS cluster configuration repo](https://github.com/eth-cscs/alps-cluster-config/tree/master/site/repo).
+    The following versions of cray-mpich are currently provided:
+
+    |   cray-mpich  |   CPE     |   notes                  |
+    | :------------ | :-------- | :----------------------- |
+    |  8.1.29       | 24.03     | pre-release  |
+    |  8.1.28       | 23.12     | released 2023-12 **default** |
+    |  8.1.27       | 23.09     | released 2023-09     |
+    |  8.1.26       | 23.06     | released 2023-06     |
+    |  8.1.25       | 23.03     | released 2023-02-26  |
+    |  8.1.24       | 23.02     | released 2023-01-19  |
+    |  8.1.23       | 22.12     | released 2022-11-29  |
+    |  8.1.21.1     | 22.11     | released 2022-10-25  |
+    |  8.1.18.4     | 22.08     | released 2022-07-21  |
 
-!!! alps
     All versions of cray-mpich in the table have been validated on Alps vClusters with Slingshot 11 and libfabric 1.15.2.
 
 !!! note
@@ -316,12 +321,16 @@ repo
       └─ package.py
 ```
 
+Additional custom packages can be provided as part of the cluster configuration, as well as additional site packages.
+These packages are all optional, and will be installed together in a single Spack package repository that is made available to downstream users of the generated uenv stack.
+See the documentation for [cluster configuration](cluster-config.md) for more detail.
 
-Stackinator internally provides its own package repository with a custom package for `cray-mpich` package, which it puts in the `alps` namespace.
-The `alps` repository is installed alongside the packages, and is automatically available to all Spack users that use the Spack stack as an upstream.
+!!! alps
+    All packages are installed under a single spack package repository called `alps`.
+    The CSCS configurations in [github.com/eth-cscs/alps-cluster-config](https://github.com/eth-cscs/alps-cluster-config) provides a site configuration that defines cray-mpich, its dependencies, and the most up to date versions of cuda, nvhpc etc to all clusters on Alps.
 
 !!! warning
-    Unlike Spack package repositories, any `repos.yaml` file in the `repo` path will be ignored and a warning will be issued.
+    Unlike Spack package repositories, any `repos.yaml` file in the `repo` path will be ignored.
     This is because the provided packages are added to the `alps` namespace.
 
 ## Post install configuration
diff --git a/pyproject.toml b/pyproject.toml
index e0328479..1ce3fda2 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -2,6 +2,9 @@
 requires = ["setuptools", "wheel"]
 build-backend = "setuptools.build_meta"
 
+[tool.black]
+line-length = 120
+
 [tool.isort]
- profile = "black"
- skip = ["external/"]
+profile = "black"
+skip = ["external/"]
diff --git a/stackinator/builder.py b/stackinator/builder.py
index b61b82e9..1240dc40 100644
--- a/stackinator/builder.py
+++ b/stackinator/builder.py
@@ -11,7 +11,7 @@
 import jinja2
 import yaml
 
-from . import VERSION, cache, root_logger
+from . import VERSION, cache, root_logger, spack_util
 
 
 def install(src, dst, *, ignore=None, symlinks=False):
@@ -197,7 +197,7 @@ def generate(self, recipe):
             self._logger.debug(capture.stdout.decode("utf-8"))
 
             if capture.returncode != 0:
-                self._logger.debug(f'error cloning the repository {spack["repo"]}')
+                self._logger.error(f'error cloning the repository {spack["repo"]}')
                 capture.check_returncode()
 
         # Check out a branch or commit if one was specified
@@ -212,9 +212,7 @@ def generate(self, recipe):
             self._logger.debug(capture.stdout.decode("utf-8"))
 
             if capture.returncode != 0:
-                self._logger.debug(
-                    f'unable to change to the requested commit {spack["commit"]}'
-                )
+                self._logger.debug(f'unable to change to the requested commit {spack["commit"]}')
                 capture.check_returncode()
 
         # load the jinja templating environment
@@ -244,11 +242,7 @@ def generate(self, recipe):
 
         make_user_template = jinja_env.get_template("Make.user")
         with (self.path / "Make.user").open("w") as f:
-            f.write(
-                make_user_template.render(
-                    build_path=self.path, store=recipe.mount, verbose=False
-                )
-            )
+            f.write(make_user_template.render(build_path=self.path, store=recipe.mount, verbose=False))
             f.write("\n")
 
         etc_path = self.root / "etc"
@@ -267,9 +261,7 @@ def generate(self, recipe):
         post_hook = recipe.post_install_hook
         if post_hook is not None:
             self._logger.debug("installing post-install-hook script")
-            jinja_recipe_env = jinja2.Environment(
-                loader=jinja2.FileSystemLoader(recipe.path)
-            )
+            jinja_recipe_env = jinja2.Environment(loader=jinja2.FileSystemLoader(recipe.path))
             post_hook_template = jinja_recipe_env.get_template("post-install")
             post_hook_destination = store_path / "post-install-hook"
 
@@ -286,9 +278,7 @@ def generate(self, recipe):
         pre_hook = recipe.pre_install_hook
         if pre_hook is not None:
             self._logger.debug("installing pre-install-hook script")
-            jinja_recipe_env = jinja2.Environment(
-                loader=jinja2.FileSystemLoader(recipe.path)
-            )
+            jinja_recipe_env = jinja2.Environment(loader=jinja2.FileSystemLoader(recipe.path))
             pre_hook_template = jinja_recipe_env.get_template("pre-install")
             pre_hook_destination = store_path / "pre-install-hook"
 
@@ -315,9 +305,7 @@ def generate(self, recipe):
                     "mirrors.yaml have been removed from cluster configurations,"
                     " use the --cache option on stack-config instead."
                 )
-                raise RuntimeError(
-                    "Unsupported mirrors.yaml file in cluster configuration."
-                )
+                raise RuntimeError("Unsupported mirrors.yaml file in cluster configuration.")
 
             # construct full file path
             src = system_config_path / f_config.name
@@ -348,46 +336,91 @@ def generate(self, recipe):
             with packages_path.open("w") as fid:
                 fid.write(packages_yaml)
 
-        # Configure the CSCS custom spack environments.
-        # Step 1: copy the CSCS repo to store_path where, it will be used to
+        # Add custom spack package recipes, configured via Spack repos.
+        # Step 1: copy Spack repos to store_path where they will be used to
         #         build the stack, and then be part of the upstream provided
         #         to users of the stack.
-        repo_src = self.root / "repo"
+        #
+        # Packages in the recipe are prioritised over cluster specific packages,
+        # etc. The order of preference from highest to lowest is:
+        #
+        # 3. recipe/repo
+        # 2. cluster-config/repos.yaml
+        #   - if the repos.yaml file exists it will contain a list of relative paths
+        #     to search for package
+        # 1. spack/var/spack/repos/builtin
+
+        # Build a list of repos with packages to install.
+        repos = []
+
+        # check for a repo in the recipe
+        if recipe.spack_repo is not None:
+            self._logger.debug(f"adding recipe spack package repo: {recipe.spack_repo}")
+            repos.append(recipe.spack_repo)
+
+        # look for repos.yaml file in the system configuration
+        repo_yaml = system_config_path / "repos.yaml"
+        if repo_yaml.exists() and repo_yaml.is_file():
+            # open repos.yaml file and reat the list of repos
+            with repo_yaml.open() as fid:
+                raw = yaml.load(fid, Loader=yaml.Loader)
+                P = raw["repos"]
+
+            self._logger.debug(f"the system configuration has a repo file {repo_yaml} refers to {P}")
+
+            # test each path
+            for rel_path in P:
+                repo_path = (system_config_path / rel_path).resolve()
+                if spack_util.is_repo(repo_path):
+                    repos.append(repo_path)
+                    self._logger.debug(f"adding site spack package repo: {repo_path}")
+                else:
+                    self._logger.error(f"{repo_path} from {repo_yaml} is not a spack package repository")
+                    raise RuntimeError("invalid system-provided package repository")
+
+        self._logger.debug(f"full list of spack package repo: {repos}")
+
+        # Delete the store/repo path, if it already exists.
+        # Do this so that incremental builds (though not officially supported) won't break if a repo is updated.
         repo_dst = store_path / "repo"
+        self._logger.debug(f"creating the stack spack prepo in {repo_dst}")
         if repo_dst.exists():
+            self._logger.debug(f"{repo_dst} exists ... deleting")
             shutil.rmtree(repo_dst)
 
-        install(repo_src, repo_dst)
+        # Iterate over the source repositories copying their contents to the consolidated repo in the uenv.
+        # Do overwrite packages that have been copied from an earlier source repo, enforcing a descending
+        # order of precidence.
+        if len(repos) > 0:
+            pkg_dst = repo_dst / "packages"
+            pkg_dst.mkdir(mode=0o755, parents=True)
+            self._logger.debug(f"created the repo packages path {pkg_dst}")
+            for repo_src in repos:
+                self._logger.debug(f"installing repo {repo_src}")
+                packages_path = repo_src / "packages"
+                for pkg_path in packages_path.iterdir():
+                    dst = pkg_dst / pkg_path.name
+                    if pkg_path.is_dir() and not dst.exists():
+                        self._logger.debug(f"  installing package {pkg_path} to {pkg_dst}")
+                        install(pkg_path, dst)
+                    elif dst.exists():
+                        self._logger.debug(f"  NOT installing package {pkg_path}")
+            # create the repo.yaml file that configures the repo.
+            with (repo_dst / "repo.yaml").open("w") as f:
+                f.write(
+                    """\
+repo:
+  namespace: alps
+"""
+                )
 
-        # Step 2: Create a repos.yaml file in build_path/config
+        # Create a repos.yaml file in build_path/config
         repos_yaml_template = jinja_env.get_template("repos.yaml")
         with (config_path / "repos.yaml").open("w") as f:
             repo_path = recipe.mount / "repo"
-            f.write(
-                repos_yaml_template.render(
-                    repo_path=repo_path.as_posix(), verbose=False
-                )
-            )
+            f.write(repos_yaml_template.render(repo_path=repo_path.as_posix(), verbose=False))
             f.write("\n")
 
-        # Add user-defined repo to internal repo
-        user_repo_path = recipe.path / "repo"
-        if user_repo_path.exists() and user_repo_path.is_dir():
-            user_repo_yaml = user_repo_path / "repo.yaml"
-            if user_repo_yaml.exists():
-                self._logger.warning(f"Found 'repo.yaml' file in {user_repo_path}")
-                self._logger.warning(
-                    "'repo.yaml' is ignored, packages are added to the 'alps' repo"
-                )
-
-            # Copy user-provided recipes into repo
-            user_repo_packages = user_repo_path / "packages"
-            for user_recipe_dir in user_repo_packages.iterdir():
-                if user_recipe_dir.is_dir():  # iterdir() yelds files too
-                    install(
-                        user_recipe_dir, repo_dst / "packages" / user_recipe_dir.name
-                    )
-
         # Generate the makefile and spack.yaml files that describe the compilers
         compiler_files = recipe.compiler_files
         compiler_path = self.path / "compilers"
@@ -446,19 +479,13 @@ def generate(self, recipe):
         # write a json file with basic meta data
         with (meta_path / "configure.json").open("w") as f:
             # default serialisation is str to serialise the pathlib.PosixPath
-            f.write(
-                json.dumps(
-                    self.configuration_meta, sort_keys=True, indent=2, default=str
-                )
-            )
+            f.write(json.dumps(self.configuration_meta, sort_keys=True, indent=2, default=str))
             f.write("\n")
 
         # write a json file with the environment view meta data
         with (meta_path / "env.json").open("w") as f:
             # default serialisation is str to serialise the pathlib.PosixPath
-            f.write(
-                json.dumps(self.environment_meta, sort_keys=True, indent=2, default=str)
-            )
+            f.write(json.dumps(self.environment_meta, sort_keys=True, indent=2, default=str))
             f.write("\n")
 
         # copy the recipe to a recipe subdirectory of the meta path
diff --git a/stackinator/etc/add-compiler-links.py b/stackinator/etc/add-compiler-links.py
index 8ac27039..6d76b002 100755
--- a/stackinator/etc/add-compiler-links.py
+++ b/stackinator/etc/add-compiler-links.py
@@ -67,9 +67,7 @@ def has_prefix(path, prefix):
 
 paths = []
 for c in compilers:
-    local_paths = set(
-        [os.path.dirname(v) for k, v in c["paths"].items() if v is not None]
-    )
+    local_paths = set([os.path.dirname(v) for k, v in c["paths"].items() if v is not None])
     paths += local_paths
     print(f'adding compiler {c["spec"]} -> {[p for p in local_paths]}')
 
@@ -96,9 +94,7 @@ def has_prefix(path, prefix):
 
             # parse PATH to remove references to the build directory
             if export["variable"] == "PATH":
-                paths = [
-                    p for p in export["paths"] if not has_prefix(p, args.build_path)
-                ]
+                paths = [p for p in export["paths"] if not has_prefix(p, args.build_path)]
                 lines.append(f"export PATH={':'.join(paths)};\n")
 
             # drop the SPACK_ENV variable
diff --git a/stackinator/main.py b/stackinator/main.py
index 6e4bd532..4909ed0e 100644
--- a/stackinator/main.py
+++ b/stackinator/main.py
@@ -45,14 +45,8 @@ def log_header(args):
 
 
 def make_argparser():
-    parser = argparse.ArgumentParser(
-        description=(
-            "Generate a build configuration for a spack stack from " "a recipe."
-        )
-    )
-    parser.add_argument(
-        "--version", action="version", version=f"stackinator version {VERSION}"
-    )
+    parser = argparse.ArgumentParser(description=("Generate a build configuration for a spack stack from " "a recipe."))
+    parser.add_argument("--version", action="version", version=f"stackinator version {VERSION}")
     parser.add_argument("-b", "--build", required=True, type=str)
     parser.add_argument("-r", "--recipe", required=True, type=str)
     parser.add_argument("-s", "--system", required=True, type=str)
@@ -79,13 +73,10 @@ def main():
 
         builder.generate(recipe)
 
-        root_logger.info(
-            "\nConfiguration finished, run the following to build the " "environment:\n"
-        )
+        root_logger.info("\nConfiguration finished, run the following to build the " "environment:\n")
         root_logger.info(f"cd {builder.path}")
         root_logger.info(
-            "env --ignore-environment PATH=/usr/bin:/bin:`pwd`"
-            "/spack/bin HOME=$HOME make store.squashfs -j32"
+            "env --ignore-environment PATH=/usr/bin:/bin:`pwd`" "/spack/bin HOME=$HOME make store.squashfs -j32"
         )
         return 0
     except Exception as e:
diff --git a/stackinator/recipe.py b/stackinator/recipe.py
index 36f59130..7a3f499b 100644
--- a/stackinator/recipe.py
+++ b/stackinator/recipe.py
@@ -4,7 +4,7 @@
 import jinja2
 import yaml
 
-from . import cache, root_logger, schema
+from . import cache, root_logger, schema, spack_util
 
 
 class Recipe:
@@ -63,9 +63,7 @@ def __init__(self, args):
         compiler_path = self.path / "compilers.yaml"
         self._logger.debug(f"opening {compiler_path}")
         if not compiler_path.is_file():
-            raise FileNotFoundError(
-                f"The recipe path '{compiler_path}' does " f"not contain compilers.yaml"
-            )
+            raise FileNotFoundError(f"The recipe path '{compiler_path}' does " f"not contain compilers.yaml")
 
         with compiler_path.open() as fid:
             raw = yaml.load(fid, Loader=yaml.Loader)
@@ -76,10 +74,7 @@ def __init__(self, args):
         environments_path = self.path / "environments.yaml"
         self._logger.debug(f"opening {environments_path}")
         if not environments_path.is_file():
-            raise FileNotFoundError(
-                f"The recipe path '{environments_path}' does "
-                f" not contain environments.yaml"
-            )
+            raise FileNotFoundError(f"The recipe path '{environments_path}' does " f" not contain environments.yaml")
 
         with environments_path.open() as fid:
             raw = yaml.load(fid, Loader=yaml.Loader)
@@ -90,9 +85,7 @@ def __init__(self, args):
         modules_path = self.path / "modules.yaml"
         self._logger.debug(f"opening {modules_path}")
         if not modules_path.is_file():
-            modules_path = (
-                pathlib.Path(args.build) / "spack/etc/spack/defaults/modules.yaml"
-            )
+            modules_path = pathlib.Path(args.build) / "spack/etc/spack/defaults/modules.yaml"
             self._logger.debug(f"no modules.yaml provided - using the {modules_path}")
 
         self.modules = modules_path
@@ -109,8 +102,7 @@ def __init__(self, args):
         mirrors_path = self.path / "mirrors.yaml"
         if mirrors_path.is_file():
             self._logger.warning(
-                "mirrors.yaml have been removed from recipes,"
-                " use the --cache option on stack-config instead."
+                "mirrors.yaml have been removed from recipes," " use the --cache option on stack-config instead."
             )
             raise RuntimeError("Unsupported mirrors.yaml file in recipe.")
 
@@ -128,6 +120,16 @@ def __init__(self, args):
         else:
             self._logger.debug("no pre install hook provided")
 
+    # Returns:
+    #   Path: if the recipe contains a spack package repository
+    #   None: if there is the recipe contains no repo
+    @property
+    def spack_repo(self):
+        repo_path = self.path / "repo"
+        if spack_util.is_repo(repo_path):
+            return repo_path
+        return None
+
     # Returns:
     #   Path: of the recipe extra path if it exists
     #   None: if there is no user-provided extra path in the recipe
@@ -180,13 +182,9 @@ def mirror(self, configuration):
         if file is not None:
             mirror_config_path = pathlib.Path(file)
             if not mirror_config_path.is_file():
-                raise FileNotFoundError(
-                    f"The cache configuration '{file}' is not a file"
-                )
+                raise FileNotFoundError(f"The cache configuration '{file}' is not a file")
 
-            self._mirror = cache.configuration_from_file(
-                mirror_config_path, pathlib.Path(mount)
-            )
+            self._mirror = cache.configuration_from_file(mirror_config_path, pathlib.Path(mount))
 
     @property
     def config(self):
@@ -196,9 +194,7 @@ def config(self):
     def config(self, config_path):
         self._logger.debug(f"opening {config_path}")
         if not config_path.is_file():
-            raise FileNotFoundError(
-                f"The recipe path '{config_path}' does not contain compilers.yaml"
-            )
+            raise FileNotFoundError(f"The recipe path '{config_path}' does not contain compilers.yaml")
 
         with config_path.open() as fid:
             raw = yaml.load(fid, Loader=yaml.Loader)
@@ -243,9 +239,7 @@ def environment_view_meta(self):
     def modules_yaml(self):
         with self.modules.open() as fid:
             raw = yaml.load(fid, Loader=yaml.Loader)
-            raw["modules"]["default"]["roots"]["tcl"] = (
-                pathlib.Path(self.mount) / "modules"
-            ).as_posix()
+            raw["modules"]["default"]["roots"]["tcl"] = (pathlib.Path(self.mount) / "modules").as_posix()
             return yaml.dump(raw)
 
     # creates the self.environments field that describes the full specifications
@@ -315,9 +309,7 @@ def generate_environment_specs(self, raw):
             env_name_map[name] = []
             for view, vc in config["views"].items():
                 if view in env_names:
-                    raise Exception(
-                        f"An environment view with the name '{view}' already exists."
-                    )
+                    raise Exception(f"An environment view with the name '{view}' already exists.")
                 # save a copy of the view configuration
                 env_name_map[name].append((view, vc))
 
@@ -419,9 +411,7 @@ def generate_compiler_specs(self, raw):
                     llvm["specs"].append(f"{spec}~mpi~blas~lapack")
 
                 if spec.startswith("llvm"):
-                    llvm["specs"].append(
-                        f"{spec} +clang targets=x86 ~gold ^ninja@kitware"
-                    )
+                    llvm["specs"].append(f"{spec} +clang targets=x86 ~gold ^ninja@kitware")
 
             llvm["requires"] = raw["llvm"]["requires"]
             llvm["exclude_from_cache"] = ["nvhpc"]
@@ -441,9 +431,7 @@ def system_config_path(self, path):
             system_path = pathlib.Path.cwd() / system_path
 
         if not system_path.is_dir():
-            raise FileNotFoundError(
-                f"The system configuration path '{system_path}' does not exist"
-            )
+            raise FileNotFoundError(f"The system configuration path '{system_path}' does not exist")
 
         self._system_path = system_path
 
@@ -500,8 +488,6 @@ def environment_files(self):
         files["config"] = {}
         for env, config in self.environments.items():
             spack_yaml_template = jenv.get_template("environments.spack.yaml")
-            files["config"][env] = spack_yaml_template.render(
-                config=config, name=env, store=self.mount
-            )
+            files["config"][env] = spack_yaml_template.render(config=config, name=env, store=self.mount)
 
         return files
diff --git a/stackinator/repo/packages/aws-ofi-nccl/package.py b/stackinator/repo/packages/aws-ofi-nccl/package.py
deleted file mode 100644
index 5b1c1b1c..00000000
--- a/stackinator/repo/packages/aws-ofi-nccl/package.py
+++ /dev/null
@@ -1,66 +0,0 @@
-# Copyright 2013-2024 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 AwsOfiNccl(AutotoolsPackage):
-    """AWS OFI NCCL is a plug-in which enables EC2 developers to use
-    libfabric as a network provider while running NVIDIA's NCCL based
-    applications."""
-
-    homepage = "https://github.com/aws/aws-ofi-nccl"
-    git = "https://github.com/aws/aws-ofi-nccl.git"
-    url = "https://github.com/aws/aws-ofi-nccl.git"
-
-    maintainers("bvanessen")
-
-    version("master", branch="master")
-    version("v1.7.4",
-            sha256="cca529da330d3155ae1502c21365d62159254bca6bfc0482afd35e7eaa927090",
-            url="https://github.com/aws/aws-ofi-nccl/releases/download/v1.7.4-aws/aws-ofi-nccl-1.7.4-aws.tar.gz",
-    )
-
-    variant("trace", default=False, description="Enable printing trace messages")
-    variant("tests", default=False, description="Build tests")
-
-    depends_on("libfabric")
-    depends_on("cuda")
-    depends_on("nccl")
-    depends_on("mpi")
-    depends_on("hwloc")
-    depends_on("autoconf", type="build")
-    depends_on("automake", type="build")
-    depends_on("libtool", type="build")
-
-    # To enable this plug-in to work with NCCL add it to the LD_LIBRARY_PATH
-    def setup_run_environment(self, env):
-        aws_ofi_nccl_home = self.spec.prefix
-        env.append_path("LD_LIBRARY_PATH", aws_ofi_nccl_home.lib)
-
-    # To enable this plug-in to work with NCCL add it to the LD_LIBRARY_PATH
-    def setup_dependent_run_environment(self, env, dependent_spec):
-        aws_ofi_nccl_home = self.spec["aws-ofi-nccl"].prefix
-        env.append_path("LD_LIBRARY_PATH", aws_ofi_nccl_home.lib)
-
-    def configure_args(self):
-        spec = self.spec
-        args = []
-
-        # Always set configure's external paths to use the Spack
-        # provided dependencies
-        args.extend(
-            [
-                "--with-libfabric={0}".format(spec["libfabric"].prefix),
-                "--with-cuda={0}".format(spec["cuda"].prefix),
-                "--with-nccl={0}".format(spec["nccl"].prefix),
-                "--with-mpi={0}".format(spec["mpi"].prefix),
-            ]
-        )
-
-        args.extend(self.enable_or_disable("trace"))
-        args.extend(self.enable_or_disable("tests"))
-
-        return args
diff --git a/stackinator/repo/packages/cray-gtl/package.py b/stackinator/repo/packages/cray-gtl/package.py
deleted file mode 100644
index eab579de..00000000
--- a/stackinator/repo/packages/cray-gtl/package.py
+++ /dev/null
@@ -1,123 +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)
-
-import os
-import platform
-
-import spack.compilers
-from spack.package import *
-
-_versions = {
-    "8.1.29": {
-        "Linux-aarch64": "321bc3bc3c17f38d199e0ccae87cc931f69ca58238385f1e6a6165a2fbe94a71",
-    },
-    "8.1.28": {
-        "Linux-aarch64": "0bb881cba502b199dadce7875bba62e7403e1c55abc6669c76a7cba7c05fa5ad",
-        "Linux-x86_64": "2e82c618648e79bdc4b8bf9394be8fd59c34ccd77f172afd11fce38beca1ecab",
-    },
-    "8.1.27": {
-        "Linux-x86_64": "80c7e94d30b5a3573ac6b2cc5fb0373046760a0acdff44a178e723ab3c8fdfb9"
-    },
-    "8.1.26": {
-        "Linux-x86_64": "37d9626cb5f851f63c9799c18a419354c6f21c77f90558472552156df9eef311"
-    },
-    "8.1.25": {
-        "Linux-x86_64": "a2e2af2037e63b64ef74d870c0bab91a8109e75eef82a30250b81b0d785ff6ae"
-    },
-    "8.1.24": {
-        "Linux-x86_64": "2fa8635f829e67844e7b30dffb092a336d257e0e769d2225030f2ccf4c1d302f"
-    },
-    "8.1.23": {
-        "Linux-x86_64": "034667c2ea49eec76ef8f79494231bad94884b99683edabf781beed01ec681e4"
-    },
-    "8.1.21": {
-        "Linux-x86_64": "78072edfcb6cc24cfefab06e824111b5b2b839551235ece68cd154bec7936a24"
-    },
-    "8.1.18": {
-        "Linux-x86_64": "79c24203a27b67d3aa15ebaab6121e7e72e8a2be61622876179f694a7fb4399c"
-    },
-}
-
-
-class CrayGtl(Package):
-    """Install cray-gtl"""
-
-    homepage = "https://www.hpe.com/us/en/compute/hpc/hpc-software.html"
-    url = "https://jfrog.svc.cscs.ch/artifactory/cray-mpich/cray-gtl-8.1.26.tar.gz"
-    maintainers = ["bcumming", "simonpintarelli"]
-
-    for ver, packages in _versions.items():
-        key = "{0}-{1}".format(platform.system(), platform.machine())
-        sha = packages.get(key)
-        if sha:
-            version(
-                ver,
-                sha256=sha,
-                url=f"https://jfrog.svc.cscs.ch/artifactory/cray-mpich/cray-gtl-{ver}.{platform.machine()}.tar.gz",
-            )
-
-    variant("cuda", default=False)
-    variant("rocm", default=False)
-    conflicts("+cuda", when="+rocm", msg="Pick either CUDA or ROCM")
-
-    # Fix up binaries with patchelf.
-    depends_on("patchelf", type="build")
-
-    conflicts("+cuda", when="+rocm", msg="Pick either CUDA or ROCM")
-
-    with when("+cuda"):
-        depends_on("cuda@11.0:11", type="link", when="@:8.1.26")
-        depends_on("cuda@12.0:12", type="link", when="@8.1.27:")
-
-    with when("+rocm"):
-        # libamdhip64.so.5
-        depends_on("hip@5:", type="link")
-        # libhsa-runtime64.so.1
-        depends_on("hsa-rocr-dev", type="link")
-
-    def get_rpaths(self):
-        # Those rpaths are already set in the build environment, so
-        # let's just retrieve them.
-        pkgs = os.getenv("SPACK_RPATH_DIRS", "").split(":")
-        compilers = os.getenv("SPACK_COMPILER_IMPLICIT_RPATHS", "").split(":")
-        return ":".join([p for p in pkgs + compilers if p])
-
-    def should_patch(self, file):
-        # Returns true if non-symlink ELF file.
-        if os.path.islink(file):
-            return False
-        try:
-            with open(file, "rb") as f:
-                return f.read(4) == b"\x7fELF"
-        except OSError:
-            return False
-
-    def install(self, spec, prefix):
-        install_tree(".", prefix)
-
-    @property
-    def libs(self):
-        if "+cuda" in self.spec:
-            return find_libraries("libmpi_gtl_cuda", root=self.prefix, shared=True)
-        if "+rocm" in self.spec:
-            return find_libraries("libmpi_gtl_hsa", root=self.prefix, shared=True)
-
-    @run_after("install")
-    def fixup_binaries(self):
-        patchelf = which("patchelf")
-        rpath = self.get_rpaths()
-        for root, _, files in os.walk(self.prefix):
-            for name in files:
-                f = os.path.join(root, name)
-                if not self.should_patch(f):
-                    continue
-                patchelf("--force-rpath", "--set-rpath", rpath, f, fail_on_error=False)
-                # The C compiler wrapper can fail because libmpi_gtl_cuda refers to the symbol
-                # __gxx_personality_v0 but wasn't linked against libstdc++.
-                if "libmpi_gtl_cuda.so" in str(f):
-                    patchelf("--add-needed", "libstdc++.so", f, fail_on_error=False)
-                if "@8.1.27+cuda" in self.spec:
-                    patchelf("--add-needed", "libcudart.so", f, fail_on_error=False)
-                    patchelf("--add-needed", "libcuda.so", f, fail_on_error=False)
diff --git a/stackinator/repo/packages/cray-mpich/package.py b/stackinator/repo/packages/cray-mpich/package.py
deleted file mode 100644
index 85785e8b..00000000
--- a/stackinator/repo/packages/cray-mpich/package.py
+++ /dev/null
@@ -1,210 +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)
-
-import os
-import platform
-
-import spack.compilers
-from spack.package import *
-
-_versions = {
-    "8.1.29": {
-        "Linux-aarch64": "2fc5d1f5743f9cecc0b5dbf13355c25014f96db2386b5c2c2d8495a57b279381",
-    },
-    "8.1.28": {
-        "Linux-aarch64": "dfd6c685adfbf070fe9d546d95b31e108ee7089a738447fa7326973a3e696e8d",
-        "Linux-x86_64": "55a0a068bd8bff14f302c5371d7e2b4cf732d5c1ec875bb03e375644e1a6beab",
-    },
-    "8.1.27": {
-        "Linux-x86_64": "5d59cc69b7ae2ef692ae49843bb2c7a44b5a8478d72eaf2ab1f1f6c5983eee0b"
-    },
-    "8.1.26": {
-        "Linux-x86_64": "d308cf3e254ce5873af6caee5ec683a397fed5ce92975f57e5c9215a98d8edad"
-    },
-    "8.1.25": {
-        "Linux-x86_64": "024ab0c4526670a37df7e2995172ba264454fd69c05d8ffe140c9e519397a65c"
-    },
-    "8.1.24": {
-        "Linux-x86_64": "2c3fa339511ed822892e112d3e4d5a39a634d00a31cf22e02ce843f0efcc5ae8"
-    },
-    "8.1.23": {
-        "Linux-x86_64": "ed7ff286ede30ea96dede4c53aa2ef98e8090c988a0bea764cd505ba5fcc0520"
-    },
-    "8.1.21": {
-        "Linux-x86_64": "5fda115f356c26e5d9f8cc68fe578e954a70edd10ebf007182d945345886b61a"
-    },
-    "8.1.18": {
-        "Linux-x86_64": "f7feafd204502d0dab449ff22da138c933ec22d7de3d5e30fbb9a62fc9cdf237"
-    },
-}
-
-
-class CrayMpich(Package):
-    """Install cray-mpich as a binary package"""
-
-    """Intended to override the main cray-mpich"""
-
-    homepage = "https://www.hpe.com/us/en/compute/hpc/hpc-software.html"
-    url = "https://jfrog.svc.cscs.ch/artifactory/cray-mpich/cray-mpich-8.1.26.tar.gz"
-    maintainers = ["bcumming"]
-    for ver, packages in _versions.items():
-        key = "{0}-{1}".format(platform.system(), platform.machine())
-        sha = packages.get(key)
-        if sha:
-            version(
-                ver,
-                sha256=sha,
-                url=f"https://jfrog.svc.cscs.ch/artifactory/cray-mpich/cray-mpich-{ver}.{platform.machine()}.tar.gz",
-            )
-
-    variant("cuda", default=False)
-    variant("rocm", default=False)
-
-    conflicts("+cuda", when="+rocm", msg="Pick either CUDA or ROCM")
-
-    provides("mpi")
-
-    # Fix up binaries with patchelf.
-    depends_on("patchelf", type="build")
-
-    for ver in [
-        "8.1.18",
-        "8.1.21",
-        "8.1.23",
-        "8.1.24",
-        "8.1.25",
-        "8.1.26",
-        "8.1.27",
-        "8.1.28",
-        "8.1.29",
-    ]:
-        with when("+cuda"):
-            depends_on(f"cray-gtl@{ver} +cuda", type="link", when="@" + ver)
-        with when("+rocm"):
-            depends_on(f"cray-gtl@{ver} +rocm", type="link", when="@" + ver)
-
-    depends_on("libfabric@1:", type="link")
-
-    depends_on("cray-pmi", type="link")
-    depends_on("xpmem", type="link")
-
-    conflicts("%gcc@:7")
-    conflicts("%gcc@:11", when="@8.1.28:")
-
-    def setup_run_environment(self, env):
-        env.set("MPICC", join_path(self.prefix.bin, "mpicc"))
-        env.set("MPICXX", join_path(self.prefix.bin, "mpic++"))
-        env.set("MPIF77", join_path(self.prefix.bin, "mpif77"))
-        env.set("MPIF90", join_path(self.prefix.bin, "mpif90"))
-
-    def setup_dependent_build_environment(self, env, dependent_spec):
-        self.setup_run_environment(env)
-        env.set("MPICH_CC", dependent_spec.package.module.spack_cc)
-        env.set("MPICH_CXX", dependent_spec.package.module.spack_cxx)
-        env.set("MPICH_FC", dependent_spec.package.module.spack_fc)
-
-    def setup_dependent_package(self, module, dependent_spec):
-        self.spec.mpicc = join_path(self.prefix.bin, "mpicc")
-        self.spec.mpicxx = join_path(self.prefix.bin, "mpic++")
-        self.spec.mpifc = join_path(self.prefix.bin, "mpif90")
-        self.spec.mpif77 = join_path(self.prefix.bin, "mpif77")
-
-    def get_rpaths(self):
-        # Those rpaths are already set in the build environment, so
-        # let's just retrieve them.
-        pkgs = os.getenv("SPACK_RPATH_DIRS", "").split(":")
-        compilers = os.getenv("SPACK_COMPILER_IMPLICIT_RPATHS", "").split(":")
-        return ":".join([p for p in pkgs + compilers if p])
-
-    def should_patch(self, file):
-        # Returns true if non-symlink ELF file.
-        if os.path.islink(file):
-            return False
-        try:
-            with open(file, "rb") as f:
-                return f.read(4) == b"\x7fELF"
-        except OSError:
-            return False
-
-    def install(self, spec, prefix):
-        if "%nvhpc" in self.spec:
-            install_tree("mpich-nvhpc", prefix)
-        elif "%gcc" in self.spec:
-            install_tree("mpich-gcc", prefix)
-
-    @run_after("install")
-    def fixup_binaries(self):
-        patchelf = which("patchelf")
-        rpath = self.get_rpaths()
-        for root, _, files in os.walk(self.prefix):
-            for name in files:
-                f = os.path.join(root, name)
-                if not self.should_patch(f):
-                    continue
-                patchelf("--force-rpath", "--set-rpath", rpath, f, fail_on_error=False)
-                patchelf("--add-needed", "libxpmem.so", f, fail_on_error=False)
-                if "+cuda" in self.spec:
-                    patchelf("--add-needed", "libmpi_gtl_cuda.so", f, fail_on_error=False)
-                if "+rocm" in self.spec:
-                    patchelf("--add-needed", "libmpi_gtl_hsa.so", f, fail_on_error=False)
-
-    @run_after("install")
-    def fixup_compiler_paths(self):
-        filter_file("@@CC@@", self.compiler.cc, self.prefix.bin.mpicc, string=True)
-        filter_file("@@CXX@@", self.compiler.cxx, self.prefix.bin.mpicxx, string=True)
-        filter_file("@@FC@@", self.compiler.fc, self.prefix.bin.mpifort, string=True)
-
-        filter_file("@@PREFIX@@", self.prefix, self.prefix.bin.mpicc, string=True)
-        filter_file("@@PREFIX@@", self.prefix, self.prefix.bin.mpicxx, string=True)
-        filter_file("@@PREFIX@@", self.prefix, self.prefix.bin.mpifort, string=True)
-
-        # link with the relevant gtl lib
-        if "+cuda" in self.spec:
-            lpath = self.spec["cray-gtl"].prefix.lib
-            gtl_library = f"-L{lpath} -Wl,-rpath,{lpath} -lmpi_gtl_cuda"
-        elif "+rocm" in self.spec:
-            lpath = self.spec["cray-gtl"].prefix.lib
-            gtl_library = f"-L{lpath} -Wl,-rpath,{lpath}  -lmpi_gtl_hsa"
-        else:
-            gtl_library = ""
-        print("==== GTL_LIBRARY", gtl_library)
-        filter_file("@@GTL_LIBRARY@@", gtl_library, self.prefix.bin.mpicc, string=True)
-        filter_file("@@GTL_LIBRARY@@", gtl_library, self.prefix.bin.mpicxx, string=True)
-        filter_file(
-            "@@GTL_LIBRARY@@", gtl_library, self.prefix.bin.mpifort, string=True
-        )
-
-    @property
-    def headers(self):
-        hdrs = find_headers("mpi", self.prefix.include, recursive=True)
-        hdrs += find_headers(
-            "cray_version", self.prefix.include, recursive=True
-        )  # cray_version.h
-        # cray-mpich depends on cray-pmi
-        # hdrs += find_headers("pmi", self.prefix.include, recursive=True) # See cray-pmi package
-        hdrs.directories = os.path.dirname(hdrs[0])
-        return hdrs
-
-    @property
-    def libs(self):
-        query_parameters = self.spec.last_query.extra_parameters
-
-        libraries = ["libmpi", "libmpich"]
-
-        if "f77" in query_parameters:
-            libraries.extend(["libmpifort", "libmpichfort", "libfmpi", "libfmpich"])
-
-        if "f90" in query_parameters:
-            libraries.extend(["libmpif90", "libmpichf90"])
-
-        libs = []
-        for lib_folder in [self.prefix.lib, self.prefix.lib64]:
-            libs += find_libraries(libraries, root=lib_folder, recursive=True)
-            # cray-mpich depends on cray-pmi
-            # libs += find_libraries("libpmi", root=lib_folder, recursive=True)
-            libs += find_libraries("libopa", root=lib_folder, recursive=True)
-            libs += find_libraries("libmpl", root=lib_folder, recursive=True)
-
-        return libs
diff --git a/stackinator/repo/packages/cray-pals/package.py b/stackinator/repo/packages/cray-pals/package.py
deleted file mode 100644
index 44e78113..00000000
--- a/stackinator/repo/packages/cray-pals/package.py
+++ /dev/null
@@ -1,89 +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)
-
-import os
-import platform
-
-import spack.compilers
-from spack.package import *
-
-_versions = {
-    "1.3.2": {
-        "Linux-aarch64": "f7b97a10cc8dde17e804f79235ab1aa98f83e0c7c178e58d6ca3e9170f89c6da",
-        "Linux-x86_64": "deea749476de0f545b31fcd0912f133d7ba60b84f673e47d8b4b15d5a117254c",
-    },
-    "1.2.12": {
-        "Linux-x86_64": "c94d29c09ed650c4e98a236df7ced77f027bdf987919a91a1a1382f704a85bb9"
-    },
-    "1.2.11": {
-        "Linux-x86_64": "e1af09e39d70e28381de806548c6cb29c23abf891a078f46eb71c301a3f0994c"
-    },
-    "1.2.9": {
-        "Linux-x86_64": "ceec6f99bea9df3f7f657a7df499445e62976064dda3f3e437d61e895ec31601"
-    },
-    "1.2.5": {
-        "Linux-x86_64": "d7269ed8f4deab816e3d4006090ec68b25ccc585200d16728ed9a914baf4d9bf"
-    },
-    "1.2.4": {
-        "Linux-x86_64": "a253939585bad2bb9061b98be6e517f18bda0602ecfd38f75c734a01d12003f2"
-    },
-    "1.2.0": {
-        "Linux-x86_64": "6f5c71aa4dd2f591b899ea693cae7a5319d859f69d8c46b7ee244fed8c094d10"
-    },
-}
-
-
-class CrayPals(Package):
-    """Install cray-pals"""
-
-    """Intended to override the main cray-pals"""
-
-    homepage = "https://www.hpe.com/us/en/compute/hpc/hpc-software.html"
-    url = "https://jfrog.svc.cscs.ch/artifactory/cray-mpich/cray-pals-1.2.12.tar.gz"
-    maintainers = ["simonpintarelli"]
-
-    for ver, packages in _versions.items():
-        key = "{0}-{1}".format(platform.system(), platform.machine())
-        sha = packages.get(key)
-        if sha:
-            version(
-                ver,
-                sha256=sha,
-                url=f"https://jfrog.svc.cscs.ch/artifactory/cray-mpich/cray-pals-{ver}.{platform.machine()}.tar.gz",
-            )
-
-    # Fix up binaries with patchelf.
-    depends_on("patchelf", type="build")
-
-    def get_rpaths(self):
-        # Those rpaths are already set in the build environment, so
-        # let's just retrieve them.
-        pkgs = os.getenv("SPACK_RPATH_DIRS", "").split(":")
-        compilers = os.getenv("SPACK_COMPILER_IMPLICIT_RPATHS", "").split(":")
-        return ":".join([p for p in pkgs + compilers if p])
-
-    def should_patch(self, file):
-        # Returns true if non-symlink ELF file.
-        if os.path.islink(file):
-            return False
-        try:
-            with open(file, "rb") as f:
-                return f.read(4) == b"\x7fELF"
-        except OSError:
-            return False
-
-    def install(self, spec, prefix):
-        install_tree(".", prefix)
-
-    @run_after("install")
-    def fixup_binaries(self):
-        patchelf = which("patchelf")
-        rpath = self.get_rpaths()
-        for root, _, files in os.walk(self.prefix):
-            for name in files:
-                f = os.path.join(root, name)
-                if not self.should_patch(f):
-                    continue
-                patchelf("--force-rpath", "--set-rpath", rpath, f, fail_on_error=False)
diff --git a/stackinator/repo/packages/cray-pmi/package.py b/stackinator/repo/packages/cray-pmi/package.py
deleted file mode 100644
index 732342ec..00000000
--- a/stackinator/repo/packages/cray-pmi/package.py
+++ /dev/null
@@ -1,107 +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)
-
-import os
-import platform
-
-import spack.compilers
-from spack.package import *
-
-_versions = {
-    "6.1.14": {
-        "Linux-aarch64": "763933310db675c3e690c9a121778c2ddc3a0b8672cb718542888e31099e25c7",
-    },
-    "6.1.13": {
-        "Linux-aarch64": "f865f410145a66bb05520c32ee5b64b6dfcb9ae33aace6d3db5f870e4f4714bc",
-        "Linux-x86_64": "217ac554cf84a4c7f08cd149c6a18428e1e3533d73e350fa291b6800895b632e",
-    },
-    "6.1.12": {
-        "Linux-x86_64": "d1a4bd929b73197823dd9b4bcb3c8ef06d80326297a07291b24e5996b60330a8"
-    },
-    "6.1.11": {
-        "Linux-x86_64": "5ebcece6a610da02cd41a9a386fd7463ee909bd55e3370d6d372603f90be9afe"
-    },
-    "6.1.10": {
-        "Linux-x86_64": "f4fbe75c201a171dcfe6ada773a4bf0c606767a0b7a8a76fd19d10852abe1290"
-    },
-    "6.1.9": {
-        "Linux-x86_64": "8fd4194c6c5167f8b81b1cf9b76341669e40d647d0caecef287be6f0f5d95290"
-    },
-    "6.1.8": {
-        "Linux-x86_64": "6c7e5d3038e26b9d0e82428b25b570d00401a6fc9f2fd3c008f15a253a8e2305"
-    },
-    "6.1.7": {
-        "Linux-x86_64": "574b21bd6f8970521c2bc4f096aced896fec8b749f854272cc7bbb7130ae92d8"
-    },
-    "6.0.17": {
-        "Linux-x86_64": "5f15cd577c6c082888fcf0f76f0f5a898ddfa32370e1c32ffe926912d4d4dad0"
-    },
-}
-
-
-class CrayPmi(Package):
-    """Install cray-pmi"""
-
-    """Intended to override the main cray-pmi"""
-
-    homepage = "https://www.hpe.com/us/en/compute/hpc/hpc-software.html"
-    url = "https://jfrog.svc.cscs.ch/artifactory/cray-mpich/cray-pmi-6.1.11.tar.gz"
-    maintainers = ["bcumming", "simonpintarelli"]
-
-    for ver, packages in _versions.items():
-        key = "{0}-{1}".format(platform.system(), platform.machine())
-        sha = packages.get(key)
-        if sha:
-            version(
-                ver,
-                sha256=sha,
-                url=f"https://jfrog.svc.cscs.ch/artifactory/cray-mpich/cray-pmi-{ver}.{platform.machine()}.tar.gz",
-            )
-
-    # Fix up binaries with patchelf.
-    depends_on("patchelf", type="build")
-
-    depends_on("cray-pals@1.3.2", type="link", when="@6.1.13:")
-    depends_on("cray-pals@1.2.12", type="link", when="@6.1.11:6.1.12")
-    depends_on("cray-pals@1.2.11", type="link", when="@6.1.10")
-    depends_on("cray-pals@1.2.9", type="link", when="@6.1.9")
-    depends_on("cray-pals@1.2.5", type="link", when="@6.1.8")
-    depends_on("cray-pals@1.2.4", type="link", when="@6.1.7")
-    depends_on("cray-pals@1.2.0", type="link", when="@6.0.17")
-
-    def get_rpaths(self):
-        # Those rpaths are already set in the build environment, so
-        # let's just retrieve them.
-        pkgs = os.getenv("SPACK_RPATH_DIRS", "").split(":")
-        compilers = os.getenv("SPACK_COMPILER_IMPLICIT_RPATHS", "").split(":")
-        return ":".join([p for p in pkgs + compilers if p])
-
-    def should_patch(self, file):
-        # Returns true if non-symlink ELF file.
-        if os.path.islink(file):
-            return False
-        try:
-            with open(file, "rb") as f:
-                return f.read(4) == b"\x7fELF"
-        except OSError:
-            return False
-
-    def install(self, spec, prefix):
-        install_tree(".", prefix)
-
-    @property
-    def libs(self):
-        return find_libraries(["libmpi", "libpmi2"], root=self.prefix, shared=True)
-
-    @run_after("install")
-    def fixup_binaries(self):
-        patchelf = which("patchelf")
-        rpath = self.get_rpaths()
-        for root, _, files in os.walk(self.prefix):
-            for name in files:
-                f = os.path.join(root, name)
-                if not self.should_patch(f):
-                    continue
-                patchelf("--force-rpath", "--set-rpath", rpath, f, fail_on_error=False)
diff --git a/stackinator/repo/packages/cuda/package.py b/stackinator/repo/packages/cuda/package.py
deleted file mode 100644
index 40415551..00000000
--- a/stackinator/repo/packages/cuda/package.py
+++ /dev/null
@@ -1,705 +0,0 @@
-# Copyright 2013-2024 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)
-
-import os
-import platform
-import re
-from glob import glob
-
-import llnl.util.tty as tty
-
-from spack.package import *
-
-# FIXME Remove hack for polymorphic versions
-# This package uses a ugly hack to be able to dispatch, given the same
-# version, to different binary packages based on the platform that is
-# running spack. See #13827 for context.
-# If you need to add a new version, please be aware that:
-#  - versions in the following dict are automatically added to the package
-#  - version tuple must be in the form (checksum, url)
-#  - checksum must be sha256
-#  - package key must be in the form '{os}-{arch}' where 'os' is in the
-#    format returned by platform.system() and 'arch' by platform.machine()
-
-preferred_ver = "11.8.0"
-_versions = {
-    "12.4.0": {
-        "Linux-aarch64": (
-            "b12bfe6c36d32ecf009a6efb0024325c5fc389fca1143f5f377ae2555936e803",
-            "https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "e6a842f4eca9490575cdb68b6b1bb78d47b95a897de48dee292c431892e57d17",
-            "https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux.run",
-        ),
-    },
-    "12.3.0": {
-        "Linux-aarch64": (
-            "9a8fb8acf46b88faf0d711bda3149e1706efbbae02fcb40ab72addfd0e9ce5df",
-            "https://developer.download.nvidia.com/compute/cuda/12.3.0/local_installers/cuda_12.3.0_545.23.06_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "7c13face3af64d6e1648d6e3101d31c8111e747143acb0077d973c1690820422",
-            "https://developer.download.nvidia.com/compute/cuda/12.3.0/local_installers/cuda_12.3.0_545.23.06_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "de15c04380ec35b194c07503bf434837bac5b427cf77b19a63962b1653d195d5",
-            "https://developer.download.nvidia.com/compute/cuda/12.3.0/local_installers/cuda_12.3.0_545.23.06_linux_ppc64le.run",
-        ),
-    },
-    "12.2.1": {
-        "Linux-aarch64": (
-            "a9ae6bd02684c7acfb229484368bf2691d592767ce1aed10ae9aed92c81b9f09",
-            "https://developer.download.nvidia.com/compute/cuda/12.2.1/local_installers/cuda_12.2.1_535.86.10_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "c51e814eaa756160a73289b1f35880cc38c18e1ddedc87f46f7ff0d1696bdb95",
-            "https://developer.download.nvidia.com/compute/cuda/12.2.1/local_installers/cuda_12.2.1_535.86.10_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "8f1aa60cc1e14fd7853eeecd53a78b7dfb2b2da0512a312cc35e4f5b79454f94",
-            "https://developer.download.nvidia.com/compute/cuda/12.2.1/local_installers/cuda_12.2.1_535.86.10_linux_ppc64le.run",
-        ),
-    },
-    "12.2.0": {
-        "Linux-aarch64": (
-            "9c90d79bb63952cd30f1f57f9f8fe11e7a8967bba6f824df45d3464b5d37e5d8",
-            "https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda_12.2.0_535.54.03_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "ecf3d2afadcbac029f0f4505785810d52d006e4b87ba79ff3f984336a2bbf518",
-            "https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda_12.2.0_535.54.03_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "f7b5fde5f727b51c380c6199200d0525e8585475944ff8ad2791d06734f54230",
-            "https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda_12.2.0_535.54.03_linux_ppc64le.run",
-        ),
-    },
-    "12.1.1": {
-        "Linux-aarch64": (
-            "45ea4cd860f0a26d3db8ce032530f2ee0b55abdd587545213d395a73623b4278",
-            "https://developer.download.nvidia.com/compute/cuda/12.1.1/local_installers/cuda_12.1.1_530.30.02_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "d74022d41d80105319dfa21beea39b77a5b9919539c0487a05caaf2446d6a70e",
-            "https://developer.download.nvidia.com/compute/cuda/12.1.1/local_installers/cuda_12.1.1_530.30.02_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "c5950381f2c01fd52692372fc8e51d599e940ada2af2c82c3cc854ecff933eae",
-            "https://developer.download.nvidia.com/compute/cuda/12.1.1/local_installers/cuda_12.1.1_530.30.02_linux_ppc64le.run",
-        ),
-    },
-    "12.1.0": {
-        "Linux-aarch64": (
-            "1d0dd884f5257c12471dc455dc1a4aee8d620191737c0b2e40f016d8adc9d009",
-            "https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "68699036c12d71adb9ad2799dce2ff070270fab4488b90920b9756ab3f52c41c",
-            "https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "8d75bd9da953a51062b89b8c752cffcf02b02c85cb461291d354ac2cffb2da48",
-            "https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux_ppc64le.run",
-        ),
-    },
-    "12.0.1": {
-        "Linux-aarch64": (
-            "835270a8db419b9dbaefc1bab8fe5caf6f2caf381975c4b0d35cc0718c26074a",
-            "https://developer.download.nvidia.com/compute/cuda/12.0.1/local_installers/cuda_12.0.1_525.85.12_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "1b205a06272f1463f477276fdab903f3f666917c068e520738001e69c7a1875b",
-            "https://developer.download.nvidia.com/compute/cuda/12.0.1/local_installers/cuda_12.0.1_525.85.12_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "1e81040223c25fd72895a1348e32463d7d0f5a7e74b5d2ace897220cb6d4d849",
-            "https://developer.download.nvidia.com/compute/cuda/12.0.1/local_installers/cuda_12.0.1_525.85.12_linux_ppc64le.run",
-        ),
-    },
-    "12.0.0": {
-        "Linux-aarch64": (
-            "cd13e9c65d4c8f895a968706f46064d536be09f9706bce081cc864b7e4fa4544",
-            "https://developer.download.nvidia.com/compute/cuda/12.0.0/local_installers/cuda_12.0.0_525.60.13_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "905e9b9516900839fb76064719db752439f38b8cb730b49335d8bd53ddfad392",
-            "https://developer.download.nvidia.com/compute/cuda/12.0.0/local_installers/cuda_12.0.0_525.60.13_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "117fe045c71668e45d41c6119b6f27875370c78e33fc56795b6fe014c796ec60",
-            "https://developer.download.nvidia.com/compute/cuda/12.0.0/local_installers/cuda_12.0.0_525.60.13_linux_ppc64le.run",
-        ),
-    },
-    "11.8.0": {
-        "Linux-aarch64": (
-            "e6e9a8d31163c9776b5e313fd7590877c5684e1ecddee741154f95704d4ed27c",
-            "https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "9223c4af3aebe4a7bbed9abd9b163b03a1b34b855fbc2b4a0d1b706ac09a5a16",
-            "https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "f917fb7617033223938543ad3ae923190d99507acc08a399d752a2868e87349d",
-            "https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux_ppc64le.run",
-        ),
-    },
-    "11.7.1": {
-        "Linux-aarch64": (
-            "1607b98c30cb8efa52b9c8f564ec92d26ee1922cb677740aafacce313e544ecd",
-            "https://developer.download.nvidia.com/compute/cuda/11.7.1/local_installers/cuda_11.7.1_515.65.01_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "52286a29706549b7d0feeb0e7e3eca1b15287c436a69fa880ad385b1be3e04db",
-            "https://developer.download.nvidia.com/compute/cuda/11.7.1/local_installers/cuda_11.7.1_515.65.01_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "f59fc381cbd903da55bfea9f81534bd4d20e3db716c332be3d2c4804efc2ec6b",
-            "https://developer.download.nvidia.com/compute/cuda/11.7.1/local_installers/cuda_11.7.1_515.65.01_linux_ppc64le.run",
-        ),
-    },
-    "11.7.0": {
-        "Linux-aarch64": (
-            "e777839a618ca9a3d5ad42ded43a1b6392af2321a7327635a4afcc986876a21b",
-            "https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda_11.7.0_515.43.04_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "087fdfcbba1f79543b1f78e43a8dfdac5f6db242d042dde820e16dc185892f26",
-            "https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda_11.7.0_515.43.04_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "74a507ac54067c258e6b7c9063c98d411116ecc5c5397b1f6e6a999e86dff08a",
-            "https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda_11.7.0_515.43.04_linux_ppc64le.run",
-        ),
-    },
-    "11.6.2": {
-        "Linux-aarch64": (
-            "b20c014c6bba36b13c50da167ad42e9bd1cea24f3b6297b495ea129c0889f36e",
-            "https://developer.download.nvidia.com/compute/cuda/11.6.2/local_installers/cuda_11.6.2_510.47.03_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "99b7a73dcc52a52cef4c1fceb4a60c3015ac9b6404082c1677d9efdaba1d4593",
-            "https://developer.download.nvidia.com/compute/cuda/11.6.2/local_installers/cuda_11.6.2_510.47.03_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "869232ff8dbf295a71609738ac9e1b0079ca75597b427f1c026f42b36896afe8",
-            "https://developer.download.nvidia.com/compute/cuda/11.6.2/local_installers/cuda_11.6.2_510.47.03_linux_ppc64le.run",
-        ),
-    },
-    "11.6.1": {
-        "Linux-aarch64": (
-            "80586b003d58030004d465f5331dc69ee26c95a29516fb2488ff10f034139cb2",
-            "https://developer.download.nvidia.com/compute/cuda/11.6.1/local_installers/cuda_11.6.1_510.47.03_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "ab219afce00b74200113269866fbff75ead037bcfc23551a8338c2684c984d7e",
-            "https://developer.download.nvidia.com/compute/cuda/11.6.1/local_installers/cuda_11.6.1_510.47.03_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "ef762efbc00b67d572823c6ec338cc2c0cf0c096f41e6bce18e8d4501f260956",
-            "https://developer.download.nvidia.com/compute/cuda/11.6.1/local_installers/cuda_11.6.1_510.47.03_linux_ppc64le.run",
-        ),
-    },
-    "11.6.0": {
-        "Linux-aarch64": (
-            "5898579f5e59b708520883cb161089f5e4f3426158d1e9f973c49d224085d1d2",
-            "https://developer.download.nvidia.com/compute/cuda/11.6.0/local_installers/cuda_11.6.0_510.39.01_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "1783da6d63970786040980b57fa3cb6420142159fc7d0e66f8f05c4905d98c83",
-            "https://developer.download.nvidia.com/compute/cuda/11.6.0/local_installers/cuda_11.6.0_510.39.01_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "c86b866a42baf59ddc6f1f4a79e6d77213c90749e77e574f0e0d796a749ab7d0",
-            "https://developer.download.nvidia.com/compute/cuda/11.6.0/local_installers/cuda_11.6.0_510.39.01_linux_ppc64le.run",
-        ),
-    },
-    "11.5.2": {
-        "Linux-aarch64": (
-            "31337c8bdc224fa1bd07bc4b6a745798392428118cc8ea0fa4446ee4ad47dd30",
-            "https://developer.download.nvidia.com/compute/cuda/11.5.2/local_installers/cuda_11.5.2_495.29.05_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "74959abf02bcba526f0a3aae322c7641b25da040ccd6236d07038f81997b73a6",
-            "https://developer.download.nvidia.com/compute/cuda/11.5.2/local_installers/cuda_11.5.2_495.29.05_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "45c468f430436b3e95d5e485a6ba0ec1fa2b23dc6c551c1307b79996ecf0a7ed",
-            "https://developer.download.nvidia.com/compute/cuda/11.5.2/local_installers/cuda_11.5.2_495.29.05_linux_ppc64le.run",
-        ),
-    },
-    "11.5.1": {
-        "Linux-aarch64": (
-            "73e1d0e97c7fa686efe7e00fb1e5f179372c4eec8e14d4f44ab58d5f6cf57f63",
-            "https://developer.download.nvidia.com/compute/cuda/11.5.1/local_installers/cuda_11.5.1_495.29.05_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "60bea2fc0fac95574015f865355afbf599422ec2c85554f5f052b292711a4bca",
-            "https://developer.download.nvidia.com/compute/cuda/11.5.1/local_installers/cuda_11.5.1_495.29.05_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "9e0e494d945634fe8ad3e12d7b91806aa4220ed27487bb211030d651b27c67a9",
-            "https://developer.download.nvidia.com/compute/cuda/11.5.1/local_installers/cuda_11.5.1_495.29.05_linux_ppc64le.run",
-        ),
-    },
-    "11.5.0": {
-        "Linux-aarch64": (
-            "6ea9d520cc956cc751a5ac54f4acc39109627f4e614dd0b1a82cc86f2aa7d8c4",
-            "https://developer.download.nvidia.com/compute/cuda/11.5.0/local_installers/cuda_11.5.0_495.29.05_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "ae0a1693d9497cf3d81e6948943e3794636900db71c98d58eefdacaf7f1a1e4c",
-            "https://developer.download.nvidia.com/compute/cuda/11.5.0/local_installers/cuda_11.5.0_495.29.05_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "95baefdc5adf165189407b119861ffb2e9800fd94d7fc81d10fb81ed36dc12db",
-            "https://developer.download.nvidia.com/compute/cuda/11.5.0/local_installers/cuda_11.5.0_495.29.05_linux_ppc64le.run",
-        ),
-    },
-    "11.4.4": {
-        "Linux-aarch64": (
-            "c5c08531e48e8fdc2704fa1c1f7195f2c7edd2ee10a466d0e24d05b77d109435",
-            "https://developer.download.nvidia.com/compute/cuda/11.4.4/local_installers/cuda_11.4.4_470.82.01_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "44545a7abb4b66dfc201dcad787b5e8352e5b7ddf3e3cc5b2e9177af419c25c8",
-            "https://developer.download.nvidia.com/compute/cuda/11.4.4/local_installers/cuda_11.4.4_470.82.01_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "c71cd4e6c05fde11c0485369a73e7f356080e7a18f0e3ad7244e8fc03a9dd3e2",
-            "https://developer.download.nvidia.com/compute/cuda/11.4.4/local_installers/cuda_11.4.4_470.82.01_linux_ppc64le.run",
-        ),
-    },
-    "11.4.3": {
-        "Linux-aarch64": (
-            "e02db34a487ea3de3eec9db80efd09f12eb69d55aca686cecaeae96a9747b1d4",
-            "https://developer.download.nvidia.com/compute/cuda/11.4.3/local_installers/cuda_11.4.3_470.82.01_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "749183821ffc051e123f12ebdeb171b263d55b86f0dd7c8f23611db1802d6c37",
-            "https://developer.download.nvidia.com/compute/cuda/11.4.3/local_installers/cuda_11.4.3_470.82.01_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "08f29cc3ed0b3b82dd9b007186237be2352bb552f99230c450a25e768f5754ee",
-            "https://developer.download.nvidia.com/compute/cuda/11.4.3/local_installers/cuda_11.4.3_470.82.01_linux_ppc64le.run",
-        ),
-    },
-    "11.4.2": {
-        "Linux-aarch64": (
-            "f2c4a52e06329606c8dfb7c5ea3f4cb4c0b28f9d3fdffeeb734fcc98daf580d8",
-            "https://developer.download.nvidia.com/compute/cuda/11.4.2/local_installers/cuda_11.4.2_470.57.02_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "bbd87ca0e913f837454a796367473513cddef555082e4d86ed9a38659cc81f0a",
-            "https://developer.download.nvidia.com/compute/cuda/11.4.2/local_installers/cuda_11.4.2_470.57.02_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "a917c2e53dc13fdda7def71fd40920bf3809d5a2caa3e9acfe377fb9fb22f12d",
-            "https://developer.download.nvidia.com/compute/cuda/11.4.2/local_installers/cuda_11.4.2_470.57.02_linux_ppc64le.run",
-        ),
-    },
-    "11.4.1": {
-        "Linux-aarch64": (
-            "8efa725a41dfd3c0c0f453c2dd535d149154102bf2b791718859417b4f84f922",
-            "https://developer.download.nvidia.com/compute/cuda/11.4.1/local_installers/cuda_11.4.1_470.57.02_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "dd6c339a719989d2518f5d54eeac1ed707d0673f8664ba0c4d4b2af7c3ba0005",
-            "https://developer.download.nvidia.com/compute/cuda/11.4.1/local_installers/cuda_11.4.1_470.57.02_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "dd92ca04f76ad938da3480e2901c0e52dbff6028ada63c09071ed9e3055dc361",
-            "https://developer.download.nvidia.com/compute/cuda/11.4.1/local_installers/cuda_11.4.1_470.57.02_linux_ppc64le.run",
-        ),
-    },
-    "11.4.0": {
-        "Linux-aarch64": (
-            "f0c8e80d98a601ddca031b6764459984366008c7d3847e7c7f99b36bd4438e3c",
-            "https://developer.download.nvidia.com/compute/cuda/11.4.0/local_installers/cuda_11.4.0_470.42.01_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "d219db30f7415a115a4ea22bdbb5984b0a18f7f891cad6074c5da45d223aaa4b",
-            "https://developer.download.nvidia.com/compute/cuda/11.4.0/local_installers/cuda_11.4.0_470.42.01_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "6eb2fd0d9d5bc39fb243b5e1789ff827f325d098cd1fbb828a0499552b9544cc",
-            "https://developer.download.nvidia.com/compute/cuda/11.4.0/local_installers/cuda_11.4.0_470.42.01_linux_ppc64le.run",
-        ),
-    },
-    "11.3.1": {
-        "Linux-aarch64": (
-            "39990d3da88b21289ac20850bc183f0b66275f32e1f562b551c05843bf506e4c",
-            "https://developer.download.nvidia.com/compute/cuda/11.3.1/local_installers/cuda_11.3.1_465.19.01_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "ad93ea98efced35855c58d3a0fc326377c60917cb3e8c017d3e6d88819bf2934",
-            "https://developer.download.nvidia.com/compute/cuda/11.3.1/local_installers/cuda_11.3.1_465.19.01_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "220f2c10a21500d62b03c6848c1659ebb3a8e10dc0915ab87b86b397058407c5",
-            "https://developer.download.nvidia.com/compute/cuda/11.3.1/local_installers/cuda_11.3.1_465.19.01_linux_ppc64le.run",
-        ),
-    },
-    "11.3.0": {
-        "Linux-aarch64": (
-            "f7b284cf055fcf18be9a9aa216e3c7968d3e011446eb0c7200a3353c223ce718",
-            "https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "262da7f77db177b153a6b70b5812210f3f72f00eb608ab9cf2a4582328c4bf5c",
-            "https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "c0010107933b575a87e27b1293e5dc32b74201486f4ae2f4c8695ea727d22857",
-            "https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux_ppc64le.run",
-        ),
-    },
-    "11.2.2": {
-        "Linux-aarch64": (
-            "2f915ad631331eebdafaabd971723a60290ae8bb090d771075b9e6a0b28cbae6",
-            "https://developer.download.nvidia.com/compute/cuda/11.2.2/local_installers/cuda_11.2.2_460.32.03_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "0a2e477224af7f6003b49edfd2bfee07667a8148fe3627cfd2765f6ad72fa19d",
-            "https://developer.download.nvidia.com/compute/cuda/11.2.2/local_installers/cuda_11.2.2_460.32.03_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "2304ec235fe5d1f8bf75f00dc2c2d11473759dc23428dbbd5fb5040bc8c757e3",
-            "https://developer.download.nvidia.com/compute/cuda/11.2.2/local_installers/cuda_11.2.2_460.32.03_linux_ppc64le.run",
-        ),
-    },
-    "11.2.1": {
-        "Linux-aarch64": (
-            "4b322fa6477d1a2cd2f2f526fa520c0f90bef2c264ef8435cb016bebb5456c5e",
-            "https://developer.download.nvidia.com/compute/cuda/11.2.1/local_installers/cuda_11.2.1_460.32.03_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "1da98cb897cc5f58a7445a4a66ca4f6926867706cb3af58a669cdcd8dc3d17c8",
-            "https://developer.download.nvidia.com/compute/cuda/11.2.1/local_installers/cuda_11.2.1_460.32.03_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "b3e8b6cd76872deb3acd050d32e197bc1c655e142b169070f0f9753680461a3f",
-            "https://developer.download.nvidia.com/compute/cuda/11.2.1/local_installers/cuda_11.2.1_460.32.03_linux_ppc64le.run",
-        ),
-    },
-    "11.2.0": {
-        "Linux-aarch64": (
-            "c11dc274660e9b47b0f25ca66861a7406246a7191f1b04d0710515fcac0fa6cd",
-            "https://developer.download.nvidia.com/compute/cuda/11.2.0/local_installers/cuda_11.2.0_460.27.04_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "9c50283241ac325d3085289ed9b9c170531369de41165ce271352d4a898cbdce",
-            "https://developer.download.nvidia.com/compute/cuda/11.2.0/local_installers/cuda_11.2.0_460.27.04_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "adc3267df5dbfdaf51cb4c9b227ba6bfd979a39d9b4136bba0eba6b1dd2a2731",
-            "https://developer.download.nvidia.com/compute/cuda/11.2.0/local_installers/cuda_11.2.0_460.27.04_linux_ppc64le.run",
-        ),
-    },
-    "11.1.1": {
-        "Linux-aarch64": (
-            "9ab1dbafba205c06bea8c88e38cdadb3038af19cb56e7b3ba734d3d7a84b8f02",
-            "https://developer.download.nvidia.com/compute/cuda/11.1.1/local_installers/cuda_11.1.1_455.32.00_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "3eae6727086024925ebbcef3e9a45ad379d8490768fd00f9c2d8b6fd9cd8dd8f",
-            "https://developer.download.nvidia.com/compute/cuda/11.1.1/local_installers/cuda_11.1.1_455.32.00_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "023e571fe26ee829c98138dfc305a92279854aac7d184d255fd58c06c6af3c17",
-            "https://developer.download.nvidia.com/compute/cuda/11.1.1/local_installers/cuda_11.1.1_455.32.00_linux_ppc64le.run",
-        ),
-    },
-    "11.1.0": {
-        "Linux-aarch64": (
-            "878cbd36c5897468ef28f02da50b2f546af0434a8a89d1c724a4d2013d6aa993",
-            "https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cuda_11.1.0_455.23.05_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "858cbab091fde94556a249b9580fadff55a46eafbcb4d4a741d2dcd358ab94a5",
-            "https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cuda_11.1.0_455.23.05_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "a561e6f7f659bc4100e4713523b0b8aad6b36aa77fac847f6423e7780c750064",
-            "https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cuda_11.1.0_455.23.05_linux_ppc64le.run",
-        ),
-    },
-    "11.0.3": {
-        "Linux-aarch64": (
-            "1e24f61f79c1043aa3d1d126ff6158daa03a62a51b5195a2ed5fbe75c3b718f3",
-            "https://developer.download.nvidia.com/compute/cuda/11.0.3/local_installers/cuda_11.0.3_450.51.06_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "b079c4e408adf88c3f1ffb8418a97dc4227c37935676b4bf4ca0beec6c328cc0",
-            "https://developer.download.nvidia.com/compute/cuda/11.0.3/local_installers/cuda_11.0.3_450.51.06_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "4775b21df004b1433bafff9b48a324075c008509f4c0fe28cd060d042d2e0794",
-            "https://developer.download.nvidia.com/compute/cuda/11.0.3/local_installers/cuda_11.0.3_450.51.06_linux_ppc64le.run",
-        ),
-    },
-    "11.0.2": {
-        "Linux-aarch64": (
-            "23851e30f7c47a1baad92891abde0adbc783de5962c7480b9725198ceacda4a0",
-            "https://developer.download.nvidia.com/compute/cuda/11.0.2/local_installers/cuda_11.0.2_450.51.05_linux_sbsa.run",
-        ),
-        "Linux-x86_64": (
-            "48247ada0e3f106051029ae8f70fbd0c238040f58b0880e55026374a959a69c1",
-            "https://developer.download.nvidia.com/compute/cuda/11.0.2/local_installers/cuda_11.0.2_450.51.05_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "db06d0f3fbf6f7aa1f106fc921ad1c86162210a26e8cb65b171c5240a3bf75da",
-            "https://developer.download.nvidia.com/compute/cuda/11.0.2/local_installers/cuda_11.0.2_450.51.05_linux_ppc64le.run",
-        ),
-    },
-    "10.2.89": {
-        "Linux-x86_64": (
-            "560d07fdcf4a46717f2242948cd4f92c5f9b6fc7eae10dd996614da913d5ca11",
-            "https://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "5227774fcb8b10bd2d8714f0a716a75d7a2df240a9f2a49beb76710b1c0fc619",
-            "https://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux_ppc64le.run",
-        ),
-    },
-    "10.1.243": {
-        "Linux-x86_64": (
-            "e7c22dc21278eb1b82f34a60ad7640b41ad3943d929bebda3008b72536855d31",
-            "https://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.243_418.87.00_linux.run",
-        ),
-        "Linux-ppc64le": (
-            "b198002eef010bab9e745ae98e47567c955d00cf34cc8f8d2f0a6feb810523bf",
-            "https://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.243_418.87.00_linux_ppc64le.run",
-        ),
-    },
-    "10.0.130": {
-        "Linux-x86_64": (
-            "92351f0e4346694d0fcb4ea1539856c9eb82060c25654463bfd8574ec35ee39a",
-            "https://developer.nvidia.com/compute/cuda/10.0/Prod/local_installers/cuda_10.0.130_410.48_linux",
-        )
-    },
-    "9.2.88": {
-        "Linux-x86_64": (
-            "8d02cc2a82f35b456d447df463148ac4cc823891be8820948109ad6186f2667c",
-            "https://developer.nvidia.com/compute/cuda/9.2/Prod/local_installers/cuda_9.2.88_396.26_linux",
-        )
-    },
-    "9.1.85": {
-        "Linux-x86_64": (
-            "8496c72b16fee61889f9281449b5d633d0b358b46579175c275d85c9205fe953",
-            "https://developer.nvidia.com/compute/cuda/9.1/Prod/local_installers/cuda_9.1.85_387.26_linux",
-        )
-    },
-    "9.0.176": {
-        "Linux-x86_64": (
-            "96863423feaa50b5c1c5e1b9ec537ef7ba77576a3986652351ae43e66bcd080c",
-            "https://developer.nvidia.com/compute/cuda/9.0/Prod/local_installers/cuda_9.0.176_384.81_linux-run",
-        )
-    },
-    "8.0.61": {
-        "Linux-x86_64": (
-            "9ceca9c2397f841024e03410bfd6eabfd72b384256fbed1c1e4834b5b0ce9dc4",
-            "https://developer.nvidia.com/compute/cuda/8.0/Prod2/local_installers/cuda_8.0.61_375.26_linux-run",
-        )
-    },
-    "8.0.44": {
-        "Linux-x86_64": (
-            "64dc4ab867261a0d690735c46d7cc9fc60d989da0d69dc04d1714e409cacbdf0",
-            "https://developer.nvidia.com/compute/cuda/8.0/prod/local_installers/cuda_8.0.44_linux-run",
-        )
-    },
-    "7.5.18": {
-        "Linux-x86_64": (
-            "08411d536741075131a1858a68615b8b73c51988e616e83b835e4632eea75eec",
-            "https://developer.download.nvidia.com/compute/cuda/7.5/Prod/local_installers/cuda_7.5.18_linux.run",
-        )
-    },
-    "6.5.14": {
-        "Linux-x86_64": (
-            "f3e527f34f317314fe8fcd8c85f10560729069298c0f73105ba89225db69da48",
-            "https://developer.download.nvidia.com/compute/cuda/6_5/rel/installers/cuda_6.5.14_linux_64.run",
-        )
-    },
-    "6.0.37": {
-        "Linux-x86_64": (
-            "991e436c7a6c94ec67cf44204d136adfef87baa3ded270544fa211179779bc40",
-            "https://developer.download.nvidia.com/compute/cuda/6_0/rel/installers/cuda_6.0.37_linux_64.run",
-        )
-    },
-}
-
-
-class Cuda(Package):
-    """CUDA is a parallel computing platform and programming model invented
-    by NVIDIA. It enables dramatic increases in computing performance by
-    harnessing the power of the graphics processing unit (GPU).
-
-    Note: This package does not currently install the drivers necessary
-    to run CUDA. These will need to be installed manually. See:
-    https://docs.nvidia.com/cuda/ for details."""
-
-    homepage = "https://developer.nvidia.com/cuda-zone"
-
-    maintainers("ax3l", "Rombur")
-    executables = ["^nvcc$"]
-
-    skip_version_audit = ["platform=darwin"]
-
-    for ver, packages in _versions.items():
-        key = "{0}-{1}".format(platform.system(), platform.machine())
-        pkg = packages.get(key)
-        if pkg:
-            if ver == preferred_ver:
-                version(ver, sha256=pkg[0], url=pkg[1], expand=False, preferred=True)
-            else:
-                version(ver, sha256=pkg[0], url=pkg[1], expand=False)
-
-    # macOS Mojave drops NVIDIA graphics card support -- official NVIDIA
-    # drivers do not exist for Mojave. See
-    # https://devtalk.nvidia.com/default/topic/1043070/announcements/faq-about-macos-10-14-mojave-nvidia-drivers/
-    # Note that a CUDA Toolkit installer does exist for macOS Mojave at
-    # https://developer.nvidia.com/compute/cuda/10.1/Prod1/local_installers/cuda_10.1.168_mac.dmg,
-    # but support for Mojave is dropped in later versions, and none of the
-    # macOS NVIDIA drivers at
-    # https://www.nvidia.com/en-us/drivers/cuda/mac-driver-archive/ mention
-    # Mojave support -- only macOS High Sierra 10.13 is supported.
-    conflicts("arch=darwin-mojave-x86_64")
-
-    variant(
-        "dev", default=False, description="Enable development dependencies, i.e to use cuda-gdb"
-    )
-    variant(
-        "allow-unsupported-compilers",
-        default=False,
-        sticky=True,
-        description="Allow unsupported host compiler and CUDA version combinations",
-    )
-
-    depends_on("libxml2", when="@10.1.243:")
-    # cuda-gdb needed libncurses.so.5 before 11.4.0
-    # see https://docs.nvidia.com/cuda/archive/11.3.1/cuda-gdb/index.html#common-issues-oss
-    # see https://docs.nvidia.com/cuda/archive/11.4.0/cuda-gdb/index.html#release-notes
-    depends_on("ncurses abi=5", type="run", when="@:11.3.99+dev")
-
-    provides("opencl@:1.2", when="@7:")
-    provides("opencl@:1.1", when="@:6")
-
-    @classmethod
-    def determine_version(cls, exe):
-        output = Executable(exe)("--version", output=str, error=str)
-        match = re.search(r"Cuda compilation tools, release .*?, V(\S+)", output)
-        return match.group(1) if match else None
-
-    def setup_build_environment(self, env):
-        if self.spec.satisfies("@:8.0.61"):
-            # Perl 5.26 removed current directory from module search path,
-            # CUDA 9 has a fix for this, but CUDA 8 and lower don't.
-            env.append_path("PERL5LIB", self.stage.source_path)
-
-        if self.spec.satisfies("@10.1.243:"):
-            libxml2_home = self.spec["libxml2"].prefix
-            env.set("LIBXML2HOME", libxml2_home)
-            env.append_path("LD_LIBRARY_PATH", libxml2_home.lib)
-
-    def setup_dependent_build_environment(self, env, dependent_spec):
-        env.set("CUDAHOSTCXX", dependent_spec.package.compiler.cxx)
-        env.set("CUDA_HOME", self.prefix)
-        env.set("NVHPC_CUDA_HOME", self.prefix)
-
-    @property
-    def cmake_prefix_paths(self):
-        cmake_prefix_paths = [self.prefix]
-        if self.spec.satisfies("target=x86_64:"):
-            cub_path = self.prefix.targets + "/x86_64-linux/lib/cmake"
-            cmake_prefix_paths.append(cub_path)
-        return cmake_prefix_paths
-
-    def setup_run_environment(self, env):
-        env.set("CUDA_HOME", self.prefix)
-        env.set("NVHPC_CUDA_HOME", self.prefix)
-
-    def install(self, spec, prefix):
-        if os.path.exists("/tmp/cuda-installer.log"):
-            try:
-                os.remove("/tmp/cuda-installer.log")
-            except OSError:
-                if spec.satisfies("@10.1:"):
-                    tty.die(
-                        "The cuda installer will segfault due to the "
-                        "presence of /tmp/cuda-installer.log "
-                        "please remove the file and try again "
-                    )
-        runfile = glob(join_path(self.stage.source_path, "cuda*_linux*"))[0]
-
-        # Note: NVIDIA does not officially support many newer versions of
-        # compilers.  For example, on CentOS 6, you must use GCC 4.4.7 or
-        # older. See:
-        # http://docs.nvidia.com/cuda/cuda-installation-guide-linux/#system-requirements
-        # https://gist.github.com/ax3l/9489132
-        # for details.
-
-        # CUDA 10.1 on ppc64le fails to copy some files, the workaround is adapted from
-        # https://forums.developer.nvidia.com/t/cuda-10-1-243-10-1-update-2-ppc64le-run-file-installation-issue/82433
-        # See also #21170
-        if spec.satisfies("@10.1.243") and platform.machine() == "ppc64le":
-            includedir = "targets/ppc64le-linux/include"
-            os.makedirs(os.path.join(prefix, includedir))
-            os.makedirs(os.path.join(prefix, "src"))
-            os.symlink(includedir, os.path.join(prefix, "include"))
-
-        install_shell = which("sh")
-
-        if self.spec.satisfies("@:8.0.61"):
-            # Perl 5.26 removed current directory from module search path.
-            # We are addressing this by exporting `PERL5LIB` earlier, but for some
-            # reason, it is not enough. One more file needs to be extracted before
-            # running the actual installer. This solution is one of the commonly
-            # found on the Internet, when people try to install CUDA <= 8 manually.
-            # For example: https://askubuntu.com/a/1087842
-            arguments = [runfile, "--tar", "mxvf", "./InstallUtils.pm"]
-            install_shell(*arguments)
-
-        # CUDA 10.1+ has different cmdline options for the installer
-        arguments = [
-            runfile,  # the install script
-            "--silent",  # disable interactive prompts
-            "--override",  # override compiler version checks
-            "--toolkit",  # install CUDA Toolkit
-        ]
-
-        if spec.satisfies("@7:"):
-            # use stage dir instead of /tmp
-            mkdir(join_path(self.stage.path, "tmp"))
-            arguments.append("--tmpdir=%s" % join_path(self.stage.path, "tmp"))
-
-        if spec.satisfies("@10.1:"):
-            arguments.append("--installpath=%s" % prefix)  # Where to install
-        else:
-            arguments.append("--verbose")  # Verbose log file
-            arguments.append("--toolkitpath=%s" % prefix)  # Where to install
-
-        install_shell(*arguments)
-
-        try:
-            os.remove("/tmp/cuda-installer.log")
-        except OSError:
-            pass
-
-    @property
-    def libs(self):
-        libs = find_libraries("libcudart", root=self.prefix, shared=True, recursive=True)
-
-        filtered_libs = []
-        # CUDA 10.0 provides Compatability libraries for running newer versions
-        # of CUDA with older drivers. These do not work with newer drivers.
-        for lib in libs:
-            parts = lib.split(os.sep)
-            if "compat" not in parts and "stubs" not in parts:
-                filtered_libs.append(lib)
-        return LibraryList(filtered_libs)
-
-    # Avoid binding stub libraries by absolute path
-    non_bindable_shared_objects = ["stubs"]
diff --git a/stackinator/repo/packages/gcc/gcc-backport.patch b/stackinator/repo/packages/gcc/gcc-backport.patch
deleted file mode 100644
index f9fab68f..00000000
--- a/stackinator/repo/packages/gcc/gcc-backport.patch
+++ /dev/null
@@ -1,138 +0,0 @@
-2016-02-20  Bernd Edlinger  <bernd.edlinger@hotmail.de>
-
-	Backported from mainline
-	2016-02-19  Jakub Jelinek  <jakub@redhat.com>
-		    Bernd Edlinger  <bernd.edlinger@hotmail.de>
-
-	* Make-lang.in: Invoke gperf with -L C++.
- 	* cfns.gperf: Remove prototypes for hash and libc_name_p
- 	inlines.
- 	* cfns.h: Regenerated.
-	* except.c (nothrow_libfn_p): Adjust.
-
-Index: gcc/cp/Make-lang.in
-===================================================================
---- a/gcc/cp/Make-lang.in	(revision 233574)
-+++ b/gcc/cp/Make-lang.in	(working copy)
-@@ -111,7 +111,7 @@ else
- # deleting the $(srcdir)/cp/cfns.h file.
- $(srcdir)/cp/cfns.h:
- endif
--	gperf -o -C -E -k '1-6,$$' -j1 -D -N 'libc_name_p' -L ANSI-C \
-+	gperf -o -C -E -k '1-6,$$' -j1 -D -N 'libc_name_p' -L C++ \
- 		$(srcdir)/cp/cfns.gperf --output-file $(srcdir)/cp/cfns.h
- 
- #
-Index: gcc/cp/cfns.gperf
-===================================================================
---- a/gcc/cp/cfns.gperf	(revision 233574)
-+++ b/gcc/cp/cfns.gperf	(working copy)
-@@ -1,3 +1,5 @@
-+%language=C++
-+%define class-name libc_name
- %{
- /* Copyright (C) 2000-2015 Free Software Foundation, Inc.
- 
-@@ -16,14 +18,6 @@ for more details.
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
--#ifdef __GNUC__
--__inline
--#endif
--static unsigned int hash (const char *, unsigned int);
--#ifdef __GNUC__
--__inline
--#endif
--const char * libc_name_p (const char *, unsigned int);
- %}
- %%
- # The standard C library functions, for feeding to gperf; the result is used
-Index: gcc/cp/cfns.h
-===================================================================
---- a/gcc/cp/cfns.h	(revision 233574)
-+++ b/gcc/cp/cfns.h	(working copy)
-@@ -1,5 +1,5 @@
--/* ANSI-C code produced by gperf version 3.0.3 */
--/* Command-line: gperf -o -C -E -k '1-6,$' -j1 -D -N libc_name_p -L ANSI-C cfns.gperf  */
-+/* C++ code produced by gperf version 3.0.4 */
-+/* Command-line: gperf -o -C -E -k '1-6,$' -j1 -D -N libc_name_p -L C++ --output-file cfns.h cfns.gperf  */
- 
- #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
-       && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
-@@ -28,7 +28,7 @@
- #error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
- #endif
- 
--#line 1 "cfns.gperf"
-+#line 3 "cfns.gperf"
- 
- /* Copyright (C) 2000-2015 Free Software Foundation, Inc.
- 
-@@ -47,26 +47,19 @@ for more details.
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
--#ifdef __GNUC__
--__inline
--#endif
--static unsigned int hash (const char *, unsigned int);
--#ifdef __GNUC__
--__inline
--#endif
--const char * libc_name_p (const char *, unsigned int);
- /* maximum key range = 391, duplicates = 0 */
- 
--#ifdef __GNUC__
--__inline
--#else
--#ifdef __cplusplus
--inline
--#endif
--#endif
--static unsigned int
--hash (register const char *str, register unsigned int len)
-+class libc_name
- {
-+private:
-+  static inline unsigned int hash (const char *str, unsigned int len);
-+public:
-+  static const char *libc_name_p (const char *str, unsigned int len);
-+};
-+
-+inline unsigned int
-+libc_name::hash (register const char *str, register unsigned int len)
-+{
-   static const unsigned short asso_values[] =
-     {
-       400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
-@@ -122,14 +115,8 @@ along with GCC; see the file COPYING3.  If not see
-   return hval + asso_values[(unsigned char)str[len - 1]];
- }
- 
--#ifdef __GNUC__
--__inline
--#ifdef __GNUC_STDC_INLINE__
--__attribute__ ((__gnu_inline__))
--#endif
--#endif
- const char *
--libc_name_p (register const char *str, register unsigned int len)
-+libc_name::libc_name_p (register const char *str, register unsigned int len)
- {
-   enum
-     {
-Index: gcc/cp/except.c
-===================================================================
---- a/gcc/cp/except.c	(revision 233574)
-+++ b/gcc/cp/except.c	(working copy)
-@@ -1040,7 +1040,8 @@ nothrow_libfn_p (const_tree fn)
-      unless the system headers are playing rename tricks, and if
-      they are, we don't want to be confused by them.  */
-   id = DECL_NAME (fn);
--  return !!libc_name_p (IDENTIFIER_POINTER (id), IDENTIFIER_LENGTH (id));
-+  return !!libc_name::libc_name_p (IDENTIFIER_POINTER (id),
-+				   IDENTIFIER_LENGTH (id));
- }
- 
- /* Returns nonzero if an exception of type FROM will be caught by a
diff --git a/stackinator/repo/packages/gcc/glibc-2.31-libsanitizer-1-gcc-6.patch b/stackinator/repo/packages/gcc/glibc-2.31-libsanitizer-1-gcc-6.patch
deleted file mode 100644
index 4187b812..00000000
--- a/stackinator/repo/packages/gcc/glibc-2.31-libsanitizer-1-gcc-6.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From ce9568e9e9cf6094be30e748821421e703754ffc Mon Sep 17 00:00:00 2001
-From: Jakub Jelinek <jakub@redhat.com>
-Date: Fri, 8 Nov 2019 19:53:18 +0100
-Subject: [PATCH] backport: re PR sanitizer/92154 (new glibc breaks arm
- bootstrap due to libsanitizer)
-
-	Backported from mainline
-	2019-10-22  Tamar Christina  <tamar.christina@arm.com>
-	Backported for version 5.3.0 <= gcc <= 6.5.0
-	2020-06-05  John L. Jolly  <john.jolly@gmail.com>
-
-	PR sanitizer/92154
-	* sanitizer_common/sanitizer_platform_limits_posix.cc:
-	Cherry-pick compiler-rt revision r375220.
-
-From-SVN: r277981
----
- libsanitizer/ChangeLog                                   | 9 +++++++++
- .../sanitizer_common/sanitizer_platform_limits_posix.cc  | 6 +++++-
- 2 files changed, 14 insertions(+), 1 deletion(-)
-
-diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
-index 6cd4a5bac8b0..06a605ff4670 100644
---- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
-+++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
-@@ -1130,8 +1130,12 @@ CHECK_SIZE_AND_OFFSET(ipc_perm, uid);
- #ifndef __GLIBC_PREREQ
- #define __GLIBC_PREREQ(x, y) 0
- #endif
--#if !defined(__aarch64__) || !SANITIZER_LINUX || __GLIBC_PREREQ (2, 21)
-+#if (!defined(__aarch64__) || !SANITIZER_LINUX || __GLIBC_PREREQ (2, 21)) && \
-+    !defined(__arm__)
- /* On aarch64 glibc 2.20 and earlier provided incorrect mode field.  */
-+/* On Arm glibc 2.31 and later provide a different mode field, this field is
-+   never used by libsanitizer so we can simply ignore this assert for all glibc
-+   versions.  */
- CHECK_SIZE_AND_OFFSET(ipc_perm, mode);
- #endif
- 
diff --git a/stackinator/repo/packages/gcc/glibc-2.31-libsanitizer-1.patch b/stackinator/repo/packages/gcc/glibc-2.31-libsanitizer-1.patch
deleted file mode 100644
index 96037707..00000000
--- a/stackinator/repo/packages/gcc/glibc-2.31-libsanitizer-1.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From ce9568e9e9cf6094be30e748821421e703754ffc Mon Sep 17 00:00:00 2001
-From: Jakub Jelinek <jakub@redhat.com>
-Date: Fri, 8 Nov 2019 19:53:18 +0100
-Subject: [PATCH] backport: re PR sanitizer/92154 (new glibc breaks arm
- bootstrap due to libsanitizer)
-
-	Backported from mainline
-	2019-10-22  Tamar Christina  <tamar.christina@arm.com>
-
-	PR sanitizer/92154
-	* sanitizer_common/sanitizer_platform_limits_posix.cc:
-	Cherry-pick compiler-rt revision r375220.
-
-From-SVN: r277981
----
- libsanitizer/ChangeLog                                   | 9 +++++++++
- .../sanitizer_common/sanitizer_platform_limits_posix.cc  | 6 +++++-
- 2 files changed, 14 insertions(+), 1 deletion(-)
-
-diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
-index 6cd4a5bac8b0..06a605ff4670 100644
---- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
-+++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
-@@ -1156,8 +1156,12 @@ CHECK_SIZE_AND_OFFSET(ipc_perm, uid);
- CHECK_SIZE_AND_OFFSET(ipc_perm, gid);
- CHECK_SIZE_AND_OFFSET(ipc_perm, cuid);
- CHECK_SIZE_AND_OFFSET(ipc_perm, cgid);
--#if !defined(__aarch64__) || !SANITIZER_LINUX || __GLIBC_PREREQ (2, 21)
-+#if (!defined(__aarch64__) || !SANITIZER_LINUX || __GLIBC_PREREQ (2, 21)) && \
-+    !defined(__arm__)
- /* On aarch64 glibc 2.20 and earlier provided incorrect mode field.  */
-+/* On Arm glibc 2.31 and later provide a different mode field, this field is
-+   never used by libsanitizer so we can simply ignore this assert for all glibc
-+   versions.  */
- CHECK_SIZE_AND_OFFSET(ipc_perm, mode);
- #endif
- 
diff --git a/stackinator/repo/packages/gcc/glibc-2.31-libsanitizer-2-gcc-6.patch b/stackinator/repo/packages/gcc/glibc-2.31-libsanitizer-2-gcc-6.patch
deleted file mode 100644
index 755db173..00000000
--- a/stackinator/repo/packages/gcc/glibc-2.31-libsanitizer-2-gcc-6.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-From 75003cdd23c310ec385344e8040d490e8dd6d2be Mon Sep 17 00:00:00 2001
-From: Jakub Jelinek <jakub@redhat.com>
-Date: Fri, 20 Dec 2019 17:58:35 +0100
-Subject: [PATCH] backport: re PR sanitizer/92154 (new glibc breaks arm
- bootstrap due to libsanitizer)
-
-	Backported from mainline
-	2019-11-26  Jakub Jelinek  <jakub@redhat.com>
-	Backported for version 5.3.0 <= gcc <= 6.5.0
-	2020-06-05  John L. Jolly  <john.jolly@gmail.com>
-
-	PR sanitizer/92154
-	* sanitizer_common/sanitizer_platform_limits_posix.h: Cherry-pick
-	llvm-project revision 947f9692440836dcb8d88b74b69dd379d85974ce.
-	* sanitizer_common/sanitizer_platform_limits_posix.cc: Likewise.
-
-From-SVN: r279653
----
- libsanitizer/ChangeLog                            | 10 ++++++++++
- .../sanitizer_platform_limits_posix.cc            |  9 +++------
- .../sanitizer_platform_limits_posix.h             | 15 +--------------
- 3 files changed, 14 insertions(+), 20 deletions(-)
-
-diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
-index 06a605ff4670..d823a12190c0 100644
---- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
-+++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
-@@ -1130,12 +1130,9 @@ CHECK_SIZE_AND_OFFSET(ipc_perm, uid);
- #ifndef __GLIBC_PREREQ
- #define __GLIBC_PREREQ(x, y) 0
- #endif
--#if (!defined(__aarch64__) || !SANITIZER_LINUX || __GLIBC_PREREQ (2, 21)) && \
--    !defined(__arm__)
--/* On aarch64 glibc 2.20 and earlier provided incorrect mode field.  */
--/* On Arm glibc 2.31 and later provide a different mode field, this field is
--   never used by libsanitizer so we can simply ignore this assert for all glibc
--   versions.  */
-+#if !SANITIZER_LINUX || __GLIBC_PREREQ (2, 31)
-+/* glibc 2.30 and earlier provided 16-bit mode field instead of 32-bit
-+   on many architectures.  */
- CHECK_SIZE_AND_OFFSET(ipc_perm, mode);
- #endif
- 
-diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h
-index 73af92af1e8f..6a673a7c9959 100644
---- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h
-+++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h
-@@ -211,20 +211,13 @@ namespace __sanitizer {
-     unsigned long __unused1;
-     unsigned long __unused2;
- #elif defined(__sparc__)
--# if defined(__arch64__)
-     unsigned mode;
--    unsigned short __pad1;
--# else
--    unsigned short __pad1;
--    unsigned short mode;
-     unsigned short __pad2;
--# endif
-     unsigned short __seq;
-     unsigned long long __unused1;
-     unsigned long long __unused2;
- #else
--    unsigned short mode;
--    unsigned short __pad1;
-+    unsigned int mode;
-     unsigned short __seq;
-     unsigned short __pad2;
- #if defined(__x86_64__) && !defined(_LP64)
diff --git a/stackinator/repo/packages/gcc/glibc-2.31-libsanitizer-2-gcc-7.patch b/stackinator/repo/packages/gcc/glibc-2.31-libsanitizer-2-gcc-7.patch
deleted file mode 100644
index 07cbb3fd..00000000
--- a/stackinator/repo/packages/gcc/glibc-2.31-libsanitizer-2-gcc-7.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-From 75003cdd23c310ec385344e8040d490e8dd6d2be Mon Sep 17 00:00:00 2001
-From: Jakub Jelinek <jakub@redhat.com>
-Date: Fri, 20 Dec 2019 17:58:35 +0100
-Subject: [PATCH] backport: re PR sanitizer/92154 (new glibc breaks arm
- bootstrap due to libsanitizer)
-
-	Backported from mainline
-	2019-11-26  Jakub Jelinek  <jakub@redhat.com>
-	Backported for version 7.1.0 <= gcc <= 7.4.0
-	2020-06-05  John L. Jolly  <john.jolly@gmail.com>
-
-	PR sanitizer/92154
-	* sanitizer_common/sanitizer_platform_limits_posix.h: Cherry-pick
-	llvm-project revision 947f9692440836dcb8d88b74b69dd379d85974ce.
-	* sanitizer_common/sanitizer_platform_limits_posix.cc: Likewise.
-
-From-SVN: r279653
----
- libsanitizer/ChangeLog                            | 10 ++++++++++
- .../sanitizer_platform_limits_posix.cc            |  9 +++------
- .../sanitizer_platform_limits_posix.h             | 15 +--------------
- 3 files changed, 14 insertions(+), 20 deletions(-)
-
-diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
-index 06a605ff4670..d823a12190c0 100644
---- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
-+++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
-@@ -1156,12 +1156,9 @@ CHECK_SIZE_AND_OFFSET(ipc_perm, uid);
- CHECK_SIZE_AND_OFFSET(ipc_perm, gid);
- CHECK_SIZE_AND_OFFSET(ipc_perm, cuid);
- CHECK_SIZE_AND_OFFSET(ipc_perm, cgid);
--#if (!defined(__aarch64__) || !SANITIZER_LINUX || __GLIBC_PREREQ (2, 21)) && \
--    !defined(__arm__)
--/* On aarch64 glibc 2.20 and earlier provided incorrect mode field.  */
--/* On Arm glibc 2.31 and later provide a different mode field, this field is
--   never used by libsanitizer so we can simply ignore this assert for all glibc
--   versions.  */
-+#if !SANITIZER_LINUX || __GLIBC_PREREQ (2, 31)
-+/* glibc 2.30 and earlier provided 16-bit mode field instead of 32-bit
-+   on many architectures.  */
- CHECK_SIZE_AND_OFFSET(ipc_perm, mode);
- #endif
- 
-diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h
-index 73af92af1e8f..6a673a7c9959 100644
---- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h
-+++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h
-@@ -211,20 +211,13 @@ namespace __sanitizer {
-     unsigned long __unused1;
-     unsigned long __unused2;
- #elif defined(__sparc__)
--# if defined(__arch64__)
-     unsigned mode;
--    unsigned short __pad1;
--# else
--    unsigned short __pad1;
--    unsigned short mode;
-     unsigned short __pad2;
--# endif
-     unsigned short __seq;
-     unsigned long long __unused1;
-     unsigned long long __unused2;
- #else
--    unsigned short mode;
--    unsigned short __pad1;
-+    unsigned int mode;
-     unsigned short __seq;
-     unsigned short __pad2;
- #if defined(__x86_64__) && !defined(_LP64)
diff --git a/stackinator/repo/packages/gcc/glibc-2.31-libsanitizer-2.patch b/stackinator/repo/packages/gcc/glibc-2.31-libsanitizer-2.patch
deleted file mode 100644
index 75234436..00000000
--- a/stackinator/repo/packages/gcc/glibc-2.31-libsanitizer-2.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-From 75003cdd23c310ec385344e8040d490e8dd6d2be Mon Sep 17 00:00:00 2001
-From: Jakub Jelinek <jakub@redhat.com>
-Date: Fri, 20 Dec 2019 17:58:35 +0100
-Subject: [PATCH] backport: re PR sanitizer/92154 (new glibc breaks arm
- bootstrap due to libsanitizer)
-
-	Backported from mainline
-	2019-11-26  Jakub Jelinek  <jakub@redhat.com>
-
-	PR sanitizer/92154
-	* sanitizer_common/sanitizer_platform_limits_posix.h: Cherry-pick
-	llvm-project revision 947f9692440836dcb8d88b74b69dd379d85974ce.
-	* sanitizer_common/sanitizer_platform_limits_posix.cc: Likewise.
-
-From-SVN: r279653
----
- libsanitizer/ChangeLog                            | 10 ++++++++++
- .../sanitizer_platform_limits_posix.cc            |  9 +++------
- .../sanitizer_platform_limits_posix.h             | 15 +--------------
- 3 files changed, 14 insertions(+), 20 deletions(-)
-
-diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
-index 06a605ff4670..d823a12190c0 100644
---- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
-+++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
-@@ -1156,12 +1156,9 @@ CHECK_SIZE_AND_OFFSET(ipc_perm, uid);
- CHECK_SIZE_AND_OFFSET(ipc_perm, gid);
- CHECK_SIZE_AND_OFFSET(ipc_perm, cuid);
- CHECK_SIZE_AND_OFFSET(ipc_perm, cgid);
--#if (!defined(__aarch64__) || !SANITIZER_LINUX || __GLIBC_PREREQ (2, 21)) && \
--    !defined(__arm__)
--/* On aarch64 glibc 2.20 and earlier provided incorrect mode field.  */
--/* On Arm glibc 2.31 and later provide a different mode field, this field is
--   never used by libsanitizer so we can simply ignore this assert for all glibc
--   versions.  */
-+#if !SANITIZER_LINUX || __GLIBC_PREREQ (2, 31)
-+/* glibc 2.30 and earlier provided 16-bit mode field instead of 32-bit
-+   on many architectures.  */
- CHECK_SIZE_AND_OFFSET(ipc_perm, mode);
- #endif
- 
-diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h
-index 73af92af1e8f..6a673a7c9959 100644
---- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h
-+++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h
-@@ -211,26 +211,13 @@ namespace __sanitizer {
-     u64 __unused1;
-     u64 __unused2;
- #elif defined(__sparc__)
--#if defined(__arch64__)
-     unsigned mode;
--    unsigned short __pad1;
--#else
--    unsigned short __pad1;
--    unsigned short mode;
-     unsigned short __pad2;
--#endif
-     unsigned short __seq;
-     unsigned long long __unused1;
-     unsigned long long __unused2;
--#elif defined(__mips__) || defined(__aarch64__) || defined(__s390x__)
--    unsigned int mode;
--    unsigned short __seq;
--    unsigned short __pad1;
--    unsigned long __unused1;
--    unsigned long __unused2;
- #else
--    unsigned short mode;
--    unsigned short __pad1;
-+    unsigned int mode;
-     unsigned short __seq;
-     unsigned short __pad2;
- #if defined(__x86_64__) && !defined(_LP64)
diff --git a/stackinator/repo/packages/gcc/glibc-2.31-libsanitizer-3-gcc-5.patch b/stackinator/repo/packages/gcc/glibc-2.31-libsanitizer-3-gcc-5.patch
deleted file mode 100644
index e1df265a..00000000
--- a/stackinator/repo/packages/gcc/glibc-2.31-libsanitizer-3-gcc-5.patch
+++ /dev/null
@@ -1,81 +0,0 @@
-diff -ru a/libsanitizer/sanitizer_common/sanitizer_common_interceptors_ioctl.inc b/libsanitizer/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
---- a/libsanitizer/sanitizer_common/sanitizer_common_interceptors_ioctl.inc	2014-09-23 17:59:53.000000000 +0000
-+++ b/libsanitizer/sanitizer_common/sanitizer_common_interceptors_ioctl.inc	2021-10-30 19:48:38.690007561 +0000
-@@ -358,15 +358,6 @@
- 
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
-   // _(SIOCDEVPLIP, WRITE, struct_ifreq_sz); // the same as EQL_ENSLAVE
--  _(CYGETDEFTHRESH, WRITE, sizeof(int));
--  _(CYGETDEFTIMEOUT, WRITE, sizeof(int));
--  _(CYGETMON, WRITE, struct_cyclades_monitor_sz);
--  _(CYGETTHRESH, WRITE, sizeof(int));
--  _(CYGETTIMEOUT, WRITE, sizeof(int));
--  _(CYSETDEFTHRESH, NONE, 0);
--  _(CYSETDEFTIMEOUT, NONE, 0);
--  _(CYSETTHRESH, NONE, 0);
--  _(CYSETTIMEOUT, NONE, 0);
-   _(EQL_EMANCIPATE, WRITE, struct_ifreq_sz);
-   _(EQL_ENSLAVE, WRITE, struct_ifreq_sz);
-   _(EQL_GETMASTRCFG, WRITE, struct_ifreq_sz);
-diff -ru a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
---- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc	2021-10-30 19:40:51.805824323 +0000
-+++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc	2021-10-30 19:51:13.640403192 +0000
-@@ -143,7 +143,6 @@
- #include <sys/statvfs.h>
- #include <sys/timex.h>
- #include <sys/user.h>
--#include <linux/cyclades.h>
- #include <linux/if_eql.h>
- #include <linux/if_plip.h>
- #include <linux/lp.h>
-@@ -392,7 +391,6 @@
- 
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
-   unsigned struct_ax25_parms_struct_sz = sizeof(struct ax25_parms_struct);
--  unsigned struct_cyclades_monitor_sz = sizeof(struct cyclades_monitor);
- #if EV_VERSION > (0x010000)
-   unsigned struct_input_keymap_entry_sz = sizeof(struct input_keymap_entry);
- #else
-@@ -759,15 +757,6 @@
- #endif  // SANITIZER_LINUX || SANITIZER_FREEBSD
- 
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
--  unsigned IOCTL_CYGETDEFTHRESH = CYGETDEFTHRESH;
--  unsigned IOCTL_CYGETDEFTIMEOUT = CYGETDEFTIMEOUT;
--  unsigned IOCTL_CYGETMON = CYGETMON;
--  unsigned IOCTL_CYGETTHRESH = CYGETTHRESH;
--  unsigned IOCTL_CYGETTIMEOUT = CYGETTIMEOUT;
--  unsigned IOCTL_CYSETDEFTHRESH = CYSETDEFTHRESH;
--  unsigned IOCTL_CYSETDEFTIMEOUT = CYSETDEFTIMEOUT;
--  unsigned IOCTL_CYSETTHRESH = CYSETTHRESH;
--  unsigned IOCTL_CYSETTIMEOUT = CYSETTIMEOUT;
-   unsigned IOCTL_EQL_EMANCIPATE = EQL_EMANCIPATE;
-   unsigned IOCTL_EQL_ENSLAVE = EQL_ENSLAVE;
-   unsigned IOCTL_EQL_GETMASTRCFG = EQL_GETMASTRCFG;
-diff -ru a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h
---- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h	2021-10-30 19:40:51.698824053 +0000
-+++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h	2021-10-30 19:51:39.680469814 +0000
-@@ -875,7 +875,6 @@
- 
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
-   extern unsigned struct_ax25_parms_struct_sz;
--  extern unsigned struct_cyclades_monitor_sz;
-   extern unsigned struct_input_keymap_entry_sz;
-   extern unsigned struct_ipx_config_data_sz;
-   extern unsigned struct_kbdiacrs_sz;
-@@ -1220,15 +1219,6 @@
- #endif  // SANITIZER_LINUX || SANITIZER_FREEBSD
- 
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
--  extern unsigned IOCTL_CYGETDEFTHRESH;
--  extern unsigned IOCTL_CYGETDEFTIMEOUT;
--  extern unsigned IOCTL_CYGETMON;
--  extern unsigned IOCTL_CYGETTHRESH;
--  extern unsigned IOCTL_CYGETTIMEOUT;
--  extern unsigned IOCTL_CYSETDEFTHRESH;
--  extern unsigned IOCTL_CYSETDEFTIMEOUT;
--  extern unsigned IOCTL_CYSETTHRESH;
--  extern unsigned IOCTL_CYSETTIMEOUT;
-   extern unsigned IOCTL_EQL_EMANCIPATE;
-   extern unsigned IOCTL_EQL_ENSLAVE;
-   extern unsigned IOCTL_EQL_GETMASTRCFG;
diff --git a/stackinator/repo/packages/gcc/glibc-2.36-libsanitizer-gcc-10-12.patch b/stackinator/repo/packages/gcc/glibc-2.36-libsanitizer-gcc-10-12.patch
deleted file mode 100644
index 90df6b04..00000000
--- a/stackinator/repo/packages/gcc/glibc-2.36-libsanitizer-gcc-10-12.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp
-index badf6a401cc..b43733033a6 100644
---- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp
-+++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp
-@@ -72,7 +72,6 @@
- #include <sys/vt.h>
- #include <linux/cdrom.h>
- #include <linux/fd.h>
--#include <linux/fs.h>
- #include <linux/hdreg.h>
- #include <linux/input.h>
- #include <linux/ioctl.h>
-@@ -822,10 +821,10 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
-   unsigned IOCTL_EVIOCGPROP = IOCTL_NOT_PRESENT;
-   unsigned IOCTL_EVIOCSKEYCODE_V2 = IOCTL_NOT_PRESENT;
- #endif
--  unsigned IOCTL_FS_IOC_GETFLAGS = FS_IOC_GETFLAGS;
--  unsigned IOCTL_FS_IOC_GETVERSION = FS_IOC_GETVERSION;
--  unsigned IOCTL_FS_IOC_SETFLAGS = FS_IOC_SETFLAGS;
--  unsigned IOCTL_FS_IOC_SETVERSION = FS_IOC_SETVERSION;
-+  unsigned IOCTL_FS_IOC_GETFLAGS = _IOR('f', 1, long);
-+  unsigned IOCTL_FS_IOC_GETVERSION = _IOR('v', 1, long);
-+  unsigned IOCTL_FS_IOC_SETFLAGS = _IOW('f', 2, long);
-+  unsigned IOCTL_FS_IOC_SETVERSION = _IOW('v', 2, long);
-   unsigned IOCTL_GIO_CMAP = GIO_CMAP;
-   unsigned IOCTL_GIO_FONT = GIO_FONT;
-   unsigned IOCTL_GIO_UNIMAP = GIO_UNIMAP;
diff --git a/stackinator/repo/packages/gcc/glibc-2.36-libsanitizer-gcc-5-9.patch b/stackinator/repo/packages/gcc/glibc-2.36-libsanitizer-gcc-5-9.patch
deleted file mode 100644
index 2cd2bc4e..00000000
--- a/stackinator/repo/packages/gcc/glibc-2.36-libsanitizer-gcc-5-9.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
-index e8fce8a02..5122baa46 100644
---- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
-+++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
-@@ -65,7 +65,6 @@
- #include <sys/vt.h>
- #include <linux/cdrom.h>
- #include <linux/fd.h>
--#include <linux/fs.h>
- #include <linux/hdreg.h>
- #include <linux/input.h>
- #include <linux/ioctl.h>
-@@ -846,10 +845,10 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
-   unsigned IOCTL_EVIOCGPROP = IOCTL_NOT_PRESENT;
-   unsigned IOCTL_EVIOCSKEYCODE_V2 = IOCTL_NOT_PRESENT;
- #endif
--  unsigned IOCTL_FS_IOC_GETFLAGS = FS_IOC_GETFLAGS;
--  unsigned IOCTL_FS_IOC_GETVERSION = FS_IOC_GETVERSION;
--  unsigned IOCTL_FS_IOC_SETFLAGS = FS_IOC_SETFLAGS;
--  unsigned IOCTL_FS_IOC_SETVERSION = FS_IOC_SETVERSION;
-+  unsigned IOCTL_FS_IOC_GETFLAGS = _IOR('f', 1, long);
-+  unsigned IOCTL_FS_IOC_GETVERSION = _IOR('v', 1, long);
-+  unsigned IOCTL_FS_IOC_SETFLAGS = _IOW('f', 2, long);
-+  unsigned IOCTL_FS_IOC_SETVERSION = _IOW('v', 2, long);
-   unsigned IOCTL_GIO_CMAP = GIO_CMAP;
-   unsigned IOCTL_GIO_FONT = GIO_FONT;
-   unsigned IOCTL_GIO_UNIMAP = GIO_UNIMAP;
diff --git a/stackinator/repo/packages/gcc/package.py b/stackinator/repo/packages/gcc/package.py
deleted file mode 100644
index f9ff5b9f..00000000
--- a/stackinator/repo/packages/gcc/package.py
+++ /dev/null
@@ -1,1189 +0,0 @@
-# Copyright 2013-2024 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)
-import glob
-import itertools
-import os
-import re
-import sys
-
-from archspec.cpu import UnsupportedMicroarchitecture
-
-import llnl.util.tty as tty
-from llnl.util.lang import classproperty
-from llnl.util.symlink import readlink
-
-import spack.platforms
-import spack.util.executable
-from spack.build_environment import dso_suffix
-from spack.operating_systems.mac_os import macos_sdk_path, macos_version
-from spack.package import *
-
-
-class Gcc(AutotoolsPackage, GNUMirrorPackage):
-    """The GNU Compiler Collection includes front ends for C, C++, Objective-C,
-    Fortran, Ada, and Go, as well as libraries for these languages."""
-
-    homepage = "https://gcc.gnu.org"
-    gnu_mirror_path = "gcc/gcc-9.2.0/gcc-9.2.0.tar.xz"
-    git = "git://gcc.gnu.org/git/gcc.git"
-    list_url = "https://ftp.gnu.org/gnu/gcc/"
-    list_depth = 1
-    keep_werror = "all"
-
-    maintainers("michaelkuhn", "alalazo")
-
-    license("GPL-2.0-or-later AND LGPL-2.1-or-later")
-
-    version("master", branch="master")
-
-    version("13.2.0", sha256="e275e76442a6067341a27f04c5c6b83d8613144004c0413528863dc6b5c743da")
-    version("13.1.0", sha256="61d684f0aa5e76ac6585ad8898a2427aade8979ed5e7f85492286c4dfc13ee86")
-
-    version("12.3.0", sha256="949a5d4f99e786421a93b532b22ffab5578de7321369975b91aec97adfda8c3b")
-    version("12.2.0", sha256="e549cf9cf3594a00e27b6589d4322d70e0720cdd213f39beb4181e06926230ff")
-    version("12.1.0", sha256="62fd634889f31c02b64af2c468f064b47ad1ca78411c45abe6ac4b5f8dd19c7b")
-
-    version("11.4.0", sha256="3f2db222b007e8a4a23cd5ba56726ef08e8b1f1eb2055ee72c1402cea73a8dd9")
-    version("11.3.0", sha256="b47cf2818691f5b1e21df2bb38c795fac2cfbd640ede2d0a5e1c89e338a3ac39")
-    version("11.2.0", sha256="d08edc536b54c372a1010ff6619dd274c0f1603aa49212ba20f7aa2cda36fa8b")
-    version("11.1.0", sha256="4c4a6fb8a8396059241c2e674b85b351c26a5d678274007f076957afa1cc9ddf")
-
-    version("10.5.0", sha256="25109543fdf46f397c347b5d8b7a2c7e5694a5a51cce4b9c6e1ea8a71ca307c1")
-    version("10.4.0", sha256="c9297d5bcd7cb43f3dfc2fed5389e948c9312fd962ef6a4ce455cff963ebe4f1")
-    version("10.3.0", sha256="64f404c1a650f27fc33da242e1f2df54952e3963a49e06e73f6940f3223ac344")
-    version("10.2.0", sha256="b8dd4368bb9c7f0b98188317ee0254dd8cc99d1e3a18d0ff146c855fe16c1d8c")
-    version("10.1.0", sha256="b6898a23844b656f1b68691c5c012036c2e694ac4b53a8918d4712ad876e7ea2")
-
-    version("9.5.0", sha256="27769f64ef1d4cd5e2be8682c0c93f9887983e6cfd1a927ce5a0a2915a95cf8f")
-    version("9.4.0", sha256="c95da32f440378d7751dd95533186f7fc05ceb4fb65eb5b85234e6299eb9838e")
-    version("9.3.0", sha256="71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1")
-    version("9.2.0", sha256="ea6ef08f121239da5695f76c9b33637a118dcf63e24164422231917fa61fb206")
-    version("9.1.0", sha256="79a66834e96a6050d8fe78db2c3b32fb285b230b855d0a66288235bc04b327a0")
-
-    version("8.5.0", sha256="d308841a511bb830a6100397b0042db24ce11f642dab6ea6ee44842e5325ed50")
-    version("8.4.0", sha256="e30a6e52d10e1f27ed55104ad233c30bd1e99cfb5ff98ab022dc941edd1b2dd4")
-    version("8.3.0", sha256="64baadfe6cc0f4947a84cb12d7f0dfaf45bb58b7e92461639596c21e02d97d2c")
-    version("8.2.0", sha256="196c3c04ba2613f893283977e6011b2345d1cd1af9abeac58e916b1aab3e0080")
-    version("8.1.0", sha256="1d1866f992626e61349a1ccd0b8d5253816222cdc13390dcfaa74b093aa2b153")
-
-    version("7.5.0", sha256="b81946e7f01f90528a1f7352ab08cc602b9ccc05d4e44da4bd501c5a189ee661")
-    version("7.4.0", sha256="eddde28d04f334aec1604456e536416549e9b1aa137fc69204e65eb0c009fe51")
-    version("7.3.0", sha256="832ca6ae04636adbb430e865a1451adf6979ab44ca1c8374f61fba65645ce15c")
-    version("7.2.0", sha256="1cf7adf8ff4b5aa49041c8734bbcf1ad18cc4c94d0029aae0f4e48841088479a")
-    version("7.1.0", sha256="8a8136c235f64c6fef69cac0d73a46a1a09bb250776a050aec8f9fc880bebc17")
-
-    version("6.5.0", sha256="7ef1796ce497e89479183702635b14bb7a46b53249209a5e0f999bebf4740945")
-    version("6.4.0", sha256="850bf21eafdfe5cd5f6827148184c08c4a0852a37ccf36ce69855334d2c914d4")
-    version("6.3.0", sha256="f06ae7f3f790fbf0f018f6d40e844451e6bc3b7bc96e128e63b09825c1f8b29f")
-    version("6.2.0", sha256="9944589fc722d3e66308c0ce5257788ebd7872982a718aa2516123940671b7c5")
-    version("6.1.0", sha256="09c4c85cabebb971b1de732a0219609f93fc0af5f86f6e437fd8d7f832f1a351")
-
-    version("5.5.0", sha256="530cea139d82fe542b358961130c69cfde8b3d14556370b65823d2f91f0ced87")
-    version("5.4.0", sha256="608df76dec2d34de6558249d8af4cbee21eceddbcb580d666f7a5a583ca3303a")
-    version("5.3.0", sha256="b84f5592e9218b73dbae612b5253035a7b34a9a1f7688d2e1bfaaf7267d5c4db")
-    version("5.2.0", sha256="5f835b04b5f7dd4f4d2dc96190ec1621b8d89f2dc6f638f9f8bc1b1014ba8cad")
-    version("5.1.0", sha256="b7dafdf89cbb0e20333dbf5b5349319ae06e3d1a30bf3515b5488f7e89dca5ad")
-
-    version("4.9.4", sha256="6c11d292cd01b294f9f84c9a59c230d80e9e4a47e5c6355f046bb36d4f358092")
-    version("4.9.3", sha256="2332b2a5a321b57508b9031354a8503af6fdfb868b8c1748d33028d100a8b67e")
-    version("4.9.2", sha256="2020c98295856aa13fda0f2f3a4794490757fc24bcca918d52cc8b4917b972dd")
-    version("4.9.1", sha256="d334781a124ada6f38e63b545e2a3b8c2183049515a1abab6d513f109f1d717e")
-    version("4.8.5", sha256="22fb1e7e0f68a63cee631d85b20461d1ea6bda162f03096350e38c8d427ecf23")
-    version("4.8.4", sha256="4a80aa23798b8e9b5793494b8c976b39b8d9aa2e53cd5ed5534aff662a7f8695")
-    version("4.7.4", sha256="92e61c6dc3a0a449e62d72a38185fda550168a86702dea07125ebd3ec3996282")
-    version("4.6.4", sha256="35af16afa0b67af9b8eb15cafb76d2bc5f568540552522f5dc2c88dd45d977e8")
-    version("4.5.4", sha256="eef3f0456db8c3d992cbb51d5d32558190bc14f3bc19383dd93acc27acc6befc")
-
-    # We specifically do not add 'all' variant here because:
-    # (i) Ada, D, Go, Jit, and Objective-C++ are not default languages.
-    # In that respect, the name 'all' is rather misleading.
-    # (ii) Languages other than c,c++,fortran are prone to configure bug in GCC
-    # For example, 'java' appears to ignore custom location of zlib
-    # (iii) meaning of 'all' changes with GCC version, i.e. 'java' is not part
-    # of gcc7. Correctly specifying conflicts() and depends_on() in such a
-    # case is a PITA.
-    #
-    # Also note that some languages get enabled by the configure scripts even if not listed in the
-    # arguments. For example, c++ is enabled when the bootstrapping is enabled and lto is enabled
-    # when the link time optimization support is enabled.
-    variant(
-        "languages",
-        default="c,c++,fortran",
-        values=(
-            "ada",
-            "brig",
-            "c",
-            "c++",
-            "d",
-            "fortran",
-            "go",
-            "java",
-            "jit",
-            "lto",
-            "objc",
-            "obj-c++",
-        ),
-        multi=True,
-        description="Compilers and runtime libraries to build",
-    )
-    variant("binutils", default=False, description="Build via binutils")
-    variant(
-        "piclibs", default=False, description="Build PIC versions of libgfortran.a and libstdc++.a"
-    )
-    variant("strip", default=False, description="Strip executables to reduce installation size")
-    variant("nvptx", default=False, description="Target nvptx offloading to NVIDIA GPUs")
-    variant("bootstrap", default=True, description="Enable 3-stage bootstrap")
-    variant(
-        "graphite", default=False, description="Enable Graphite loop optimizations (requires ISL)"
-    )
-    variant(
-        "build_type",
-        default="RelWithDebInfo",
-        values=("Debug", "Release", "RelWithDebInfo", "MinSizeRel"),
-        description="CMake-like build type. "
-        "Debug: -O0 -g; Release: -O3; "
-        "RelWithDebInfo: -O2 -g; MinSizeRel: -Os",
-    )
-    variant(
-        "profiled",
-        default=False,
-        description="Use Profile Guided Optimization",
-        when="+bootstrap %gcc",
-    )
-
-    depends_on("flex", type="build", when="@master")
-
-    # https://gcc.gnu.org/install/prerequisites.html
-    depends_on("gmp@4.3.2:")
-    # mawk is not sufficient for go support
-    depends_on("gawk@3.1.5:", type="build")
-    depends_on("texinfo@4.7:", type="build")
-    depends_on("libtool", type="build")
-    # dependencies required for git versions
-    depends_on("m4@1.4.6:", when="@master", type="build")
-    depends_on("automake@1.15.1:", when="@master", type="build")
-    depends_on("autoconf@2.69:", when="@master", type="build")
-
-    depends_on("gmake@3.80:", type="build")
-    depends_on("perl@5", type="build")
-
-    # GCC 7.3 does not compile with newer releases on some platforms, see
-    #   https://github.com/spack/spack/issues/6902#issuecomment-433030376
-    depends_on("mpfr@2.4.2:3.1.6", when="@:9.9")
-    depends_on("mpfr@3.1.0:", when="@10:")
-    depends_on("mpc@1.0.1:", when="@4.5:")
-    # Already released GCC versions do not support any newer version of ISL
-    #   GCC 5.4 https://github.com/spack/spack/issues/6902#issuecomment-433072097
-    #   GCC 7.3 https://github.com/spack/spack/issues/6902#issuecomment-433030376
-    #   GCC 9+  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86724
-    with when("+graphite"):
-        depends_on("isl@0.14", when="@5.0:5.2")
-        depends_on("isl@0.15", when="@5.3:5.9")
-        depends_on("isl@0.15:0.18", when="@6:8.9")
-        depends_on("isl@0.15:0.20", when="@9:9.9")
-        depends_on("isl@0.15:", when="@10:")
-
-    depends_on("zlib-api", when="@6:")
-    depends_on("zstd", when="@10:")
-    depends_on("diffutils", type="build")
-    depends_on("iconv", when="platform=darwin")
-    depends_on("gnat", when="languages=ada")
-    depends_on(
-        "binutils+gas+ld+plugins~libiberty", when="+binutils", type=("build", "link", "run")
-    )
-    depends_on("zip", type="build", when="languages=java")
-
-    # The server is sometimes a bit slow to respond
-    timeout = {"timeout": 60}
-
-    # TODO: integrate these libraries.
-    # depends_on('ppl')
-    # depends_on('cloog')
-
-    # https://gcc.gnu.org/install/test.html
-    depends_on("dejagnu@1.4.4", type="test")
-    depends_on("expect", type="test")
-    depends_on("tcl", type="test")
-    depends_on("autogen@5.5.4:", type="test")
-    depends_on("guile@1.4.1:", type="test")
-
-    # See https://go.dev/doc/install/gccgo#Releases
-    with when("languages=go"):
-        provides("go-or-gccgo-bootstrap@:1.0", when="@4.7.1:")
-        provides("go-or-gccgo-bootstrap@:1.2", when="@4.9:")
-        provides("go-or-gccgo-bootstrap@:1.4", when="@5:")
-        provides("go-or-gccgo-bootstrap@:1.6.1", when="@6:")
-        provides("go-or-gccgo-bootstrap@:1.8.1", when="@7:")
-        provides("go-or-gccgo-bootstrap@:1.10.1", when="@8:")
-        provides("go-or-gccgo-bootstrap@:1.12.2", when="@9:")
-        provides("go-or-gccgo-bootstrap@:1.14.6", when="@10:")
-        provides("go-or-gccgo-bootstrap@1.16.3:1.16.5", when="@11:")
-
-        provides("golang@:1.0", when="@4.7.1:")
-        provides("golang@:1.2", when="@4.9:")
-        provides("golang@:1.4", when="@5:")
-        provides("golang@:1.6.1", when="@6:")
-        provides("golang@:1.8.1", when="@7:")
-        provides("golang@:1.10.1", when="@8:")
-        provides("golang@:1.12.2", when="@9:")
-        provides("golang@:1.14.6", when="@10:")
-        provides("golang@1.16.3:1.16.5", when="@11:")
-
-        # GCC 4.7.1 added full support for the Go 1.x programming language.
-        conflicts("@:4.7.0")
-
-        # Go is not supported on macOS
-        conflicts("platform=darwin", msg="GCC cannot build Go support on MacOS")
-
-    # For a list of valid languages for a specific release,
-    # run the following command in the GCC source directory:
-    #    $ grep ^language= gcc/*/config-lang.in
-    # See https://gcc.gnu.org/install/configure.html
-
-    # Support for processing BRIG 1.0 files was added in GCC 7
-    # BRIG is a binary format for HSAIL:
-    # (Heterogeneous System Architecture Intermediate Language).
-    # See https://gcc.gnu.org/gcc-7/changes.html
-    conflicts("languages=brig", when="@:6")
-
-    # BRIG does not seem to be supported on macOS
-    conflicts("languages=brig", when="platform=darwin")
-
-    # GCC 4.8 added a 'c' language. I'm sure C was always built,
-    # but this is the first version that accepts 'c' as a valid language.
-    conflicts("languages=c", when="@:4.7")
-
-    # The GCC Java frontend and associated libjava runtime library
-    # have been removed from GCC as of GCC 7.
-    # See https://gcc.gnu.org/gcc-7/changes.html
-    conflicts("languages=java", when="@7:")
-
-    # GCC 5 added the ability to build GCC as a Just-In-Time compiler.
-    # See https://gcc.gnu.org/gcc-5/changes.html
-    conflicts("languages=jit", when="@:4")
-
-    with when("languages=d"):
-        # The very first version of GDC that became part of GCC already supported version 2.076 of
-        # the language and runtime.
-        # See https://wiki.dlang.org/GDC#Status
-        provides("D@2")
-
-        # Support for the D programming language has been added to GCC 9.
-        # See https://gcc.gnu.org/gcc-9/changes.html#d
-        conflicts("@:8", msg="support for D has been added in GCC 9.1")
-
-        # Versions of GDC prior to 12 can be built with an ISO C++11 compiler. Starting version 12,
-        # the D frontend requires a working GDC. Moreover, it is strongly recommended to use an
-        # older version of GDC to build GDC.
-        # See https://gcc.gnu.org/install/prerequisites.html#GDC-prerequisite
-        with when("@12:"):
-            # All versions starting 12 have to be built GCC:
-            requires("%gcc")
-
-            # And it has to be GCC older than the version we build:
-            vv = ["11", "12.1.0", "12.2.0"]
-            for prev_v, curr_v in zip(vv, vv[1:]):
-                conflicts(
-                    "%gcc@{0}:".format(curr_v),
-                    when="@{0}".format(curr_v),
-                    msg="'gcc@{0} languages=d' requires '%gcc@:{1}' "
-                    "with the D language support".format(curr_v, prev_v),
-                )
-
-            # In principle, it is possible to have GDC even with GCC 5.
-            # See https://github.com/D-Programming-GDC/gdc
-            # We, however, require at least the oldest version that officially supports GDC. It is
-            # also a good opportunity to tell the users that they need a working GDC:
-            conflicts(
-                "%gcc@:8",
-                msg="'gcc@12: languages=d' requires '%gcc@9:' with the D language support",
-            )
-
-    with when("+nvptx"):
-        depends_on("cuda")
-        resource(
-            name="newlib",
-            url="ftp://sourceware.org/pub/newlib/newlib-3.0.0.20180831.tar.gz",
-            sha256="3ad3664f227357df15ff34e954bfd9f501009a647667cd307bf0658aefd6eb5b",
-            destination="newlibsource",
-            fetch_options=timeout,
-        )
-
-        nvptx_tools_ver = "2023-09-13"
-        depends_on("nvptx-tools@" + nvptx_tools_ver, type="build")
-
-        # NVPTX offloading supported in 7 and later by limited languages
-        conflicts("@:6", msg="NVPTX only supported in gcc 7 and above")
-        conflicts("languages=ada")
-        conflicts("languages=brig")
-        conflicts("languages=go")
-        conflicts("languages=java")
-        conflicts("languages=jit")
-        conflicts("languages=objc")
-        conflicts("languages=obj-c++")
-        conflicts("languages=d")
-        # NVPTX build disables bootstrap
-        conflicts("+bootstrap")
-
-    # Binutils can't build ld on macOS
-    conflicts("+binutils", when="platform=darwin")
-
-    # Bootstrap comparison failure:
-    #   see https://github.com/spack/spack/issues/23296
-    #   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100340
-    #   on XCode 12.5
-    conflicts("+bootstrap", when="@:11.1 %apple-clang@12.0.5")
-
-    # aarch64/M1 is supported in GCC 11.3-12.2 and 13
-    requires(
-        "@11.3,12.2,13.1:",
-        when="target=aarch64: platform=darwin",
-        msg="Only GCC 11.3-12.2, 13.1+ support macOS M1 (aarch64)",
-    )
-
-    # Newer binutils than RHEL's is required to run `as` on some instructions
-    # generated by new GCC (see https://github.com/spack/spack/issues/12235)
-    conflicts("~binutils", when="@7: os=rhel6", msg="New GCC cannot use system assembler on RHEL6")
-    # Ditto for RHEL7/8: OpenBLAS uses flags which the RHEL system-binutils don't have:
-    # https://github.com/xianyi/OpenBLAS/issues/3805#issuecomment-1319878852
-    conflicts(
-        "~binutils", when="@10: os=rhel7", msg="gcc: Add +binutils - preinstalled as might be old"
-    )
-    conflicts(
-        "~binutils", when="@10: os=rhel8", msg="gcc: Add +binutils - preinstalled as might be old"
-    )
-
-    # GCC 11 requires GCC 4.8 or later (https://gcc.gnu.org/gcc-11/changes.html)
-    conflicts("%gcc@:4.7", when="@11:")
-
-    # https://github.com/iains/gcc-12-branch/issues/6
-    conflicts("@:12", when="%apple-clang@14:14.0")
-
-    if sys.platform == "darwin":
-        # Fix parallel build on APFS filesystem
-        # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81797
-        if macos_version() >= Version("10.13"):
-            patch("darwin/apfs.patch", when="@5.5.0,6.1:6.4,7.1:7.3")
-            # from homebrew via macports
-            # https://trac.macports.org/ticket/56502#no1
-            # see also: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83531
-            patch("darwin/headers-10.13-fix.patch", when="@5.5.0")
-        if macos_version() >= Version("10.14"):
-            # Fix system headers for Mojave SDK:
-            # https://github.com/Homebrew/homebrew-core/pull/39041
-            patch(
-                "https://raw.githubusercontent.com/Homebrew/formula-patches/b8b8e65e/gcc/8.3.0-xcode-bug-_Atomic-fix.patch",
-                sha256="33ee92bf678586357ee8ab9d2faddf807e671ad37b97afdd102d5d153d03ca84",
-                when="@6:8.3",
-            )
-        if macos_version() >= Version("10.15"):
-            # Fix system headers for Catalina SDK
-            # (otherwise __OSX_AVAILABLE_STARTING ends up undefined)
-            patch(
-                "https://raw.githubusercontent.com/Homebrew/formula-patches/b8b8e65e/gcc/9.2.0-catalina.patch",
-                sha256="0b8d14a7f3c6a2f0d2498526e86e088926671b5da50a554ffa6b7f73ac4f132b",
-                when="@9.2.0",
-            )
-
-            # See https://raw.githubusercontent.com/Homebrew/homebrew-core/3b7db4457ac64a31e3bbffc54b04c4bd824a4a4a/Formula/gcc.rb
-            patch(
-                "https://github.com/iains/gcc-darwin-arm64/commit/20f61faaed3b335d792e38892d826054d2ac9f15.patch?full_index=1",
-                sha256="c0605179a856ca046d093c13cea4d2e024809ec2ad4bf3708543fc3d2e60504b",
-                when="@11.2.0",
-            )
-
-        # Apple M1 support, created from branch of Darwin maintainer for GCC:
-        # https://github.com/iains/gcc-11-branch
-        patch(
-            "https://raw.githubusercontent.com/Homebrew/formula-patches/22dec3fc/gcc/gcc-11.3.0-arm.diff",
-            sha256="e02006b7ec917cc1390645d95735a6a866caed0dfe506d5bef742f7862cab218",
-            when="@11.3.0 target=aarch64:",
-        )
-        # https://github.com/iains/gcc-12-branch
-        patch(
-            "https://raw.githubusercontent.com/Homebrew/formula-patches/76677f2b/gcc/gcc-12.1.0-arm.diff",
-            sha256="a000f1d9cb1dd98c7c4ef00df31435cd5d712d2f9d037ddc044f8bf82a16cf35",
-            when="@12.1.0 target=aarch64:",
-        )
-        patch(
-            "https://raw.githubusercontent.com/Homebrew/formula-patches/1d184289/gcc/gcc-12.2.0-arm.diff",
-            sha256="a7843b5c6bf1401e40c20c72af69c8f6fc9754ae980bb4a5f0540220b3dcb62d",
-            when="@12.2.0 target=aarch64:",
-        )
-        patch(
-            "https://raw.githubusercontent.com/Homebrew/formula-patches/5c206c47/gcc/gcc-13.1.0.diff",
-            sha256="cb4e8a89387f748a744da0273025d0dc2e3c76780cc390b18ada704676afea11",
-            when="@13.1.0 target=aarch64:",
-        )
-        patch(
-            "https://raw.githubusercontent.com/Homebrew/formula-patches/3c5cbc8e9cf444a1967786af48e430588e1eb481/gcc/gcc-13.2.0.diff",
-            sha256="2df7ef067871a30b2531a2013b3db661ec9e61037341977bfc451e30bf2c1035",
-            when="@13.2.0 target=aarch64:",
-        )
-        conflicts("+bootstrap", when="@11.3.0,13.1: target=aarch64:")
-
-        # Use -headerpad_max_install_names in the build,
-        # otherwise updated load commands won't fit in the Mach-O header.
-        # This is needed because `gcc` avoids the superenv shim.
-        patch("darwin/gcc-7.1.0-headerpad.patch", when="@5:11.2")
-        patch("darwin/gcc-6.1.0-jit.patch", when="@5:7")
-        patch("darwin/gcc-4.9.patch1", when="@4.9.0:4.9.3")
-        patch("darwin/gcc-4.9.patch2", when="@4.9.0:4.9.3")
-
-        # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92061
-        patch("darwin/clang13.patch", when="@:11.1 %apple-clang@13")
-
-    patch("piclibs.patch", when="+piclibs")
-    patch("gcc-backport.patch", when="@4.7:4.9.3,5:5.3")
-
-    # Backport libsanitizer patch for glibc >= 2.31 and 5.3.0 <= gcc <= 9.2.0
-    # https://bugs.gentoo.org/708346
-    patch("glibc-2.31-libsanitizer-1.patch", when="@7.1.0:7.5.0,8.1.0:8.3.0,9.0.0:9.2.0")
-    patch("glibc-2.31-libsanitizer-1-gcc-6.patch", when="@5.3.0:5.5.0,6.1.0:6.5.0")
-    patch("glibc-2.31-libsanitizer-2.patch", when="@8.1.0:8.3.0,9.0.0:9.2.0")
-    patch("glibc-2.31-libsanitizer-2-gcc-6.patch", when="@5.3.0:5.5.0,6.1.0:6.5.0")
-    patch("glibc-2.31-libsanitizer-2-gcc-7.patch", when="@7.1.0:7.5.0")
-    patch(
-        "patch-2b40941d23b1570cdd90083b58fa0f66aa58c86e.patch",
-        when="@6.5.0,7.4.0:7.5.0,8.2.0:9.3.0",
-    )
-    patch("patch-745dae5923aba02982563481d75a21595df22ff8.patch", when="@10.1.0:10.3.0,11.1.0")
-
-    # Backport libsanitizer patch for glibc >= 2.36
-    # https://reviews.llvm.org/D129471
-    patch("glibc-2.36-libsanitizer-gcc-5-9.patch", when="@5:9")
-    patch("glibc-2.36-libsanitizer-gcc-10-12.patch", when="@10:10.4,11:11.3,12.1.0")
-
-    # Older versions do not compile with newer versions of glibc
-    # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81712
-    patch("ucontext_t.patch", when="@4.9,5.1:5.4,6.1:6.4,7.1")
-    patch("ucontext_t-java.patch", when="@4.9,5.1:5.4,6.1:6.4 languages=java")
-    # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81066
-    patch("stack_t-4.9.patch", when="@4.9")
-    patch("stack_t.patch", when="@5.1:5.4,6.1:6.4,7.1")
-    # https://bugs.busybox.net/show_bug.cgi?id=10061
-    patch("signal.patch", when="@4.9,5.1:5.4")
-    # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85835
-    patch("sys_ustat.h.patch", when="@5.0:6.4,7.0:7.3,8.1")
-    patch("sys_ustat-4.9.patch", when="@4.9")
-
-    # this patch removes cylades support from gcc-5 and allows gcc-5 to be built
-    # with newer glibc versions.
-    patch("glibc-2.31-libsanitizer-3-gcc-5.patch", when="@5.3.0:5.5.0")
-
-    # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95005
-    patch("zstd.patch", when="@10")
-
-    # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100102
-    patch("patch-fc930b3010bd0de899a3da3209eab20664ddb703.patch", when="@10.1:10.3")
-    patch("patch-f1feb74046e0feb0596b93bbb822fae02940a90e.patch", when="@11.1")
-
-    # libstdc++: Fix inconsistent noexcept-specific for valarray begin/end
-    patch(
-        "https://github.com/gcc-mirror/gcc/commit/423cd47cfc9640ba3d6811b780e8a0b94b704dcb.patch?full_index=1",
-        sha256="0d136226eb07bc43f1b15284f48bd252e3748a0426b5d7ac9084ebc406e15490",
-        when="@9.5.0:10.4.0,11.1.0:11.2.0",
-    )
-
-    # patch ICE on aarch64 in tree-vect-slp, cf: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111478
-    # patch taken from releases/gcc-12 branch
-    patch(
-        "https://github.com/gcc-mirror/gcc/commit/9d033155254ac6df5f47ab32896dbf336f991589.patch?full_index=1",
-        sha256="8b76fe575ef095b48ac45e8b56544c331663f840ce4b63abdb61510bf3647597",
-        when="@12.3.0 target=aarch64:",
-    )
-    # patch taken from releases/gcc-13 branch
-    patch(
-        "https://github.com/gcc-mirror/gcc/commit/7c67939ec384425a3d7383dfb4fb39aa7e9ad20a.patch?full_index=1",
-        sha256="f0826d7a9c9808af40f3434918f24ad942f1c6a6daec73f11cf52c544cf5fc01",
-        when="@13.2.0 target=aarch64:",
-    )
-
-    build_directory = "spack-build"
-
-    @classproperty
-    def executables(cls):
-        names = [r"gcc", r"[^\w]?g\+\+", r"gfortran", r"gdc", r"gccgo"]
-        suffixes = [r"", r"-mp-\d+\.\d", r"-\d+\.\d", r"-\d+", r"\d\d"]
-        return [r"".join(x) for x in itertools.product(names, suffixes)]
-
-    @classmethod
-    def filter_detected_exes(cls, prefix, exes_in_prefix):
-        result = []
-        for exe in exes_in_prefix:
-            # On systems like Ubuntu we might get multiple executables
-            # with the string "gcc" in them. See:
-            # https://helpmanual.io/packages/apt/gcc/
-            basename = os.path.basename(exe)
-            substring_to_be_filtered = [
-                "c99-gcc",
-                "c89-gcc",
-                "-nm",
-                "-ar",
-                "ranlib",
-                "clang",  # clang++ matches g++ -> clan[g++]
-            ]
-            if any(x in basename for x in substring_to_be_filtered):
-                continue
-            # Filter out links in favor of real executables on
-            # all systems but Cray
-            host_platform = str(spack.platforms.host())
-            if os.path.islink(exe) and host_platform != "cray":
-                continue
-
-            result.append(exe)
-
-        return result
-
-    @classmethod
-    def determine_version(cls, exe):
-        try:
-            output = spack.compiler.get_compiler_version_output(exe, "--version")
-        except Exception:
-            output = ""
-        # Apple's gcc is actually apple clang, so skip it.
-        # Users can add it manually to compilers.yaml at their own risk.
-        if "Apple" in output:
-            return None
-
-        version_regex = re.compile(r"([\d\.]+)")
-        for vargs in ("-dumpfullversion", "-dumpversion"):
-            try:
-                output = spack.compiler.get_compiler_version_output(exe, vargs)
-                match = version_regex.search(output)
-                if match:
-                    return match.group(1)
-            except spack.util.executable.ProcessError:
-                pass
-            except Exception as e:
-                tty.debug(e)
-
-        return None
-
-    @classmethod
-    def determine_variants(cls, exes, version_str):
-        languages, compilers = set(), {}
-        # There are often at least two copies (not symlinks) of each compiler executable in the
-        # same directory: one with a canonical name, e.g. "gfortran", and another one with the
-        # target prefix, e.g. "x86_64-pc-linux-gnu-gfortran". There also might be a copy of "gcc"
-        # with the version suffix, e.g. "x86_64-pc-linux-gnu-gcc-6.3.0". To ensure the consistency
-        # of values in the "compilers" dictionary (i.e. we prefer all of them to reference copies
-        # with canonical names if possible), we iterate over the executables in the reversed sorted
-        # order:
-        for exe in sorted(exes, reverse=True):
-            basename = os.path.basename(exe)
-            if "g++" in basename:
-                languages.add("c++")
-                compilers["cxx"] = exe
-            elif "gfortran" in basename:
-                languages.add("fortran")
-                compilers["fortran"] = exe
-            elif "gcc" in basename:
-                languages.add("c")
-                compilers["c"] = exe
-            elif "gccgo" in basename:
-                languages.add("go")
-                compilers["go"] = exe
-            elif "gdc" in basename:
-                languages.add("d")
-                compilers["d"] = exe
-        variant_str = "languages={0}".format(",".join(languages))
-        return variant_str, {"compilers": compilers}
-
-    @classmethod
-    def validate_detected_spec(cls, spec, extra_attributes):
-        # For GCC 'compilers' is a mandatory attribute
-        msg = 'the extra attribute "compilers" must be set for ' 'the detected spec "{0}"'.format(
-            spec
-        )
-        assert "compilers" in extra_attributes, msg
-
-        compilers = extra_attributes["compilers"]
-        for constraint, key in {
-            "languages=c": "c",
-            "languages=c++": "cxx",
-            "languages=d": "d",
-            "languages=fortran": "fortran",
-        }.items():
-            if spec.satisfies(constraint):
-                msg = "{0} not in {1}"
-                assert key in compilers, msg.format(key, spec)
-
-    @property
-    def cc(self):
-        msg = "cannot retrieve C compiler [spec is not concrete]"
-        assert self.spec.concrete, msg
-        if self.spec.external:
-            return self.spec.extra_attributes["compilers"].get("c", None)
-        result = None
-        if "languages=c" in self.spec:
-            result = str(self.spec.prefix.bin.gcc)
-        return result
-
-    @property
-    def cxx(self):
-        msg = "cannot retrieve C++ compiler [spec is not concrete]"
-        assert self.spec.concrete, msg
-        if self.spec.external:
-            return self.spec.extra_attributes["compilers"].get("cxx", None)
-        result = None
-        if "languages=c++" in self.spec:
-            result = os.path.join(self.spec.prefix.bin, "g++")
-        return result
-
-    @property
-    def fortran(self):
-        msg = "cannot retrieve Fortran compiler [spec is not concrete]"
-        assert self.spec.concrete, msg
-        if self.spec.external:
-            return self.spec.extra_attributes["compilers"].get("fortran", None)
-        result = None
-        if "languages=fortran" in self.spec:
-            result = str(self.spec.prefix.bin.gfortran)
-        return result
-
-    def url_for_version(self, version):
-        # This function will be called when trying to fetch from url, before
-        # mirrors are tried. It takes care of modifying the suffix of gnu
-        # mirror path so that Spack will also look for the correct file in
-        # the mirrors
-        if (version < Version("6.4.0") and version != Version("5.5.0")) or version == Version(
-            "7.1.0"
-        ):
-            self.gnu_mirror_path = self.gnu_mirror_path.replace("xz", "bz2")
-        return super().url_for_version(version)
-
-    def patch(self):
-        spec = self.spec
-        prefix = self.spec.prefix
-
-        # Fix a standard header file for OS X Yosemite that
-        # is GCC incompatible by replacing non-GCC compliant macros
-        if "yosemite" in spec.architecture:
-            if os.path.isfile("/usr/include/dispatch/object.h"):
-                new_dispatch_dir = join_path(prefix, "include", "dispatch")
-                mkdirp(new_dispatch_dir)
-                new_header = join_path(new_dispatch_dir, "object.h")
-                install("/usr/include/dispatch/object.h", new_header)
-                filter_file(
-                    r"typedef void \(\^dispatch_block_t\)\(void\)",
-                    "typedef void* dispatch_block_t",
-                    new_header,
-                )
-
-        # Use installed libz
-        if self.version >= Version("6"):
-            filter_file(
-                "@zlibdir@", "-L{0}".format(spec["zlib-api"].prefix.lib), "gcc/Makefile.in"
-            )
-            filter_file(
-                "@zlibinc@", "-I{0}".format(spec["zlib-api"].prefix.include), "gcc/Makefile.in"
-            )
-
-        if spec.satisfies("+nvptx"):
-            # backport of 383400a6078d upstream to allow support of cuda@11:
-            filter_file(
-                '#define ASM_SPEC "%{misa=*:-m %*}"',
-                '#define ASM_SPEC "%{misa=*:-m %*; :-m sm_35}"',
-                "gcc/config/nvptx/nvptx.h",
-                string=True,
-            )
-            filter_file(
-                "Target RejectNegative ToLower Joined "
-                "Enum(ptx_isa) Var(ptx_isa_option) Init(PTX_ISA_SM30)",
-                "Target RejectNegative ToLower Joined "
-                "Enum(ptx_isa) Var(ptx_isa_option) Init(PTX_ISA_SM35)",
-                "gcc/config/nvptx/nvptx.opt",
-                string=True,
-            )
-        self.build_optimization_config()
-
-    def get_common_target_flags(self, spec):
-        """Get the right (but pessimistic) architecture specific flags supported by
-        both host gcc and to-be-built gcc. For example: gcc@7 %gcc@12 target=znver3
-        should pick -march=znver1, since that's what gcc@7 supports."""
-        archs = [spec.target] + spec.target.ancestors
-        for arch in archs:
-            try:
-                return arch.optimization_flags("gcc", spec.version)
-            except UnsupportedMicroarchitecture:
-                pass
-        # no arch specific flags in common, unlikely to happen.
-        return ""
-
-    def build_optimization_config(self):
-        """Write a config/spack.mk file with sensible optimization flags, taking into
-        account bootstrapping subtleties."""
-        build_type_flags = {
-            "Debug": "-O0 -g",
-            "Release": "-O3",
-            "RelWithDebInfo": "-O2 -g",
-            "MinSizeRel": "-Os",
-        }
-
-        # Generic optimization flags.
-        flags = build_type_flags[self.spec.variants["build_type"].value]
-
-        # Pessimistic target specific flags. For example, when building
-        # gcc@11 %gcc@7 on znver3, Spack will fix the target to znver1 during
-        # concretization, so we'll stick to that. The other way around however can
-        # result in compilation errors, when gcc@7 is built with gcc@11, and znver3
-        # is taken as a the target, which gcc@7 doesn't support.
-        # Note we're not adding this for aarch64 because of
-        # https://github.com/spack/spack/issues/31184
-        if "+bootstrap %gcc" in self.spec and self.spec.target.family != "aarch64":
-            flags += " " + self.get_common_target_flags(self.spec)
-
-        if "+bootstrap" in self.spec:
-            variables = ["BOOT_CFLAGS", "CFLAGS_FOR_TARGET", "CXXFLAGS_FOR_TARGET"]
-        else:
-            variables = ["CFLAGS", "CXXFLAGS"]
-
-        # Redefine a few variables without losing other defaults:
-        # BOOT_CFLAGS = $(filter-out -O% -g%, $(BOOT_CFLAGS)) -O3
-        # This makes sure that build_type=Release is really -O3, not -O3 -g.
-        fmt_string = "{} := $(filter-out -O% -g%, $({})) {}\n"
-        with open("config/spack.mk", "w") as f:
-            for var in variables:
-                f.write(fmt_string.format(var, var, flags))
-            # Improve the build time for stage 2 a bit by enabling -O1 in stage 1.
-            # Note: this is ignored under ~bootstrap.
-            f.write("STAGE1_CFLAGS += -O1\n")
-
-    # https://gcc.gnu.org/install/configure.html
-    def configure_args(self):
-        spec = self.spec
-
-        # Generic options to compile GCC
-        options = [
-            # Distributor options
-            "--with-pkgversion=Spack GCC",
-            "--with-bugurl=https://github.com/spack/spack/issues",
-            # Xcode 10 dropped 32-bit support
-            "--disable-multilib",
-            "--enable-languages={0}".format(",".join(spec.variants["languages"].value)),
-            # Drop gettext dependency
-            "--disable-nls",
-        ]
-
-        # Avoid excessive realpath/stat calls for every system header
-        # by making -fno-canonical-system-headers the default.
-        if self.version >= Version("4.8.0"):
-            options.append("--disable-canonical-system-headers")
-
-        # Use installed libz
-        if self.version >= Version("6"):
-            options.append("--with-system-zlib")
-
-        if "zstd" in spec:
-            options.append("--with-zstd-include={0}".format(spec["zstd"].headers.directories[0]))
-            options.append("--with-zstd-lib={0}".format(spec["zstd"].libs.directories[0]))
-
-        # Enabling language "jit" requires --enable-host-shared.
-        if "languages=jit" in spec:
-            options.append("--enable-host-shared")
-
-        # Binutils
-        if spec.satisfies("+binutils"):
-            binutils = spec["binutils"].prefix.bin
-            options.extend(
-                [
-                    "--with-gnu-ld",
-                    "--with-ld=" + binutils.ld,
-                    "--with-gnu-as",
-                    "--with-as=" + binutils.join("as"),
-                ]
-            )
-        elif spec.satisfies("%apple-clang@15:"):
-            # https://github.com/iains/gcc-darwin-arm64/issues/117
-            # https://github.com/iains/gcc-12-branch/issues/22
-            # https://github.com/iains/gcc-13-branch/issues/8
-            options.append("--with-ld=/Library/Developer/CommandLineTools/usr/bin/ld-classic")
-
-        # enable_bootstrap
-        if spec.satisfies("+bootstrap"):
-            options.extend(["--enable-bootstrap"])
-        else:
-            options.extend(["--disable-bootstrap"])
-
-        # Configure include and lib directories explicitly for these
-        # dependencies since the short GCC option assumes that libraries
-        # are installed in "/lib" which might not be true on all OS
-        # (see #10842)
-        #
-        # More info at: https://gcc.gnu.org/install/configure.html
-        for dep_str in ("mpfr", "gmp", "mpc", "isl"):
-            if dep_str not in spec:
-                options.append("--without-{0}".format(dep_str))
-                continue
-
-            dep_spec = spec[dep_str]
-            include_dir = dep_spec.headers.directories[0]
-            lib_dir = dep_spec.libs.directories[0]
-            options.extend(
-                [
-                    "--with-{0}-include={1}".format(dep_str, include_dir),
-                    "--with-{0}-lib={1}".format(dep_str, lib_dir),
-                ]
-            )
-
-        # nvptx-none offloading for host compiler
-        if spec.satisfies("+nvptx"):
-            options.extend(
-                [
-                    "--enable-offload-targets=nvptx-none",
-                    "--with-cuda-driver-include={0}".format(spec["cuda"].prefix.include),
-                    "--with-cuda-driver-lib={0}".format(spec["cuda"].libs.directories[0]),
-                    "--disable-bootstrap",
-                    "--disable-multilib",
-                ]
-            )
-
-        if sys.platform == "darwin":
-            options.extend(
-                [
-                    "--with-native-system-header-dir=/usr/include",
-                    "--with-sysroot={0}".format(macos_sdk_path()),
-                    "--with-libiconv-prefix={0}".format(spec["iconv"].prefix),
-                ]
-            )
-
-        # enable appropriate bootstrapping flags
-        stage1_ldflags = str(self.rpath_args)
-        boot_ldflags = stage1_ldflags + " -static-libstdc++ -static-libgcc"
-        options.append("--with-stage1-ldflags=" + stage1_ldflags)
-        options.append("--with-boot-ldflags=" + boot_ldflags)
-        options.append("--with-build-config=spack")
-
-        if "languages=d" in spec:
-            # Phobos is the standard library for the D Programming Language. The documentation says
-            # that on some targets, 'libphobos' is not enabled by default, but compiles and works
-            # if '--enable-libphobos' is used. Specifics are documented for affected targets.
-            # See https://gcc.gnu.org/install/prerequisites.html#GDC-prerequisite
-            # Unfortunately, it is unclear where exactly the aforementioned specifics are
-            # documented but GDC seems to be unusable without the library, therefore we enable it
-            # explicitly:
-            options.append("--enable-libphobos")
-            if spec.satisfies("@12:"):
-                options.append("GDC={0}".format(self.detect_gdc()))
-
-        return options
-
-    # Copy nvptx-tools into the GCC install prefix
-    def copy_nvptx_tools(self):
-        nvptx_tools_bin_path = self.spec["nvptx-tools"].prefix.bin
-        gcc_bin_path = self.prefix.bin
-        mkdirp(gcc_bin_path)
-        copy_list = ["as", "ld", "nm", "run", "run-single"]
-        for file in copy_list:
-            fullname = f"nvptx-none-{file}"
-            copy(join_path(nvptx_tools_bin_path, fullname), join_path(gcc_bin_path, fullname))
-        link_list = ["ar", "ranlib"]
-        for file in link_list:
-            fullname = f"nvptx-none-{file}"
-            orig_target = readlink(join_path(nvptx_tools_bin_path, fullname))
-            symlink(orig_target, join_path(gcc_bin_path, fullname))
-        util_dir_path = join_path(self.prefix, "nvptx-none", "bin")
-        mkdirp(util_dir_path)
-        util_list = ["ar", "as", "ld", "nm", "ranlib"]
-        for file in util_list:
-            rel_target = join_path("..", "..", "bin", f"nvptx-none-{file}")
-            dest_link = join_path(util_dir_path, file)
-            symlink(rel_target, dest_link)
-
-    # run configure/make/make(install) for the nvptx-none target
-    # before running the host compiler phases
-    @run_before("configure")
-    def nvptx_install(self):
-        spec = self.spec
-        prefix = self.prefix
-
-        if not spec.satisfies("+nvptx"):
-            return
-
-        # config.guess returns the host triple, e.g. "x86_64-pc-linux-gnu"
-        guess = Executable("./config.guess")
-        targetguess = guess(output=str).rstrip("\n")
-
-        options = getattr(self, "configure_flag_args", [])
-        options += ["--prefix={0}".format(prefix)]
-
-        options += [
-            "--with-cuda-driver-include={0}".format(spec["cuda"].prefix.include),
-            "--with-cuda-driver-lib={0}".format(spec["cuda"].libs.directories[0]),
-        ]
-
-        self.copy_nvptx_tools()
-
-        pattern = join_path(self.stage.source_path, "newlibsource", "*")
-        files = glob.glob(pattern)
-
-        if files:
-            symlink(join_path(files[0], "newlib"), "newlib")
-
-        # self.build_directory = 'spack-build-nvptx'
-        with working_dir("spack-build-nvptx", create=True):
-            options = [
-                "--prefix={0}".format(prefix),
-                "--enable-languages={0}".format(",".join(spec.variants["languages"].value)),
-                "--with-mpfr={0}".format(spec["mpfr"].prefix),
-                "--with-gmp={0}".format(spec["gmp"].prefix),
-                "--target=nvptx-none",
-                "--with-build-time-tools={0}".format(join_path(prefix, "nvptx-none", "bin")),
-                "--enable-as-accelerator-for={0}".format(targetguess),
-                "--disable-sjlj-exceptions",
-                "--enable-newlib-io-long-long",
-            ]
-
-            configure = Executable("../configure")
-            configure(*options)
-            make()
-            make("install")
-
-    @property
-    def build_targets(self):
-        if "+profiled" in self.spec:
-            return ["profiledbootstrap"]
-        return []
-
-    @property
-    def install_targets(self):
-        if "+strip" in self.spec:
-            return ["install-strip"]
-        return ["install"]
-
-    @property
-    def spec_dir(self):
-        # e.g. lib/gcc/x86_64-unknown-linux-gnu/4.9.2
-        spec_dir = glob.glob("{0}/gcc/*/*".format(self.prefix.lib))
-        return spec_dir[0] if spec_dir else None
-
-    @run_after("install")
-    def write_rpath_specs(self):
-        """Generate a spec file so the linker adds a rpath to the libs
-        the compiler used to build the executable.
-
-        .. caution::
-
-           The custom spec file by default with *always* pass ``-Wl,-rpath
-           ...`` to the linker, which will cause the linker to *ignore* the
-           value of ``LD_RUN_PATH``, which otherwise would be saved to the
-           binary as the default rpath. See the mitigation below for how to
-           temporarily disable this behavior.
-
-        Structure the specs file so that users can define a custom spec file
-        to suppress the spack-linked rpaths to facilitate rpath adjustment
-        for relocatable binaries. The custom spec file
-        :file:`{norpath}.spec` will have a single
-        line followed by two blanks lines::
-
-            *link_libgcc_rpath:
-
-
-
-        It can be passed to the GCC linker using the argument
-        ``--specs=norpath.spec`` to disable the automatic rpath and restore
-        the behavior of ``LD_RUN_PATH``."""
-        if not self.spec_dir:
-            tty.warn(
-                "Could not install specs for {0}.".format(self.spec.format("{name}{@version}"))
-            )
-            return
-
-        gcc = self.spec["gcc"].command
-        lines = gcc("-dumpspecs", output=str).splitlines(True)
-        specs_file = join_path(self.spec_dir, "specs")
-
-        # Save a backup
-        with open(specs_file + ".orig", "w") as out:
-            out.writelines(lines)
-
-        # Find which directories have shared libraries
-        rpath_libdirs = []
-        for dir in ["lib", "lib64"]:
-            libdir = join_path(self.prefix, dir)
-            if glob.glob(join_path(libdir, "*." + dso_suffix)):
-                rpath_libdirs.append(libdir)
-
-        if not rpath_libdirs:
-            # No shared libraries
-            tty.warn("No dynamic libraries found in lib/lib64")
-            return
-
-        # Overwrite the specs file
-        with open(specs_file, "w") as out:
-            for line in lines:
-                out.write(line)
-                if line.startswith("*link_libgcc:"):
-                    # Insert at start of line following link_libgcc, which gets
-                    # inserted into every call to the linker
-                    out.write("%(link_libgcc_rpath) ")
-
-            # Add easily-overridable rpath string at the end
-            out.write("*link_libgcc_rpath:\n")
-            out.write(" ".join("-rpath " + lib for lib in rpath_libdirs))
-            out.write("\n")
-        set_install_permissions(specs_file)
-        tty.info("Wrote new spec file to {0}".format(specs_file))
-
-    def setup_run_environment(self, env):
-        # Search prefix directory for possibly modified compiler names
-        from spack.compilers.gcc import Gcc as Compiler
-
-        # Get the contents of the installed binary directory
-        bin_path = self.spec.prefix.bin
-
-        if not os.path.isdir(bin_path):
-            return
-
-        bin_contents = os.listdir(bin_path)
-
-        # Find the first non-symlink compiler binary present for each language
-        for lang in ["cc", "cxx", "fc", "f77"]:
-            for filename, regexp in itertools.product(bin_contents, Compiler.search_regexps(lang)):
-                if not regexp.match(filename):
-                    continue
-
-                abspath = os.path.join(bin_path, filename)
-
-                # Skip broken symlinks (https://github.com/spack/spack/issues/41327)
-                if not os.path.exists(abspath):
-                    continue
-
-                # Set the proper environment variable
-                env.set(lang.upper(), abspath)
-                # Stop searching filename/regex combos for this language
-                break
-
-    def detect_gdc(self):
-        """Detect and return the path to GDC that belongs to the same instance of GCC that is used
-        by self.compiler.
-
-        If the path cannot be detected, raise InstallError with recommendations for the users on
-        how to circumvent the problem.
-
-        Should be use only if self.spec.satisfies("@12: languages=d")
-        """
-        # Detect GCC package in the directory of the GCC compiler
-        # or in the $PATH if self.compiler.cc is not an absolute path:
-        from spack.detection import by_path
-
-        compiler_dir = os.path.dirname(self.compiler.cc)
-        detected_packages = by_path(
-            [self.name], path_hints=([compiler_dir] if os.path.isdir(compiler_dir) else None)
-        )
-
-        # We consider only packages that satisfy the following constraint:
-        required_spec = Spec("languages=c,c++,d")
-        candidate_specs = [
-            p.spec
-            for p in filter(
-                lambda p: p.spec.satisfies(required_spec), detected_packages.get(self.name, ())
-            )
-        ]
-
-        if candidate_specs:
-            # We now need to filter specs that match the compiler version:
-            compiler_spec = Spec(repr(self.compiler.spec))
-
-            # First, try to filter specs that satisfy the compiler spec:
-            new_candidate_specs = list(
-                filter(lambda s: s.satisfies(compiler_spec), candidate_specs)
-            )
-
-            # The compiler version might be more specific than what we can detect. For example, the
-            # user might have "gcc@10.2.1-sys" as the compiler spec in compilers.yaml. In that
-            # case, we end up with an empty list of candidates. To circumvent the problem, we try
-            # to filter specs that are satisfied by the compiler spec:
-            if not new_candidate_specs:
-                new_candidate_specs = list(
-                    filter(lambda s: compiler_spec.satisfies(s), candidate_specs)
-                )
-
-            candidate_specs = new_candidate_specs
-
-        error_nl = "\n    "  # see SpackError.__str__()
-
-        if not candidate_specs:
-            raise InstallError(
-                "Cannot detect GDC",
-                long_msg="Starting version 12, the D frontend requires a working GDC."
-                "{0}You can install it with Spack by running:"
-                "{0}{0}spack install gcc@9:11 languages=c,c++,d"
-                "{0}{0}Once that has finished, you will need to add it to your compilers.yaml file"
-                "{0}and use it to install this spec (i.e. {1} ...).".format(
-                    error_nl, self.spec.format("{name}{@version} {variants.languages}")
-                ),
-            )
-        elif len(candidate_specs) == 0:
-            return candidate_specs[0].extra_attributes["compilers"]["d"]
-        else:
-            # It is rather unlikely to end up here but let us try to resolve the ambiguity:
-            candidate_gdc = candidate_specs[0].extra_attributes["compilers"]["d"]
-            if all(
-                candidate_gdc == s.extra_attributes["compilers"]["d"] for s in candidate_specs[1:]
-            ):
-                # It does not matter which one we take if they are all the same:
-                return candidate_gdc
-            else:
-                raise InstallError(
-                    "Cannot resolve ambiguity when detecting GDC that belongs to "
-                    "%{0}".format(self.compiler.spec),
-                    long_msg="The candidates are:{0}{0}{1}{0}".format(
-                        error_nl,
-                        error_nl.join(
-                            "{0} (cc: {1})".format(
-                                s.extra_attributes["compilers"]["d"],
-                                s.extra_attributes["compilers"]["c"],
-                            )
-                            for s in candidate_specs
-                        ),
-                    ),
-                )
-
-    @classmethod
-    def runtime_constraints(cls, *, spec, pkg):
-        """Callback function to inject runtime-related rules into the solver.
-
-        Rule-injection is obtained through method calls of the ``pkg`` argument.
-
-        Documentation for this function is temporary. When the API will be in its final state,
-        we'll document the behavior at https://spack.readthedocs.io/en/latest/
-
-        Args:
-            spec: spec that will inject runtime dependencies
-            pkg: object used to forward information to the solver
-        """
-        pkg("*").depends_on(
-            "gcc-runtime",
-            when="%gcc",
-            type="link",
-            description="If any package uses %gcc, it depends on gcc-runtime",
-        )
-        pkg("*").depends_on(
-            f"gcc-runtime@{str(spec.version)}:",
-            when=f"%{str(spec)}",
-            type="link",
-            description=f"If any package uses %{str(spec)}, "
-            f"it depends on gcc-runtime@{str(spec.version)}:",
-        )
-
-        gfortran_str = "libgfortran@5"
-        if spec.satisfies("gcc@:6"):
-            gfortran_str = "libgfortran@3"
-        elif spec.satisfies("gcc@7"):
-            gfortran_str = "libgfortran@4"
-
-        for fortran_virtual in ("fortran-rt", gfortran_str):
-            pkg("*").depends_on(
-                fortran_virtual,
-                when=f"%{str(spec)}",
-                languages=["fortran"],
-                type="link",
-                description=f"Add a dependency on '{gfortran_str}' for nodes compiled with "
-                f"{str(spec)} and using the 'fortran' language",
-            )
-        # The version of gcc-runtime is the same as the %gcc used to "compile" it
-        pkg("gcc-runtime").requires(f"@={str(spec.version)}", when=f"%{str(spec)}")
diff --git a/stackinator/repo/packages/gcc/patch-2b40941d23b1570cdd90083b58fa0f66aa58c86e.patch b/stackinator/repo/packages/gcc/patch-2b40941d23b1570cdd90083b58fa0f66aa58c86e.patch
deleted file mode 100644
index 3d76c47b..00000000
--- a/stackinator/repo/packages/gcc/patch-2b40941d23b1570cdd90083b58fa0f66aa58c86e.patch
+++ /dev/null
@@ -1,121 +0,0 @@
-From 2b40941d23b1570cdd90083b58fa0f66aa58c86e Mon Sep 17 00:00:00 2001
-From: Tamar Christina <tamar.christina@arm.com>
-Date: Fri, 21 May 2021 12:16:56 +0100
-Subject: [PATCH] libsanitizer: Remove cyclades from libsanitizer
-
-The Linux kernel has removed the interface to cyclades from
-the latest kernel headers[1] due to them being orphaned for the
-past 13 years.
-
-libsanitizer uses this header when compiling against glibc, but
-glibcs itself doesn't seem to have any references to cyclades.
-
-Further more it seems that the driver is broken in the kernel and
-the firmware doesn't seem to be available anymore.
-
-As such since this is breaking the build of libsanitizer (and so the
-GCC bootstrap[2]) I propose to remove this.
-
-[1] https://lkml.org/lkml/2021/3/2/153
-[2] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100379
-
-libsanitizer/ChangeLog:
-
-	PR sanitizer/100379
-	* sanitizer_common/sanitizer_common_interceptors_ioctl.inc: Cherry-pick
-	llvm-project revision f7c5351552387bd43f6ca3631016d7f0dfe0f135.
-	* sanitizer_common/sanitizer_platform_limits_posix.cc: Likewise.
-	* sanitizer_common/sanitizer_platform_limits_posix.h: Likewise.
----
- .../sanitizer_common_interceptors_ioctl.inc           |  9 ---------
- .../sanitizer_platform_limits_posix.cc                | 11 -----------
- .../sanitizer_platform_limits_posix.h                 | 10 ----------
- 3 files changed, 30 deletions(-)
-
-diff --git a/libsanitizer/sanitizer_common/sanitizer_common_interceptors_ioctl.inc b/libsanitizer/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
-index 5408ea17c59..7a9cd3f5968 100644
---- a/libsanitizer/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
-+++ b/libsanitizer/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
-@@ -365,15 +365,6 @@ static void ioctl_table_fill() {
- 
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
-   // _(SIOCDEVPLIP, WRITE, struct_ifreq_sz); // the same as EQL_ENSLAVE
--  _(CYGETDEFTHRESH, WRITE, sizeof(int));
--  _(CYGETDEFTIMEOUT, WRITE, sizeof(int));
--  _(CYGETMON, WRITE, struct_cyclades_monitor_sz);
--  _(CYGETTHRESH, WRITE, sizeof(int));
--  _(CYGETTIMEOUT, WRITE, sizeof(int));
--  _(CYSETDEFTHRESH, NONE, 0);
--  _(CYSETDEFTIMEOUT, NONE, 0);
--  _(CYSETTHRESH, NONE, 0);
--  _(CYSETTIMEOUT, NONE, 0);
-   _(EQL_EMANCIPATE, WRITE, struct_ifreq_sz);
-   _(EQL_ENSLAVE, WRITE, struct_ifreq_sz);
-   _(EQL_GETMASTRCFG, WRITE, struct_ifreq_sz);
-diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
-index d823a12190c..e8fce8a0287 100644
---- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
-+++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
-@@ -157,7 +157,6 @@ typedef struct user_fpregs elf_fpregset_t;
- # include <sys/procfs.h>
- #endif
- #include <sys/user.h>
--#include <linux/cyclades.h>
- #include <linux/if_eql.h>
- #include <linux/if_plip.h>
- #include <linux/lp.h>
-@@ -466,7 +465,6 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
- 
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
-   unsigned struct_ax25_parms_struct_sz = sizeof(struct ax25_parms_struct);
--  unsigned struct_cyclades_monitor_sz = sizeof(struct cyclades_monitor);
- #if EV_VERSION > (0x010000)
-   unsigned struct_input_keymap_entry_sz = sizeof(struct input_keymap_entry);
- #else
-@@ -833,15 +831,6 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
- #endif // SANITIZER_LINUX || SANITIZER_FREEBSD
- 
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
--  unsigned IOCTL_CYGETDEFTHRESH = CYGETDEFTHRESH;
--  unsigned IOCTL_CYGETDEFTIMEOUT = CYGETDEFTIMEOUT;
--  unsigned IOCTL_CYGETMON = CYGETMON;
--  unsigned IOCTL_CYGETTHRESH = CYGETTHRESH;
--  unsigned IOCTL_CYGETTIMEOUT = CYGETTIMEOUT;
--  unsigned IOCTL_CYSETDEFTHRESH = CYSETDEFTHRESH;
--  unsigned IOCTL_CYSETDEFTIMEOUT = CYSETDEFTIMEOUT;
--  unsigned IOCTL_CYSETTHRESH = CYSETTHRESH;
--  unsigned IOCTL_CYSETTIMEOUT = CYSETTIMEOUT;
-   unsigned IOCTL_EQL_EMANCIPATE = EQL_EMANCIPATE;
-   unsigned IOCTL_EQL_ENSLAVE = EQL_ENSLAVE;
-   unsigned IOCTL_EQL_GETMASTRCFG = EQL_GETMASTRCFG;
-diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h
-index 6a673a7c995..f921bf2b5b5 100644
---- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h
-+++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h
-@@ -1040,7 +1040,6 @@ struct __sanitizer_cookie_io_functions_t {
- 
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
-   extern unsigned struct_ax25_parms_struct_sz;
--  extern unsigned struct_cyclades_monitor_sz;
-   extern unsigned struct_input_keymap_entry_sz;
-   extern unsigned struct_ipx_config_data_sz;
-   extern unsigned struct_kbdiacrs_sz;
-@@ -1385,15 +1384,6 @@ struct __sanitizer_cookie_io_functions_t {
- #endif  // SANITIZER_LINUX || SANITIZER_FREEBSD
- 
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
--  extern unsigned IOCTL_CYGETDEFTHRESH;
--  extern unsigned IOCTL_CYGETDEFTIMEOUT;
--  extern unsigned IOCTL_CYGETMON;
--  extern unsigned IOCTL_CYGETTHRESH;
--  extern unsigned IOCTL_CYGETTIMEOUT;
--  extern unsigned IOCTL_CYSETDEFTHRESH;
--  extern unsigned IOCTL_CYSETDEFTIMEOUT;
--  extern unsigned IOCTL_CYSETTHRESH;
--  extern unsigned IOCTL_CYSETTIMEOUT;
-   extern unsigned IOCTL_EQL_EMANCIPATE;
-   extern unsigned IOCTL_EQL_ENSLAVE;
-   extern unsigned IOCTL_EQL_GETMASTRCFG;
--- 
-2.31.1
-
diff --git a/stackinator/repo/packages/gcc/patch-745dae5923aba02982563481d75a21595df22ff8.patch b/stackinator/repo/packages/gcc/patch-745dae5923aba02982563481d75a21595df22ff8.patch
deleted file mode 100644
index 57c51eb2..00000000
--- a/stackinator/repo/packages/gcc/patch-745dae5923aba02982563481d75a21595df22ff8.patch
+++ /dev/null
@@ -1,123 +0,0 @@
-From 745dae5923aba02982563481d75a21595df22ff8 Mon Sep 17 00:00:00 2001
-From: Tamar Christina <tamar.christina@arm.com>
-Date: Fri, 21 May 2021 10:30:59 +0100
-Subject: [PATCH] libsanitizer: Remove cyclades from libsanitizer
-
-The Linux kernel has removed the interface to cyclades from
-the latest kernel headers[1] due to them being orphaned for the
-past 13 years.
-
-libsanitizer uses this header when compiling against glibc, but
-glibcs itself doesn't seem to have any references to cyclades.
-
-Further more it seems that the driver is broken in the kernel and
-the firmware doesn't seem to be available anymore.
-
-As such since this is breaking the build of libsanitizer (and so the
-GCC bootstrap[2]) I propose to remove this.
-
-[1] https://lkml.org/lkml/2021/3/2/153
-[2] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100379
-
-(cherry picked from commit f7c5351552387bd43f6ca3631016d7f0dfe0f135)
-
-libsanitizer/ChangeLog:
-
-	PR sanitizer/100379
-	* sanitizer_common/sanitizer_common_interceptors_ioctl.inc: Cherry-pick
-	llvm-project revision f7c5351552387bd43f6ca3631016d7f0dfe0f135.
-	* sanitizer_common/sanitizer_platform_limits_posix.cpp: Likewise.
-	* sanitizer_common/sanitizer_platform_limits_posix.h: Likewise.
----
- .../sanitizer_common_interceptors_ioctl.inc           |  9 ---------
- .../sanitizer_platform_limits_posix.cpp               | 11 -----------
- .../sanitizer_platform_limits_posix.h                 | 10 ----------
- 3 files changed, 30 deletions(-)
-
-diff --git a/libsanitizer/sanitizer_common/sanitizer_common_interceptors_ioctl.inc b/libsanitizer/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
-index 7f181258eab..b7da6598755 100644
---- a/libsanitizer/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
-+++ b/libsanitizer/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
-@@ -370,15 +370,6 @@ static void ioctl_table_fill() {
- 
- #if SANITIZER_GLIBC
-   // _(SIOCDEVPLIP, WRITE, struct_ifreq_sz); // the same as EQL_ENSLAVE
--  _(CYGETDEFTHRESH, WRITE, sizeof(int));
--  _(CYGETDEFTIMEOUT, WRITE, sizeof(int));
--  _(CYGETMON, WRITE, struct_cyclades_monitor_sz);
--  _(CYGETTHRESH, WRITE, sizeof(int));
--  _(CYGETTIMEOUT, WRITE, sizeof(int));
--  _(CYSETDEFTHRESH, NONE, 0);
--  _(CYSETDEFTIMEOUT, NONE, 0);
--  _(CYSETTHRESH, NONE, 0);
--  _(CYSETTIMEOUT, NONE, 0);
-   _(EQL_EMANCIPATE, WRITE, struct_ifreq_sz);
-   _(EQL_ENSLAVE, WRITE, struct_ifreq_sz);
-   _(EQL_GETMASTRCFG, WRITE, struct_ifreq_sz);
-diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp
-index 35a690cba5c..6e5c330b98e 100644
---- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp
-+++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp
-@@ -143,7 +143,6 @@ typedef struct user_fpregs elf_fpregset_t;
- # include <sys/procfs.h>
- #endif
- #include <sys/user.h>
--#include <linux/cyclades.h>
- #include <linux/if_eql.h>
- #include <linux/if_plip.h>
- #include <linux/lp.h>
-@@ -460,7 +459,6 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
- 
- #if SANITIZER_GLIBC
-   unsigned struct_ax25_parms_struct_sz = sizeof(struct ax25_parms_struct);
--  unsigned struct_cyclades_monitor_sz = sizeof(struct cyclades_monitor);
- #if EV_VERSION > (0x010000)
-   unsigned struct_input_keymap_entry_sz = sizeof(struct input_keymap_entry);
- #else
-@@ -824,15 +822,6 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
- #endif // SANITIZER_LINUX
- 
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
--  unsigned IOCTL_CYGETDEFTHRESH = CYGETDEFTHRESH;
--  unsigned IOCTL_CYGETDEFTIMEOUT = CYGETDEFTIMEOUT;
--  unsigned IOCTL_CYGETMON = CYGETMON;
--  unsigned IOCTL_CYGETTHRESH = CYGETTHRESH;
--  unsigned IOCTL_CYGETTIMEOUT = CYGETTIMEOUT;
--  unsigned IOCTL_CYSETDEFTHRESH = CYSETDEFTHRESH;
--  unsigned IOCTL_CYSETDEFTIMEOUT = CYSETDEFTIMEOUT;
--  unsigned IOCTL_CYSETTHRESH = CYSETTHRESH;
--  unsigned IOCTL_CYSETTIMEOUT = CYSETTIMEOUT;
-   unsigned IOCTL_EQL_EMANCIPATE = EQL_EMANCIPATE;
-   unsigned IOCTL_EQL_ENSLAVE = EQL_ENSLAVE;
-   unsigned IOCTL_EQL_GETMASTRCFG = EQL_GETMASTRCFG;
-diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h
-index ad358eef8b7..cba41ba5494 100644
---- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h
-+++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h
-@@ -983,7 +983,6 @@ extern unsigned struct_vt_mode_sz;
- 
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
- extern unsigned struct_ax25_parms_struct_sz;
--extern unsigned struct_cyclades_monitor_sz;
- extern unsigned struct_input_keymap_entry_sz;
- extern unsigned struct_ipx_config_data_sz;
- extern unsigned struct_kbdiacrs_sz;
-@@ -1328,15 +1327,6 @@ extern unsigned IOCTL_VT_WAITACTIVE;
- #endif  // SANITIZER_LINUX
- 
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
--extern unsigned IOCTL_CYGETDEFTHRESH;
--extern unsigned IOCTL_CYGETDEFTIMEOUT;
--extern unsigned IOCTL_CYGETMON;
--extern unsigned IOCTL_CYGETTHRESH;
--extern unsigned IOCTL_CYGETTIMEOUT;
--extern unsigned IOCTL_CYSETDEFTHRESH;
--extern unsigned IOCTL_CYSETDEFTIMEOUT;
--extern unsigned IOCTL_CYSETTHRESH;
--extern unsigned IOCTL_CYSETTIMEOUT;
- extern unsigned IOCTL_EQL_EMANCIPATE;
- extern unsigned IOCTL_EQL_ENSLAVE;
- extern unsigned IOCTL_EQL_GETMASTRCFG;
--- 
-2.31.1
-
diff --git a/stackinator/repo/packages/gcc/patch-f1feb74046e0feb0596b93bbb822fae02940a90e.patch b/stackinator/repo/packages/gcc/patch-f1feb74046e0feb0596b93bbb822fae02940a90e.patch
deleted file mode 100644
index 2448be07..00000000
--- a/stackinator/repo/packages/gcc/patch-f1feb74046e0feb0596b93bbb822fae02940a90e.patch
+++ /dev/null
@@ -1,133 +0,0 @@
-From f1feb74046e0feb0596b93bbb822fae02940a90e Mon Sep 17 00:00:00 2001
-From: Patrick Palka <ppalka@redhat.com>
-Date: Fri, 4 Jun 2021 13:46:53 -0400
-Subject: [PATCH] c++: tsubst_function_decl and excess arg levels [PR100102]
-
-Here, when instantiating the dependent alias template
-duration::__is_harmonic with args={{T,U},{int}}, we find ourselves
-substituting the function decl _S_gcd.  Since we have more arg levels
-than _S_gcd has parm levels, an old special case in tsubst_function_decl
-causes us to unwantedly reduce args to its innermost level, yielding
-args={int}, which leads to a nonsensical substitution into the decl
-context and eventually a crash.
-
-The comment for this special case refers to three examples for which we
-ought to see more arg levels than parm levels here, but none of the
-examples actually demonstrate this.  In the first example, when
-defining S<int>::f(U) parms_depth is 2 and args_depth is 1, and
-later when instantiating say S<int>::f<char> both depths are 2.  In the
-second example, when substituting the template friend declaration
-parms_depth is 2 and args_depth is 1, and later when instantiating f
-both depths are 1.  Finally, the third example is invalid since we can't
-specialize a member template of an unspecialized class template like
-that.
-
-Given that this reduction code seems no longer relevant for its
-documented purpose and that it causes problems as in the PR, this patch
-just removes it.  Note that as far as bootstrap/regtest is concerned,
-this code is dead; the below two tests would be the first to reach it.
-
-	PR c++/100102
-
-gcc/cp/ChangeLog:
-
-	* pt.c (tsubst_function_decl): Remove old code for reducing
-	args when it has excess levels.
-
-gcc/testsuite/ChangeLog:
-
-	* g++.dg/cpp0x/alias-decl-72.C: New test.
-	* g++.dg/cpp0x/alias-decl-72a.C: New test.
-
-(cherry picked from commit 5357ab75dedef403b0eebf9277d61d1cbeb5898f)
----
- gcc/cp/pt.c                                 | 39 ---------------------
- gcc/testsuite/g++.dg/cpp0x/alias-decl-72.C  |  9 +++++
- gcc/testsuite/g++.dg/cpp0x/alias-decl-72a.C |  9 +++++
- 3 files changed, 18 insertions(+), 39 deletions(-)
- create mode 100644 gcc/testsuite/g++.dg/cpp0x/alias-decl-72.C
- create mode 100644 gcc/testsuite/g++.dg/cpp0x/alias-decl-72a.C
-
-diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
-index 1434beb80f4..1761a902218 100644
---- a/gcc/cp/pt.c
-+++ b/gcc/cp/pt.c
-@@ -13954,45 +13954,6 @@ tsubst_function_decl (tree t, tree args, tsubst_flags_t complain,
- 	  if (tree spec = retrieve_specialization (gen_tmpl, argvec, hash))
- 	    return spec;
- 	}
--
--      /* We can see more levels of arguments than parameters if
--	 there was a specialization of a member template, like
--	 this:
--
--	 template <class T> struct S { template <class U> void f(); }
--	 template <> template <class U> void S<int>::f(U);
--
--	 Here, we'll be substituting into the specialization,
--	 because that's where we can find the code we actually
--	 want to generate, but we'll have enough arguments for
--	 the most general template.
--
--	 We also deal with the peculiar case:
--
--	 template <class T> struct S {
--	   template <class U> friend void f();
--	 };
--	 template <class U> void f() {}
--	 template S<int>;
--	 template void f<double>();
--
--	 Here, the ARGS for the instantiation of will be {int,
--	 double}.  But, we only need as many ARGS as there are
--	 levels of template parameters in CODE_PATTERN.  We are
--	 careful not to get fooled into reducing the ARGS in
--	 situations like:
--
--	 template <class T> struct S { template <class U> void f(U); }
--	 template <class T> template <> void S<T>::f(int) {}
--
--	 which we can spot because the pattern will be a
--	 specialization in this case.  */
--      int args_depth = TMPL_ARGS_DEPTH (args);
--      int parms_depth =
--	TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
--
--      if (args_depth > parms_depth && !DECL_TEMPLATE_SPECIALIZATION (t))
--	args = get_innermost_template_args (args, parms_depth);
-     }
-   else
-     {
-diff --git a/gcc/testsuite/g++.dg/cpp0x/alias-decl-72.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-72.C
-new file mode 100644
-index 00000000000..8009756dcba
---- /dev/null
-+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-72.C
-@@ -0,0 +1,9 @@
-+// PR c++/100102
-+// { dg-do compile { target c++11 } }
-+
-+template<int()> struct ratio;
-+template<class T, class U> struct duration {
-+  static constexpr int _S_gcd();
-+  template<class> using __is_harmonic = ratio<_S_gcd>;
-+  using type = __is_harmonic<int>;
-+};
-diff --git a/gcc/testsuite/g++.dg/cpp0x/alias-decl-72a.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-72a.C
-new file mode 100644
-index 00000000000..a4443e18f9d
---- /dev/null
-+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-72a.C
-@@ -0,0 +1,9 @@
-+// PR c++/100102
-+// { dg-do compile { target c++11 } }
-+
-+template<int> struct ratio;
-+template<class T> struct duration {
-+  static constexpr int _S_gcd();
-+  template<class> using __is_harmonic = ratio<(duration::_S_gcd)()>;
-+  using type = __is_harmonic<int>;
-+};
--- 
-2.31.1
-
diff --git a/stackinator/repo/packages/gcc/patch-fc930b3010bd0de899a3da3209eab20664ddb703.patch b/stackinator/repo/packages/gcc/patch-fc930b3010bd0de899a3da3209eab20664ddb703.patch
deleted file mode 100644
index 27e5a2b5..00000000
--- a/stackinator/repo/packages/gcc/patch-fc930b3010bd0de899a3da3209eab20664ddb703.patch
+++ /dev/null
@@ -1,133 +0,0 @@
-From fc930b3010bd0de899a3da3209eab20664ddb703 Mon Sep 17 00:00:00 2001
-From: Patrick Palka <ppalka@redhat.com>
-Date: Fri, 4 Jun 2021 13:46:53 -0400
-Subject: [PATCH] c++: tsubst_function_decl and excess arg levels [PR100102]
-
-Here, when instantiating the dependent alias template
-duration::__is_harmonic with args={{T,U},{int}}, we find ourselves
-substituting the function decl _S_gcd.  Since we have more arg levels
-than _S_gcd has parm levels, an old special case in tsubst_function_decl
-causes us to unwantedly reduce args to its innermost level, yielding
-args={int}, which leads to a nonsensical substitution into the decl
-context and eventually a crash.
-
-The comment for this special case refers to three examples for which we
-ought to see more arg levels than parm levels here, but none of the
-examples actually demonstrate this.  In the first example, when
-defining S<int>::f(U) parms_depth is 2 and args_depth is 1, and
-later when instantiating say S<int>::f<char> both depths are 2.  In the
-second example, when substituting the template friend declaration
-parms_depth is 2 and args_depth is 1, and later when instantiating f
-both depths are 1.  Finally, the third example is invalid since we can't
-specialize a member template of an unspecialized class template like
-that.
-
-Given that this reduction code seems no longer relevant for its
-documented purpose and that it causes problems as in the PR, this patch
-just removes it.  Note that as far as bootstrap/regtest is concerned,
-this code is dead; the below two tests would be the first to reach it.
-
-	PR c++/100102
-
-gcc/cp/ChangeLog:
-
-	* pt.c (tsubst_function_decl): Remove old code for reducing
-	args when it has excess levels.
-
-gcc/testsuite/ChangeLog:
-
-	* g++.dg/cpp0x/alias-decl-72.C: New test.
-	* g++.dg/cpp0x/alias-decl-72a.C: New test.
-
-(cherry picked from commit 5357ab75dedef403b0eebf9277d61d1cbeb5898f)
----
- gcc/cp/pt.c                                 | 39 ---------------------
- gcc/testsuite/g++.dg/cpp0x/alias-decl-72.C  |  9 +++++
- gcc/testsuite/g++.dg/cpp0x/alias-decl-72a.C |  9 +++++
- 3 files changed, 18 insertions(+), 39 deletions(-)
- create mode 100644 gcc/testsuite/g++.dg/cpp0x/alias-decl-72.C
- create mode 100644 gcc/testsuite/g++.dg/cpp0x/alias-decl-72a.C
-
-diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
-index 5a957141ba3..7ce9ac234f8 100644
---- a/gcc/cp/pt.c
-+++ b/gcc/cp/pt.c
-@@ -13811,45 +13811,6 @@ tsubst_function_decl (tree t, tree args, tsubst_flags_t complain,
- 	  if (tree spec = retrieve_specialization (gen_tmpl, argvec, hash))
- 	    return spec;
- 	}
--
--      /* We can see more levels of arguments than parameters if
--	 there was a specialization of a member template, like
--	 this:
--
--	 template <class T> struct S { template <class U> void f(); }
--	 template <> template <class U> void S<int>::f(U);
--
--	 Here, we'll be substituting into the specialization,
--	 because that's where we can find the code we actually
--	 want to generate, but we'll have enough arguments for
--	 the most general template.
--
--	 We also deal with the peculiar case:
--
--	 template <class T> struct S {
--	   template <class U> friend void f();
--	 };
--	 template <class U> void f() {}
--	 template S<int>;
--	 template void f<double>();
--
--	 Here, the ARGS for the instantiation of will be {int,
--	 double}.  But, we only need as many ARGS as there are
--	 levels of template parameters in CODE_PATTERN.  We are
--	 careful not to get fooled into reducing the ARGS in
--	 situations like:
--
--	 template <class T> struct S { template <class U> void f(U); }
--	 template <class T> template <> void S<T>::f(int) {}
--
--	 which we can spot because the pattern will be a
--	 specialization in this case.  */
--      int args_depth = TMPL_ARGS_DEPTH (args);
--      int parms_depth =
--	TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
--
--      if (args_depth > parms_depth && !DECL_TEMPLATE_SPECIALIZATION (t))
--	args = get_innermost_template_args (args, parms_depth);
-     }
-   else
-     {
-diff --git a/gcc/testsuite/g++.dg/cpp0x/alias-decl-72.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-72.C
-new file mode 100644
-index 00000000000..8009756dcba
---- /dev/null
-+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-72.C
-@@ -0,0 +1,9 @@
-+// PR c++/100102
-+// { dg-do compile { target c++11 } }
-+
-+template<int()> struct ratio;
-+template<class T, class U> struct duration {
-+  static constexpr int _S_gcd();
-+  template<class> using __is_harmonic = ratio<_S_gcd>;
-+  using type = __is_harmonic<int>;
-+};
-diff --git a/gcc/testsuite/g++.dg/cpp0x/alias-decl-72a.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-72a.C
-new file mode 100644
-index 00000000000..a4443e18f9d
---- /dev/null
-+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-72a.C
-@@ -0,0 +1,9 @@
-+// PR c++/100102
-+// { dg-do compile { target c++11 } }
-+
-+template<int> struct ratio;
-+template<class T> struct duration {
-+  static constexpr int _S_gcd();
-+  template<class> using __is_harmonic = ratio<(duration::_S_gcd)()>;
-+  using type = __is_harmonic<int>;
-+};
--- 
-2.31.1
-
diff --git a/stackinator/repo/packages/gcc/piclibs.patch b/stackinator/repo/packages/gcc/piclibs.patch
deleted file mode 100644
index 0ecb7930..00000000
--- a/stackinator/repo/packages/gcc/piclibs.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-diff --git a/libgfortran/Makefile.in b/libgfortran/Makefile.in
-index 62b9f7a..7666fdb 100644
---- a/libgfortran/Makefile.in
-+++ b/libgfortran/Makefile.in
-@@ -357,11 +357,11 @@ AUTOMAKE = @AUTOMAKE@
- AWK = @AWK@
- CC = @CC@
- CCDEPMODE = @CCDEPMODE@
--CFLAGS = @CFLAGS@
-+CFLAGS = @CFLAGS@ -fPIC
- CPP = @CPP@
--CPPFLAGS = @CPPFLAGS@
-+CPPFLAGS = @CPPFLAGS@ -fPIC
- CYGPATH_W = @CYGPATH_W@
--DEFS = @DEFS@
-+DEFS = @DEFS@ -fPIC
- DEPDIR = @DEPDIR@
- DSYMUTIL = @DSYMUTIL@
- DUMPBIN = @DUMPBIN@
-@@ -371,7 +371,7 @@ ECHO_T = @ECHO_T@
- EGREP = @EGREP@
- EXEEXT = @EXEEXT@
- FC = @FC@
--FCFLAGS = @FCFLAGS@
-+FCFLAGS = @FCFLAGS@ -fPIC
- FGREP = @FGREP@
- FPU_HOST_HEADER = @FPU_HOST_HEADER@
- GREP = @GREP@
-diff --git a/libstdc++-v3/Makefile.in b/libstdc++-v3/Makefile.in
-index bede542..9b3e442 100644
---- a/libstdc++-v3/Makefile.in
-+++ b/libstdc++-v3/Makefile.in
-@@ -115,7 +115,7 @@ CC = @CC@
- CCODECVT_CC = @CCODECVT_CC@
- CCOLLATE_CC = @CCOLLATE_CC@
- CCTYPE_CC = @CCTYPE_CC@
--CFLAGS = @CFLAGS@
-+CFLAGS = @CFLAGS@ -fPIC
- CLOCALE_CC = @CLOCALE_CC@
- CLOCALE_H = @CLOCALE_H@
- CLOCALE_INTERNAL_H = @CLOCALE_INTERNAL_H@
-@@ -124,7 +124,7 @@ CMESSAGES_H = @CMESSAGES_H@
- CMONEY_CC = @CMONEY_CC@
- CNUMERIC_CC = @CNUMERIC_CC@
- CPP = @CPP@
--CPPFLAGS = @CPPFLAGS@
-+CPPFLAGS = @CPPFLAGS@ -fPIC
- CPU_DEFINES_SRCDIR = @CPU_DEFINES_SRCDIR@
- CPU_OPT_BITS_RANDOM = @CPU_OPT_BITS_RANDOM@
- CPU_OPT_EXT_RANDOM = @CPU_OPT_EXT_RANDOM@
-@@ -139,7 +139,7 @@ CYGPATH_W = @CYGPATH_W@
- C_INCLUDE_DIR = @C_INCLUDE_DIR@
- DBLATEX = @DBLATEX@
- DEBUG_FLAGS = @DEBUG_FLAGS@
--DEFS = @DEFS@
-+DEFS = @DEFS@ -fPIC
- DOT = @DOT@
- DOXYGEN = @DOXYGEN@
- DSYMUTIL = @DSYMUTIL@
--- 
-2.8.3
-
diff --git a/stackinator/repo/packages/gcc/signal.patch b/stackinator/repo/packages/gcc/signal.patch
deleted file mode 100644
index 21bf9e03..00000000
--- a/stackinator/repo/packages/gcc/signal.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 6c709b6262e8b6441b1e94526d6d65d4ce7a7dec Mon Sep 17 00:00:00 2001
-From: doko <doko@138bc75d-0d04-0410-961f-82ee72b054a4>
-Date: Thu, 7 Sep 2017 07:18:57 +0000
-Subject: [PATCH] 2017-09-07  Matthias Klose  <doko@ubuntu.com>
-
-        * asan/asan_linux.cc: Include <signal.h>
-
-
-git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-5-branch@251830 138bc75d-0d04-0410-961f-82ee72b054a4
----
- libsanitizer/asan/asan_linux.cc | 1 +
- 2 files changed, 5 insertions(+)
-
-diff --git a/libsanitizer/asan/asan_linux.cc b/libsanitizer/asan/asan_linux.cc
-index c504168..59087b9 100644
---- a/libsanitizer/asan/asan_linux.cc
-+++ b/libsanitizer/asan/asan_linux.cc
-@@ -29,6 +29,7 @@
- #include <dlfcn.h>
- #include <fcntl.h>
- #include <pthread.h>
-+#include <signal.h>
- #include <stdio.h>
- #include <unistd.h>
- #include <unwind.h>
--- 
-2.9.3
-
diff --git a/stackinator/repo/packages/gcc/stack_t-4.9.patch b/stackinator/repo/packages/gcc/stack_t-4.9.patch
deleted file mode 100644
index b894557c..00000000
--- a/stackinator/repo/packages/gcc/stack_t-4.9.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-From 833e00c01e96f61e24cd7ec97b93fad212dc914b Mon Sep 17 00:00:00 2001
-From: doko <doko@138bc75d-0d04-0410-961f-82ee72b054a4>
-Date: Thu, 7 Sep 2017 07:17:17 +0000
-Subject: [PATCH] 2017-09-07  Matthias Klose  <doko@ubuntu.com>
-
-        Backported from mainline
-        2017-07-14  Jakub Jelinek  <jakub@redhat.com>
-
-        PR sanitizer/81066
-        * sanitizer_common/sanitizer_linux.h: Cherry-pick upstream r307969.
-        * sanitizer_common/sanitizer_linux.cc: Likewise.
-        * sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc: Likewise.
-        * tsan/tsan_platform_linux.cc: Likewise.
-
-
-git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-5-branch@251829 138bc75d-0d04-0410-961f-82ee72b054a4
----
- libsanitizer/sanitizer_common/sanitizer_linux.cc              |  3 +--
- libsanitizer/sanitizer_common/sanitizer_linux.h               |  4 +---
- .../sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc  |  2 +-
- libsanitizer/tsan/tsan_platform_linux.cc                      |  2 +-
- 5 files changed, 15 insertions(+), 7 deletions(-)
-
-diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.cc b/libsanitizer/sanitizer_common/sanitizer_linux.cc
-index 9feb307..821b26d 100644
---- a/libsanitizer/sanitizer_common/sanitizer_linux.cc
-+++ b/libsanitizer/sanitizer_common/sanitizer_linux.cc
-@@ -514,8 +514,7 @@ uptr internal_prctl(int option, uptr arg2, uptr arg3, uptr arg4, uptr arg5) {
- }
- #endif
- 
--uptr internal_sigaltstack(const struct sigaltstack *ss,
--                         struct sigaltstack *oss) {
-+uptr internal_sigaltstack(const void *ss, void *oss) {
-   return internal_syscall(__NR_sigaltstack, (uptr)ss, (uptr)oss);
- }
- 
-diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.h b/libsanitizer/sanitizer_common/sanitizer_linux.h
-index 086834c..3a6f4cd 100644
---- a/libsanitizer/sanitizer_common/sanitizer_linux.h
-+++ b/libsanitizer/sanitizer_common/sanitizer_linux.h
-@@ -27,8 +26,7 @@ struct linux_dirent;
- // Syscall wrappers.
- uptr internal_getdents(fd_t fd, struct linux_dirent *dirp, unsigned int count);
- uptr internal_prctl(int option, uptr arg2, uptr arg3, uptr arg4, uptr arg5);
--uptr internal_sigaltstack(const struct sigaltstack* ss,
--                          struct sigaltstack* oss);
-+uptr internal_sigaltstack(const void* ss, void* oss);
- uptr internal_sigaction(int signum, const __sanitizer_kernel_sigaction_t *act,
-     __sanitizer_kernel_sigaction_t *oldact);
- uptr internal_sigprocmask(int how, __sanitizer_kernel_sigset_t *set,
-diff --git a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
-index 5881202..c54894d 100644
---- a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
-+++ b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
-@@ -234,7 +234,7 @@ static int TracerThread(void* argument) {
- 
-   // Alternate stack for signal handling.
-   InternalScopedBuffer<char> handler_stack_memory(kHandlerStackSize);
--  struct sigaltstack handler_stack;
-+  stack_t handler_stack;
-   internal_memset(&handler_stack, 0, sizeof(handler_stack));
-   handler_stack.ss_sp = handler_stack_memory.data();
-   handler_stack.ss_size = kHandlerStackSize;
-diff --git a/libsanitizer/tsan/tsan_platform_linux.cc b/libsanitizer/tsan/tsan_platform_linux.cc
-index 3259131..b8e9078 100644
---- a/libsanitizer/tsan/tsan_platform_linux.cc
-+++ b/libsanitizer/tsan/tsan_platform_linux.cc
-@@ -377,7 +377,7 @@ bool IsGlobalVar(uptr addr) {
- int ExtractResolvFDs(void *state, int *fds, int nfd) {
- #if SANITIZER_LINUX
-   int cnt = 0;
--  __res_state *statp = (__res_state*)state;
-+  struct __res_state *statp = (struct __res_state*)state;
-   for (int i = 0; i < MAXNS && cnt < nfd; i++) {
-     if (statp->_u._ext.nsaddrs[i] && statp->_u._ext.nssocks[i] != -1)
-       fds[cnt++] = statp->_u._ext.nssocks[i];
--- 
-2.9.3
-
diff --git a/stackinator/repo/packages/gcc/stack_t.patch b/stackinator/repo/packages/gcc/stack_t.patch
deleted file mode 100644
index 48a5a47a..00000000
--- a/stackinator/repo/packages/gcc/stack_t.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-From 833e00c01e96f61e24cd7ec97b93fad212dc914b Mon Sep 17 00:00:00 2001
-From: doko <doko@138bc75d-0d04-0410-961f-82ee72b054a4>
-Date: Thu, 7 Sep 2017 07:17:17 +0000
-Subject: [PATCH] 2017-09-07  Matthias Klose  <doko@ubuntu.com>
-
-        Backported from mainline
-        2017-07-14  Jakub Jelinek  <jakub@redhat.com>
-
-        PR sanitizer/81066
-        * sanitizer_common/sanitizer_linux.h: Cherry-pick upstream r307969.
-        * sanitizer_common/sanitizer_linux.cc: Likewise.
-        * sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc: Likewise.
-        * tsan/tsan_platform_linux.cc: Likewise.
-
-
-git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-5-branch@251829 138bc75d-0d04-0410-961f-82ee72b054a4
----
- libsanitizer/sanitizer_common/sanitizer_linux.cc              |  3 +--
- libsanitizer/sanitizer_common/sanitizer_linux.h               |  4 +---
- .../sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc  |  2 +-
- libsanitizer/tsan/tsan_platform_linux.cc                      |  2 +-
- 5 files changed, 15 insertions(+), 7 deletions(-)
-
-diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.cc b/libsanitizer/sanitizer_common/sanitizer_linux.cc
-index 9feb307..821b26d 100644
---- a/libsanitizer/sanitizer_common/sanitizer_linux.cc
-+++ b/libsanitizer/sanitizer_common/sanitizer_linux.cc
-@@ -514,8 +514,7 @@ uptr internal_prctl(int option, uptr arg2, uptr arg3, uptr arg4, uptr arg5) {
- }
- #endif
- 
--uptr internal_sigaltstack(const struct sigaltstack *ss,
--                         struct sigaltstack *oss) {
-+uptr internal_sigaltstack(const void *ss, void *oss) {
-   return internal_syscall(SYSCALL(sigaltstack), (uptr)ss, (uptr)oss);
- }
- 
-diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.h b/libsanitizer/sanitizer_common/sanitizer_linux.h
-index 086834c..3a6f4cd 100644
---- a/libsanitizer/sanitizer_common/sanitizer_linux.h
-+++ b/libsanitizer/sanitizer_common/sanitizer_linux.h
-@@ -18,7 +18,6 @@
- #include "sanitizer_platform_limits_posix.h"
- 
- struct link_map;  // Opaque type returned by dlopen().
--struct sigaltstack;
- 
- namespace __sanitizer {
- // Dirent structure for getdents(). Note that this structure is different from
-@@ -27,8 +26,7 @@ struct linux_dirent;
- 
- // Syscall wrappers.
- uptr internal_getdents(fd_t fd, struct linux_dirent *dirp, unsigned int count);
--uptr internal_sigaltstack(const struct sigaltstack* ss,
--                          struct sigaltstack* oss);
-+uptr internal_sigaltstack(const void* ss, void* oss);
- uptr internal_sigprocmask(int how, __sanitizer_sigset_t *set,
-     __sanitizer_sigset_t *oldset);
- void internal_sigfillset(__sanitizer_sigset_t *set);
-diff --git a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
-index 5881202..c54894d 100644
---- a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
-+++ b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
-@@ -234,7 +234,7 @@ static int TracerThread(void* argument) {
- 
-   // Alternate stack for signal handling.
-   InternalScopedBuffer<char> handler_stack_memory(kHandlerStackSize);
--  struct sigaltstack handler_stack;
-+  stack_t handler_stack;
-   internal_memset(&handler_stack, 0, sizeof(handler_stack));
-   handler_stack.ss_sp = handler_stack_memory.data();
-   handler_stack.ss_size = kHandlerStackSize;
-diff --git a/libsanitizer/tsan/tsan_platform_linux.cc b/libsanitizer/tsan/tsan_platform_linux.cc
-index 3259131..b8e9078 100644
---- a/libsanitizer/tsan/tsan_platform_linux.cc
-+++ b/libsanitizer/tsan/tsan_platform_linux.cc
-@@ -377,7 +377,7 @@ bool IsGlobalVar(uptr addr) {
- int ExtractResolvFDs(void *state, int *fds, int nfd) {
- #if SANITIZER_LINUX
-   int cnt = 0;
--  __res_state *statp = (__res_state*)state;
-+  struct __res_state *statp = (struct __res_state*)state;
-   for (int i = 0; i < MAXNS && cnt < nfd; i++) {
-     if (statp->_u._ext.nsaddrs[i] && statp->_u._ext.nssocks[i] != -1)
-       fds[cnt++] = statp->_u._ext.nssocks[i];
--- 
-2.9.3
-
diff --git a/stackinator/repo/packages/gcc/sys_ustat-4.9.patch b/stackinator/repo/packages/gcc/sys_ustat-4.9.patch
deleted file mode 100644
index 75453af3..00000000
--- a/stackinator/repo/packages/gcc/sys_ustat-4.9.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-The sys_ustat.h patch modified for gcc 4.9.x.
-
-diff -Naurb gcc-4.9.4.orig/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc gcc-4.9.4/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
---- gcc-4.9.4.orig/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc	2013-12-19 06:54:11.000000000 -0600
-+++ gcc-4.9.4/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc	2018-12-11 15:57:46.901800462 -0600
-@@ -81,7 +81,6 @@
- #include <sys/statvfs.h>
- #include <sys/timex.h>
- #include <sys/user.h>
--#include <sys/ustat.h>
- #include <linux/cyclades.h>
- #include <linux/if_eql.h>
- #include <linux/if_plip.h>
-@@ -163,7 +162,19 @@
-   unsigned struct_old_utsname_sz = sizeof(struct old_utsname);
-   unsigned struct_oldold_utsname_sz = sizeof(struct oldold_utsname);
-   unsigned struct_itimerspec_sz = sizeof(struct itimerspec);
--  unsigned struct_ustat_sz = sizeof(struct ustat);
-+  // Use pre-computed size of struct ustat to avoid <sys/ustat.h> which
-+  // has been removed from glibc 2.28.
-+#if defined(__aarch64__) || defined(__s390x__) || defined (__mips64) \
-+  || defined(__powerpc64__) || defined(__arch64__) || defined(__sparcv9) \
-+  || defined(__x86_64__)
-+#define SIZEOF_STRUCT_USTAT 32
-+#elif defined(__arm__) || defined(__i386__) || defined(__mips__) \
-+  || defined(__powerpc__) || defined(__s390__)
-+#define SIZEOF_STRUCT_USTAT 20
-+#else
-+#error Unknown size of struct ustat
-+#endif
-+  unsigned struct_ustat_sz = SIZEOF_STRUCT_USTAT;
- #endif // SANITIZER_LINUX
- 
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
diff --git a/stackinator/repo/packages/gcc/sys_ustat.h.patch b/stackinator/repo/packages/gcc/sys_ustat.h.patch
deleted file mode 100644
index c65757b4..00000000
--- a/stackinator/repo/packages/gcc/sys_ustat.h.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From 9569b61168b963a6cea7b782fd350dee489ad42c Mon Sep 17 00:00:00 2001
-From: "H.J. Lu" <hjl.tools@gmail.com>
-Date: Mon, 21 May 2018 13:17:55 -0700
-Subject: [PATCH] libsanitizer: Use pre-computed size of struct ustat for Linux
-
-Cherry-pick compiler-rt revision 333213:
-
-<sys/ustat.h> has been removed from glibc 2.28 by:
-
-commit cf2478d53ad7071e84c724a986b56fe17f4f4ca7
-Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
-Date:   Sun Mar 18 11:28:59 2018 +0800
-
-    Deprecate ustat syscall interface
-
-This patch uses pre-computed size of struct ustat for Linux.
-
-	PR sanitizer/85835
-	* sanitizer_common/sanitizer_platform_limits_posix.cc: Don't
-	include <sys/ustat.h> for Linux.
-	(SIZEOF_STRUCT_USTAT): New.
-	(struct_ustat_sz): Use SIZEOF_STRUCT_USTAT for Linux.
----
- .../sanitizer_platform_limits_posix.cc            | 15 +++++++++++++--
- 1 file changed, 13 insertions(+), 2 deletions(-)
-
-diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
-index 858bb218450..de18e56d11c 100644
---- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
-+++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
-@@ -157,7 +157,6 @@ typedef struct user_fpregs elf_fpregset_t;
- # include <sys/procfs.h>
- #endif
- #include <sys/user.h>
--#include <sys/ustat.h>
- #include <linux/cyclades.h>
- #include <linux/if_eql.h>
- #include <linux/if_plip.h>
-@@ -250,7 +249,19 @@ namespace __sanitizer {
- #endif // SANITIZER_LINUX || SANITIZER_FREEBSD
- 
- #if SANITIZER_LINUX && !SANITIZER_ANDROID
--  unsigned struct_ustat_sz = sizeof(struct ustat);
-+  // Use pre-computed size of struct ustat to avoid <sys/ustat.h> which
-+  // has been removed from glibc 2.28.
-+#if defined(__aarch64__) || defined(__s390x__) || defined (__mips64) \
-+  || defined(__powerpc64__) || defined(__arch64__) || defined(__sparcv9) \
-+  || defined(__x86_64__)
-+#define SIZEOF_STRUCT_USTAT 32
-+#elif defined(__arm__) || defined(__i386__) || defined(__mips__) \
-+  || defined(__powerpc__) || defined(__s390__)
-+#define SIZEOF_STRUCT_USTAT 20
-+#else
-+#error Unknown size of struct ustat
-+#endif
-+  unsigned struct_ustat_sz = SIZEOF_STRUCT_USTAT;
-   unsigned struct_rlimit64_sz = sizeof(struct rlimit64);
-   unsigned struct_statvfs64_sz = sizeof(struct statvfs64);
- #endif // SANITIZER_LINUX && !SANITIZER_ANDROID
--- 
-2.17.0
-
-
diff --git a/stackinator/repo/packages/gcc/ucontext_t-java.patch b/stackinator/repo/packages/gcc/ucontext_t-java.patch
deleted file mode 100644
index a43e0b5a..00000000
--- a/stackinator/repo/packages/gcc/ucontext_t-java.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From 9b9287cde20ea57578cf07efb2a96ed4cc0da36f Mon Sep 17 00:00:00 2001
-From: doko <doko@138bc75d-0d04-0410-961f-82ee72b054a4>
-Date: Thu, 7 Sep 2017 07:22:07 +0000
-Subject: [PATCH] 2017-09-07  Matthias Klose  <doko@ubuntu.com>
-
-        * include/x86_64-signal.h (HANDLE_DIVIDE_OVERFLOW): Replace
-        'struct ucontext' with ucontext_t.
-        * include/i386-signal.h (HANDLE_DIVIDE_OVERFLOW): Likewise.
-        * include/s390-signal.h (HANDLE_DIVIDE_OVERFLOW): Likewise.
-
-
-git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-5-branch@251832 138bc75d-0d04-0410-961f-82ee72b054a4
----
- libjava/include/i386-signal.h   | 2 +-
- libjava/include/s390-signal.h   | 2 +-
- libjava/include/x86_64-signal.h | 2 +-
- 4 files changed, 10 insertions(+), 3 deletions(-)
-
-diff --git a/libjava/include/i386-signal.h b/libjava/include/i386-signal.h
-index c2409b0..ef77e7e 100644
---- a/libjava/include/i386-signal.h
-+++ b/libjava/include/i386-signal.h
-@@ -29,7 +29,7 @@ static void _Jv_##_name (int, siginfo_t *,			\
- #define HANDLE_DIVIDE_OVERFLOW						\
- do									\
- {									\
--  struct ucontext *_uc = (struct ucontext *)_p;				\
-+  ucontext_t *_uc = (ucontext_t *)_p;					\
-   gregset_t &_gregs = _uc->uc_mcontext.gregs;				\
-   unsigned char *_eip = (unsigned char *)_gregs[REG_EIP];		\
- 									\
-diff --git a/libjava/include/s390-signal.h b/libjava/include/s390-signal.h
-index 4ca4c10..9261b52 100644
---- a/libjava/include/s390-signal.h
-+++ b/libjava/include/s390-signal.h
-@@ -51,7 +51,7 @@ do									\
-   struct                                                                \
-   {                                                                     \
-     unsigned long int uc_flags;                                         \
--    struct ucontext *uc_link;                                           \
-+    ucontext_t *uc_link;                                                \
-     stack_t uc_stack;                                                   \
-     mcontext_t uc_mcontext;                                             \
-     unsigned long sigmask[2];                                           \
-diff --git a/libjava/include/x86_64-signal.h b/libjava/include/x86_64-signal.h
-index 12383b5..e36c5a3 100644
---- a/libjava/include/x86_64-signal.h
-+++ b/libjava/include/x86_64-signal.h
-@@ -28,7 +28,7 @@ static void _Jv_##_name (int, siginfo_t *,			\
- #define HANDLE_DIVIDE_OVERFLOW						\
- do									\
- {									\
--  struct ucontext *_uc = (struct ucontext *)_p;				\
-+  ucontext_t *_uc = (ucontext_t *)_p;					\
-   gregset_t &_gregs = _uc->uc_mcontext.gregs;				\
-   unsigned char *_rip = (unsigned char *)_gregs[REG_RIP];		\
- 									\
--- 
-2.9.3
-
diff --git a/stackinator/repo/packages/gcc/ucontext_t.patch b/stackinator/repo/packages/gcc/ucontext_t.patch
deleted file mode 100644
index a4f04b47..00000000
--- a/stackinator/repo/packages/gcc/ucontext_t.patch
+++ /dev/null
@@ -1,189 +0,0 @@
-From ecf0d1a107133c715763940c2b197aa814710e1b Mon Sep 17 00:00:00 2001
-From: jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
-Date: Tue, 4 Jul 2017 10:25:10 +0000
-Subject: [PATCH] Use ucontext_t not struct ucontext in linux-unwind.h files.
-
-Current glibc no longer gives the ucontext_t type the tag struct
-ucontext, to conform with POSIX namespace rules.  This requires
-various linux-unwind.h files in libgcc, that were previously using
-struct ucontext, to be fixed to use ucontext_t instead.  This is
-similar to the removal of the struct siginfo tag from siginfo_t some
-years ago.
-
-This patch changes those files to use ucontext_t instead.  As the
-standard name that should be unconditionally safe, so this is not
-restricted to architectures supported by glibc, or conditioned on the
-glibc version.
-
-Tested compilation together with current glibc with glibc's
-build-many-glibcs.py.
-
-	* config/aarch64/linux-unwind.h (aarch64_fallback_frame_state),
-	config/alpha/linux-unwind.h (alpha_fallback_frame_state),
-	config/bfin/linux-unwind.h (bfin_fallback_frame_state),
-	config/i386/linux-unwind.h (x86_64_fallback_frame_state,
-	x86_fallback_frame_state), config/m68k/linux-unwind.h (struct
-	uw_ucontext), config/nios2/linux-unwind.h (struct nios2_ucontext),
-	config/pa/linux-unwind.h (pa32_fallback_frame_state),
-	config/sh/linux-unwind.h (sh_fallback_frame_state),
-	config/tilepro/linux-unwind.h (tile_fallback_frame_state),
-	config/xtensa/linux-unwind.h (xtensa_fallback_frame_state): Use
-	ucontext_t instead of struct ucontext.
-
-
-git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-5-branch@249958 138bc75d-0d04-0410-961f-82ee72b054a4
----
- libgcc/config/aarch64/linux-unwind.h |  2 +-
- libgcc/config/alpha/linux-unwind.h   |  2 +-
- libgcc/config/bfin/linux-unwind.h    |  2 +-
- libgcc/config/i386/linux-unwind.h    |  4 ++--
- libgcc/config/m68k/linux-unwind.h    |  2 +-
- libgcc/config/nios2/linux-unwind.h   |  2 +-
- libgcc/config/pa/linux-unwind.h      |  2 +-
- libgcc/config/sh/linux-unwind.h      |  2 +-
- libgcc/config/tilepro/linux-unwind.h |  2 +-
- libgcc/config/xtensa/linux-unwind.h  |  2 +-
- 11 files changed, 25 insertions(+), 11 deletions(-)
-
-diff --git a/libgcc/config/aarch64/linux-unwind.h b/libgcc/config/aarch64/linux-unwind.h
-index 86d17b1..909f68f 100644
---- a/libgcc/config/aarch64/linux-unwind.h
-+++ b/libgcc/config/aarch64/linux-unwind.h
-@@ -52,7 +52,7 @@ aarch64_fallback_frame_state (struct _Unwind_Context *context,
-   struct rt_sigframe
-   {
-     siginfo_t info;
--    struct ucontext uc;
-+    ucontext_t uc;
-   };
- 
-   struct rt_sigframe *rt_;
-diff --git a/libgcc/config/alpha/linux-unwind.h b/libgcc/config/alpha/linux-unwind.h
-index d65474f..9a226b1 100644
---- a/libgcc/config/alpha/linux-unwind.h
-+++ b/libgcc/config/alpha/linux-unwind.h
-@@ -51,7 +51,7 @@ alpha_fallback_frame_state (struct _Unwind_Context *context,
-     {
-       struct rt_sigframe {
- 	siginfo_t info;
--	struct ucontext uc;
-+	ucontext_t uc;
-       } *rt_ = context->cfa;
-       sc = &rt_->uc.uc_mcontext;
-     }
-diff --git a/libgcc/config/bfin/linux-unwind.h b/libgcc/config/bfin/linux-unwind.h
-index 0c270e4..7fa95d2 100644
---- a/libgcc/config/bfin/linux-unwind.h
-+++ b/libgcc/config/bfin/linux-unwind.h
-@@ -52,7 +52,7 @@ bfin_fallback_frame_state (struct _Unwind_Context *context,
- 	void *puc;
- 	char retcode[8];
- 	siginfo_t info;
--	struct ucontext uc;
-+	ucontext_t uc;
-       } *rt_ = context->cfa;
- 
-       /* The void * cast is necessary to avoid an aliasing warning.
-diff --git a/libgcc/config/i386/linux-unwind.h b/libgcc/config/i386/linux-unwind.h
-index e54bf73..d35fc45 100644
---- a/libgcc/config/i386/linux-unwind.h
-+++ b/libgcc/config/i386/linux-unwind.h
-@@ -58,7 +58,7 @@ x86_64_fallback_frame_state (struct _Unwind_Context *context,
-   if (*(unsigned char *)(pc+0) == 0x48
-       && *(unsigned long long *)(pc+1) == RT_SIGRETURN_SYSCALL)
-     {
--      struct ucontext *uc_ = context->cfa;
-+      ucontext_t *uc_ = context->cfa;
-       /* The void * cast is necessary to avoid an aliasing warning.
-          The aliasing warning is correct, but should not be a problem
-          because it does not alias anything.  */
-@@ -138,7 +138,7 @@ x86_fallback_frame_state (struct _Unwind_Context *context,
- 	siginfo_t *pinfo;
- 	void *puc;
- 	siginfo_t info;
--	struct ucontext uc;
-+	ucontext_t uc;
-       } *rt_ = context->cfa;
-       /* The void * cast is necessary to avoid an aliasing warning.
-          The aliasing warning is correct, but should not be a problem
-diff --git a/libgcc/config/m68k/linux-unwind.h b/libgcc/config/m68k/linux-unwind.h
-index fb79a4d..b2f5ea4 100644
---- a/libgcc/config/m68k/linux-unwind.h
-+++ b/libgcc/config/m68k/linux-unwind.h
-@@ -33,7 +33,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
- /* <sys/ucontext.h> is unfortunately broken right now.  */
- struct uw_ucontext {
- 	unsigned long	  uc_flags;
--	struct ucontext  *uc_link;
-+	ucontext_t	 *uc_link;
- 	stack_t		  uc_stack;
- 	mcontext_t	  uc_mcontext;
- 	unsigned long	  uc_filler[80];
-diff --git a/libgcc/config/nios2/linux-unwind.h b/libgcc/config/nios2/linux-unwind.h
-index dff1c20..1d88afe 100644
---- a/libgcc/config/nios2/linux-unwind.h
-+++ b/libgcc/config/nios2/linux-unwind.h
-@@ -38,7 +38,7 @@ struct nios2_mcontext {
- 
- struct nios2_ucontext {
-   unsigned long uc_flags;
--  struct ucontext *uc_link;
-+  ucontext_t *uc_link;
-   stack_t uc_stack;
-   struct nios2_mcontext uc_mcontext;
-   sigset_t uc_sigmask;	/* mask last for extensibility */
-diff --git a/libgcc/config/pa/linux-unwind.h b/libgcc/config/pa/linux-unwind.h
-index 0149468..9157535 100644
---- a/libgcc/config/pa/linux-unwind.h
-+++ b/libgcc/config/pa/linux-unwind.h
-@@ -80,7 +80,7 @@ pa32_fallback_frame_state (struct _Unwind_Context *context,
-   struct sigcontext *sc;
-   struct rt_sigframe {
-     siginfo_t info;
--    struct ucontext uc;
-+    ucontext_t uc;
-   } *frame;
- 
-   /* rt_sigreturn trampoline:
-diff --git a/libgcc/config/sh/linux-unwind.h b/libgcc/config/sh/linux-unwind.h
-index e63091f..67033f0 100644
---- a/libgcc/config/sh/linux-unwind.h
-+++ b/libgcc/config/sh/linux-unwind.h
-@@ -180,7 +180,7 @@ sh_fallback_frame_state (struct _Unwind_Context *context,
-     {
-       struct rt_sigframe {
- 	siginfo_t info;
--	struct ucontext uc;
-+	ucontext_t uc;
-       } *rt_ = context->cfa;
-       /* The void * cast is necessary to avoid an aliasing warning.
-          The aliasing warning is correct, but should not be a problem
-diff --git a/libgcc/config/tilepro/linux-unwind.h b/libgcc/config/tilepro/linux-unwind.h
-index fd83ba7..e3c9ef0 100644
---- a/libgcc/config/tilepro/linux-unwind.h
-+++ b/libgcc/config/tilepro/linux-unwind.h
-@@ -61,7 +61,7 @@ tile_fallback_frame_state (struct _Unwind_Context *context,
-   struct rt_sigframe {
-     unsigned char save_area[C_ABI_SAVE_AREA_SIZE];
-     siginfo_t info;
--    struct ucontext uc;
-+    ucontext_t uc;
-   } *rt_;
- 
-   /* Return if this is not a signal handler.  */
-diff --git a/libgcc/config/xtensa/linux-unwind.h b/libgcc/config/xtensa/linux-unwind.h
-index 9a67b5d..98b7ea6 100644
---- a/libgcc/config/xtensa/linux-unwind.h
-+++ b/libgcc/config/xtensa/linux-unwind.h
-@@ -67,7 +67,7 @@ xtensa_fallback_frame_state (struct _Unwind_Context *context,
- 
-   struct rt_sigframe {
-     siginfo_t info;
--    struct ucontext uc;
-+    ucontext_t uc;
-   } *rt_;
- 
-   /* movi a2, __NR_rt_sigreturn; syscall */
--- 
-2.9.3
-
diff --git a/stackinator/repo/packages/gcc/zstd.patch b/stackinator/repo/packages/gcc/zstd.patch
deleted file mode 100644
index 8fb7583a..00000000
--- a/stackinator/repo/packages/gcc/zstd.patch
+++ /dev/null
@@ -1,43 +0,0 @@
---- a/gcc/Makefile.in
-+++ b/gcc/Makefile.in
-@@ -1075,7 +1075,8 @@ GNATMAKE = @GNATMAKE@
- # Libs needed (at present) just for jcf-dump.
- LDEXP_LIB = @LDEXP_LIB@
- 
--ZSTD_LIB = @ZSTD_LIB@
-+ZSTD_INC = @ZSTD_CPPFLAGS@
-+ZSTD_LIB = @ZSTD_LDFLAGS@ @ZSTD_LIB@
- 
- # Likewise, for use in the tools that must run on this machine
- # even if we are cross-building GCC.
-@@ -2275,7 +2276,7 @@ CFLAGS-version.o += -DBASEVER=$(BASEVER_s) -DDATESTAMP=$(DATESTAMP_s) \
- version.o: $(REVISION) $(DATESTAMP) $(BASEVER) $(DEVPHASE)
- 
- # lto-compress.o needs $(ZLIBINC) added to the include flags.
--CFLAGS-lto-compress.o += $(ZLIBINC)
-+CFLAGS-lto-compress.o += $(ZLIBINC) $(ZSTD_INC)
- 
- CFLAGS-lto-streamer-in.o += -DTARGET_MACHINE=\"$(target_noncanonical)\"
- 
---- a/gcc/configure
-+++ b/gcc/configure
-@@ -786,6 +786,8 @@ LTLIBICONV
- LIBICONV
- ZSTD_LIB
- ZSTD_INCLUDE
-+ZSTD_LDFLAGS
-+ZSTD_CPPFLAGS
- DL_LIB
- LDEXP_LIB
- EXTRA_GCC_LIBS
---- a/gcc/configure.ac
-+++ b/gcc/configure.ac
-@@ -1339,6 +1339,8 @@ AC_SUBST(ZSTD_INCLUDE)
- AC_SUBST(ZSTD_LIB)
- ZSTD_CPPFLAGS=
- ZSTD_LDFLAGS=
-+AC_SUBST(ZSTD_CPPFLAGS)
-+AC_SUBST(ZSTD_LDFLAGS)
- AC_ARG_WITH(zstd,
- 	[AS_HELP_STRING([--with-zstd=PATH],
- 		[specify prefix directory for installed zstd library.
diff --git a/stackinator/repo/packages/nvhpc/package.py b/stackinator/repo/packages/nvhpc/package.py
deleted file mode 100644
index 891fb6c8..00000000
--- a/stackinator/repo/packages/nvhpc/package.py
+++ /dev/null
@@ -1,541 +0,0 @@
-# Copyright 2013-2024 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)
-#
-# Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved.
-
-import platform
-
-from spack.package import *
-from spack.util.prefix import Prefix
-
-# FIXME Remove hack for polymorphic versions
-# This package uses a ugly hack to be able to dispatch, given the same
-# version, to different binary packages based on the platform that is
-# running spack. See #13827 for context.
-# If you need to add a new version, please be aware that:
-#  - versions in the following dict are automatically added to the package
-#  - version tuple must be in the form (checksum, url)
-#  - checksum must be sha256
-#  - package key must be in the form '{os}-{arch}' where 'os' is in the
-#    format returned by platform.system() and 'arch' by platform.machine()
-_versions = {
-    "24.3": {
-        "Linux-aarch64": (
-            "6b9edc34b798ccaae39d4af36ff73465ee318ac49e5f96f5c5a2a0d7919fff15",
-            "https://developer.download.nvidia.com/hpc-sdk/24.3/nvhpc_2024_243_Linux_aarch64_cuda_12.3.tar.gz",
-        ),
-        "Linux-x86_64": (
-            "4fb8949ba8cef73b28818bd9375c9420ec48fab1c64e71315a7c1984f5329d6b",
-            "https://developer.download.nvidia.com/hpc-sdk/24.3/nvhpc_2024_243_Linux_x86_64_cuda_12.3.tar.gz",
-        ),
-    },
-    "24.1": {
-        "Linux-aarch64": (
-            "8d2aafa8769115191708e41e63c647e1c975c241ce4bf6a0badf805f0f5edf1c",
-            "https://developer.download.nvidia.com/hpc-sdk/24.1/nvhpc_2024_241_Linux_aarch64_cuda_12.3.tar.gz",
-        ),
-        "Linux-x86_64": (
-            "91cdc6f327881f14119e8b6e884d544aafab01c3d569b61831e259c91b4530fc",
-            "https://developer.download.nvidia.com/hpc-sdk/24.1/nvhpc_2024_241_Linux_x86_64_cuda_12.3.tar.gz",
-        ),
-    },
-    "23.11": {
-        "Linux-aarch64": (
-            "cf744498d1d74ba0af4294388706644ad3669eb0cacea3b69e23739afa2806a0",
-            "https://developer.download.nvidia.com/hpc-sdk/23.11/nvhpc_2023_2311_Linux_aarch64_cuda_multi.tar.gz",
-        ),
-        "Linux-ppc64le": (
-            "b08591438bd0802d4c7c78e7c5bc36383a59591b8c2fa8aed5c4b87b24f7bfbb",
-            "https://developer.download.nvidia.com/hpc-sdk/23.11/nvhpc_2023_2311_Linux_ppc64le_cuda_multi.tar.gz",
-        ),
-        "Linux-x86_64": (
-            "33483a069a911f9309cd53859ab90d2778fb176df906e9e8d2bd55f45eeec400",
-            "https://developer.download.nvidia.com/hpc-sdk/23.11/nvhpc_2023_2311_Linux_x86_64_cuda_multi.tar.gz",
-        ),
-    },
-    "23.9": {
-        "Linux-aarch64": (
-            "dd32ae4233438adb71b2b4f8891f04802fdf90f67036ecf18bfde1b6043a03c3",
-            "https://developer.download.nvidia.com/hpc-sdk/23.9/nvhpc_2023_239_Linux_aarch64_cuda_multi.tar.gz",
-        ),
-        "Linux-ppc64le": (
-            "984d61695499db098fd32be8345c1f7d7c637ea3bdb29cef17aad656f16b000f",
-            "https://developer.download.nvidia.com/hpc-sdk/23.9/nvhpc_2023_239_Linux_ppc64le_cuda_multi.tar.gz",
-        ),
-        "Linux-x86_64": (
-            "ecf343ecad2398e21c8d7f24a580b2932348017dfd8ea38c1ef31b37114b2d4b",
-            "https://developer.download.nvidia.com/hpc-sdk/23.9/nvhpc_2023_239_Linux_x86_64_cuda_multi.tar.gz",
-        ),
-    },
-    "23.7": {
-        "Linux-aarch64": (
-            "d3b9b674045e6e17156b298941be4e1e1e7dea6a3c1938f14ad653b180860ff2",
-            "https://developer.download.nvidia.com/hpc-sdk/23.7/nvhpc_2023_237_Linux_aarch64_cuda_multi.tar.gz",
-        ),
-        "Linux-ppc64le": (
-            "67b137cf67e2c8556ef3952d1ee35f4966c9d1968626825924fb8e4b198a532b",
-            "https://developer.download.nvidia.com/hpc-sdk/23.7/nvhpc_2023_237_Linux_ppc64le_cuda_multi.tar.gz",
-        ),
-        "Linux-x86_64": (
-            "fea91d95ff18bca1ce7afde50371caa02001ade8bed6ddfc5ff70862ccbebece",
-            "https://developer.download.nvidia.com/hpc-sdk/23.7/nvhpc_2023_237_Linux_x86_64_cuda_multi.tar.gz",
-        ),
-    },
-    "23.5": {
-        "Linux-aarch64": (
-            "3af202ad36bbf205b2af56aabe63b971c01b5ec0e82a02effb3c4928f63bc657",
-            "https://developer.download.nvidia.com/hpc-sdk/23.5/nvhpc_2023_235_Linux_aarch64_cuda_multi.tar.gz",
-        ),
-        "Linux-ppc64le": (
-            "65b1f1780175096fa58e98e80fc897c0d563cacce43b3e87ba157f40a8e34877",
-            "https://developer.download.nvidia.com/hpc-sdk/23.5/nvhpc_2023_235_Linux_ppc64le_cuda_multi.tar.gz",
-        ),
-        "Linux-x86_64": (
-            "071d7119006cb1d7ac22cb91338c20133a02d394efe14931dfa6f5d7dfa54c81",
-            "https://developer.download.nvidia.com/hpc-sdk/23.5/nvhpc_2023_235_Linux_x86_64_cuda_multi.tar.gz",
-        ),
-    },
-    "23.3": {
-        "Linux-aarch64": (
-            "48c837de0b1d2dc31c313b19da752d27527e706cb4150c7a6185a4218fc24ef3",
-            "https://developer.download.nvidia.com/hpc-sdk/23.3/nvhpc_2023_233_Linux_aarch64_cuda_multi.tar.gz",
-        ),
-        "Linux-ppc64le": (
-            "0f2b5b2fff8ffed13428c55809841b4abd3dfe61e2b1a866bbe959e4bcd50223",
-            "https://developer.download.nvidia.com/hpc-sdk/23.3/nvhpc_2023_233_Linux_ppc64le_cuda_multi.tar.gz",
-        ),
-        "Linux-x86_64": (
-            "b94d2b4ae5a23c1a0af7d5b07c785f5057850fe3a6ee5ba0aacdde1019af5d12",
-            "https://developer.download.nvidia.com/hpc-sdk/23.3/nvhpc_2023_233_Linux_x86_64_cuda_multi.tar.gz",
-        ),
-    },
-    "23.1": {
-        "Linux-aarch64": (
-            "5b430e03752954ea62ac1c745b1735cfdaa43b2e981a9412c1465ecb0412fff6",
-            "https://developer.download.nvidia.com/hpc-sdk/23.1/nvhpc_2023_231_Linux_aarch64_cuda_multi.tar.gz",
-        ),
-        "Linux-ppc64le": (
-            "81759e7c747bf4f552b75e7657301f76ecc0828b94fe860f81108c6e83e6ad2b",
-            "https://developer.download.nvidia.com/hpc-sdk/23.1/nvhpc_2023_231_Linux_ppc64le_cuda_multi.tar.gz",
-        ),
-        "Linux-x86_64": (
-            "55a064415f6d4ce6a01823ee27ebd266f4fb579679871e7c1a7c054bdc18e9f5",
-            "https://developer.download.nvidia.com/hpc-sdk/23.1/nvhpc_2023_231_Linux_x86_64_cuda_multi.tar.gz",
-        ),
-    },
-    "22.11": {
-        "Linux-aarch64": (
-            "e60e798657c33b06754d33dfd5ab3bea2882d4a9b9476102303edf2bbe3b7a95",
-            "https://developer.download.nvidia.com/hpc-sdk/22.11/nvhpc_2022_2211_Linux_aarch64_cuda_multi.tar.gz",
-        ),
-        "Linux-ppc64le": (
-            "ef800203cf6040b3a5df24f19944b272f62caee8362875bcb394e86dc1de2353",
-            "https://developer.download.nvidia.com/hpc-sdk/22.11/nvhpc_2022_2211_Linux_ppc64le_cuda_multi.tar.gz",
-        ),
-        "Linux-x86_64": (
-            "cb91b3a04368457d5cfe3c0e9c0611591fdc8076b01ea977343fe7db7fdcfa3c",
-            "https://developer.download.nvidia.com/hpc-sdk/22.11/nvhpc_2022_2211_Linux_x86_64_cuda_multi.tar.gz",
-        ),
-    },
-    "22.9": {
-        "Linux-aarch64": (
-            "bc4473f04b49bc9a26f08c17a72360650ddf48a3b6eefacdc525d79c8d730f30",
-            "https://developer.download.nvidia.com/hpc-sdk/22.9/nvhpc_2022_229_Linux_aarch64_cuda_multi.tar.gz",
-        ),
-        "Linux-ppc64le": (
-            "9aac31d36bb09f6653544978021f5b78c272112e7748871566f7e930f5e7475b",
-            "https://developer.download.nvidia.com/hpc-sdk/22.9/nvhpc_2022_229_Linux_ppc64le_cuda_multi.tar.gz",
-        ),
-        "Linux-x86_64": (
-            "aebfeb826ace3dabf9699f72390ca0340f8789a8ef6fe4032e3c7b794f073ea3",
-            "https://developer.download.nvidia.com/hpc-sdk/22.9/nvhpc_2022_229_Linux_x86_64_cuda_multi.tar.gz",
-        ),
-    },
-    "22.7": {
-        "Linux-aarch64": (
-            "2aae3fbfd2d0d2d09448a36166c42311368f5600c7c346f159c280b412fe924a",
-            "https://developer.download.nvidia.com/hpc-sdk/22.7/nvhpc_2022_227_Linux_aarch64_cuda_multi.tar.gz",
-        ),
-        "Linux-ppc64le": (
-            "6dd4fd382c22769e4fa9508714119abd7d1df3dc58c69414a14b0b0dbc34564f",
-            "https://developer.download.nvidia.com/hpc-sdk/22.7/nvhpc_2022_227_Linux_ppc64le_cuda_multi.tar.gz",
-        ),
-        "Linux-x86_64": (
-            "3ce1c346f8bc7e50defb41c545c8907fdc012ff60b27eb8985cf3213f19d863a",
-            "https://developer.download.nvidia.com/hpc-sdk/22.7/nvhpc_2022_227_Linux_x86_64_cuda_multi.tar.gz",
-        ),
-    },
-    "22.5": {
-        "Linux-aarch64": (
-            "ceeee84e6227e973ad1beded6008d330e3790f7c4598b948fa530fedfa830a16",
-            "https://developer.download.nvidia.com/hpc-sdk/22.5/nvhpc_2022_225_Linux_aarch64_cuda_multi.tar.gz",
-        ),
-        "Linux-ppc64le": (
-            "54d1e45664352d0f9f85ab476dd39496dd1b290e0e1221d3bf63afb940dbe16d",
-            "https://developer.download.nvidia.com/hpc-sdk/22.5/nvhpc_2022_225_Linux_ppc64le_cuda_multi.tar.gz",
-        ),
-        "Linux-x86_64": (
-            "7674bcf7a77570fafee5b8299959c9e998a9a10bb27904335cf1a58b71766137",
-            "https://developer.download.nvidia.com/hpc-sdk/22.5/nvhpc_2022_225_Linux_x86_64_cuda_multi.tar.gz",
-        ),
-    },
-    "22.3": {
-        "Linux-aarch64": (
-            "e0ea1cbb726556f6879f4b5dfe17238f8e7680c772368577945a85c0e08328f0",
-            "https://developer.download.nvidia.com/hpc-sdk/22.3/nvhpc_2022_223_Linux_aarch64_cuda_multi.tar.gz",
-        ),
-        "Linux-ppc64le": (
-            "5e80db6010adc85fe799dac961ae69e43fdf18d35243666c96a70ecdb80bd280",
-            "https://developer.download.nvidia.com/hpc-sdk/22.3/nvhpc_2022_223_Linux_ppc64le_cuda_multi.tar.gz",
-        ),
-        "Linux-x86_64": (
-            "bc60a6faf2237bf20550718f71079a714563fa85df62c341cb833f70eb2fe7bb",
-            "https://developer.download.nvidia.com/hpc-sdk/22.3/nvhpc_2022_223_Linux_x86_64_cuda_multi.tar.gz",
-        ),
-    },
-    "22.2": {
-        "Linux-aarch64": (
-            "a8241d1139a768d9a0066d1853748160e4098253024e17e997983884d0d33a19",
-            "https://developer.download.nvidia.com/hpc-sdk/22.2/nvhpc_2022_222_Linux_aarch64_cuda_multi.tar.gz",
-        ),
-        "Linux-ppc64le": (
-            "f84f72423452968d5bbe02e297f188682c4759864a736a72b32acb3433db3a26",
-            "https://developer.download.nvidia.com/hpc-sdk/22.2/nvhpc_2022_222_Linux_ppc64le_cuda_multi.tar.gz",
-        ),
-        "Linux-x86_64": (
-            "8dfb4007d6912b2722946358ac69409592c1f03426d81971ffbcb6fc5fea2cb8",
-            "https://developer.download.nvidia.com/hpc-sdk/22.2/nvhpc_2022_222_Linux_x86_64_cuda_multi.tar.gz",
-        ),
-    },
-    "22.1": {
-        "Linux-aarch64": (
-            "05cfa8c520a34eab01272a261b157d421a9ff7129fca7d859b944ce6a16d2255",
-            "https://developer.download.nvidia.com/hpc-sdk/22.1/nvhpc_2022_221_Linux_aarch64_cuda_multi.tar.gz",
-        ),
-        "Linux-ppc64le": (
-            "9fa9b64fba2c9b287b5800693417d8065c695d18cab0526bad41d9aecc8be2b3",
-            "https://developer.download.nvidia.com/hpc-sdk/22.1/nvhpc_2022_221_Linux_ppc64le_cuda_multi.tar.gz",
-        ),
-        "Linux-x86_64": (
-            "7e4366509ed9031ff271e73327dd3121909902a81ac436307801a5373efaff5e",
-            "https://developer.download.nvidia.com/hpc-sdk/22.1/nvhpc_2022_221_Linux_x86_64_cuda_multi.tar.gz",
-        ),
-    },
-    "21.11": {
-        "Linux-aarch64": (
-            "3b11bcd9cca862fabfce1e7bcaa2050ea12130c7e897f4e7859ba4c155d20720",
-            "https://developer.download.nvidia.com/hpc-sdk/21.11/nvhpc_2021_2111_Linux_aarch64_cuda_multi.tar.gz",
-        ),
-        "Linux-ppc64le": (
-            "ac51ed92de4eb5e1bdb064ada5bbace5b89ac732ad6c6473778edfb8d29a6527",
-            "https://developer.download.nvidia.com/hpc-sdk/21.11/nvhpc_2021_2111_Linux_ppc64le_cuda_multi.tar.gz",
-        ),
-        "Linux-x86_64": (
-            "d8d8ccd0e558d22bcddd955f2233219c96f7de56aa8e09e7be833e384d32d6aa",
-            "https://developer.download.nvidia.com/hpc-sdk/21.11/nvhpc_2021_2111_Linux_x86_64_cuda_multi.tar.gz",
-        ),
-    },
-    "21.9": {
-        "Linux-aarch64": (
-            "52c2c66e30043add4afccedf0ba77daa0000bf42e0db844baa630bb635b91a7d",
-            "https://developer.download.nvidia.com/hpc-sdk/21.9/nvhpc_2021_219_Linux_aarch64_cuda_multi.tar.gz",
-        ),
-        "Linux-ppc64le": (
-            "cff0b55fb782be1982bfeec1d9763b674ddbf84ff2c16b364495299266320289",
-            "https://developer.download.nvidia.com/hpc-sdk/21.9/nvhpc_2021_219_Linux_ppc64le_cuda_multi.tar.gz",
-        ),
-        "Linux-x86_64": (
-            "7de6a6880fd7e59afe0dee51f1fae4d3bff1ca0fb8ee234b24e1f2fdff23ffc9",
-            "https://developer.download.nvidia.com/hpc-sdk/21.9/nvhpc_2021_219_Linux_x86_64_cuda_multi.tar.gz",
-        ),
-    },
-    "21.7": {
-        "Linux-aarch64": (
-            "73eb3513845b59645f118b1e313472f54519dc252d5f5c32a05df2a2a8a19878",
-            "https://developer.download.nvidia.com/hpc-sdk/21.7/nvhpc_2021_217_Linux_aarch64_cuda_multi.tar.gz",
-        ),
-        "Linux-ppc64le": (
-            "37ea23b5a9c696fb3fdb82855643afc4e02aea618102ec801206441f10fc9fba",
-            "https://developer.download.nvidia.com/hpc-sdk/21.7/nvhpc_2021_217_Linux_ppc64le_cuda_multi.tar.gz",
-        ),
-        "Linux-x86_64": (
-            "49d6e23492d131474698cf12971722d42e13a54a4eddec382e66e1053b4ac902",
-            "https://developer.download.nvidia.com/hpc-sdk/21.7/nvhpc_2021_217_Linux_x86_64_cuda_multi.tar.gz",
-        ),
-    },
-    "21.5": {
-        "Linux-aarch64": (
-            "1a1748cd7cf538199d92ab3b1208935fa4a62708ba21125aeadb328ddc7380d4",
-            "https://developer.download.nvidia.com/hpc-sdk/21.5/nvhpc_2021_215_Linux_aarch64_cuda_multi.tar.gz",
-        ),
-        "Linux-ppc64le": (
-            "4674931a5ce28724308cb9cebd546eefa3f0646d3d08adbea28ba5ad27f0c163",
-            "https://developer.download.nvidia.com/hpc-sdk/21.5/nvhpc_2021_215_Linux_ppc64le_cuda_multi.tar.gz",
-        ),
-        "Linux-x86_64": (
-            "21989e52c58a6914743631c8200de1fec7e10b3449c6c1833f3032ee74b85f8e",
-            "https://developer.download.nvidia.com/hpc-sdk/21.5/nvhpc_2021_215_Linux_x86_64_cuda_multi.tar.gz",
-        ),
-    },
-    "21.3": {
-        "Linux-aarch64": (
-            "88e0dbf8fcdd06a2ba06aacf65ae1625b8683688f6593ed3bf8ce129ce1b17b7",
-            "https://developer.download.nvidia.com/hpc-sdk/21.3/nvhpc_2021_213_Linux_aarch64_cuda_multi.tar.gz",
-        ),
-        "Linux-ppc64le": (
-            "08cd0cd6c80d633f107b44f88685ada7f014fbf6eac19ef5ae4a7952cabe4037",
-            "https://developer.download.nvidia.com/hpc-sdk/21.3/nvhpc_2021_213_Linux_ppc64le_cuda_multi.tar.gz",
-        ),
-        "Linux-x86_64": (
-            "391d5604a70f61bdd4ca6a3e4692f6f2391948990c8a35c395b6867341890031",
-            "https://developer.download.nvidia.com/hpc-sdk/21.3/nvhpc_2021_213_Linux_x86_64_cuda_multi.tar.gz",
-        ),
-    },
-    "21.2": {
-        "Linux-aarch64": (
-            "fe19c0232f7c9534f8699b7432483c9cc649f1e92e7f0961d1aa7c54d83297ff",
-            "https://developer.download.nvidia.com/hpc-sdk/21.2/nvhpc_2021_212_Linux_aarch64_cuda_multi.tar.gz",
-        ),
-        "Linux-ppc64le": (
-            "6b69b6e4ebec6a91b9f1627384c50adad79ebdd25dfb20a5f64cf01c3a07f11a",
-            "https://developer.download.nvidia.com/hpc-sdk/21.2/nvhpc_2021_212_Linux_ppc64le_cuda_multi.tar.gz",
-        ),
-        "Linux-x86_64": (
-            "a3e3393040185ae844002fbc6c8eb4ffdfb97ce8b2ce29d796fe7e9a521fdc59",
-            "https://developer.download.nvidia.com/hpc-sdk/21.2/nvhpc_2021_212_Linux_x86_64_cuda_multi.tar.gz",
-        ),
-    },
-    "21.1": {
-        "Linux-aarch64": (
-            "b276e7c0ff78cee837a597d9136cd1d8ded27a9d1fdae1e7d674e2a072a9a6aa",
-            "https://developer.download.nvidia.com/hpc-sdk/21.1/nvhpc_2021_211_Linux_aarch64_cuda_multi.tar.gz",
-        ),
-        "Linux-ppc64le": (
-            "bc236c212097bac6b7d04d627d9cc6b75bb6cd473a0b6a1bf010559ce328a2b0",
-            "https://developer.download.nvidia.com/hpc-sdk/21.1/nvhpc_2021_211_Linux_ppc64le_cuda_multi.tar.gz",
-        ),
-        "Linux-x86_64": (
-            "d529daf46404724ac3f005be4239f2c30e53f5220bb9453f367dccc3a74d6b41",
-            "https://developer.download.nvidia.com/hpc-sdk/21.1/nvhpc_2021_211_Linux_x86_64_cuda_multi.tar.gz",
-        ),
-    },
-    "20.11": {
-        "Linux-aarch64": (
-            "2f26ca45b07b694b8669e4f761760d4f7faa8d032b21e430adee1af0a27032c1",
-            "https://developer.download.nvidia.com/hpc-sdk/20.11/nvhpc_2020_2011_Linux_aarch64_cuda_multi.tar.gz",
-        ),
-        "Linux-ppc64le": (
-            "99e5a5437e82f3914e0fe81feb761a5b599a3fe8b31f3c2cac8ae47e8cdc7b0f",
-            "https://developer.download.nvidia.com/hpc-sdk/20.11/nvhpc_2020_2011_Linux_ppc64le_cuda_multi.tar.gz",
-        ),
-        "Linux-x86_64": (
-            "c80fc26e5ba586696f7030f03054c1aaca0752a891c7923faf47eb23b66857ec",
-            "https://developer.download.nvidia.com/hpc-sdk/20.11/nvhpc_2020_2011_Linux_x86_64_cuda_multi.tar.gz",
-        ),
-    },
-    "20.9": {
-        "Linux-aarch64": (
-            "3bfb3d17f5ee99998bcc30d738e818d3b94b828e2d8da7db48bf152a01e22023",
-            "https://developer.download.nvidia.com/hpc-sdk/20.9/nvhpc_2020_209_Linux_aarch64_cuda_11.0.tar.gz",
-        ),
-        "Linux-ppc64le": (
-            "b2966d4047e1dfd981ce63b333ab9c0acbdc2a6a505fa217456ac9fa3b8e7474",
-            "https://developer.download.nvidia.com/hpc-sdk/20.9/nvhpc_2020_209_Linux_ppc64le_cuda_multi.tar.gz",
-        ),
-        "Linux-x86_64": (
-            "fe665ab611b03846a90bd70ca4e08c1e59ab527364b971ed0304e0ae73c778d8",
-            "https://developer.download.nvidia.com/hpc-sdk/20.9/nvhpc_2020_209_Linux_x86_64_cuda_multi.tar.gz",
-        ),
-    },
-    "20.7": {
-        "Linux-aarch64": (
-            "5b83ca1919199ac0aa609309b31c345c5a6453dd3131fddeef9e3ee9059a0e9b",
-            "https://developer.download.nvidia.com/hpc-sdk/20.7/nvhpc_2020_207_Linux_aarch64_cuda_11.0.tar.gz",
-        ),
-        "Linux-ppc64le": (
-            "800ead240bdf61611910b2f6df24ee1d7359377ff3767c923738dd81fcea9312",
-            "https://developer.download.nvidia.com/hpc-sdk/20.7/nvhpc_2020_207_Linux_ppc64le_cuda_multi.tar.gz",
-        ),
-        "Linux-x86_64": (
-            "a5c5c8726d2210f2310a852c6d6e03c9ef8c75e3643e9c94e24909f5e9c2ea7a",
-            "https://developer.download.nvidia.com/hpc-sdk/20.7/nvhpc_2020_207_Linux_x86_64_cuda_multi.tar.gz",
-        ),
-    },
-}
-
-
-class Nvhpc(Package):
-    """The NVIDIA HPC SDK is a comprehensive suite of compilers, libraries
-    and tools essential to maximizing developer productivity and the
-    performance and portability of HPC applications. The NVIDIA HPC
-    SDK C, C++, and Fortran compilers support GPU acceleration of HPC
-    modeling and simulation applications with standard C++ and
-    Fortran, OpenACC directives, and CUDA. GPU-accelerated math
-    libraries maximize performance on common HPC algorithms, and
-    optimized communications libraries enable standards-based
-    multi-GPU and scalable systems programming. Performance profiling
-    and debugging tools simplify porting and optimization of HPC
-    applications."""
-
-    homepage = "https://developer.nvidia.com/hpc-sdk"
-
-    maintainers("samcmill")
-    tags = ["e4s"]
-
-    skip_version_audit = ["platform=darwin"]
-
-    for ver, packages in _versions.items():
-        key = "{0}-{1}".format(platform.system(), platform.machine())
-        pkg = packages.get(key)
-        if pkg:
-            version(ver, sha256=pkg[0], url=pkg[1])
-
-    variant("blas", default=True, description="Enable BLAS")
-    variant(
-        "install_type",
-        default="single",
-        values=("single", "network"),
-        multi=False,
-        description="Network installs are for installations shared "
-        "by different operating systems",
-    )
-    variant("lapack", default=True, description="Enable LAPACK")
-    variant("mpi", default=False, description="Enable MPI")
-    variant(
-        "default_cuda", default="default", description="Default CUDA version, for example 11.8"
-    )
-
-    provides("blas", when="+blas")
-    provides("lapack", when="+lapack")
-    provides("mpi", when="+mpi")
-
-    requires("%gcc", msg="nvhpc must be installed with %gcc")
-
-    def _version_prefix(self):
-        return join_path(self.prefix, "Linux_%s" % self.spec.target.family, self.version)
-
-    def setup_build_environment(self, env):
-        env.set("NVHPC_SILENT", "true")
-        env.set("NVHPC_ACCEPT_EULA", "accept")
-        env.set("NVHPC_INSTALL_DIR", self.prefix)
-        if self.spec.variants["default_cuda"].value != "default":
-            env.set("NVHPC_DEFAULT_CUDA", self.spec.variants["default_cuda"].value)
-
-        if self.spec.variants["install_type"].value == "network":
-            local_dir = join_path(self._version_prefix(), "share_objects")
-            env.set("NVHPC_INSTALL_TYPE", "network")
-            env.set("NVHPC_INSTALL_LOCAL_DIR", local_dir)
-        else:
-            env.set("NVHPC_INSTALL_TYPE", "single")
-
-    def install(self, spec, prefix):
-        compilers_bin = join_path(self._version_prefix(), "compilers", "bin")
-        install = Executable("./install")
-        makelocalrc = Executable(join_path(compilers_bin, "makelocalrc"))
-
-        makelocalrc_args = [
-            "-gcc",
-            self.compiler.cc,
-            "-gpp",
-            self.compiler.cxx,
-            "-g77",
-            self.compiler.f77,
-            "-x",
-            compilers_bin,
-        ]
-        if self.spec.variants["install_type"].value == "network":
-            local_dir = join_path(self._version_prefix(), "share_objects")
-            makelocalrc_args.extend(["-net", local_dir])
-
-        # Run install script
-        install()
-
-        # Update localrc to use Spack gcc
-        makelocalrc(*makelocalrc_args)
-
-    def setup_run_environment(self, env):
-        prefix = Prefix(
-            join_path(self.prefix, "Linux_%s" % self.spec.target.family, self.version, "compilers")
-        )
-
-        env.set("CC", join_path(prefix.bin, "nvc"))
-        env.set("CXX", join_path(prefix.bin, "nvc++"))
-        env.set("F77", join_path(prefix.bin, "nvfortran"))
-        env.set("FC", join_path(prefix.bin, "nvfortran"))
-
-        env.prepend_path("PATH", prefix.bin)
-        env.prepend_path("LIBRARY_PATH", prefix.lib)
-        env.prepend_path("LD_LIBRARY_PATH", prefix.lib)
-        env.prepend_path("MANPATH", prefix.man)
-
-        if "+mpi" in self.spec:
-            mpi_prefix = Prefix(
-                join_path(
-                    self.prefix,
-                    "Linux_%s" % self.spec.target.family,
-                    self.version,
-                    "comm_libs",
-                    "mpi",
-                )
-            )
-            env.prepend_path("PATH", mpi_prefix.bin)
-            env.prepend_path("LD_LIBRARY_PATH", mpi_prefix.lib)
-
-    def setup_dependent_build_environment(self, env, dependent_spec):
-        prefix = Prefix(
-            join_path(self.prefix, "Linux_%s" % self.spec.target.family, self.version, "compilers")
-        )
-
-        env.prepend_path("LIBRARY_PATH", prefix.lib)
-        env.prepend_path("LD_LIBRARY_PATH", prefix.lib)
-
-        if "+mpi" in self.spec:
-            mpi_prefix = Prefix(
-                join_path(
-                    self.prefix,
-                    "Linux_%s" % self.spec.target.family,
-                    self.version,
-                    "comm_libs",
-                    "mpi",
-                )
-            )
-
-            env.prepend_path("LD_LIBRARY_PATH", mpi_prefix.lib)
-
-    def setup_dependent_package(self, module, dependent_spec):
-        if "+mpi" in self.spec or self.provides("mpi"):
-            mpi_prefix = Prefix(
-                join_path(
-                    self.prefix,
-                    "Linux_%s" % self.spec.target.family,
-                    self.version,
-                    "comm_libs",
-                    "mpi",
-                )
-            )
-
-            self.spec.mpicc = join_path(mpi_prefix.bin, "mpicc")
-            self.spec.mpicxx = join_path(mpi_prefix.bin, "mpicxx")
-            self.spec.mpif77 = join_path(mpi_prefix.bin, "mpif77")
-            self.spec.mpifc = join_path(mpi_prefix.bin, "mpif90")
-
-    @property
-    def libs(self):
-        prefix = Prefix(
-            join_path(self.prefix, "Linux_%s" % self.spec.target.family, self.version, "compilers")
-        )
-        libs = []
-
-        if "+blas" in self.spec:
-            libs.append("libblas")
-
-        if "+lapack" in self.spec:
-            libs.append("liblapack")
-            libs.append("libnvf")
-
-        return find_libraries(libs, root=prefix, recursive=True)
-
-    # Avoid binding stub libraries by absolute path
-    non_bindable_shared_objects = ["stubs"]
diff --git a/stackinator/repo/repo.yaml b/stackinator/repo/repo.yaml
deleted file mode 100644
index e9ed61e6..00000000
--- a/stackinator/repo/repo.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-repo:
-  namespace: alps
diff --git a/stackinator/spack_util.py b/stackinator/spack_util.py
new file mode 100644
index 00000000..ba30e440
--- /dev/null
+++ b/stackinator/spack_util.py
@@ -0,0 +1,11 @@
+def is_repo(path):
+    """
+    Returns True if path contains a spack package repo, where the definition of
+    a spack package repo is a directory with a sub-directory named packages
+
+    Otherwise returns False.
+    """
+    pkg_path = path / "packages"
+    if pkg_path.exists() and pkg_path.is_dir():
+        return True
+    return False
diff --git a/stackinator/templates/Makefile b/stackinator/templates/Makefile
index ee782eab..980076db 100644
--- a/stackinator/templates/Makefile
+++ b/stackinator/templates/Makefile
@@ -64,6 +64,8 @@ post-install: generate-config environments{% if modules %} modules{% endif %}
 # Create a squashfs file from the installed software.
 store.squashfs: environments generate-config{% if modules %} modules{% endif %}{% if post_install_hook %} post-install{% endif %}
 
+	# clean up the __pycache__ paths in the repo
+	$(SANDBOX) find $(STORE)/repo -type d -name __pycache__ -exec rm -r {} +
 	$(SANDBOX) env -u SOURCE_DATE_EPOCH "$$($(SANDBOX) $(SPACK) -e ./compilers/bootstrap find --format='{prefix}' squashfs | head -n1)/bin/mksquashfs" $(STORE) $@ -all-root -all-time $$(date +%s) -no-recovery -noappend -Xcompression-level 3
 
 # Force push all built packages to the build cache


Test patch:
diff --git a/stackinator/repo/packages/gcc/detection_test.yaml b/stackinator/repo/packages/gcc/detection_test.yaml
deleted file mode 100644
index 0930f82d..00000000
--- a/stackinator/repo/packages/gcc/detection_test.yaml
+++ /dev/null
@@ -1,38 +0,0 @@
-paths:
-  # Ubuntu 18.04, system compilers without Fortran
-  - layout:
-      - executables:
-        - "bin/gcc"
-        - "bin/g++"
-        script: "echo 7.5.0"
-    results:
-      - spec: "gcc@7.5.0 languages=c,c++"
-  # Mock a version < 7 of GCC that requires -dumpversion and
-  # errors with -dumpfullversion
-  - layout:
-      - executables:
-        - "bin/gcc-5"
-        - "bin/g++-5"
-        - "bin/gfortran-5"
-        script: |
-          if [[ "$1" == "-dumpversion" ]] ; then
-            echo "5.5.0"
-          else
-            echo "gcc-5: fatal error: no input files"
-            echo "compilation terminated."
-            exit 1
-          fi
-    results:
-      - spec: "gcc@5.5.0 languages=c,c++,fortran"
-  # Multiple compilers present at the same time
-  - layout:
-      - executables:
-        - "bin/x86_64-linux-gnu-gcc-6"
-        script: 'echo 6.5.0'
-      - executables:
-        - "bin/x86_64-linux-gnu-gcc-10"
-        - "bin/x86_64-linux-gnu-g++-10"
-        script: "echo 10.1.0"
-    results:
-      - spec: "gcc@6.5.0 languages=c"
-      - spec: "gcc@10.1.0 languages=c,c++"