aboutsummaryrefslogtreecommitdiff
#!/bin/sh

# GNU Guix --- Functional package management for GNU
# Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
#
# This file is part of GNU Guix.
#
# GNU Guix is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or (at
# your option) any later version.
#
# GNU Guix is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

# Usage: ./test-env COMMAND ARG...
#
# Run the daemon in the build directory, and run COMMAND within
# `pre-inst-env'.  This is used to run unit tests with the just-built
# daemon, unless `--disable-daemon' was passed at configure time.


# Make sure 'cd' behaves deterministically and doesn't write anything to
# stdout.
unset CDPATH

case "$1" in
    --quiet-stderr)
	# Silence the daemon's output, which is often useless, as well as that
	# of Bash (such as "Terminated" messages when 'guix-daemon' is
	# killed.)
	exec 2> /dev/null
	shift
	;;
esac

if [ -x "@abs_top_builddir@/guix-daemon" ]
then
    NIX_STORE_DIR="@GUIX_TEST_ROOT@/store"

    # Do that because store.scm calls `canonicalize-path' on it.
    mkdir -p "$NIX_STORE_DIR"

    # Canonicalize the store directory name in an attempt to avoid symlinks in
    # it or its parent directories.  See <http://bugs.gnu.org/17935>.
    NIX_STORE_DIR="`cd "@GUIX_TEST_ROOT@/store"; pwd -P`"

    GUIX_LOG_DIRECTORY="@GUIX_TEST_ROOT@/var/log/guix"
    GUIX_DATABASE_DIRECTORY="@GUIX_TEST_ROOT@/db"

    # Choose a PID-dependent name to allow for parallel builds.  Note
    # that the directory name must be chosen so that the socket's file
    # name is less than 108-char long (the size of `sun_path' in glibc).
    # Currently, in Nix builds, we're at ~106 chars...
    GUIX_STATE_DIRECTORY="@GUIX_TEST_ROOT@/var/$$"

    # We can't exit when we reach the limit, because perhaps the test doesn't
    # actually rely on the daemon, but at least warn.
    if test "`echo -n "$GUIX_STATE_DIRECTORY/daemon-socket/socket" | wc -c`" -ge 108
    then
	echo "warning: exceeding socket file name limit; test may fail!" >&2
    fi

    # The configuration directory, for import/export signing keys.
    GUIX_CONFIGURATION_DIRECTORY="@GUIX_TEST_ROOT@/etc"
    if [ ! -d "$GUIX_CONFIGURATION_DIRECTORY" ]
    then
	# Copy the keys so that the secret key has the right permissions (the
	# daemon errors out when this is not the case.)
	mkdir -p "$GUIX_CONFIGURATION_DIRECTORY"
	cp "@abs_top_srcdir@/tests/keys/signing-key.sec"	\
	   "@abs_top_srcdir@/tests/keys/signing-key.pub"	\
	   "$GUIX_CONFIGURATION_DIRECTORY"
	chmod 400 "$GUIX_CONFIGURATION_DIRECTORY/signing-key.sec"
    fi

    # A place to store data of the substituter.
    GUIX_BINARY_SUBSTITUTE_URL="file://$GUIX_STATE_DIRECTORY/substituter-data"
    rm -rf "$GUIX_STATE_DIRECTORY/substituter-data"
    mkdir -p "$GUIX_STATE_DIRECTORY/substituter-data"

    # For a number of tests, we want to allow unsigned narinfos, for
    # simplicity.
    GUIX_ALLOW_UNAUTHENTICATED_SUBSTITUTES=yes

    # Place for the substituter's cache.
    XDG_CACHE_HOME="$GUIX_STATE_DIRECTORY/cache-$$"

    export NIX_IGNORE_SYMLINK_STORE NIX_STORE_DIR		\
	GUIX_LOG_DIRECTORY GUIX_STATE_DIRECTORY GUIX_DATABASE_DIRECTORY	\
	GUIX_BINARY_SUBSTITUTE_URL				\
        GUIX_ALLOW_UNAUTHENTICATED_SUBSTITUTES			\
        GUIX_CONFIGURATION_DIRECTORY XDG_CACHE_HOME

    # Create a fresh directory with restrictive permissions so that our test
    # daemon's weak isolation can't be exploited by other users
    rm -rf "$GUIX_STATE_DIRECTORY/daemon-socket"
    mkdir -m 0700 "$GUIX_STATE_DIRECTORY/daemon-socket"

    # Launch the daemon without chroot support because is may be
    # unavailable, for instance if we're not running as root.
    "@abs_top_builddir@/pre-inst-env"				\
	"@abs_top_builddir@/guix-daemon" --disable-chroot	\
	--substitute-urls="$GUIX_BINARY_SUBSTITUTE_URL" &

    daemon_pid=$!
    trap "kill $daemon_pid ; rm -rf $GUIX_STATE_DIRECTORY" EXIT

    # The test suite expects the 'guile-bootstrap' package to be available.
    # Normally the Guile bootstrap tarball is downloaded by a fixed-output
    # derivation but when network access is missing we allow users to drop
    # the tarball in 'gnu/packages/bootstrap/SYSTEM' and "intern" it here.
    bootstrap_directory="@abs_top_builddir@/gnu/packages/bootstrap/@guix_system@"
    if [ -d "$bootstrap_directory" ]
    then
	# Make sure 'guix-daemon' is listening before invoking 'guix
	# download'.
	"@abs_top_builddir@/pre-inst-env" "@GUILE@" -c \
	     '(use-modules (guix))
