#!/usr/bin/env bash { set -e # Parse the arguments NETWORK=true SUDO=true while [[ $# -gt 0 ]]; do case "$1" in --no-network) shift; unset NETWORK;; --network) shift; NETWORK=true;; --no-sudo) shift; unset SUDO;; --sudo) shift; SUDO=true;; --) shift; break;; *) break;; esac done export NETWORK SUDO if [[ $# == 0 ]]; then echo 'You need to run testenv with arguments!' >&2 exit 1 fi # Set up the working directory, and add the hook to clean it up export TMPDIR="$(mktemp --tmpdir -d libretools-test.XXXXXXXXXX)" trap "rm -rf '$TMPDIR'" EXIT # Set up the install to work with destdir=$TMPDIR/destdir old_pwd="$(pwd)" if [[ -f $0 ]]; then cd "${0%/*}" fi if ! make -C .. install prefix=/usr sysconfdir=/etc DESTDIR="$destdir" &>"$TMPDIR/make-output"; then echo 'error creating local install, cannot run tests' >&2 cat "$TMPDIR/make-output" exit 1 fi cd "$old_pwd" # Set up the environment export PATH="$destdir/usr/bin:$PATH" export LIBRETOOLS_LIBDIR="$destdir/usr/lib/libretools" export XBS_LIBDIR="$destdir/usr/lib/xbs" export HOME=$TMPDIR/home export GNUPGHOME="$HOME/.gnupg" export XDG_CACHE_HOME="$HOME/.cache" export XDG_CONFIG_HOME="$HOME/.config" export _librelib_conf_sh_sysconfdir="$destdir/etc" export _librelib_conf_sh_pkgconfdir="$destdir/etc/libretools.d" mkdir -p -- "$GNUPGHOME" chmod 700 -- "$GNUPGHOME" unset GPGKEY gpg --quiet --no-tty --batch --gen-key <<-eot Key-Type: default Key-Usage: sign Name-Real: Bob Tester Name-Email: tester@localhost Expire-Date: 0 %no-protection %commit eot export GPGKEY="$(gpg --quiet --list-secret-keys --with-colons | awk -F: '/^sec:/{print substr($5,9)}')" # Hack to respect our variables in sudo _sudo() { local vars=(TMPDIR PATH LIBRETOOLS_LIBDIR GNUPGHOME XDG_CACHE_HOME XDG_CONFIG_HOME _librelib_conf_sh_sysconfdir GPGKEY) local env=() local var for var in "${vars[@]}"; do env+=("$var=${!var}") done sudo "${env[@]}" "$@" } printf '%s\n' \ '#!/bin/bash' \ "$(declare -f _sudo)" \ '_sudo "$@"' \ > "$destdir/usr/bin/testsudo" chmod 755 "$destdir/usr/bin/testsudo" # Run the tests command -- "$@" }