#!/bin/bash set -euo pipefail [[ -n "${TMPCONFIG_DEBUG:=}" ]] && set -x DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)" mkdir -p "${XDG_RUNTIME_DIR:=/tmp}/spack-tests" export TMPDIR="${XDG_RUNTIME_DIR}" export TMP_DIR="$(mktemp -d -t spack-test-XXXXX)" clean_up() { [[ -n "$TMPCONFIG_DEBUG" ]] && printf "cleaning up: $TMP_DIR\n" rm -rf "$TMP_DIR" } trap clean_up EXIT trap clean_up ERR [[ -n "$TMPCONFIG_DEBUG" ]] && printf "Redirecting TMP_DIR and spack directories to $TMP_DIR\n" export BOOTSTRAP="${SPACK_USER_CACHE_PATH:=$HOME/.spack}/bootstrap" export SPACK_USER_CACHE_PATH="$TMP_DIR/user_cache" mkdir -p "$SPACK_USER_CACHE_PATH" private_bootstrap="$SPACK_USER_CACHE_PATH/bootstrap" use_spack='' use_bwrap='' # argument handling while (($# >= 1)) ; do case "$1" in -b) # privatize bootstrap too, useful for CI but not always cheap shift export BOOTSTRAP="$private_bootstrap" ;; -B) # use specified bootstrap dir export BOOTSTRAP="$2" shift 2 ;; -s) # run spack directly with remaining args shift use_spack=1 ;; --contain=bwrap) if bwrap --help 2>&1 > /dev/null ; then use_bwrap=1 else echo Bubblewrap containment requested, but no bwrap command found exit 1 fi shift ;; --) shift break ;; *) break ;; esac done typeset -a CMD if [[ -n "$use_spack" ]] ; then CMD=("$DIR/spack" "$@") else CMD=("$@") fi mkdir -p "$BOOTSTRAP" export SPACK_SYSTEM_CONFIG_PATH="$TMP_DIR/sys_conf" export SPACK_USER_CONFIG_PATH="$TMP_DIR/user_conf" mkdir -p "$SPACK_USER_CONFIG_PATH" cat >"$SPACK_USER_CONFIG_PATH/config.yaml" <"$SPACK_USER_CONFIG_PATH/bootstrap.yaml" < 1)) && echo "Running: ${CMD[@]}" "${CMD[@]}"