aboutsummaryrefslogtreecommitdiff
dnl -*- Autoconf -*- fragment for the C++ daemon.

AC_MSG_CHECKING([whether to build daemon])
AC_MSG_RESULT([$guix_build_daemon])

dnl C++ environment.  This macro must be used unconditionnaly.
AC_PROG_CXX
AM_PROG_AR
AC_LANG([C++])

if test "x$guix_build_daemon" = "xyes"; then

  GUIX_ASSERT_CXX11

  AC_PROG_RANLIB
  AC_CONFIG_HEADERS([nix/config.h])

  dnl Use 64-bit file system calls so that we can support files > 2 GiB.
  AC_SYS_LARGEFILE

  dnl Look for zlib, a required dependency.
  AC_CHECK_LIB([z], [gzdopen], [true],
    [AC_MSG_ERROR([Guix requires zlib.  See http://www.zlib.net/.])])
  AC_CHECK_HEADERS([zlib.h], [true],
    [AC_MSG_ERROR([Guix requires zlib.  See http://www.zlib.net/.])])

  dnl Look for libbz2, an optional dependency.
  AC_CHECK_LIB([bz2], [BZ2_bzWriteOpen], [HAVE_LIBBZ2=yes], [HAVE_LIBBZ2=no])
  if test "x$HAVE_LIBBZ2" = xyes; then
    AC_CHECK_HEADERS([bzlib.h])
    HAVE_LIBBZ2="$ac_cv_header_bzlib_h"
  fi

  dnl Look for SQLite, a required dependency.
  PKG_CHECK_MODULES([SQLITE3], [sqlite3 >= 3.6.19])

  AC_DEFINE_UNQUOTED([SYSTEM], ["$guix_system"],
    [Guix host system type--i.e., platform and OS kernel tuple.])

  case "$LIBGCRYPT_PREFIX" in
    no)
      LIBGCRYPT_CPPFLAGS=""
      ;;
    *)
      LIBGCRYPT_CPPFLAGS="-I$LIBGCRYPT_PREFIX/include"
      ;;
  esac

  case "$LIBGCRYPT_LIBDIR" in
    no | "")
      ;;
    *)
      LIBGCRYPT_LDFLAGS="-L$LIBGCRYPT_LIBDIR"
      ;;
  esac

  LIBGCRYPT_LIBS="-lgcrypt"
  AC_SUBST([LIBGCRYPT_CPPFLAGS])
  AC_SUBST([LIBGCRYPT_LDFLAGS])
  AC_SUBST([LIBGCRYPT_LIBS])

  save_CPPFLAGS="$CPPFLAGS"
  save_LDFLAGS="$LDFLAGS"
  save_LIBS="$LIBS"
  CPPFLAGS="$CPPFLAGS $LIBGCRYPT_CPPFLAGS"
  LDFLAGS="$LDFLAGS $LIBGCRYPT_LDFLAGS"
  LIBS="$LIBS $LIBGCRYPT_LIBS"

  have_gcrypt=yes
  AC_CHECK_LIB([gcrypt], [gcry_md_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"])
<yenda1@gmail.com> Evgeny Pisemsky <mail@pisemsky.site> <evgeny@pisemsky.com> George Clemmer <myglc2@gmail.com> ison <ison@airmail.cc> <ison111@protonmail.com> Ivan Vilata i Balaguer <ivan@selidor.net> Jakob L. Kreuze <zerodaysfordays@sdf.org> <zerodaysfordays@sdf.lonestar.org> Jeff Mickey <j@codemac.net> <jm@igneous.io> John Darrington <jmd@gnu.org> <john@darrington.wattle.id.au> John J. Foerch <jjfoerch@earthlink.net> Joshua Grant <tadni@riseup.net> <gzg@riseup.net> Joshua Grant <tadni@riseup.net> <jgrant@parenthetical.io> Joshua Grant <tadni@riseup.net> <tadnimi@gmail.com> Joshua Grant <tadni@riseup.net> <youlysses@riseup.net> Juliana Sims <juli@incana.org> <jtsims@protonmail.com> Kei Kebreau <kkebreau@posteo.net> Leo Famulari <leo@famulari.name> <lfamular@gmail.com> Liliana Marie Prikler <liliana.prikler@gmail.com> Liliana Marie Prikler <liliana.prikler@gmail.com> Leo Prikler <leo.prikler@student.tugraz.at> Ludovic Courtès <ludo@gnu.org> <ludovic.courtes@inria.fr> Marek Benc <dusxmt@gmx.com> <merkur32@gmail.com> Marius Bakke <marius@gnu.org> <mbakke@fastmail.com> Marius Bakke <marius@gnu.org> <m.bakke@warwick.ac.uk> Marius Bakke <marius@gnu.org> <marius.bakke@usit.uio.no> Marius Bakke <marius@gnu.org> <mbakke@berlin.guixsd.org> Mathieu Lirzin <mthl@gnu.org> <mthl@openmailbox.org> Mathieu Lirzin <mthl@gnu.org> <mathieu.lirzin@openmailbox.org> Mathieu Othacehe <m.othacehe@gmail.com> Mathieu Othacehe <mathieu.othacehe@parrot.com> Mathieu Othacehe <othacehe@gnu.org> Matthew James Kraai <kraai@ftbfs.org> Nikita Karetnikov <nikita@karetnikov.org> <nikita.karetnikov@gmail.com> nikita <nikita@n0.is> nikita <nikita@n0.is> ng0 <ng0@n0.is> nikita <nikita@n0.is> Nils Gillmann <ng0@n0.is> nikita <nikita@n0.is> Nils Gillmann <gillmann@infotropique.org> nikita <nikita@n0.is> ng0 <ng0@crash.cx> nikita <nikita@n0.is> <ng0@infotropique.org> nikita <nikita@n0.is> <ng0@no-reply.infotropique.org> nikita <nikita@n0.is> <ng0@no-reply.pragmatique.xyz> nikita <nikita@n0.is> <ng0@pragmatique.xyz> nikita <nikita@n0.is> <contact.ng0@cryptolab.net> nikita <nikita@n0.is> <ng0@we.make.ritual.n0.is> nikita <nikita@n0.is> <ngillmann@runbox.com> nikita <nikita@n0.is> <niasterisk@grrlz.net> nikita <nikita@n0.is> <ng@niasterisk.space> nikita <nikita@n0.is> <ng0@libertad.pw> Pierre Neidhardt <mail@ambrevar.xyz> Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr> Pjotr Prins <pjotr.guix@thebird.nl> <pjotr.public01@thebird.nl> Pjotr Prins <pjotr.guix@thebird.nl> <pjotr.public12@thebird.nl> Pjotr Prins <pjotr.guix@thebird.nl> <pjotr.public12@email> Raimon Grau <raimonster@gmail.com> <raimon@3scale.net> Raoul Jean Pierre Bonnal <ilpuccio.febo@gmail.com> Raymond Nicholson <rain1@openmailbox.org> Rene Saavedra <rennes@openmailbox.org> Ricardo Wurmus <rekado@elephly.net> Ricardo Wurmus <rekado@elephly.net> <ricardo.wurmus@mdc-berlin.de> Sou Bunnbu (宋文武) <iyzsong@gmail.com> Sou Bunnbu (宋文武) <iyzsong@gmail.com> <iyzsong@member.fsf.org> Stefan Reichör <stefan@xsteve.at> Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com> Theodoros Foradis <theodoros.for@openmailbox.org> <theodoros@foradis.org> Thomas Danckaert <thomas.danckaert@gmail.com> <post@thomasdanckaert.be> Tobias Geerinckx-Rice <me@tobias.gr> <tobias.geerinckx.rice@gmail.com> Tomas Volf <~@wolfsden.cz> <wolf@wolfsden.cz> Tomáš Čech <sleep_walker@gnu.org> <sleep_walker@suse.cz> Vincent Legoll <vincent.legoll@gmail.com> <vincent.legoll@idgrilles.fr> Zheng Junjie <873216071@qq.com> Z572 <873216071@qq.com>