(let loop ((i 10))
  (catch #t
    (lambda () (open-connection))
    (lambda (key . args)
      (if (zero? i)
          (apply throw key args)
          (begin (usleep 500000) (loop (- i 1)))))))'

	for file in "$bootstrap_directory"/guile-*
	do
	    [ -f "$file" ] &&					\
	    "@abs_top_builddir@/pre-inst-env"			\
		guix download "file://$file" > /dev/null
	done
    fi
fi

# Avoid issues that could stem from l10n, such as language/encoding
# mismatches.
unset LANGUAGE
LC_MESSAGES=C
export LC_MESSAGES

# Disable grafts by default because they can cause things to be built
# regardless of '--dry-run'.
GUIX_BUILD_OPTIONS="--no-grafts"
export GUIX_BUILD_OPTIONS

# Ignore user settings.
unset GUIX_PACKAGE_PATH

storedir="@storedir@"
prefix="@prefix@"
datarootdir="@datarootdir@"
datadir="@datadir@"
localstatedir="@localstatedir@"
export storedir prefix datarootdir datadir localstatedir

"@abs_top_builddir@/pre-inst-env" "$@"
exit $?
ndroid.scm?id=daa46cd151657ac4df991bf6651d46aae739fcef'>plainabout -rw-r--r--animation.scm20154logplainabout -rw-r--r--anthy.scm2879logplainabout -rw-r--r--antivirus.scm7359logplainabout -rw-r--r--apl.scm2193logplainabout -rw-r--r--apr.scm4303logplainabout -rw-r--r--arcan.scm11365logplainabout -rw-r--r--aspell.scm20634logplainabout -rw-r--r--assembly.scm21663logplainabout -rw-r--r--astronomy.scm42401logplainabout -rw-r--r--attr.scm3492logplainabout -rw-r--r--audio.scm212739logplainabout -rw-r--r--augeas.scm2648logplainabout -rw-r--r--authentication.scm6161logplainabout -rw-r--r--autogen.scm3228logplainabout -rw-r--r--autotools.scm27256logplainabout d---------aux-files304logplain -rw-r--r--avahi.scm6043logplainabout -rw-r--r--avr.scm7792logplainabout -rw-r--r--axoloti.scm29422logplainabout -rw-r--r--backup.scm50272logplainabout -rw-r--r--base.scm62486logplainabout -rw-r--r--bash.scm19019logplainabout -rw-r--r--batik.scm8852logplainabout -rw-r--r--bdw-gc.scm5941logplainabout -rw-r--r--benchmark.scm17121logplainabout -rw-r--r--bioconductor.scm548535logplainabout -rw-r--r--bioinformatics.scm645869logplainabout -rw-r--r--bison.scm3280logplainabout -rw-r--r--bittorrent.scm23748logplainabout -rw-r--r--boost.scm20409logplainabout -rw-r--r--bootloaders.scm57533logplainabout -rw-r--r--bootstrap.scm40700logplainabout -rw-r--r--browser-extensions.scm4511logplainabout -rw-r--r--build-tools.scm22550logplainabout -rw-r--r--busybox.scm6779logplainabout -rw-r--r--c.scm34663logplainabout -rw-r--r--calcurse.scm3486logplainabout -rw-r--r--calendar.scm17574logplainabout -rw-r--r--ccache.scm3012logplainabout -rw-r--r--cdrom.scm43271logplainabout -rw-r--r--cedille.scm5474logplainabout -rw-r--r--certs.scm12075logplainabout -rw-r--r--check.scm119936logplainabout -rw-r--r--chemistry.scm27710logplainabout -rw-r--r--chez.scm28989logplainabout -rw-r--r--chicken.scm10606logplainabout -rw-r--r--chromium.scm45599logplainabout -rw-r--r--ci.scm14115logplainabout -rw-r--r--cinnamon.scm3114logplainabout -rw-r--r--clojure.scm14164logplainabout -rw-r--r--cluster.scm11428logplainabout -rw-r--r--cmake.scm18162logplainabout -rw-r--r--cobol.scm3476logplainabout -rw-r--r--code.scm40402logplainabout -rw-r--r--commencement.scm158544logplainabout -rw-r--r--compression.scm112296logplainabout -rw-r--r--compton.scm5981logplainabout -rw-r--r--configuration-management.scm5882logplainabout -rw-r--r--conky.scm3581logplainabout -rw-r--r--connman.scm7391logplainabout -rw-r--r--convmv.scm2306logplainabout -rw-r--r--cook.scm4102logplainabout -rw-r--r--coq.scm24355logplainabout -rw-r--r--cpio.scm2300logplainabout -rw-r--r--cpp.scm56126logplainabout -rw-r--r--cppi.scm1775logplainabout -rw-r--r--cran.scm1149393logplainabout -rw-r--r--crates-graphics.scm106382logplainabout -rw-r--r--crates-gtk.scm42549logplainabout -rw-r--r--crates-io.scm2087221logplainabout -rw-r--r--cross-base.scm25519logplainabout -rw-r--r--crypto.scm64325logplainabout -rw-r--r--cryptsetup.scm6710logplainabout -rw-r--r--cups.scm47008logplainabout -rw-r--r--curl.scm14656logplainabout -rw-r--r--cvassistant.scm3644logplainabout -rw-r--r--cybersecurity.scm3736logplainabout -rw-r--r--cyrus-sasl.scm3528logplainabout -rw-r--r--databases.scm166059logplainabout -rw-r--r--datamash.scm1969logplainabout -rw-r--r--datastructures.scm16116logplainabout -rw-r--r--dav.scm7152logplainabout -rw-r--r--dbm.scm8182logplainabout -rw-r--r--dc.scm2233logplainabout -rw-r--r--debian.scm19143logplainabout -rw-r--r--debug.scm34624logplainabout -rw-r--r--dejagnu.scm3510logplainabout -rw-r--r--dhall.scm6348logplainabout -rw-r--r--dico.scm3670logplainabout -rw-r--r--dictionaries.scm18032logplainabout -rw-r--r--diffoscope.scm15527logplainabout -rw-r--r--digest.scm4854logplainabout -rw-r--r--direct-connect.scm2610logplainabout -rw-r--r--disk.scm55155logplainabout -rw-r--r--display-managers.scm15972logplainabout -rw-r--r--distributed.scm4032logplainabout -rw-r--r--django.scm51766logplainabout -rw-r--r--djvu.scm18879logplainabout -rw-r--r--dlang.scm18041logplainabout -rw-r--r--dns.scm59057logplainabout -rw-r--r--docbook.scm31598logplainabout -rw-r--r--docker.scm33377logplainabout -rw-r--r--documentation.scm14673logplainabout -rw-r--r--dunst.scm3677logplainabout -rw-r--r--dvtm.scm2311logplainabout -rw-r--r--easyrpg.scm4482logplainabout -rw-r--r--ebook.scm26502logplainabout -rw-r--r--ed.scm2378logplainabout -rw-r--r--education.scm47695logplainabout -rw-r--r--efi.scm9875logplainabout -rw-r--r--electronics.scm12912logplainabout -rw-r--r--elf.scm12705logplainabout -rw-r--r--elixir.scm5078logplainabout -rw-r--r--elm.scm3545logplainabout -rw-r--r--emacs-xyz.scm1150456logplainabout -rw-r--r--emacs.scm24366logplainabout -rw-r--r--embedded.scm70641logplainabout -rw-r--r--emulators.scm101071logplainabout -rw-r--r--enchant.scm6536logplainabout -rw-r--r--engineering.scm124716logplainabout -rw-r--r--enlightenment.scm25426logplainabout -rw-r--r--entr.scm3349logplainabout -rw-r--r--erlang.scm9697logplainabout -rw-r--r--esolangs.scm5403logplainabout -rw-r--r--fabric-management.scm9621logplainabout -rw-r--r--fcitx.scm9135logplainabout -rw-r--r--fcitx5.scm16420logplainabout