# GNU Guix --- Functional package management for GNU # Copyright © 2012, 2014, 2015, 2016 Ludovic Courtès # # 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 . # # Test the daemon and its interaction with 'guix substitute'. # set -e guix-daemon --version guix build --version drv="`guix build emacs -d`" out="`guile -c ' \ (use-modules (guix) (guix grafts) (gnu packages emacs)) \ (define store (open-connection)) \ (%graft? #f) (display (derivation->output-path (package-derivation store emacs)))'`" hash_part="`basename $out | cut -c 1-32`" narinfo="$hash_part.narinfo" substitute_dir="`echo $GUIX_BINARY_SUBSTITUTE_URL | sed -'es,file://,,g'`" cat > "$substitute_dir/nix-cache-info"< "$substitute_dir/$narinfo"<derivation \"failure\" #~(begin (ungexp output) #f))) (out -> (derivation->output-path drv)) (ok? (build-without-failing drv))) ;; Note the mixture of monadic and direct style. Don't try ;; this at home! (return (exit (and ok? (equal? (query-failed-paths store) (list out)) (begin (clear-failed-paths store (list out)) (null? (query-failed-paths store))))))) #:guile-for-build (%guile-for-build)) " _open], [:], [have_gcrypt=no]) AC_CHECK_HEADER([gcrypt.h], [:], [have_gcrypt=no]) if test "x$have_gcrypt" != "xyes"; then AC_MSG_ERROR([GNU libgcrypt not found; please install it.]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" dnl Chroot support. AC_CHECK_FUNCS([chroot unshare]) AC_CHECK_HEADERS([sched.h sys/param.h sys/mount.h sys/syscall.h]) if test "x$ac_cv_func_chroot" != "xyes"; then AC_MSG_ERROR(['chroot' function missing, bailing out]) fi dnl lutimes and lchown: used when canonicalizing store items. dnl posix_fallocate: used when extracting archives. dnl vfork: to speed up spawning of helper programs. dnl `--> now disabled because of unpredictable behavior: dnl see <http://lists.gnu.org/archive/html/guix-devel/2014-05/msg00036.html> dnl and Nix commit f794465c (Nov. 2012). dnl sched_setaffinity: to improve RPC locality. dnl statvfs: to detect disk-full conditions. dnl strsignal: for error reporting. dnl statx: fine-grain 'stat' call, new in glibc 2.28. AC_CHECK_FUNCS([lutimes lchown posix_fallocate sched_setaffinity \ statvfs nanosleep strsignal statx]) dnl Check for <locale>. AC_LANG_PUSH(C++) AC_CHECK_HEADERS([locale]) AC_LANG_POP(C++) dnl Check whether we have the `personality' syscall, which allows us dnl to do i686-linux builds on x86_64-linux machines. AC_CHECK_HEADERS([sys/personality.h]) dnl Determine the appropriate default list of substitute URLs (GnuTLS dnl is required so we can default to 'https'.) GUIX_SUBSTITUTE_URLS="https://bordeaux.guix.gnu.org https://ci.guix.gnu.org" AC_MSG_CHECKING([for default substitute URLs]) AC_MSG_RESULT([$GUIX_SUBSTITUTE_URLS]) AC_SUBST([GUIX_SUBSTITUTE_URLS]) AC_DEFINE_UNQUOTED([GUIX_SUBSTITUTE_URLS], ["$GUIX_SUBSTITUTE_URLS"], [Default list of substitute URLs used by 'guix-daemon'.]) dnl Check for Guile-SSH, which is required by 'guix offload'. GUIX_CHECK_GUILE_SSH case "x$guix_cv_have_recent_guile_ssh" in xyes) guix_build_daemon_offload="yes" AC_DEFINE([HAVE_DAEMON_OFFLOAD_HOOK], [1], [Define if the daemon's 'offload' build hook is being built (requires Guile-SSH).]) ;; *) guix_build_daemon_offload="no" ;; esac dnl Temporary directory used to store the daemon's data. GUIX_TEST_ROOT_DIRECTORY GUIX_TEST_ROOT="$ac_cv_guix_test_root" AC_SUBST([GUIX_TEST_ROOT]) GUIX_CHECK_LOCALSTATEDIR fi AM_CONDITIONAL([HAVE_LIBBZ2], [test "x$HAVE_LIBBZ2" = "xyes"]) AM_CONDITIONAL([BUILD_DAEMON], [test "x$guix_build_daemon" = "xyes"]) AM_CONDITIONAL([BUILD_DAEMON_OFFLOAD], \ [test "x$guix_build_daemon" = "xyes" \ && test "x$guix_build_daemon_offload" = "xyes"])