Tutorial setup

If you have not done the prior sections, you’ll need to start the docker image:

docker run -it ghcr.io/spack/tutorial:hpcic25

and then set Spack up like this:

git clone --depth=2 --branch=releases/v1.0 https://github.com/spack/spack
. spack/share/spack/setup-env.sh
spack repo update builtin --tag v2025.07.0
spack mirror add --unsigned tutorial /mirror
spack compiler find

See the Basic Installation Tutorial for full details on setup. For more help, join us in the #tutorial channel on Slack – get an invitation at slack.spack.io

Warning

The spack tutorial -y command is intended for use in a container or VM. Use with care in other environments since it replaces some configuration files in order to establish suitable settings for the tutorial.

Package Creation Tutorial

This tutorial walks you through the steps for creating and debugging a simple Spack package. We will develop and debug a package using an iterative approach to gain more experience with additional Spack commands. For consistency, we will create a package for mpileaks (https://github.com/LLNL/mpileaks), an MPI debugging tool.

What is a Spack Package?

Spack packages are installation scripts, which are essentially recipes for building (and testing) software.

They define properties and behavior of the build, such as:

They can also define checks of the installed software that can be performed after the installation.

Once we’ve specified a package’s recipe, users can ask Spack to build the software with different features on any of the supported systems.

Getting Started

In order to avoid modifying your Spack installation with the package we are creating, let’s create and add a package repository just for this tutorial using the following commands:

$ spack repo create /home/spack/repos tutorial
==> Created repo with namespace 'tutorial'.
==> To register it with spack, run this command:
  spack repo add /home/spack/repos/spack_repo/tutorial
$ spack repo add /home/spack/repos/spack_repo/tutorial
==> Added repo to config with name 'tutorial'.

Doing this ensures changes we make here do not adversely affect other parts of the tutorial.

Now let’s look at the available repositories using spack repo list:

$ spack repo list
[+] tutorial    v2.2    /home/spack/mypkgs/spack_repo/tutorial
[+] builtin     v2.2    /home/spack/.spack/package_repos/fncqgg4/repos/spack_repo/builtin

Notice we now have two repositories: tutorial and builtin.

We can see how they are configured using spack config get repos:

$ spack config get repos
repos:
  tutorial: /home/spack/mypkgs/spack_repo/tutorial
  builtin:
    tag: v2025.07.0
    git: https://github.com/spack/spack-packages.git
    branch: releases/v2025.07

Notice the default builtin repository is checked out at the latest release branch.

You can find out more about repositories at Package Repositories and the command at spack repo.

Creating the Package File

Note

Before proceeding, make sure your SPACK_EDITOR, VISUAL, or EDITOR environment variable is set to the name or path of your preferred text editor. Details can be found at Controlling the Editor.

Suppose you want to install software that depends on mpileaks but found Spack did not already have a built-in package for it. This means you are going to have to create one.

Spack’s create command builds a new package from a template by taking the location of the package’s source code and using it to:

The mpileaks source code is available in a tarball in the software’s repository (https://github.com/LLNL/mpileaks). Spack will look at the contents of the tarball and generate a package when we run spack create with the URL:

$ spack create --name tutorial-mpileaks https://github.com/LLNL/mpileaks/archive/refs/tags/v1.0.tar.gz
==> Using specified package name: 'tutorial-mpileaks'
==> Fetching https://github.com/LLNL/mpileaks/archive/refs/tags/v1.0.tar.gz
    [100%]  339.70 KB @	 791.4 MB/s
==> This package looks like it uses the autoreconf build system
==> Created template for tutorial-mpileaks package
==> Created package file: /home/spack/repos/spack_repo/tutorial/packages/tutorial_mpileaks/package.py

You should now be in your text editor of choice, with the package.py file open for editing.

Your package.py file should reside in the tutorial-mpileaks subdirectory of your tutorial repository’s packages directory, i.e., /home/spack/mypkgs/spack_repo/tutorial/packages/tutorial_mpileaks/package.py.

Take a moment to look over the file.

As we can see from the skeleton contents, the Spack template:

  • provides the required Spack copyright and license;

  • provides boilerplate information on the commands for installing and editing the package;

  • imports and inherits from the inferred build system package;

  • provides a docstring template;

  • provides an example homepage URL;

  • shows how to specify a list of package maintainers;

  • provides a template for the license;

  • specifies the version directive with the checksum;

  • lists the inferred language and other build dependencies;

  • provides a skeleton for another dependency;

  • provides a preliminary implementation of the autoreconf method; and

  • provides a skeleton configure_args method.

The areas we need to modify are highlighted in the figure below.

tutorial-mpileaks/package.py (from tutorial/examples/packaging/0.package.py)
# Copyright Spack Project Developers. See COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

# ----------------------------------------------------------------------------
# If you submit this package back to Spack as a pull request,
# please first remove this boilerplate and all FIXME comments.
#
# This is a template package file for Spack.  We've put "FIXME"
# next to all the things you'll want to change. Once you've handled
# them, you can save this file and test your package like this:
#
#     spack install tutorial-mpileaks
#
# You can edit this file again by typing:
#
#     spack edit tutorial-mpileaks
#
# See the Spack documentation for more information on packaging.
# ----------------------------------------------------------------------------

from spack_repo.builtin.build_systems.autotools import AutotoolsPackage
from spack.package import *


class TutorialMpileaks(AutotoolsPackage):
    """FIXME: Put a proper description of your package here."""

    # FIXME: Add a proper url for your package's homepage here.
    homepage = "https://www.example.com"
    url = "https://github.com/LLNL/mpileaks/archive/refs/tags/v1.0.tar.gz"

    # FIXME: Add a list of GitHub accounts to
    # notify when the package is updated.
    # maintainers("github_user1", "github_user2")

    # FIXME: Add the SPDX identifier of the project's license below.
    # See https://spdx.org/licenses/ for a list. Upon manually verifying
    # the license, set checked_by to your Github username.
    license("UNKNOWN", checked_by="github_user1")

    version("1.0", sha256="24c706591bdcd84541e19389a9314813ce848035ee877e213d528b184f4b43f9")

    depends_on("c", type="build")
    depends_on("cxx", type="build")
    depends_on("fortran", type="build")

    depends_on("autoconf", type="build")
    depends_on("automake", type="build")
    depends_on("libtool", type="build")
    depends_on("m4", type="build")

    # FIXME: Add additional dependencies if required.
    # depends_on("foo")

    def autoreconf(self, spec, prefix):
        # FIXME: Modify the autoreconf method as necessary
        autoreconf("--install", "--verbose", "--force")

    def configure_args(self):
        # FIXME: Add arguments other than --prefix
        # FIXME: If not needed delete this function
        args = []
        return args

Note

The maintainers directive holds a comma-separated list of GitHub user names for those accounts willing to be notified when a change is made to the package. They will also be given an opportunity to review the changes. This information is useful for developers who maintain a Spack package for their own software and/or rely on software maintained by others.

Since we are providing a url, we can confirm the checksum, or sha256 calculation. Exit your editor to return to the command line and use the spack checksum command:

$ spack checksum tutorial-mpileaks 1.0
==> Found 1 version of tutorial-mpileaks
==> Fetching https://github.com/LLNL/mpileaks/archive/refs/tags/v1.0.tar.gz
    [100%]  339.70 KB @	 911.6 MB/s

    version("1.0", sha256="24c706591bdcd84541e19389a9314813ce848035ee877e213d528b184f4b43f9")

where the entire version directive is provided for your convenience.

Before proceeding with changes, let’s see what Spack does with the skeleton by trying to install the package using the spack install command:

$ spack install tutorial-mpileaks
[+] /usr (external glibc-2.35-epwvtixhoxdeufu6kbbrpaigv2p6iav4)
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gcc-runtime-11.4.0-3c5xh7dqudxmyorlsrsfmjyggqk57vnr
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gcc-runtime-10.5.0-ekeebbieporufbv2ersvvhgqxsljzqpg
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gcc-runtime-12.5.0-zubbt4yxn35hmaarhmzluk6cb6gkujee
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gmp-6.3.0-zx3x4nm3djw5jdqxcsimfpxykoxdijhj
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/findutils-4.10.0-ga3qiejil4e74fukhmtwcq5vrvzgmwmk
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/zstd-1.5.7-bmaw6fn2i5mbbfujq6kf7bomodh4iudq
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/zlib-ng-2.2.4-g7ixtqygrfip5uzt526b565dqxs6ze3x
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gmake-4.4.1-haeogmcedfgt33rxdkcybfkvordw63wj
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/berkeley-db-18.1.40-ikx4n4c7kofxzwerpdkc2qccur5d232p
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/bzip2-1.0.8-3kql5yq6ucjcp4ltisvme37ltccgn6yt
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/zlib-ng-2.2.4-6xddq3ypcya5hm72cccnuct4kgbquf3c
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libsigsegv-2.14-ffctxurczjrftrybtsu2rijddwxstsly
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/ncurses-6.5-56rxnkfzlb5k3dceq52it64acuui3syl
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/mpfr-4.2.1-abjn4yec4cwckmwvwwtg45keufsqyhya
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libtool-2.4.7-l2jtwyuivfhutipzs462o4ny7ctu4f5c
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/m4-1.4.20-rpphs4iqga5izscs5jklti47p3xfrrvk
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/readline-8.2-lxvqq5ood4lil2pjv2ofawfytyal4n37
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/mpc-1.3.1-mkqx7budcw2rpbdzo63hsoxhhszx366g
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gdbm-1.23-cxbuzxk4lqvsqfdneevy232tdn25p62d
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gcc-12.5.0-fmxnit5ggu45byub6wlsuienth2dkboh
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/perl-5.40.0-txcbw3fccp6lkmksnwz7n4fnisten2i7
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/automake-1.16.5-jgeyxwqrov44oiau7ovffiatce35jaip
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/autoconf-2.72-krgi7jfdrslsejycs7pbkgb5v5c22che
==> No binary for tutorial-mpileaks-1.0-xulixfwmedzyzjfyjnhvpgz6y3pqjoz2 found: installing from source
==> Installing tutorial-mpileaks-1.0-xulixfwmedzyzjfyjnhvpgz6y3pqjoz2 [26/26]
==> Fetching https://github.com/LLNL/mpileaks/archive/refs/tags/v1.0.tar.gz
    [100%]  339.70 KB @	 531.4 MB/s
==> No patches needed for tutorial-mpileaks
==> tutorial-mpileaks: Executing phase: 'autoreconf'
==> tutorial-mpileaks: Executing phase: 'configure'
==> Error: ProcessError: Command exited with status 1:
    '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-xulixfwmedzyzjfyjnhvpgz6y3pqjoz2/spack-src/configure' '--prefix=/home/spack/spack/opt/spack/linux-x86_64_v3/tutorial-mpileaks-1.0-xulixfwmedzyzjfyjnhvpgz6y3pqjoz2'

13 errors found in build log:
     16	   libtoolize: copying file 'm4/lt~obsolete.m4'
     17	   autoreconf: configure.ac: not using Intltool
     18	   autoreconf: configure.ac: not using Gtkdoc
     19	   autoreconf: running: aclocal --force -I m4
     20	   autoreconf: running: /home/spack/spack/opt/spack/linux-x86_64_v3/autoconf-2.72-krgi7jfdrslsejycs7pbkgb5v5c22che/bin/autoconf --force
     21	   configure.ac:9: warning: 'AM_CONFIG_HEADER': this macro is obsolete.
  >> 22	   configure.ac:9: You should use the 'AC_CONFIG_HEADERS' macro instead.
  >> 23	   /tmp/ubuntu/spack-stage/spack-stage-autoconf-2.72-krgi7jfdrslsejycs7pbkgb5v5c22che/spack-src/lib/autoconf/general.m4:2434: AC_DIAGNOSE is expanded from...
  >> 24	   aclocal.m4:745: AM_CONFIG_HEADER is expanded from...
  >> 25	   configure.ac:9: the top level
     26	   configure.ac:38: warning: The macro 'AC_PROG_LIBTOOL' is obsolete.
  >> 27	   configure.ac:38: You should run autoupdate.
  >> 28	   m4/libtool.m4:100: AC_PROG_LIBTOOL is expanded from...
  >> 29	   configure.ac:38: the top level
     30	   configure.ac:47: warning: The macro 'AC_HEADER_STDC' is obsolete.
  >> 31	   configure.ac:47: You should run autoupdate.
  >> 32	   /tmp/ubuntu/spack-stage/spack-stage-autoconf-2.72-krgi7jfdrslsejycs7pbkgb5v5c22che/spack-src/lib/autoconf/headers.m4:663: AC_HEADER_STDC is expanded from...
  >> 33	   configure.ac:47: the top level
     34	   autoreconf: running: /home/spack/spack/opt/spack/linux-x86_64_v3/autoconf-2.72-krgi7jfdrslsejycs7pbkgb5v5c22che/bin/autoheader --force
     35	   autoreconf: running: automake --add-missing --copy --force-missing
  >> 36	   configure.ac:26: installing 'config/compile'
  >> 37	   configure.ac:19: installing 'config/missing'
     38	   src/Makefile.am:14: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
     39	   src/Makefile.am: installing 'config/depcomp'
     40	   autoreconf: 'config/install-sh' is updated
     41	   autoreconf: 'config/config.sub' is updated
     42	   autoreconf: 'config/config.guess' is updated
     43	   autoreconf: Leaving directory '.'

     ...

     80	   checking for mpipgcc... no
     81	   Checking whether not-found responds to '-showme:compile'... no
     82	   Checking whether not-found responds to '-showme'... no
     83	   Checking whether not-found responds to '-compile-info'... no
     84	   Checking whether not-found responds to '-show'... no
     85	   /tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-xulixfwmedzyzjfyjnhvpgz6y3pqjoz2/spack-src/configure: line 5935: Echo: command not found
  >> 86	   configure: error: unable to locate adept-utils installation

See build log for details:
  /tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-xulixfwmedzyzjfyjnhvpgz6y3pqjoz2/spack-build-out.txt

The build was unsuccessful. The error indicates configure is unable to find the installation location of a dependency.

We will now fill in the provided placeholders and customize the package for the software as we:

  • document key information about this package;

  • add dependencies; and

  • add the configuration arguments needed to build the package.

Adding Package Documentation

First, let’s fill in the documentation.

Bring tutorial-mpileakspackage.py file back up in your editor with the spack edit command:

$ spack edit tutorial-mpileaks

Let’s make the following changes:

  • remove the boilerplate comments between and including the dashed lines at the top;

  • replace the first FIXME comment with a description of mpileaks in the docstring;

  • replace the homepage property with the correct link;

  • uncomment the maintainers directive and replace the placeholder with your GitHub user name; and

  • replace the license of the project with the correct name and the placeholder with your GitHub user name.

Tip

It helps to have the mpileaks repository up in your browser since you can copy-and-paste some of the values from it.

Note

We will exclude the Copyright clause and license identifier in the remainder of the package snippets here to reduce the length of the tutorial documentation; however, the copyright is required for packages contributed back to Spack.

Now make the changes and additions to your package.py file.

The resulting package should contain – sans the copyright and license – the following information:

tutorial-mpileaks/package.py (from tutorial/examples/packaging/1.package.py)
from spack_repo.builtin.build_systems.autotools import AutotoolsPackage
from spack.package import *


class TutorialMpileaks(AutotoolsPackage):
    """Tool to detect and report MPI objects like MPI_Requests and MPI_Datatypes."""

    homepage = "https://github.com/LLNL/mpileaks"
    url = "https://github.com/LLNL/mpileaks/archive/refs/tags/v1.0.tar.gz"

    maintainers("adamjstewart")

    license("BSD", checked_by="adamjstewart")

    version("1.0", sha256="24c706591bdcd84541e19389a9314813ce848035ee877e213d528b184f4b43f9")

    depends_on("c", type="build")
    depends_on("cxx", type="build")
    depends_on("fortran", type="build")

    depends_on("autoconf", type="build")
    depends_on("automake", type="build")
    depends_on("libtool", type="build")
    depends_on("m4", type="build")

    # FIXME: Add additional dependencies if required.
    # depends_on("foo")

    def autoreconf(self, spec, prefix):
        # FIXME: Modify the autoreconf method as necessary
        autoreconf("--install", "--verbose", "--force")

    def configure_args(self):
        # FIXME: Add arguments other than --prefix
        # FIXME: If not needed delete this function
        args = []
        return args

At this point we’ve only updated key documentation within the package. It won’t help us build the software; however, the information is now available for review.

Let’s enter the spack info command for the package:

$ spack info --phases tutorial-mpileaks
AutotoolsPackage:   tutorial-mpileaks

Description:
    Tool to detect and report leaked MPI objects like MPI_Requests and
    MPI_Datatypes.

Homepage: https://github.com/LLNL/mpileaks

Preferred version:
    1.0    https://github.com/LLNL/mpileaks/archive/refs/tags/v1.0.tar.gz

Safe versions:
    1.0    https://github.com/LLNL/mpileaks/archive/refs/tags/v1.0.tar.gz

Deprecated versions:
    None

Variants:
    build_system [autotools]        autotools
        Build systems supported by the package

Installation Phases:
    autoreconf    configure    build    install

Build Dependencies:
    autoconf  automake  c  cxx  fortran  gmake  gnuconfig  libtool  m4

Link Dependencies:
    None

Run Dependencies:
    None

Licenses:
    BSD

Take a moment to look over the output. You should see the information derived from the package now includes the description, homepage, maintainer, and license we provided.

Also notice it shows:

  • the preferred version derived from the code;

  • the default AutotoolsBuilder package installation phases;

  • the gmake and gnuconfig build dependencies inherited from AutotoolsPackage; and

  • both link and run dependencies are currently None.

As we fill in more information about the package, the spack info command will become more informative.

Note

More information on this build system package is provided in AutotoolsPackage.

The full list of build systems known to Spack can be found at Build Systems.

Now we’re ready to start filling in the build recipe.

Tip

Refer to the style guide for Spack’s guidelines.

Adding Dependencies

First we’ll add the dependencies determined by reviewing documentation in the software’s repository (https://github.com/LLNL/mpileaks). We can see from the README file’s instructions, mpileaks software relies on three third-party libraries:

  • mpi,

  • adept-utils, and

  • callpath.

Note

Fortunately, all of these dependencies are built-in packages in Spack; otherwise, we would have to create packages for them as well.

Bring tutorial-mpileakspackage.py file back up with the spack edit command:

$ spack edit tutorial-mpileaks

and add the dependencies by specifying them using the depends_on directive as shown below:

tutorial-mpileaks/package.py (from tutorial/examples/packaging/2.package.py)
from spack_repo.builtin.build_systems.autotools import AutotoolsPackage
from spack.package import *


class TutorialMpileaks(AutotoolsPackage):
    """Tool to detect and report MPI objects like MPI_Requests and MPI_Datatypes."""

    homepage = "https://github.com/LLNL/mpileaks"
    url = "https://github.com/LLNL/mpileaks/archive/refs/tags/v1.0.tar.gz"

    maintainers("adamjstewart")

    license("BSD", checked_by="adamjstewart")

    version("1.0", sha256="24c706591bdcd84541e19389a9314813ce848035ee877e213d528b184f4b43f9")

    depends_on("c", type="build")
    depends_on("cxx", type="build")
    depends_on("fortran", type="build")

    depends_on("autoconf", type="build")
    depends_on("automake", type="build")
    depends_on("libtool", type="build")
    depends_on("m4", type="build")

    depends_on("mpi")
    depends_on("adept-utils")
    depends_on("callpath")

    def autoreconf(self, spec, prefix):
        # FIXME: Modify the autoreconf method as necessary
        autoreconf("--install", "--verbose", "--force")

    def configure_args(self):
        # FIXME: Add arguments other than --prefix
        # FIXME: If not needed delete this function
        args = []
        return args

Adding dependencies tells Spack that it must ensure those packages are installed before it can build our package.

Note

The mpi dependency is different from the other two in that it is a virtual dependency. That means Spack must satisfy the dependency with a package that provides the mpi interface, such as openmpi or mvapich2. We call such packages providers since they implement the virtual dependency’s interface.

Let’s check that dependencies are effectively built when we try to install tutorial-mpileaks:

$ spack install tutorial-mpileaks
[+] /usr (external glibc-2.35-epwvtixhoxdeufu6kbbrpaigv2p6iav4)
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee
[+] /usr (external gcc-11.4.0-j7ykyvm5ancnn5rt7f35ggs6hwoslo42)
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gcc-runtime-10.5.0-ekeebbieporufbv2ersvvhgqxsljzqpg
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gcc-runtime-12.5.0-zubbt4yxn35hmaarhmzluk6cb6gkujee
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gcc-runtime-11.4.0-3c5xh7dqudxmyorlsrsfmjyggqk57vnr
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gmake-4.4.1-haeogmcedfgt33rxdkcybfkvordw63wj
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/ncurses-6.5-u7sn2jtlvafr3vqli4m7i7ysecwkwepd
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/zlib-ng-2.2.4-g7ixtqygrfip5uzt526b565dqxs6ze3x
==> Fetching file:///mirror/blobs/sha256/3b/3bcc6bb6c998ef6096a44ce4135e73e2aec2032f1912cc0b650a7b1effa9ea91
    [100%]   15.16 MB @	 341.3 GB/s
==> Extracting boost-1.72.0-x4ntqhhem4kqmrxwnywu65jji2wr2dhr from binary cache
==> boost: Successfully installed boost-1.72.0-x4ntqhhem4kqmrxwnywu65jji2wr2dhr
  Search: 0.00s.  Fetch: 0.13s.	 Install: 2.62s.  Extract: 2.57s.  Relocate: 0.01s.  Total: 2.75s
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/boost-1.72.0-x4ntqhhem4kqmrxwnywu65jji2wr2dhr
==> Installing boost-1.72.0-x4ntqhhem4kqmrxwnywu65jji2wr2dhr [10/56]
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/nghttp2-1.65.0-hpkxq4qziany2xflz5lpbo7ejwmchp6g
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libpciaccess-0.17-w5iqeddpn6xfxfm3grear6sow3p6eaa5
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libsigsegv-2.14-vefpsalwx43ol7ppom7svfbsfqv3jit4
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/pkgconf-2.3.0-xoghzadcbbqi6ccvlnfkghrutmid3eav
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libiconv-1.18-kgw5nkswdpf7k2itwhjwegwyszj3v56s
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/numactl-2.0.18-74aq3kxwhmje2sqvk27v73d7525q2enn
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gmake-4.4.1-5vb6e4beeoff4jan2t7edfjyi3hf3p7g
==> Fetching file:///mirror/blobs/sha256/6a/6a1b048da388871c61c1692f246a171a86f041f3bd44a4f1372f17569833b36f
    [100%]  718.56 KB @	 876.1 MB/s
==> Extracting libiberty-2.41-cvva4qyqow7p7qoti2k5rbcsb44rdtoo from binary cache
==> libiberty: Successfully installed libiberty-2.41-cvva4qyqow7p7qoti2k5rbcsb44rdtoo
  Search: 0.00s.  Fetch: 0.01s.	 Install: 0.06s.  Extract: 0.02s.  Relocate: 0.00s.  Total: 0.07s
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libiberty-2.41-cvva4qyqow7p7qoti2k5rbcsb44rdtoo
==> Installing libiberty-2.41-cvva4qyqow7p7qoti2k5rbcsb44rdtoo [18/56]
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libedit-3.1-20240808-h766azt27z6p7yvfxwb22r23cxvtj3gj
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/pigz-2.8-prsofdph5zl75k54hjwgcr34lipeyuh5
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/m4-1.4.20-ypq2dyeslmkos5za6z46ti5u4gf7kdya
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/bzip2-1.0.8-vy2ggzhuzo7pav5clvz6dvamexpeaadk
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/xz-5.6.3-zeynpnjapluctm4lxzuwo7en5jmdzt6c
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/findutils-4.10.0-ga3qiejil4e74fukhmtwcq5vrvzgmwmk
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libxcrypt-4.4.38-iundcaqxew2asagohzi27rxmh2zbk4qo
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/berkeley-db-18.1.40-k5bepowzfoxlz67vuctewwbxlrj5sgji
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/zstd-1.5.7-bmaw6fn2i5mbbfujq6kf7bomodh4iudq
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/openssl-3.4.1-kphogwy3wlzx3rl6ddmjwui5qs77qvys
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/readline-8.2-skysn5ppmam2ipxq4zlzwjxm42kurky2
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gmp-6.3.0-zx3x4nm3djw5jdqxcsimfpxykoxdijhj
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libxml2-2.13.5-7mdlpguaingjbgxrvtgjnv3y6372tofw
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libtool-2.4.7-l2jtwyuivfhutipzs462o4ny7ctu4f5c
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/tar-1.35-ye5hcpfjk5svng6s2sjj4n6huwokazfk
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/curl-8.11.1-7xf5wleip2cn6wxcvm7rzjxbkj6b54a2
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libevent-2.1.12-dvz3n3eojbnxt74he2ky2rj75gukcgfh
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gdbm-1.23-5yo63cnvgytwmsoiwoilhfgnyaffncmz
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/hwloc-2.11.1-jhcvb6nk7guze7u7zojqrp5oxovharww
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/mpfr-4.2.1-abjn4yec4cwckmwvwwtg45keufsqyhya
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gettext-0.23.1-soasbhmurzckxvnvfcqm22jsegvmh4jv
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/cmake-3.31.8-usc3vzrzieyct5ep3kiyypm6vrc2s2ir
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/perl-5.40.0-nsqyer7nqsmv3ams4gk5mubo74maob3z
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/pmix-5.0.5-msnkjumpg75ybnv7uinrcbbkt4slvt3e
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/mpc-1.3.1-mkqx7budcw2rpbdzo63hsoxhhszx366g
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/elfutils-0.192-bqadq4z3npndbqqzkms7abk2ziqeteid
==> Fetching file:///mirror/blobs/sha256/24/24859e9937c5f89defa0694bfcfb9e206b4c3f180eb545ac9dd669450679556c
    [100%]  591.43 KB @	 777.9 MB/s
==> Extracting libdwarf-2.0.0-uirapsmqr52qork6p3cupyuyyu727ygz from binary cache
==> libdwarf: Successfully installed libdwarf-2.0.0-uirapsmqr52qork6p3cupyuyyu727ygz
  Search: 0.00s.  Fetch: 0.01s.	 Install: 0.06s.  Extract: 0.02s.  Relocate: 0.01s.  Total: 0.07s
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libdwarf-2.0.0-uirapsmqr52qork6p3cupyuyyu727ygz
==> Installing libdwarf-2.0.0-uirapsmqr52qork6p3cupyuyyu727ygz [45/56]
==> Fetching file:///mirror/blobs/sha256/30/30708a1a25664b5840c6c6361ea9da882e54286ff36ba8cce96e8f70b740db48
    [100%]  505.88 KB @	 774.7 MB/s
==> Extracting intel-tbb-2022.0.0-3g2dqp5itvsq3easbbs6bgtv4zni4uya from binary cache
==> intel-tbb: Successfully installed intel-tbb-2022.0.0-3g2dqp5itvsq3easbbs6bgtv4zni4uya
  Search: 0.00s.  Fetch: 0.01s.	 Install: 0.09s.  Extract: 0.04s.  Relocate: 0.01s.  Total: 0.09s
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/intel-tbb-2022.0.0-3g2dqp5itvsq3easbbs6bgtv4zni4uya
==> Installing intel-tbb-2022.0.0-3g2dqp5itvsq3easbbs6bgtv4zni4uya [46/56]
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/autoconf-2.72-5xgjgaemj5ur5z5mr7anba35jcy2n5rm
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/krb5-1.21.3-zo73rgnlq3dcwy76ebibj2ubnzkhia2c
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gcc-12.5.0-fmxnit5ggu45byub6wlsuienth2dkboh
==> Fetching file:///mirror/blobs/sha256/4f/4feaff7d2d30f3112dee36e4addc179a4d4ddff73043d77fc112c597b9b9c65d
    [100%]   67.15 MB @	 391.3 GB/s
==> Extracting dyninst-13.0.0-np3n5uf2baeyrmdmavuruvrpkxh6ztmr from binary cache
==> dyninst: Successfully installed dyninst-13.0.0-np3n5uf2baeyrmdmavuruvrpkxh6ztmr
  Search: 0.00s.  Fetch: 0.02s.	 Install: 0.27s.  Extract: 0.19s.  Relocate: 0.04s.  Total: 0.28s
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/dyninst-13.0.0-np3n5uf2baeyrmdmavuruvrpkxh6ztmr
==> Installing dyninst-13.0.0-np3n5uf2baeyrmdmavuruvrpkxh6ztmr [50/56]
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/automake-1.16.5-vorbe53mrrx354udsx5hpelstxeduh53
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/openssh-9.9p1-2s7eddoqitn34vgpljqsrca3s7w7s6ud
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz
==> Fetching file:///mirror/blobs/sha256/bb/bbba69a8e46b0d31a8f4f8d38002ed641703f108f92d76297d94a0dc6a2fc8be
    [100%]   80.40 KB @	 324.2 MB/s
==> Extracting adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv from binary cache
==> adept-utils: Successfully installed adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv
  Search: 0.00s.  Fetch: 0.01s.	 Install: 0.07s.  Extract: 0.01s.  Relocate: 0.02s.  Total: 0.07s
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv
==> Installing adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv [54/56]
==> Fetching file:///mirror/blobs/sha256/16/166187bbd0e2802a0daeec0f395f6c94b9d5f0872066c1994937cbf4b1bf8105
    [100%]  124.23 KB @	 449.2 MB/s
==> Extracting callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr from binary cache
==> callpath: Successfully installed callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr
  Search: 0.00s.  Fetch: 0.01s.	 Install: 0.08s.  Extract: 0.01s.  Relocate: 0.03s.  Total: 0.08s
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr
==> Installing callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr [55/56]
==> No binary for tutorial-mpileaks-1.0-bsn3xirjorc7l2stboooavdkrd4aa3q4 found: installing from source
==> Installing tutorial-mpileaks-1.0-bsn3xirjorc7l2stboooavdkrd4aa3q4 [56/56]
==> Using cached archive: /home/spack/spack/var/spack/cache/_source-cache/archive/24/24c706591bdcd84541e19389a9314813ce848035ee877e213d528b184f4b43f9.tar.gz
==> No patches needed for tutorial-mpileaks
==> tutorial-mpileaks: Executing phase: 'autoreconf'
==> tutorial-mpileaks: Executing phase: 'configure'
==> Error: ProcessError: Command exited with status 1:
    '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-bsn3xirjorc7l2stboooavdkrd4aa3q4/spack-src/configure' '--prefix=/home/spack/spack/opt/spack/linux-x86_64_v3/tutorial-mpileaks-1.0-bsn3xirjorc7l2stboooavdkrd4aa3q4'

13 errors found in build log:
     16	   libtoolize: copying file 'm4/lt~obsolete.m4'
     17	   autoreconf: configure.ac: not using Intltool
     18	   autoreconf: configure.ac: not using Gtkdoc
     19	   autoreconf: running: aclocal --force -I m4
     20	   autoreconf: running: /home/spack/spack/opt/spack/linux-x86_64_v3/autoconf-2.72-5xgjgaemj5ur5z5mr7anba35jcy2n5rm/bin/autoconf --force
     21	   configure.ac:9: warning: 'AM_CONFIG_HEADER': this macro is obsolete.
  >> 22	   configure.ac:9: You should use the 'AC_CONFIG_HEADERS' macro instead.
  >> 23	   /tmp/root/spack-stage/spack-stage-autoconf-2.72-5xgjgaemj5ur5z5mr7anba35jcy2n5rm/spack-src/lib/autoconf/general.m4:2434: AC_DIAGNOSE is expanded from...
  >> 24	   aclocal.m4:745: AM_CONFIG_HEADER is expanded from...
  >> 25	   configure.ac:9: the top level
     26	   configure.ac:38: warning: The macro 'AC_PROG_LIBTOOL' is obsolete.
  >> 27	   configure.ac:38: You should run autoupdate.
  >> 28	   m4/libtool.m4:100: AC_PROG_LIBTOOL is expanded from...
  >> 29	   configure.ac:38: the top level
     30	   configure.ac:47: warning: The macro 'AC_HEADER_STDC' is obsolete.
  >> 31	   configure.ac:47: You should run autoupdate.
  >> 32	   /tmp/root/spack-stage/spack-stage-autoconf-2.72-5xgjgaemj5ur5z5mr7anba35jcy2n5rm/spack-src/lib/autoconf/headers.m4:663: AC_HEADER_STDC is expanded from...
  >> 33	   configure.ac:47: the top level
     34	   autoreconf: running: /home/spack/spack/opt/spack/linux-x86_64_v3/autoconf-2.72-5xgjgaemj5ur5z5mr7anba35jcy2n5rm/bin/autoheader --force
     35	   autoreconf: running: automake --add-missing --copy --force-missing
  >> 36	   configure.ac:26: installing 'config/compile'
  >> 37	   configure.ac:19: installing 'config/missing'
     38	   src/Makefile.am:14: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
     39	   src/Makefile.am: installing 'config/depcomp'
     40	   autoreconf: 'config/install-sh' is updated
     41	   autoreconf: 'config/config.sub' is updated
     42	   autoreconf: 'config/config.guess' is updated
     43	   autoreconf: Leaving directory '.'

     ...

     73	   checking whether the compiler supports GNU C++... yes
     74	   checking whether /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ accepts -g... yes
     75	   checking for /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ option to enable C++11 features... none needed
     76	   checking dependency style of /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++... gcc3
     77	   checking for /home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/bin/mpicc... /home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/bin/mpicc
     78	   Checking whether /home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/bin/mpicc responds to '-showme:compile'... yes
  >> 79	   configure: error: unable to locate adept-utils installation

See build log for details:
  /tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-bsn3xirjorc7l2stboooavdkrd4aa3q4/spack-build-out.txt

Note

This command may take a while to run and may produce more output if you don’t already have an MPI installed or configured in Spack.

While Spack was unable to install our package, we do see that it identified and built all of our dependencies. It found that:

  • the openmpi package will satisfy our mpi dependency;

  • adept-utils is a concrete dependency; and

  • callpath is a concrete dependency.

At this point we need to debug the build problem to determine why Spack cannot install the software.

Debugging Package Builds

Our tutorial-mpileaks package is still not building due to the adept-utils package’s configure error. Experienced Autotools developers will likely already see the problem and its solution.

Let’s take this opportunity to use Spack features to investigate the problem. Our options for proceeding are:

  • review the build log; and

  • build the package manually.

Reviewing the Build Log

The build log might yield some clues so let’s look at the contents of the spack-build-out.txt file at the path recommended above by our failed installation:

$ cat /tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-bsn3xirjorc7l2stboooavdkrd4aa3q4/spack-build-out.txt
==> tutorial-mpileaks: Executing phase: 'autoreconf'
==> [2025-08-06-22:07:06.705360] '/home/spack/spack/opt/spack/linux-x86_64_v3/autoconf-2.72-5xgjgaemj5ur5z5mr7anba35jcy2n5rm/bin/autoreconf' '--install' '--verbose' '--force'
autoreconf: export WARNINGS=
autoreconf: Entering directory '.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal --force -I m4
autoreconf: configure.ac: tracing
autoreconf: running: libtoolize --copy --force
libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, 'config'.
libtoolize: copying file 'config/ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'.
libtoolize: copying file 'm4/libtool.m4'
libtoolize: copying file 'm4/ltoptions.m4'
libtoolize: copying file 'm4/ltsugar.m4'
libtoolize: copying file 'm4/ltversion.m4'
libtoolize: copying file 'm4/lt~obsolete.m4'
autoreconf: configure.ac: not using Intltool
autoreconf: configure.ac: not using Gtkdoc
autoreconf: running: aclocal --force -I m4
autoreconf: running: /home/spack/spack/opt/spack/linux-x86_64_v3/autoconf-2.72-5xgjgaemj5ur5z5mr7anba35jcy2n5rm/bin/autoconf --force
configure.ac:9: warning: 'AM_CONFIG_HEADER': this macro is obsolete.
configure.ac:9: You should use the 'AC_CONFIG_HEADERS' macro instead.
/tmp/root/spack-stage/spack-stage-autoconf-2.72-5xgjgaemj5ur5z5mr7anba35jcy2n5rm/spack-src/lib/autoconf/general.m4:2434: AC_DIAGNOSE is expanded from...
aclocal.m4:745: AM_CONFIG_HEADER is expanded from...
configure.ac:9: the top level
configure.ac:38: warning: The macro 'AC_PROG_LIBTOOL' is obsolete.
configure.ac:38: You should run autoupdate.
m4/libtool.m4:100: AC_PROG_LIBTOOL is expanded from...
configure.ac:38: the top level
configure.ac:47: warning: The macro 'AC_HEADER_STDC' is obsolete.
configure.ac:47: You should run autoupdate.
/tmp/root/spack-stage/spack-stage-autoconf-2.72-5xgjgaemj5ur5z5mr7anba35jcy2n5rm/spack-src/lib/autoconf/headers.m4:663: AC_HEADER_STDC is expanded from...
configure.ac:47: the top level
autoreconf: running: /home/spack/spack/opt/spack/linux-x86_64_v3/autoconf-2.72-5xgjgaemj5ur5z5mr7anba35jcy2n5rm/bin/autoheader --force
autoreconf: running: automake --add-missing --copy --force-missing
configure.ac:26: installing 'config/compile'
configure.ac:19: installing 'config/missing'
src/Makefile.am:14: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
src/Makefile.am: installing 'config/depcomp'
autoreconf: 'config/install-sh' is updated
autoreconf: 'config/config.sub' is updated
autoreconf: 'config/config.guess' is updated
autoreconf: Leaving directory '.'
==> tutorial-mpileaks: Executing phase: 'configure'
==> [2025-08-06-22:07:10.649622] Find (max depth = None): ['/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-bsn3xirjorc7l2stboooavdkrd4aa3q4/spack-src'] ['configure']
==> [2025-08-06-22:07:10.650447] Find complete: ['/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-bsn3xirjorc7l2stboooavdkrd4aa3q4/spack-src'] ['configure']
==> [2025-08-06-22:07:10.650987] FILTER FILE: /tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-bsn3xirjorc7l2stboooavdkrd4aa3q4/spack-src/configure [replacing "^(\s*if test x-L = )("\$p" \|\|\s*)$"]
==> [2025-08-06-22:07:10.670724] FILTER FILE: /tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-bsn3xirjorc7l2stboooavdkrd4aa3q4/spack-src/configure [replacing "^(\s*test x-R = )("\$p")(; then\s*)$"]
==> [2025-08-06-22:07:10.690004] FILTER FILE: /tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-bsn3xirjorc7l2stboooavdkrd4aa3q4/spack-src/configure [replacing "^(\s*test \$p = "-R")(; then\s*)$"]
==> [2025-08-06-22:07:10.709090] FILTER FILE: /tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-bsn3xirjorc7l2stboooavdkrd4aa3q4/spack-src/configure [replacing "lt_cv_apple_cc_single_mod=no"]
==> [2025-08-06-22:07:10.729417] '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-bsn3xirjorc7l2stboooavdkrd4aa3q4/spack-src/configure' '--prefix=/home/spack/spack/opt/spack/linux-x86_64_v3/tutorial-mpileaks-1.0-bsn3xirjorc7l2stboooavdkrd4aa3q4'
checking metadata... no
checking installation directory variables... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a race-free mkdir -p... /usr/bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking for gcc... /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether the compiler supports GNU C... yes
checking whether /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/gcc accepts -g... yes
checking for /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/gcc option to enable C11 features... none needed
checking whether /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/gcc understands -c and -o together... yes
checking whether make supports the include directive... yes (GNU style)
checking dependency style of /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/gcc... gcc3
checking whether the compiler supports GNU C++... yes
checking whether /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ accepts -g... yes
checking for /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ option to enable C++11 features... none needed
checking dependency style of /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++... gcc3
checking for /home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/bin/mpicc... /home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/bin/mpicc
Checking whether /home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/bin/mpicc responds to '-showme:compile'... yes
configure: error: unable to locate adept-utils installation

In this case the error conveniently appears on the last line of the log and the output from spack install.

Here we also see a number of checks performed by the configure command. Most importantly, the last line is very clear: configure: error: unable to locate adept-utils installation. In other words, the installation path of the adept-utils dependency cannot be found.

Note

Spack automatically adds standard include and library directories to the compiler’s search path but it is not uncommon for this information to not get picked up. Some software, like mpileaks, requires the paths to be explicitly provided on the command line.

Let’s investigate further from the staged build directory.

Building Manually

First let’s try to build the package manually to see if we can figure out how to solve the problem.

Let’s move to the build directory using the spack cd command:

$ spack cd tutorial-mpileaks

You should now be in the appropriate stage directory since this command moves us into the working directory of the last attempted build. If not, you can cd into the directory above that contained the spack-build-out.txt file then into its spack-src subdirectory.

Now let’s ensure the environment is properly set up using the spack build-env command:

$ spack build-env tutorial-mpileaks bash

This command spawned a new shell containing the same environment that Spack used to build the tutorial-mpileaks package. (Feel free to substitute your favorite shell for bash.)

Note

If you are running using an AWS instance, you’ll want to substitute your home directory for /home/spack below.

From here we can manually re-run the build using the configure command with the --prefix option that Spack passed in the failed build. If you aren’t sure, check the appropriate line under Executing phase: 'configure' in the build log in Reviewing the Build Log.

$ ./configure --prefix=/home/spack/spack/opt/spack/linux-ubuntu18.04-x86_64/gcc-7.5.0/mpileaks-1.0-wl3kx4o4bgegghl4u7hb3jk4toina3fx
checking metadata... no
checking installation directory variables... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for gcc... /home/spack/spack/lib/spack/env/gcc/gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables... 
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether /home/spack/spack/lib/spack/env/gcc/gcc accepts -g... yes
checking for /home/spack/spack/lib/spack/env/gcc/gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of /home/spack/spack/lib/spack/env/gcc/gcc... gcc3
checking whether /home/spack/spack/lib/spack/env/gcc/gcc and cc understand -c and -o together... yes
checking whether we are using the GNU C++ compiler... yes
checking whether /home/spack/spack/lib/spack/env/gcc/g++ accepts -g... yes
checking dependency style of /home/spack/spack/lib/spack/env/gcc/g++... gcc3
checking for /home/spack/spack/opt/spack/linux-ubuntu18.04-x86_64/gcc-7.5.0/openmpi-4.1.3-jfxctqwar7wb65rn7wf5mot7m4jxmsey/bin/mpicc... /home/spack/spack/opt/spack/linux-ubuntu18.04-x86_64/gcc-7.5.0/openmpi-4.1.3-jfxctqwar7wb65rn7wf5mot7m4jxmsey/bin/mpicc
Checking whether /home/spack/spack/opt/spack/linux-ubuntu18.04-x86_64/gcc-7.5.0/openmpi-4.1.3-jfxctqwar7wb65rn7wf5mot7m4jxmsey/bin/mpicc responds to '-showme:compile'... yes
configure: error: unable to locate adept-utils installation
checking metadata... no
checking installation directory variables... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking for gcc... /home/spack/spack/lib/spack/env/gcc/gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables... 
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether /home/spack/spack/lib/spack/env/gcc/gcc accepts -g... yes
checking for /home/spack/spack/lib/spack/env/gcc/gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of /home/spack/spack/lib/spack/env/gcc/gcc... gcc3
checking whether /home/spack/spack/lib/spack/env/gcc/gcc and cc understand -c and -o together... yes
checking whether we are using the GNU C++ compiler... yes
checking whether /home/spack/spack/lib/spack/env/gcc/g++ accepts -g... yes
checking dependency style of /home/spack/spack/lib/spack/env/gcc/g++... gcc3
checking for /home/spack/spack/opt/spack/linux-ubuntu18.04-x86_64/gcc-7.5.0/openmpi-4.1.1-p5qicacmcy72pjljd4lfdy66kavxp3tv/bin/mpicc... /home/spack/spack/opt/spack/linux-ubuntu18.04-x86_64/gcc-7.5.0/openmpi-4.1.1-p5qicacmcy72pjljd4lfdy66kavxp3tv/bin/mpicc
Checking whether /home/spack/spack/opt/spack/linux-ubuntu18.04-x86_64/gcc-7.5.0/openmpi-4.1.1-p5qicacmcy72pjljd4lfdy66kavxp3tv/bin/mpicc responds to '-showme:compile'... yes
configure: error: unable to locate adept-utils installation

Unfortunately we get the same results as before and the output does not provide any additional information that can help us with the build.

Given that this is a simple package built with configure and we know that installation directories need to be specified, we can use the command’s --help to see what options are available for the software.

$ ./configure --help
`configure' configures mpileaks 1.0 to adapt to many kinds of systems.

Usage: ./configure [OPTION]... [VAR=VALUE]...

To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE.  See below for descriptions of some of the useful variables.

Defaults for the options are specified in brackets.

Configuration:
  -h, --help              display this help and exit
      --help=short        display options specific to this package
      --help=recursive    display the short help of all the included packages
  -V, --version           display version information and exit
  -q, --quiet, --silent   do not print `checking...' messages
      --cache-file=FILE   cache test results in FILE [disabled]
  -C, --config-cache      alias for `--cache-file=config.cache'
  -n, --no-create         do not create output files
      --srcdir=DIR        find the sources in DIR [configure dir or `..']

Installation directories:
  --prefix=PREFIX         install architecture-independent files in PREFIX
                          [/usr/local]
  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                          [PREFIX]

By default, `make install' will install all the files in
`/usr/local/bin', `/usr/local/lib' etc.  You can specify
an installation prefix other than `/usr/local' using `--prefix',
for instance `--prefix=$HOME'.

For better control, use the options below.

Fine tuning of the installation directories:
  --bindir=DIR            user executables [EPREFIX/bin]
  --sbindir=DIR           system admin executables [EPREFIX/sbin]
  --libexecdir=DIR        program executables [EPREFIX/libexec]
  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
  --libdir=DIR            object code libraries [EPREFIX/lib]
  --includedir=DIR        C header files [PREFIX/include]
  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
  --infodir=DIR           info documentation [DATAROOTDIR/info]
  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
  --mandir=DIR            man documentation [DATAROOTDIR/man]
  --docdir=DIR            documentation root [DATAROOTDIR/doc/mpileaks]
  --htmldir=DIR           html documentation [DOCDIR]
  --dvidir=DIR            dvi documentation [DOCDIR]
  --pdfdir=DIR            pdf documentation [DOCDIR]
  --psdir=DIR             ps documentation [DOCDIR]

Program names:
  --program-prefix=PREFIX            prepend PREFIX to installed program names
  --program-suffix=SUFFIX            append SUFFIX to installed program names
  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names

System types:
  --build=BUILD     configure for building on BUILD [guessed]
  --host=HOST       cross-compile to build programs to run on HOST [BUILD]

Optional Features:
  --disable-option-checking  ignore unrecognized --enable/--with options
  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  --disable-dependency-tracking  speeds up one-time build
  --enable-dependency-tracking   do not reject slow dependency extractors
  --enable-shared[=PKGS]  build shared libraries [default=yes]
  --enable-static[=PKGS]  build static libraries [default=yes]
  --enable-fast-install[=PKGS]
                          optimize for fast installation [default=yes]
  --disable-libtool-lock  avoid locking (might break parallel builds)

Optional Packages:
  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  --with-adept-utils=PATH Specify adept-utils path
  --with-callpath=PATH    Specify libcallpath path
  --with-stack-start-c=value
                          Specify integer number for MPILEAKS_STACK_START for
                          C code
  --with-stack-start-fortran=value
                          Specify integer number for MPILEAKS_STACK_START for
                          FORTRAN code
  --with-pic              try to use only PIC/non-PIC objects [default=use
                          both]
  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]

Some influential environment variables:
  CC          C compiler command
  CFLAGS      C compiler flags
  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
              nonstandard directory <lib dir>
  LIBS        libraries to pass to the linker, e.g. -l<library>
  CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
              you have headers in a nonstandard directory <include dir>
  CXX         C++ compiler command
  CXXFLAGS    C++ compiler flags
  CPP         C preprocessor
  CXXCPP      C++ preprocessor

Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.

Report bugs to <moody20@llnl.gov>.

The output shows that you can specify the paths for the two concrete dependencies with the following options:

  • --with-adept-utils=PATH

  • --with-callpath=PATH

Let’s leave the spawned shell and return to the Spack repository directory:

$ exit
$ cd $SPACK_ROOT

Now that we know what arguments to provide, we can update the recipe.

Specifying Configure Arguments

We now know which options we need to pass to configure, but how do we know where to find the installation paths for the package’s dependencies from within the package.py file?

Fortunately, we can query the package’s concrete Spec instance. The self.spec property holds the package’s directed acyclic graph (DAG) of its dependencies. Each dependency’s Spec, accessed by name, has a prefix property containing its installation path.

So let’s add the configuration arguments for specifying the paths to the two concrete dependencies in the configure_args method of our package.

Bring tutorial-mpileakspackage.py file back up with the spack edit command:

$ spack edit tutorial-mpileaks

and add the --with-adept-utils and --with-callpath arguments in the configure_args method as follows:

tutorial-mpileaks/package.py (from tutorial/examples/packaging/3.package.py)
from spack_repo.builtin.build_systems.autotools import AutotoolsPackage
from spack.package import *


class TutorialMpileaks(AutotoolsPackage):
    """Tool to detect and report MPI objects like MPI_Requests and MPI_Datatypes."""

    homepage = "https://github.com/LLNL/mpileaks"
    url = "https://github.com/LLNL/mpileaks/archive/refs/tags/v1.0.tar.gz"

    maintainers("adamjstewart")

    license("BSD", checked_by="adamjstewart")

    version("1.0", sha256="24c706591bdcd84541e19389a9314813ce848035ee877e213d528b184f4b43f9")

    depends_on("c", type="build")
    depends_on("cxx", type="build")
    depends_on("fortran", type="build")

    depends_on("autoconf", type="build")
    depends_on("automake", type="build")
    depends_on("libtool", type="build")
    depends_on("m4", type="build")

    depends_on("mpi")
    depends_on("adept-utils")
    depends_on("callpath")

    def autoreconf(self, spec, prefix):
        autoreconf("--install", "--verbose", "--force")

    def configure_args(self):
        args = [
            f"--with-adept-utils={self.spec['adept-utils'].prefix}",
            f"--with-callpath={self.spec['callpath'].prefix}",
        ]

        return args

Since this is an AutotoolsPackage, the arguments returned from the method will automatically get passed to configure during the build.

Now let’s try the build again:

$ spack install tutorial-mpileaks
[+] /usr (external glibc-2.35-epwvtixhoxdeufu6kbbrpaigv2p6iav4)
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gcc-runtime-11.4.0-3c5xh7dqudxmyorlsrsfmjyggqk57vnr
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gcc-runtime-10.5.0-ekeebbieporufbv2ersvvhgqxsljzqpg
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gcc-runtime-12.5.0-zubbt4yxn35hmaarhmzluk6cb6gkujee
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/pkgconf-2.3.0-xoghzadcbbqi6ccvlnfkghrutmid3eav
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/boost-1.72.0-x4ntqhhem4kqmrxwnywu65jji2wr2dhr
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/bzip2-1.0.8-vy2ggzhuzo7pav5clvz6dvamexpeaadk
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libiberty-2.41-cvva4qyqow7p7qoti2k5rbcsb44rdtoo
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/numactl-2.0.18-74aq3kxwhmje2sqvk27v73d7525q2enn
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/findutils-4.10.0-ga3qiejil4e74fukhmtwcq5vrvzgmwmk
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/zstd-1.5.7-bmaw6fn2i5mbbfujq6kf7bomodh4iudq
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libsigsegv-2.14-vefpsalwx43ol7ppom7svfbsfqv3jit4
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libxcrypt-4.4.38-iundcaqxew2asagohzi27rxmh2zbk4qo
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/xz-5.6.3-zeynpnjapluctm4lxzuwo7en5jmdzt6c
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gmp-6.3.0-zx3x4nm3djw5jdqxcsimfpxykoxdijhj
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/berkeley-db-18.1.40-k5bepowzfoxlz67vuctewwbxlrj5sgji
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libiconv-1.18-kgw5nkswdpf7k2itwhjwegwyszj3v56s
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/zlib-ng-2.2.4-g7ixtqygrfip5uzt526b565dqxs6ze3x
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gmake-4.4.1-haeogmcedfgt33rxdkcybfkvordw63wj
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libpciaccess-0.17-w5iqeddpn6xfxfm3grear6sow3p6eaa5
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/ncurses-6.5-u7sn2jtlvafr3vqli4m7i7ysecwkwepd
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libtool-2.4.7-l2jtwyuivfhutipzs462o4ny7ctu4f5c
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/m4-1.4.20-ypq2dyeslmkos5za6z46ti5u4gf7kdya
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libdwarf-2.0.0-uirapsmqr52qork6p3cupyuyyu727ygz
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/openssl-3.4.1-kphogwy3wlzx3rl6ddmjwui5qs77qvys
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/pigz-2.8-prsofdph5zl75k54hjwgcr34lipeyuh5
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libxml2-2.13.5-7mdlpguaingjbgxrvtgjnv3y6372tofw
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libedit-3.1-20240808-h766azt27z6p7yvfxwb22r23cxvtj3gj
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/readline-8.2-skysn5ppmam2ipxq4zlzwjxm42kurky2
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/mpfr-4.2.1-abjn4yec4cwckmwvwwtg45keufsqyhya
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libevent-2.1.12-dvz3n3eojbnxt74he2ky2rj75gukcgfh
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/tar-1.35-ye5hcpfjk5svng6s2sjj4n6huwokazfk
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/hwloc-2.11.1-jhcvb6nk7guze7u7zojqrp5oxovharww
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gdbm-1.23-5yo63cnvgytwmsoiwoilhfgnyaffncmz
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/mpc-1.3.1-mkqx7budcw2rpbdzo63hsoxhhszx366g
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gettext-0.23.1-soasbhmurzckxvnvfcqm22jsegvmh4jv
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/intel-tbb-2022.0.0-3g2dqp5itvsq3easbbs6bgtv4zni4uya
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/pmix-5.0.5-msnkjumpg75ybnv7uinrcbbkt4slvt3e
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/perl-5.40.0-nsqyer7nqsmv3ams4gk5mubo74maob3z
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/elfutils-0.192-bqadq4z3npndbqqzkms7abk2ziqeteid
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/automake-1.16.5-vorbe53mrrx354udsx5hpelstxeduh53
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/autoconf-2.72-5xgjgaemj5ur5z5mr7anba35jcy2n5rm
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/krb5-1.21.3-zo73rgnlq3dcwy76ebibj2ubnzkhia2c
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gcc-12.5.0-fmxnit5ggu45byub6wlsuienth2dkboh
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/dyninst-13.0.0-np3n5uf2baeyrmdmavuruvrpkxh6ztmr
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/openssh-9.9p1-2s7eddoqitn34vgpljqsrca3s7w7s6ud
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr
==> No binary for tutorial-mpileaks-1.0-7mg6z5o7ebmdwp5sa2hfqkhzcpt4gnac found: installing from source
==> Installing tutorial-mpileaks-1.0-7mg6z5o7ebmdwp5sa2hfqkhzcpt4gnac [51/51]
==> Using cached archive: /home/spack/spack/var/spack/cache/_source-cache/archive/24/24c706591bdcd84541e19389a9314813ce848035ee877e213d528b184f4b43f9.tar.gz
==> No patches needed for tutorial-mpileaks
==> tutorial-mpileaks: Executing phase: 'autoreconf'
==> tutorial-mpileaks: Executing phase: 'configure'
==> tutorial-mpileaks: Executing phase: 'build'
==> tutorial-mpileaks: Executing phase: 'install'
==> tutorial-mpileaks: Successfully installed tutorial-mpileaks-1.0-7mg6z5o7ebmdwp5sa2hfqkhzcpt4gnac
  Stage: 0.01s.	 Autoreconf: 3.90s.  Configure: 3.29s.	Build: 10.23s.	Install: 0.21s.	 Post-install: 0.03s.  Total: 17.75s
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/tutorial-mpileaks-1.0-7mg6z5o7ebmdwp5sa2hfqkhzcpt4gnac

Success!

All we needed to do was add the path arguments for the two concrete packages for configure to perform a simple build.

Is that all we can do to help other users build our software?

Adding Variants

Suppose we want to expose the software’s optional features in the package? We can do this by adding build-time options using package variants).

Recall from configure’s help output for tutorial-mpileaks that the software has several optional features and packages that we could support in Spack. Two stand out for tutorial purposes because they both take integers, as opposed to allowing them to be enabled or disabled.

Optional Features:
  --disable-option-checking  ignore unrecognized --enable/--with options
  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  --disable-dependency-tracking  speeds up one-time build
  --enable-dependency-tracking   do not reject slow dependency extractors
  --enable-shared[=PKGS]  build shared libraries [default=yes]
  --enable-static[=PKGS]  build static libraries [default=yes]
  --enable-fast-install[=PKGS]
                          optimize for fast installation [default=yes]
  --disable-libtool-lock  avoid locking (might break parallel builds)

Optional Packages:
  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  --with-adept-utils=PATH Specify adept-utils path
  --with-callpath=PATH    Specify libcallpath path
  --with-stack-start-c=value
                          Specify integer number for MPILEAKS_STACK_START for
                          C code
  --with-stack-start-fortran=value
                          Specify integer number for MPILEAKS_STACK_START for
                          FORTRAN code
  --with-pic              try to use only PIC/non-PIC objects [default=use
                          both]
  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]

According to the software’s documentation (https://github.com/LLNL/mpileaks), the integer values for the --with-stack-start-* options represent the numbers of calls to shave off of the top of the stack traces for each language, effectively reducing the noise of internal mpileaks library function calls in generated traces.

For simplicity, we’ll use one variant to supply the value for both arguments.

Supporting this optional feature will require two changes to the package:

Let’s add the variant to expect an int value with a default of 0. Setting the default to 0 effectively disables the option. Change configure_args to retrieve the value and add the corresponding configure arguments when a non-zero value is provided by the user.

Bring tutorial-mpileakspackage.py file back up with the spack edit command:

$ spack edit tutorial-mpileaks

and add the variant directive and associated arguments as follows:

tutorial-mpileaks/package.py (from tutorial/examples/packaging/4.package.py)
from spack_repo.builtin.build_systems.autotools import AutotoolsPackage
from spack.package import *


class TutorialMpileaks(AutotoolsPackage):
    """Tool to detect and report MPI objects like MPI_Requests and MPI_Datatypes."""

    homepage = "https://github.com/LLNL/mpileaks"
    url = "https://github.com/LLNL/mpileaks/archive/refs/tags/v1.0.tar.gz"

    maintainers("adamjstewart")

    license("BSD", checked_by="adamjstewart")

    version("1.0", sha256="24c706591bdcd84541e19389a9314813ce848035ee877e213d528b184f4b43f9")

    variant(
        "stackstart",
        values=int,
        default=0,
        description="Specify the number of stack frames to truncate",
    )

    depends_on("c", type="build")
    depends_on("cxx", type="build")
    depends_on("fortran", type="build")

    depends_on("autoconf", type="build")
    depends_on("automake", type="build")
    depends_on("libtool", type="build")
    depends_on("m4", type="build")

    depends_on("mpi")
    depends_on("adept-utils")
    depends_on("callpath")

    def autoreconf(self, spec, prefix):
        autoreconf("--install", "--verbose", "--force")

    def configure_args(self):
        args = [
            f"--with-adept-utils={self.spec['adept-utils'].prefix}",
            f"--with-callpath={self.spec['callpath'].prefix}",
        ]

        stackstart = int(self.spec.variants["stackstart"].value)
        if stackstart:
            args.extend(
                [
                    f"--with-stack-start-c={stackstart}",
                    f"--with-stack-start-fortran={stackstart}",
                ]
            )

        return args

Notice that the variant directive is translated into a variants dictionary in self.spec. Also note that the value provided by the user is accessed by the entry’s value property.

Now run the installation again with the --verbose install option – to get more output during the build – and the new stackstart package option:

$ spack install --verbose tutorial-mpileaks stackstart=4
==> Warning: /home/spack/repos/spack_repo/tutorial/packages/tutorial_mpileaks/package.py:21: default value for variant 'stackstart' is not a boolean or string: default=0. Did you mean default='0'?
[+] /usr (external glibc-2.35-epwvtixhoxdeufu6kbbrpaigv2p6iav4)
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gcc-runtime-10.5.0-ekeebbieporufbv2ersvvhgqxsljzqpg
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gcc-runtime-12.5.0-zubbt4yxn35hmaarhmzluk6cb6gkujee
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gcc-runtime-11.4.0-3c5xh7dqudxmyorlsrsfmjyggqk57vnr
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gmake-4.4.1-haeogmcedfgt33rxdkcybfkvordw63wj
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/zlib-ng-2.2.4-g7ixtqygrfip5uzt526b565dqxs6ze3x
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/xz-5.6.3-zeynpnjapluctm4lxzuwo7en5jmdzt6c
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libpciaccess-0.17-w5iqeddpn6xfxfm3grear6sow3p6eaa5
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/bzip2-1.0.8-vy2ggzhuzo7pav5clvz6dvamexpeaadk
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gmp-6.3.0-zx3x4nm3djw5jdqxcsimfpxykoxdijhj
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/ncurses-6.5-u7sn2jtlvafr3vqli4m7i7ysecwkwepd
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/zstd-1.5.7-bmaw6fn2i5mbbfujq6kf7bomodh4iudq
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libiconv-1.18-kgw5nkswdpf7k2itwhjwegwyszj3v56s
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/boost-1.72.0-x4ntqhhem4kqmrxwnywu65jji2wr2dhr
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/pkgconf-2.3.0-xoghzadcbbqi6ccvlnfkghrutmid3eav
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libxcrypt-4.4.38-iundcaqxew2asagohzi27rxmh2zbk4qo
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/numactl-2.0.18-74aq3kxwhmje2sqvk27v73d7525q2enn
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/findutils-4.10.0-ga3qiejil4e74fukhmtwcq5vrvzgmwmk
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/berkeley-db-18.1.40-k5bepowzfoxlz67vuctewwbxlrj5sgji
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libsigsegv-2.14-vefpsalwx43ol7ppom7svfbsfqv3jit4
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libiberty-2.41-cvva4qyqow7p7qoti2k5rbcsb44rdtoo
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/pigz-2.8-prsofdph5zl75k54hjwgcr34lipeyuh5
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/openssl-3.4.1-kphogwy3wlzx3rl6ddmjwui5qs77qvys
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/mpfr-4.2.1-abjn4yec4cwckmwvwwtg45keufsqyhya
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/readline-8.2-skysn5ppmam2ipxq4zlzwjxm42kurky2
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libdwarf-2.0.0-uirapsmqr52qork6p3cupyuyyu727ygz
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libxml2-2.13.5-7mdlpguaingjbgxrvtgjnv3y6372tofw
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libedit-3.1-20240808-h766azt27z6p7yvfxwb22r23cxvtj3gj
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libtool-2.4.7-l2jtwyuivfhutipzs462o4ny7ctu4f5c
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/m4-1.4.20-ypq2dyeslmkos5za6z46ti5u4gf7kdya
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/tar-1.35-ye5hcpfjk5svng6s2sjj4n6huwokazfk
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libevent-2.1.12-dvz3n3eojbnxt74he2ky2rj75gukcgfh
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/mpc-1.3.1-mkqx7budcw2rpbdzo63hsoxhhszx366g
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gdbm-1.23-5yo63cnvgytwmsoiwoilhfgnyaffncmz
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/hwloc-2.11.1-jhcvb6nk7guze7u7zojqrp5oxovharww
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gettext-0.23.1-soasbhmurzckxvnvfcqm22jsegvmh4jv
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gcc-12.5.0-fmxnit5ggu45byub6wlsuienth2dkboh
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/perl-5.40.0-nsqyer7nqsmv3ams4gk5mubo74maob3z
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/pmix-5.0.5-msnkjumpg75ybnv7uinrcbbkt4slvt3e
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/intel-tbb-2022.0.0-3g2dqp5itvsq3easbbs6bgtv4zni4uya
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/elfutils-0.192-bqadq4z3npndbqqzkms7abk2ziqeteid
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/krb5-1.21.3-zo73rgnlq3dcwy76ebibj2ubnzkhia2c
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/autoconf-2.72-5xgjgaemj5ur5z5mr7anba35jcy2n5rm
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/dyninst-13.0.0-np3n5uf2baeyrmdmavuruvrpkxh6ztmr
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/openssh-9.9p1-2s7eddoqitn34vgpljqsrca3s7w7s6ud
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/automake-1.16.5-vorbe53mrrx354udsx5hpelstxeduh53
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr
==> No binary for tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j found: installing from source
==> Installing tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j [51/51]
==> Using cached archive: /home/spack/spack/var/spack/cache/_source-cache/archive/24/24c706591bdcd84541e19389a9314813ce848035ee877e213d528b184f4b43f9.tar.gz
==> No patches needed for tutorial-mpileaks
==> tutorial-mpileaks: Executing phase: 'autoreconf'
==> [2025-08-06-22:08:48.488704] '/home/spack/spack/opt/spack/linux-x86_64_v3/autoconf-2.72-5xgjgaemj5ur5z5mr7anba35jcy2n5rm/bin/autoreconf' '--install' '--verbose' '--force'
autoreconf: export WARNINGS=
autoreconf: Entering directory '.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal --force -I m4
autoreconf: configure.ac: tracing
autoreconf: running: libtoolize --copy --force
libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, 'config'.
libtoolize: copying file 'config/ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'.
libtoolize: copying file 'm4/libtool.m4'
libtoolize: copying file 'm4/ltoptions.m4'
libtoolize: copying file 'm4/ltsugar.m4'
libtoolize: copying file 'm4/ltversion.m4'
libtoolize: copying file 'm4/lt~obsolete.m4'
autoreconf: configure.ac: not using Intltool
autoreconf: configure.ac: not using Gtkdoc
autoreconf: running: aclocal --force -I m4
autoreconf: running: /home/spack/spack/opt/spack/linux-x86_64_v3/autoconf-2.72-5xgjgaemj5ur5z5mr7anba35jcy2n5rm/bin/autoconf --force
configure.ac:9: warning: 'AM_CONFIG_HEADER': this macro is obsolete.
configure.ac:9: You should use the 'AC_CONFIG_HEADERS' macro instead.
/tmp/root/spack-stage/spack-stage-autoconf-2.72-5xgjgaemj5ur5z5mr7anba35jcy2n5rm/spack-src/lib/autoconf/general.m4:2434: AC_DIAGNOSE is expanded from...
aclocal.m4:745: AM_CONFIG_HEADER is expanded from...
configure.ac:9: the top level
configure.ac:38: warning: The macro 'AC_PROG_LIBTOOL' is obsolete.
configure.ac:38: You should run autoupdate.
m4/libtool.m4:100: AC_PROG_LIBTOOL is expanded from...
configure.ac:38: the top level
configure.ac:47: warning: The macro 'AC_HEADER_STDC' is obsolete.
configure.ac:47: You should run autoupdate.
/tmp/root/spack-stage/spack-stage-autoconf-2.72-5xgjgaemj5ur5z5mr7anba35jcy2n5rm/spack-src/lib/autoconf/headers.m4:663: AC_HEADER_STDC is expanded from...
configure.ac:47: the top level
autoreconf: running: /home/spack/spack/opt/spack/linux-x86_64_v3/autoconf-2.72-5xgjgaemj5ur5z5mr7anba35jcy2n5rm/bin/autoheader --force
autoreconf: running: automake --add-missing --copy --force-missing
configure.ac:26: installing 'config/compile'
configure.ac:19: installing 'config/missing'
src/Makefile.am:14: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
src/Makefile.am: installing 'config/depcomp'
autoreconf: 'config/install-sh' is updated
autoreconf: 'config/config.sub' is updated
autoreconf: 'config/config.guess' is updated
autoreconf: Leaving directory '.'
==> tutorial-mpileaks: Executing phase: 'configure'
==> [2025-08-06-22:08:52.473237] Find (max depth = None): ['/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src'] ['configure']
==> [2025-08-06-22:08:52.474331] Find complete: ['/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src'] ['configure']
==> [2025-08-06-22:08:52.474928] FILTER FILE: /tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/configure [replacing "^(\s*if test x-L = )("\$p" \|\|\s*)$"]
==> [2025-08-06-22:08:52.495451] FILTER FILE: /tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/configure [replacing "^(\s*test x-R = )("\$p")(; then\s*)$"]
==> [2025-08-06-22:08:52.515394] FILTER FILE: /tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/configure [replacing "^(\s*test \$p = "-R")(; then\s*)$"]
==> [2025-08-06-22:08:52.535387] FILTER FILE: /tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/configure [replacing "lt_cv_apple_cc_single_mod=no"]
==> [2025-08-06-22:08:52.556652] '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/configure' '--prefix=/home/spack/spack/opt/spack/linux-x86_64_v3/tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j' '--with-adept-utils=/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv' '--with-callpath=/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr' '--with-stack-start-c=4' '--with-stack-start-fortran=4'
checking metadata... no
checking installation directory variables... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a race-free mkdir -p... /usr/bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking for gcc... /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether the compiler supports GNU C... yes
checking whether /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/gcc accepts -g... yes
checking for /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/gcc option to enable C11 features... none needed
checking whether /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/gcc understands -c and -o together... yes
checking whether make supports the include directive... yes (GNU style)
checking dependency style of /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/gcc... gcc3
checking whether the compiler supports GNU C++... yes
checking whether /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ accepts -g... yes
checking for /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ option to enable C++11 features... none needed
checking dependency style of /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++... gcc3
checking for /home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/bin/mpicc... /home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/bin/mpicc
Checking whether /home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/bin/mpicc responds to '-showme:compile'... yes
checking for adept-utils installation... /home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv
checking for libcallpath installation... /home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking how to print strings... printf
checking for a sed that does not truncate output... /usr/bin/sed
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for fgrep... /usr/bin/grep -F
checking for ld used by /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/gcc... /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/ld
checking if the linker (/home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 3145728
checking how to convert x86_64-pc-linux-gnu file names to x86_64-pc-linux-gnu format... func_convert_file_noop
checking how to convert x86_64-pc-linux-gnu file names to toolchain format... func_convert_file_noop
checking for /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/ld option to reload object files... -r
checking for file... file
checking for objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for dlltool... no
checking how to associate runtime and link libraries... printf %s\n
checking for ar... ar
checking for archiver @FILE support... @
checking for strip... strip
checking for ranlib... ranlib
checking command to parse /usr/bin/nm -B output from /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/gcc object... ok
checking for sysroot... no
checking for a working dd... /usr/bin/dd
checking how to truncate binary pipes... /usr/bin/dd bs=4096 count=1
checking for mt... no
checking if : is a manifest tool... no
checking for stdio.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for strings.h... yes
checking for sys/stat.h... yes
checking for sys/types.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/gcc supports -fno-rtti -fno-exceptions... no
checking for /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/gcc option to produce PIC... -fPIC -DPIC
checking if /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/gcc PIC flag -fPIC -DPIC works... yes
checking if /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/gcc static flag -static works... yes
checking if /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/gcc supports -c -o file.o... yes
checking if /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/gcc supports -c -o file.o... (cached) yes
checking whether the /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/gcc linker (/home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/ld -m elf_x86_64) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
checking how to run the C++ preprocessor... /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -E
checking for ld used by /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++... /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/ld -m elf_x86_64
checking if the linker (/home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/ld -m elf_x86_64) is GNU ld... yes
checking whether the /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ linker (/home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/ld -m elf_x86_64) supports shared libraries... yes
checking for /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ option to produce PIC... -fPIC -DPIC
checking if /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ PIC flag -fPIC -DPIC works... yes
checking if /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ static flag -static works... yes
checking if /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ supports -c -o file.o... yes
checking if /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ supports -c -o file.o... (cached) yes
checking whether the /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ linker (/home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/ld -m elf_x86_64) supports shared libraries... yes
checking dynamic linker characteristics... (cached) GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking for egrep... (cached) /usr/bin/grep -E
checking whether byte ordering is bigendian... no
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating examples/Makefile
config.status: creating scripts/Makefile
config.status: creating scripts/srun-mpileaks
config.status: creating scripts/srun-mpileaksf
config.status: creating config/config.h
config.status: executing depfiles commands
config.status: executing libtool commands
==> [2025-08-06-22:08:55.855723] Find (max depth = None): ['/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src'] ['libtool']
==> [2025-08-06-22:08:55.856441] Find complete: ['/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src'] ['libtool']
==> [2025-08-06-22:08:55.857523] FILTER FILE: /tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/libtool [replacing "^wl=""$"]
==> [2025-08-06-22:08:55.873985] FILTER FILE: /tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/libtool [replacing "^pic_flag=""$"]
==> [2025-08-06-22:08:55.878766] FILTER FILE: /tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/libtool [replacing "^pic_flag=""$"]
==> [2025-08-06-22:08:55.885803] FILTER FILE: /tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/libtool [replacing "^pic_flag=""$"]
==> [2025-08-06-22:08:55.893934] FILTER FILE: /tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/libtool [replacing "^pic_flag=""$"]
==> tutorial-mpileaks: Executing phase: 'build'
==> [2025-08-06-22:08:55.915168] '/home/spack/spack/opt/spack/linux-x86_64_v3/gmake-4.4.1-haeogmcedfgt33rxdkcybfkvordw63wj/bin/make' '-j4' 'V=1'
Making all in scripts
make[1]: Entering directory '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/scripts'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/scripts'
Making all in src
make[1]: Entering directory '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/src'
/bin/bash ../libtool  --tag=CXX	  --mode=compile /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config   -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include    -g -O2 -MT mpileaks.lo -MD -MP -MF .deps/mpileaks.Tpo -c -o mpileaks.lo mpileaks.cpp
/bin/bash ../libtool  --tag=CXX	  --mode=compile /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config   -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include    -g -O2 -MT comm.lo -MD -MP -MF .deps/comm.Tpo -c -o comm.lo comm.cpp
/bin/bash ../libtool  --tag=CXX	  --mode=compile /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config   -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include    -g -O2 -MT datatype.lo -MD -MP -MF .deps/datatype.Tpo -c -o datatype.lo datatype.cpp
/bin/bash ../libtool  --tag=CXX	  --mode=compile /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config   -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include    -g -O2 -MT errhandler.lo -MD -MP -MF .deps/errhandler.Tpo -c -o errhandler.lo errhandler.cpp
libtool: compile:  /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include -g -O2 -MT comm.lo -MD -MP -MF .deps/comm.Tpo -c comm.cpp  -fPIC -DPIC -o .libs/comm.o
libtool: compile:  /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include -g -O2 -MT datatype.lo -MD -MP -MF .deps/datatype.Tpo -c datatype.cpp  -fPIC -DPIC -o .libs/datatype.o
libtool: compile:  /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include -g -O2 -MT mpileaks.lo -MD -MP -MF .deps/mpileaks.Tpo -c mpileaks.cpp  -fPIC -DPIC -o .libs/mpileaks.o
libtool: compile:  /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include -g -O2 -MT errhandler.lo -MD -MP -MF .deps/errhandler.Tpo -c errhandler.cpp	 -fPIC -DPIC -o .libs/errhandler.o
libtool: compile:  /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include -g -O2 -MT datatype.lo -MD -MP -MF .deps/datatype.Tpo -c datatype.cpp -o datatype.o >/dev/null 2>&1
libtool: compile:  /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include -g -O2 -MT mpileaks.lo -MD -MP -MF .deps/mpileaks.Tpo -c mpileaks.cpp -o mpileaks.o >/dev/null 2>&1
libtool: compile:  /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include -g -O2 -MT comm.lo -MD -MP -MF .deps/comm.Tpo -c comm.cpp -o comm.o >/dev/null 2>&1
libtool: compile:  /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include -g -O2 -MT errhandler.lo -MD -MP -MF .deps/errhandler.Tpo -c errhandler.cpp -o errhandler.o >/dev/null 2>&1
mv -f .deps/mpileaks.Tpo .deps/mpileaks.Plo
/bin/bash ../libtool  --tag=CXX	  --mode=compile /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config   -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include    -g -O2 -MT fileio.lo -MD -MP -MF .deps/fileio.Tpo -c -o fileio.lo fileio.cpp
mv -f .deps/errhandler.Tpo .deps/errhandler.Plo
/bin/bash ../libtool  --tag=CXX	  --mode=compile /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config   -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include    -g -O2 -MT group.lo -MD -MP -MF .deps/group.Tpo -c -o group.lo group.cpp
libtool: compile:  /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include -g -O2 -MT fileio.lo -MD -MP -MF .deps/fileio.Tpo -c fileio.cpp  -fPIC -DPIC -o .libs/fileio.o
mv -f .deps/datatype.Tpo .deps/datatype.Plo
/bin/bash ../libtool  --tag=CXX	  --mode=compile /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config   -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include    -g -O2 -MT info.lo -MD -MP -MF .deps/info.Tpo -c -o info.lo info.cpp
libtool: compile:  /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include -g -O2 -MT group.lo -MD -MP -MF .deps/group.Tpo -c group.cpp  -fPIC -DPIC -o .libs/group.o
mv -f .deps/comm.Tpo .deps/comm.Plo
/bin/bash ../libtool  --tag=CXX	  --mode=compile /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config   -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include    -g -O2 -MT keyval.lo -MD -MP -MF .deps/keyval.Tpo -c -o keyval.lo keyval.cpp
libtool: compile:  /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include -g -O2 -MT info.lo -MD -MP -MF .deps/info.Tpo -c info.cpp  -fPIC -DPIC -o .libs/info.o
libtool: compile:  /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include -g -O2 -MT keyval.lo -MD -MP -MF .deps/keyval.Tpo -c keyval.cpp  -fPIC -DPIC -o .libs/keyval.o
libtool: compile:  /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include -g -O2 -MT fileio.lo -MD -MP -MF .deps/fileio.Tpo -c fileio.cpp -o fileio.o >/dev/null 2>&1
libtool: compile:  /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include -g -O2 -MT info.lo -MD -MP -MF .deps/info.Tpo -c info.cpp -o info.o >/dev/null 2>&1
libtool: compile:  /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include -g -O2 -MT group.lo -MD -MP -MF .deps/group.Tpo -c group.cpp -o group.o >/dev/null 2>&1
libtool: compile:  /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include -g -O2 -MT keyval.lo -MD -MP -MF .deps/keyval.Tpo -c keyval.cpp -o keyval.o >/dev/null 2>&1
mv -f .deps/fileio.Tpo .deps/fileio.Plo
/bin/bash ../libtool  --tag=CXX	  --mode=compile /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config   -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include    -g -O2 -MT mem.lo -MD -MP -MF .deps/mem.Tpo -c -o mem.lo mem.cpp
libtool: compile:  /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include -g -O2 -MT mem.lo -MD -MP -MF .deps/mem.Tpo -c mem.cpp  -fPIC -DPIC -o .libs/mem.o
mv -f .deps/info.Tpo .deps/info.Plo
/bin/bash ../libtool  --tag=CXX	  --mode=compile /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config   -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include    -g -O2 -MT op.lo -MD -MP -MF .deps/op.Tpo -c -o op.lo op.cpp
libtool: compile:  /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include -g -O2 -MT op.lo -MD -MP -MF .deps/op.Tpo -c op.cpp	 -fPIC -DPIC -o .libs/op.o
mv -f .deps/group.Tpo .deps/group.Plo
/bin/bash ../libtool  --tag=CXX	  --mode=compile /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config   -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include    -g -O2 -MT request.lo -MD -MP -MF .deps/request.Tpo -c -o request.lo request.cpp
libtool: compile:  /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include -g -O2 -MT request.lo -MD -MP -MF .deps/request.Tpo -c request.cpp	-fPIC -DPIC -o .libs/request.o
mv -f .deps/keyval.Tpo .deps/keyval.Plo
/bin/bash ../libtool  --tag=CXX	  --mode=compile /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config   -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include    -g -O2 -MT win.lo -MD -MP -MF .deps/win.Tpo -c -o win.lo win.cpp
libtool: compile:  /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include -g -O2 -MT win.lo -MD -MP -MF .deps/win.Tpo -c win.cpp  -fPIC -DPIC -o .libs/win.o
libtool: compile:  /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include -g -O2 -MT mem.lo -MD -MP -MF .deps/mem.Tpo -c mem.cpp -o mem.o >/dev/null 2>&1
libtool: compile:  /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include -g -O2 -MT op.lo -MD -MP -MF .deps/op.Tpo -c op.cpp -o op.o >/dev/null 2>&1
libtool: compile:  /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include -g -O2 -MT win.lo -MD -MP -MF .deps/win.Tpo -c win.cpp -o win.o >/dev/null 2>&1
libtool: compile:  /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++ -DHAVE_CONFIG_H -I. -I../config -DHAVE_CONFIG_H -I. -I../config -I../src -I../config -g -O2 -I//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/include -I/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/include -g -O2 -MT request.lo -MD -MP -MF .deps/request.Tpo -c request.cpp -o request.o >/dev/null 2>&1
mv -f .deps/mem.Tpo .deps/mem.Plo
mv -f .deps/op.Tpo .deps/op.Plo
mv -f .deps/win.Tpo .deps/win.Plo
mv -f .deps/request.Tpo .deps/request.Plo
/bin/bash ../libtool  --tag=CXX	  --mode=link /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++  -g -O2 -avoid-version  -o libmpileaks.la -rpath /home/spack/spack/opt/spack/linux-x86_64_v3/tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/lib mpileaks.lo comm.lo datatype.lo errhandler.lo fileio.lo group.lo info.lo keyval.lo mem.lo op.lo request.lo win.lo -L/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/lib -ladept_cutils -ladept_timing -ladept_utils -L/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/lib -lcallpath
libtool: link: /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc/g++	-fPIC -DPIC -shared -nostdlib /lib/x86_64-linux-gnu/crti.o /home/spack/spack/opt/spack/linux-x86_64_v3/gcc-12.5.0-fmxnit5ggu45byub6wlsuienth2dkboh/bin/../lib/gcc/x86_64-pc-linux-gnu/12.5.0/crtbeginS.o  .libs/mpileaks.o .libs/comm.o .libs/datatype.o .libs/errhandler.o .libs/fileio.o .libs/group.o .libs/info.o .libs/keyval.o .libs/mem.o .libs/op.o .libs/request.o .libs/win.o	  -L/home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv/lib -ladept_cutils -ladept_timing -ladept_utils -L/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/lib -lcallpath -L/home/spack/spack/opt/spack/linux-x86_64_v3/gcc-12.5.0-fmxnit5ggu45byub6wlsuienth2dkboh/bin/../lib/gcc/x86_64-pc-linux-gnu/12.5.0 -L/home/spack/spack/opt/spack/linux-x86_64_v3/gcc-12.5.0-fmxnit5ggu45byub6wlsuienth2dkboh/bin/../lib/gcc -L/home/spack/spack/opt/spack/linux-x86_64_v3/gcc-12.5.0-fmxnit5ggu45byub6wlsuienth2dkboh/bin/../lib/gcc/x86_64-pc-linux-gnu/12.5.0/../../../../lib64 -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib64 -L/home/spack/spack/opt/spack/linux-x86_64_v3/gcc-12.5.0-fmxnit5ggu45byub6wlsuienth2dkboh/bin/../lib/gcc/x86_64-pc-linux-gnu/12.5.0/../../.. -lstdc++ -lm -lc -lgcc_s /home/spack/spack/opt/spack/linux-x86_64_v3/gcc-12.5.0-fmxnit5ggu45byub6wlsuienth2dkboh/bin/../lib/gcc/x86_64-pc-linux-gnu/12.5.0/crtendS.o /lib/x86_64-linux-gnu/crtn.o  -g -O2   -Wl,-soname -Wl,libmpileaks.so -o .libs/libmpileaks.so
libtool: link: ar cr .libs/libmpileaks.a  mpileaks.o comm.o datatype.o errhandler.o fileio.o group.o info.o keyval.o mem.o op.o request.o win.o
libtool: link: ranlib .libs/libmpileaks.a
libtool: link: ( cd ".libs" && rm -f "libmpileaks.la" && ln -s "../libmpileaks.la" "libmpileaks.la" )
make[1]: Leaving directory '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/src'
Making all in examples
make[1]: Entering directory '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/examples'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/examples'
make[1]: Entering directory '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src'
make[1]: Nothing to be done for 'all-am'.
make[1]: Leaving directory '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src'
==> tutorial-mpileaks: Executing phase: 'install'
==> [2025-08-06-22:09:06.282399] '/home/spack/spack/opt/spack/linux-x86_64_v3/gmake-4.4.1-haeogmcedfgt33rxdkcybfkvordw63wj/bin/make' '-j4' 'install'
Making install in scripts
make[1]: Entering directory '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/scripts'
make[2]: Entering directory '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/scripts'
make[2]: Nothing to be done for 'install-data-am'.
 /usr/bin/mkdir -p '/home/spack/spack/opt/spack/linux-x86_64_v3/tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/bin'
 /usr/bin/install -c srun-mpileaks srun-mpileaksf '/home/spack/spack/opt/spack/linux-x86_64_v3/tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/bin'
make[2]: Leaving directory '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/scripts'
make[1]: Leaving directory '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/scripts'
Making install in src
make[1]: Entering directory '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/src'
make[2]: Entering directory '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/src'
make[2]: Nothing to be done for 'install-data-am'.
 /usr/bin/mkdir -p '/home/spack/spack/opt/spack/linux-x86_64_v3/tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/lib'
 /bin/bash ../libtool	--mode=install /usr/bin/install -c   libmpileaks.la '/home/spack/spack/opt/spack/linux-x86_64_v3/tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/lib'
libtool: install: /usr/bin/install -c .libs/libmpileaks.so /home/spack/spack/opt/spack/linux-x86_64_v3/tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/lib/libmpileaks.so
libtool: install: /usr/bin/install -c .libs/libmpileaks.lai /home/spack/spack/opt/spack/linux-x86_64_v3/tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/lib/libmpileaks.la
libtool: install: /usr/bin/install -c .libs/libmpileaks.a /home/spack/spack/opt/spack/linux-x86_64_v3/tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/lib/libmpileaks.a
libtool: install: chmod 644 /home/spack/spack/opt/spack/linux-x86_64_v3/tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/lib/libmpileaks.a
libtool: install: ranlib /home/spack/spack/opt/spack/linux-x86_64_v3/tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/lib/libmpileaks.a
libtool: finish: PATH="/home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc:/home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/case-insensitive:/home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack:/home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc:/home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/case-insensitive:/home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack:/home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc:/home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/case-insensitive:/home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack:/home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/gcc:/home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack/case-insensitive:/home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee/libexec/spack:/home/spack/spack/opt/spack/linux-x86_64_v3/autoconf-2.72-5xgjgaemj5ur5z5mr7anba35jcy2n5rm/bin:/home/spack/spack/opt/spack/linux-x86_64_v3/automake-1.16.5-vorbe53mrrx354udsx5hpelstxeduh53/bin:/home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr/bin:/home/spack/spack/opt/spack/linux-x86_64_v3/gcc-12.5.0-fmxnit5ggu45byub6wlsuienth2dkboh/bin:/home/spack/spack/opt/spack/linux-x86_64_v3/gmake-4.4.1-haeogmcedfgt33rxdkcybfkvordw63wj/bin:/home/spack/spack/opt/spack/linux-x86_64_v3/libtool-2.4.7-l2jtwyuivfhutipzs462o4ny7ctu4f5c/bin:/home/spack/spack/opt/spack/linux-x86_64_v3/m4-1.4.20-ypq2dyeslmkos5za6z46ti5u4gf7kdya/bin:/home/spack/spack/opt/spack/linux-x86_64_v3/perl-5.40.0-nsqyer7nqsmv3ams4gk5mubo74maob3z/bin:/home/spack/spack/opt/spack/linux-x86_64_v3/findutils-4.10.0-ga3qiejil4e74fukhmtwcq5vrvzgmwmk/bin:/home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz/bin:/home/spack/spack/opt/spack/linux-x86_64_v3/openssh-9.9p1-2s7eddoqitn34vgpljqsrca3s7w7s6ud/bin:/home/spack/spack/opt/spack/linux-x86_64_v3/tar-1.35-ye5hcpfjk5svng6s2sjj4n6huwokazfk/bin:/home/spack/spack/opt/spack/linux-x86_64_v3/bzip2-1.0.8-vy2ggzhuzo7pav5clvz6dvamexpeaadk/bin:/home/spack/spack/opt/spack/linux-x86_64_v3/pigz-2.8-prsofdph5zl75k54hjwgcr34lipeyuh5/bin:/home/spack/spack/opt/spack/linux-x86_64_v3/xz-5.6.3-zeynpnjapluctm4lxzuwo7en5jmdzt6c/bin:/home/spack/spack/opt/spack/linux-x86_64_v3/zstd-1.5.7-bmaw6fn2i5mbbfujq6kf7bomodh4iudq/bin:/home/spack/spack/bin:/opt/spack/view/bin:/root/spack/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/sbin" ldconfig -n /home/spack/spack/opt/spack/linux-x86_64_v3/tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/lib
----------------------------------------------------------------------
Libraries have been installed in:
   /home/spack/spack/opt/spack/linux-x86_64_v3/tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the '-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the 'LD_RUN_PATH' environment variable
     during linking
   - use the '-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to '/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
make[2]: Leaving directory '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/src'
make[1]: Leaving directory '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/src'
Making install in examples
make[1]: Entering directory '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/examples'
make[2]: Entering directory '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/examples'
make[2]: Nothing to be done for 'install-exec-am'.
 /usr/bin/mkdir -p '/home/spack/spack/opt/spack/linux-x86_64_v3/tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/share/mpileaks/examples'
 /usr/bin/install -c -m 644 tests.c mpiPing_leaky.f '/home/spack/spack/opt/spack/linux-x86_64_v3/tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/share/mpileaks/examples'
make[2]: Leaving directory '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/examples'
make[1]: Leaving directory '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src/examples'
make[1]: Entering directory '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src'
make[2]: Entering directory '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src'
make[2]: Nothing to be done for 'install-exec-am'.
 /usr/bin/mkdir -p '/home/spack/spack/opt/spack/linux-x86_64_v3/tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/share/mpileaks'
 /usr/bin/install -c -m 644 README '/home/spack/spack/opt/spack/linux-x86_64_v3/tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/share/mpileaks'
make[2]: Leaving directory '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src'
make[1]: Leaving directory '/tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j/spack-src'
==> [2025-08-06-22:09:06.499518] Find (max depth = None): ['/home/spack/spack/opt/spack/linux-x86_64_v3/tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j'] ['*.la']
==> [2025-08-06-22:09:06.500352] Find complete: ['/home/spack/spack/opt/spack/linux-x86_64_v3/tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j'] ['*.la']
==> tutorial-mpileaks: Successfully installed tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j
  Stage: 0.01s.	 Autoreconf: 3.97s.  Configure: 3.43s.	Build: 10.35s.	Install: 0.22s.	 Post-install: 0.03s.  Total: 18.09s
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/tutorial-mpileaks-1.0-mu62jl5xbgtns6jwusnfwdp36ebk6q2j

Notice the addition of the two stack start arguments in the configure command that appears at the end of the highlighted line after tutorial-mpileaksExecuting phase: 'configure'.

Note

Not all packages have such simple options. Fortunately, Autotools is one of several packages that implement helper functions to simplify setting arguments tied to boolean and multi-valued variants..

Now that we have a package we can build, it’s time to consider adding tests that can be used to gain confidence that the software works.

Adding Tests

The simplest tests we can add are sanity checks, which can be used to ensure the directories and or files we expect to be installed for all versions of the package actually exist.

If we look at a successful installation, we can see that the following directories are installed:

  • bin

  • lib

  • share

So let’s add a simple sanity check to ensure they are present, but let’s enter a typo to see what happens.

Bring tutorial-mpileakspackage.py file back up with the spack edit command and add the following sanity_check_is_dir list:

tutorial-mpileaks/package.py (from tutorial/examples/packaging/5.package.py)
from spack_repo.builtin.build_systems.autotools import AutotoolsPackage
from spack.package import *


class TutorialMpileaks(AutotoolsPackage):
    """Tool to detect and report MPI objects like MPI_Requests and MPI_Datatypes."""

    homepage = "https://github.com/LLNL/mpileaks"
    url = "https://github.com/LLNL/mpileaks/archive/refs/tags/v1.0.tar.gz"

    maintainers("adamjstewart")

    license("BSD", checked_by="adamjstewart")

    sanity_check_is_dir = ["bin", "lib", "shar"]

    version("1.0", sha256="24c706591bdcd84541e19389a9314813ce848035ee877e213d528b184f4b43f9")

    variant(
        "stackstart",
        values=int,
        default=0,
        description="Specify the number of stack frames to truncate",
    )

    depends_on("c", type="build")
    depends_on("cxx", type="build")
    depends_on("fortran", type="build")

    depends_on("autoconf", type="build")
    depends_on("automake", type="build")
    depends_on("libtool", type="build")
    depends_on("m4", type="build")

    depends_on("mpi")
    depends_on("adept-utils")
    depends_on("callpath")

    def autoreconf(self, spec, prefix):
        autoreconf("--install", "--verbose", "--force")

    def configure_args(self):
        args = [
            f"--with-adept-utils={self.spec['adept-utils'].prefix}",
            f"--with-callpath={self.spec['callpath'].prefix}",
        ]

        stackstart = int(self.spec.variants["stackstart"].value)
        if stackstart:
            args.extend(
                [
                    f"--with-stack-start-c={stackstart}",
                    f"--with-stack-start-fortran={stackstart}",
                ]
            )

        return args

Since these are build-time tests, we’ll need to uninstall the package so we can re-run it with tests enabled:

$ spack uninstall -ay tutorial-mpileaks
==> Warning: /home/spack/repos/spack_repo/tutorial/packages/tutorial_mpileaks/package.py:21: default value for variant 'stackstart' is not a boolean or string: default=0. Did you mean default='0'?
==> Successfully uninstalled tutorial-mpileaks@1.0 build_system=autotools stackstart=4 arch=linux-ubuntu22.04-x86_64_v3/mu62jl5
==> Successfully uninstalled tutorial-mpileaks@1.0 build_system=autotools arch=linux-ubuntu22.04-x86_64_v3/7mg6z5o
$ spack install --test=root tutorial-mpileaks
==> Warning: /home/spack/repos/spack_repo/tutorial/packages/tutorial_mpileaks/package.py:23: default value for variant 'stackstart' is not a boolean or string: default=0. Did you mean default='0'?
[+] /usr (external glibc-2.35-epwvtixhoxdeufu6kbbrpaigv2p6iav4)
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gcc-runtime-11.4.0-3c5xh7dqudxmyorlsrsfmjyggqk57vnr
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gcc-runtime-12.5.0-zubbt4yxn35hmaarhmzluk6cb6gkujee
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libiberty-2.41-cvva4qyqow7p7qoti2k5rbcsb44rdtoo
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libsigsegv-2.14-vefpsalwx43ol7ppom7svfbsfqv3jit4
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libiconv-1.18-kgw5nkswdpf7k2itwhjwegwyszj3v56s
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/boost-1.72.0-x4ntqhhem4kqmrxwnywu65jji2wr2dhr
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/xz-5.6.3-zeynpnjapluctm4lxzuwo7en5jmdzt6c
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/ncurses-6.5-u7sn2jtlvafr3vqli4m7i7ysecwkwepd
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gmake-4.4.1-5vb6e4beeoff4jan2t7edfjyi3hf3p7g
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libedit-3.1-20240808-h766azt27z6p7yvfxwb22r23cxvtj3gj
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/m4-1.4.20-ypq2dyeslmkos5za6z46ti5u4gf7kdya
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/readline-8.2-skysn5ppmam2ipxq4zlzwjxm42kurky2
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/bzip2-1.0.8-vy2ggzhuzo7pav5clvz6dvamexpeaadk
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/zstd-1.5.7-bmaw6fn2i5mbbfujq6kf7bomodh4iudq
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/berkeley-db-18.1.40-k5bepowzfoxlz67vuctewwbxlrj5sgji
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/zlib-ng-2.2.4-g7ixtqygrfip5uzt526b565dqxs6ze3x
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libxcrypt-4.4.38-iundcaqxew2asagohzi27rxmh2zbk4qo
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libpciaccess-0.17-w5iqeddpn6xfxfm3grear6sow3p6eaa5
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/pkgconf-2.3.0-xoghzadcbbqi6ccvlnfkghrutmid3eav
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/findutils-4.10.0-ga3qiejil4e74fukhmtwcq5vrvzgmwmk
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/numactl-2.0.18-74aq3kxwhmje2sqvk27v73d7525q2enn
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gmp-6.3.0-zx3x4nm3djw5jdqxcsimfpxykoxdijhj
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gdbm-1.23-5yo63cnvgytwmsoiwoilhfgnyaffncmz
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/openssl-3.4.1-kphogwy3wlzx3rl6ddmjwui5qs77qvys
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libdwarf-2.0.0-uirapsmqr52qork6p3cupyuyyu727ygz
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/pigz-2.8-prsofdph5zl75k54hjwgcr34lipeyuh5
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libxml2-2.13.5-7mdlpguaingjbgxrvtgjnv3y6372tofw
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libtool-2.4.7-l2jtwyuivfhutipzs462o4ny7ctu4f5c
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/perl-5.40.0-nsqyer7nqsmv3ams4gk5mubo74maob3z
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libevent-2.1.12-dvz3n3eojbnxt74he2ky2rj75gukcgfh
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/tar-1.35-ye5hcpfjk5svng6s2sjj4n6huwokazfk
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/hwloc-2.11.1-jhcvb6nk7guze7u7zojqrp5oxovharww
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/mpfr-4.2.1-abjn4yec4cwckmwvwwtg45keufsqyhya
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/autoconf-2.72-5xgjgaemj5ur5z5mr7anba35jcy2n5rm
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gettext-0.23.1-soasbhmurzckxvnvfcqm22jsegvmh4jv
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/intel-tbb-2022.0.0-3g2dqp5itvsq3easbbs6bgtv4zni4uya
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/pmix-5.0.5-msnkjumpg75ybnv7uinrcbbkt4slvt3e
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/mpc-1.3.1-mkqx7budcw2rpbdzo63hsoxhhszx366g
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/automake-1.16.5-vorbe53mrrx354udsx5hpelstxeduh53
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/elfutils-0.192-bqadq4z3npndbqqzkms7abk2ziqeteid
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/krb5-1.21.3-zo73rgnlq3dcwy76ebibj2ubnzkhia2c
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gcc-12.5.0-fmxnit5ggu45byub6wlsuienth2dkboh
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/dyninst-13.0.0-np3n5uf2baeyrmdmavuruvrpkxh6ztmr
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/openssh-9.9p1-2s7eddoqitn34vgpljqsrca3s7w7s6ud
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr
==> No binary for tutorial-mpileaks-1.0-nk4cdlujxftmf65s6pvm6j2edkxrq6bq found: installing from source
==> Installing tutorial-mpileaks-1.0-nk4cdlujxftmf65s6pvm6j2edkxrq6bq [50/50]
==> Using cached archive: /home/spack/spack/var/spack/cache/_source-cache/archive/24/24c706591bdcd84541e19389a9314813ce848035ee877e213d528b184f4b43f9.tar.gz
==> No patches needed for tutorial-mpileaks
==> tutorial-mpileaks: Executing phase: 'autoreconf'
==> tutorial-mpileaks: Executing phase: 'configure'
==> tutorial-mpileaks: Executing phase: 'build'
==> tutorial-mpileaks: Executing phase: 'install'
==> Error: InstallError: Install failed for tutorial-mpileaks. No such directory in prefix: shar
See build log for details:
  /tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-nk4cdlujxftmf65s6pvm6j2edkxrq6bq/spack-build-out.txt

See test log for details:
  /tmp/spack/spack-stage/spack-stage-tutorial-mpileaks-1.0-nk4cdlujxftmf65s6pvm6j2edkxrq6bq/install-time-test-log.txt

Notice the installation fails due to the missing directory with the error: Error: InstallError: Install failed for tutorial-mpileaks. No such directory in prefix: shar.

Now let’s properly fix the error:

tutorial-mpileaks/package.py (from tutorial/examples/packaging/6.package.py)
from spack_repo.builtin.build_systems.autotools import AutotoolsPackage
from spack.package import *


class TutorialMpileaks(AutotoolsPackage):
    """Tool to detect and report MPI objects like MPI_Requests and MPI_Datatypes."""

    homepage = "https://github.com/LLNL/mpileaks"
    url = "https://github.com/LLNL/mpileaks/archive/refs/tags/v1.0.tar.gz"

    maintainers("adamjstewart")

    license("BSD", checked_by="adamjstewart")

    sanity_check_is_dir = ["bin", "lib", "share"]

    version("1.0", sha256="24c706591bdcd84541e19389a9314813ce848035ee877e213d528b184f4b43f9")

    variant(
        "stackstart",
        values=int,
        default=0,
        description="Specify the number of stack frames to truncate",
    )

    depends_on("c", type="build")
    depends_on("cxx", type="build")
    depends_on("fortran", type="build")

    depends_on("autoconf", type="build")
    depends_on("automake", type="build")
    depends_on("libtool", type="build")
    depends_on("m4", type="build")

    depends_on("mpi")
    depends_on("adept-utils")
    depends_on("callpath")

    def autoreconf(self, spec, prefix):
        autoreconf("--install", "--verbose", "--force")

    def configure_args(self):
        args = [
            f"--with-adept-utils={self.spec['adept-utils'].prefix}",
            f"--with-callpath={self.spec['callpath'].prefix}",
        ]

        stackstart = int(self.spec.variants["stackstart"].value)
        if stackstart:
            args.extend(
                [
                    f"--with-stack-start-c={stackstart}",
                    f"--with-stack-start-fortran={stackstart}",
                ]
            )

        return args

And try again:

$ spack install --test=root tutorial-mpileaks
==> Warning: /home/spack/repos/spack_repo/tutorial/packages/tutorial_mpileaks/package.py:23: default value for variant 'stackstart' is not a boolean or string: default=0. Did you mean default='0'?
[+] /usr (external glibc-2.35-epwvtixhoxdeufu6kbbrpaigv2p6iav4)
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/compiler-wrapper-1.0-rwnqblirwn5aenlmsbvsieo7mzw672ee
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gcc-runtime-11.4.0-3c5xh7dqudxmyorlsrsfmjyggqk57vnr
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gcc-runtime-12.5.0-zubbt4yxn35hmaarhmzluk6cb6gkujee
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/findutils-4.10.0-ga3qiejil4e74fukhmtwcq5vrvzgmwmk
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libpciaccess-0.17-w5iqeddpn6xfxfm3grear6sow3p6eaa5
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/berkeley-db-18.1.40-k5bepowzfoxlz67vuctewwbxlrj5sgji
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libxcrypt-4.4.38-iundcaqxew2asagohzi27rxmh2zbk4qo
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libsigsegv-2.14-vefpsalwx43ol7ppom7svfbsfqv3jit4
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/ncurses-6.5-u7sn2jtlvafr3vqli4m7i7ysecwkwepd
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/pkgconf-2.3.0-xoghzadcbbqi6ccvlnfkghrutmid3eav
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gmp-6.3.0-zx3x4nm3djw5jdqxcsimfpxykoxdijhj
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gmake-4.4.1-5vb6e4beeoff4jan2t7edfjyi3hf3p7g
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/boost-1.72.0-x4ntqhhem4kqmrxwnywu65jji2wr2dhr
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/m4-1.4.20-ypq2dyeslmkos5za6z46ti5u4gf7kdya
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/zlib-ng-2.2.4-g7ixtqygrfip5uzt526b565dqxs6ze3x
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/readline-8.2-skysn5ppmam2ipxq4zlzwjxm42kurky2
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/xz-5.6.3-zeynpnjapluctm4lxzuwo7en5jmdzt6c
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libiconv-1.18-kgw5nkswdpf7k2itwhjwegwyszj3v56s
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/bzip2-1.0.8-vy2ggzhuzo7pav5clvz6dvamexpeaadk
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/zstd-1.5.7-bmaw6fn2i5mbbfujq6kf7bomodh4iudq
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libedit-3.1-20240808-h766azt27z6p7yvfxwb22r23cxvtj3gj
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libiberty-2.41-cvva4qyqow7p7qoti2k5rbcsb44rdtoo
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/numactl-2.0.18-74aq3kxwhmje2sqvk27v73d7525q2enn
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/mpfr-4.2.1-abjn4yec4cwckmwvwwtg45keufsqyhya
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libtool-2.4.7-l2jtwyuivfhutipzs462o4ny7ctu4f5c
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/pigz-2.8-prsofdph5zl75k54hjwgcr34lipeyuh5
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/openssl-3.4.1-kphogwy3wlzx3rl6ddmjwui5qs77qvys
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gdbm-1.23-5yo63cnvgytwmsoiwoilhfgnyaffncmz
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libxml2-2.13.5-7mdlpguaingjbgxrvtgjnv3y6372tofw
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libdwarf-2.0.0-uirapsmqr52qork6p3cupyuyyu727ygz
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/mpc-1.3.1-mkqx7budcw2rpbdzo63hsoxhhszx366g
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/tar-1.35-ye5hcpfjk5svng6s2sjj4n6huwokazfk
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/libevent-2.1.12-dvz3n3eojbnxt74he2ky2rj75gukcgfh
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/perl-5.40.0-nsqyer7nqsmv3ams4gk5mubo74maob3z
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/hwloc-2.11.1-jhcvb6nk7guze7u7zojqrp5oxovharww
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gettext-0.23.1-soasbhmurzckxvnvfcqm22jsegvmh4jv
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/automake-1.16.5-vorbe53mrrx354udsx5hpelstxeduh53
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/autoconf-2.72-5xgjgaemj5ur5z5mr7anba35jcy2n5rm
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/gcc-12.5.0-fmxnit5ggu45byub6wlsuienth2dkboh
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/pmix-5.0.5-msnkjumpg75ybnv7uinrcbbkt4slvt3e
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/intel-tbb-2022.0.0-3g2dqp5itvsq3easbbs6bgtv4zni4uya
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/elfutils-0.192-bqadq4z3npndbqqzkms7abk2ziqeteid
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/krb5-1.21.3-zo73rgnlq3dcwy76ebibj2ubnzkhia2c
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/dyninst-13.0.0-np3n5uf2baeyrmdmavuruvrpkxh6ztmr
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/openssh-9.9p1-2s7eddoqitn34vgpljqsrca3s7w7s6ud
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/openmpi-5.0.8-ezkzlw5tyusqajx2xapuphy7ijdp5ubz
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/adept-utils-1.0.1-yjgv7u3uwfnlcqm7j3yusuxzu333r7hv
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/callpath-1.0.4-yokxcwu2j5dvmjxfayf5tbzhjan4ntsr
==> No binary for tutorial-mpileaks-1.0-ep6rrka6dbib6gx3leqbvv45zblmtd3p found: installing from source
==> Installing tutorial-mpileaks-1.0-ep6rrka6dbib6gx3leqbvv45zblmtd3p [50/50]
==> Using cached archive: /home/spack/spack/var/spack/cache/_source-cache/archive/24/24c706591bdcd84541e19389a9314813ce848035ee877e213d528b184f4b43f9.tar.gz
==> No patches needed for tutorial-mpileaks
==> tutorial-mpileaks: Executing phase: 'autoreconf'
==> tutorial-mpileaks: Executing phase: 'configure'
==> tutorial-mpileaks: Executing phase: 'build'
==> tutorial-mpileaks: Executing phase: 'install'
==> tutorial-mpileaks: Successfully installed tutorial-mpileaks-1.0-ep6rrka6dbib6gx3leqbvv45zblmtd3p
  Stage: 0.01s.	 Autoreconf: 3.92s.  Configure: 3.34s.	Build: 10.09s.	Install: 0.27s.	 Post-install: 0.03s.  Total: 17.74s
[+] /home/spack/spack/opt/spack/linux-x86_64_v3/tutorial-mpileaks-1.0-ep6rrka6dbib6gx3leqbvv45zblmtd3p

Success!

The material covered here only scratches the surface of testing an installation. We could leverage the examples from this package to add post-install phase tests and/or stand-alone tests.

Querying the Spec Object

As packages evolve and are ported to different systems, build recipes often need to change as well. This is where the package’s Spec comes in.

Previously, we’ve looked at getting the paths for dependencies and values of variants from the Spec; however, there is more to consider. The package’s self.spec property allows you to query information about the package build, such as:

  • how a package’s dependencies were built;

  • what compiler was used;

  • what version of a package is being installed; and

  • what variants were specified (implicitly or explicitly).

Examples of common queries are provided below.

Querying Spec Versions

You can customize the build based on the version of the package, compiler, and dependencies using version constraints. Examples of each customization are:

  • Am I building my package with version 1.1 or greater?

if self.spec.satisfies("@1.1:"):
    # Do things needed for version 1.1 or newer
  • Am I building with a gcc version up to 5.0?

if self.spec.satisfies("%gcc@:5.0"):
    # Add arguments specific to gcc's up to 5.0
  • Is my dyninst dependency at least version 8.0?

if self.spec["dyninst"].satisfies("@8.0:"):
    # Use newest dyninst options

Querying Spec Names

If the build has to be customized to the concrete version of a virtual dependency, you can use the name property of the Spec. For example:

  • Is openmpi the MPI implementation I’m building with?

if self.spec["mpi"].name == "openmpi":
    # Do openmpi things

Querying Variants

Adjusting build options based on enabled variants can be done by querying the Spec itself, such as:

  • Am I building with the debug variant?

if "+debug" in self.spec:
    # Add -g option to configure flags

These are just a few examples of Spec queries. Spack has thousands of built-in packages that can serve as examples to guide the development of your package.

Tip

You can find these packages under the spack/spack-packages repository’s repos/spack_repo/builtin/packages directory.

Or use spack pkg grep to perform a query. For example, to find the paths to all builtin AutotoolsPackage packages, you can enter spack pkg grep AutotoolsPackage | sed "s/:.*//g" | sort -u, which will search the packages in all of your configured repositories.

Multiple Build Systems

There are cases where software actively supports two build systems; changes build systems as it evolves; or needs different build systems on different platforms. Spack allows you to write a single, concise recipe for these cases that generally require minor changes to the package structure.

Let’s take a simplified look at uncrustify, a source code beautifier, as an example. This software builds with Autotools up through version 0.63 but switches to CMake at version 0.64.

Therefore Uncrustify needs to inherit from both CMakePackage and AutotoolsPackage. We also need to explicitly specify the build_system directive, and add conditional dependencies accordingly:

class Uncrustify(CMakePackage, AutotoolsPackage):
    """Source Code Beautifier for C, C++, C#, ObjectiveC, Java, and others."""

    homepage = "http://uncrustify.sourceforge.net/"
    git = "https://github.com/uncrustify/uncrustify"
    url = "https://sourceforge.net/projects/uncrustify/files/uncrustify/uncrustify-0.69/uncrustify-0.69.tar.gz"

    license("GPL-2.0-or-later")

    version("0.69", commit="a7a8fb35d653e0b49e1c86f2eb8a2970025d5989")
    version("0.64", commit="1d7d97fb637dcb05ebc5fe57ee1020e2a659210d")
    version("0.63", commit="44ce0f156396b79ddf3ed9242023a14e9665b76f")

    depends_on("c", type="build")
    depends_on("cxx", type="build")

    build_system(
        conditional("cmake", when="@0.64:"),
        conditional("autotools", when="@:0.63"),
        default="cmake",
    )

    with when("build_system=autotools"):
        depends_on("automake", type="build")
        depends_on("autoconf", type="build")
        depends_on("libtools", type="build")

As we saw with tutorial-mpileaks, each spec has a build_system variant that specifies the build system it uses. In most cases that variant has a single allowed value, inherited from the corresponding base package - so, usually, you don’t have to think about it.

When your package supports more than one build system though, you have to explicitly declare which ones are allowed and under what conditions. In the example above it’s cmake for version 0.64 and higher and autotools for version 0.63 and lower.

The build_system variant can also be used to declare other properties which are conditional on the build system being selected. For instance, above we declare that when using autotools, the build requires automake, autoconf, and libtools.

The other relevant difference, compared to previous recipes we have seen so far, is that the code prescribing the installation procedure will live into two separate classes:

class CMakeBuilder(spack.build_systems.cmake.CMakeBuilder):
   def cmake_args(self):
       pass

class AutotoolsBuilder(spack.build_systems.autotools.AutotoolsBuilder):
   def configure_args(self):
       pass

Depending on the spec, and more specifically on the value of the build_system directive, a Builder object will be instantiated from one of the two classes when an installation is requested from a user.

Cleaning Up

Before leaving this tutorial, let’s ensure that our work does not interfere with your Spack instance or future sections of the tutorial. Undo the work we’ve done here by entering the following commands:

$ spack uninstall -ay tutorial-mpileaks
==> Warning: /home/spack/repos/spack_repo/tutorial/packages/tutorial_mpileaks/package.py:23: default value for variant 'stackstart' is not a boolean or string: default=0. Did you mean default='0'?
==> Successfully uninstalled tutorial-mpileaks@1.0 build_system=autotools stackstart=0 arch=linux-ubuntu22.04-x86_64_v3/ep6rrka
$ spack repo remove tutorial
==> Removed repository 'tutorial'.
$ rm -rf /home/spack/repos/spack_repo/tutorial

More information

This tutorial module only scratches the surface of defining Spack package recipes. The packaging guide, split over four sections, covers packaging topics more thoroughly:

Additional information on key topics can be found in the embedded keys above and at the links below.

Testing an installation

  • Build-time tests: for sanity checks and pre-/post- build and or install phase tests.

  • Stand-alone tests: for tests that can run against any installed Spack package.

Using other build systems

Making a package externally detectable