2019-03-14 16:21:22 +01:00
AC_INIT(nix, m4_esyscmd([bash -c "echo -n $(cat ./.version)$VERSION_SUFFIX"]))
2019-07-01 19:04:03 +02:00
AC_CONFIG_MACRO_DIRS([m4])
2016-05-30 16:31:32 +02:00
AC_CONFIG_SRCDIR(README.md)
2003-04-04 18:14:56 +02:00
AC_CONFIG_AUX_DIR(config)
2006-03-01 13:15:33 +01:00
2011-11-16 21:39:59 +01:00
AC_PROG_SED
2006-05-31 13:50:14 +02:00
2003-12-01 15:36:50 +01:00
# Construct a Nix system name (like "i686-linux").
2011-11-16 21:39:59 +01:00
AC_CANONICAL_HOST
2003-12-01 15:36:50 +01:00
AC_MSG_CHECKING([for the canonical Nix system name])
2006-05-31 13:50:14 +02:00
2004-05-18 11:45:46 +02:00
AC_ARG_WITH(system, AC_HELP_STRING([--with-system=SYSTEM],
2008-06-09 15:52:45 +02:00
[Platform identifier (e.g., `i686-linux').]),
2011-11-16 21:39:59 +01:00
[system=$withval],
2011-11-16 21:58:21 +01:00
[case "$host_cpu" in
i*86)
machine_name="i686";;
2011-11-18 18:25:40 +01:00
amd64)
machine_name="x86_64";;
2016-03-11 21:53:06 +01:00
armv6|armv7)
machine_name="${host_cpu}l";;
2011-11-16 21:58:21 +01:00
*)
machine_name="$host_cpu";;
esac
case "$host_os" in
2016-02-29 12:50:47 +01:00
linux-gnu*|linux-musl*)
2012-08-27 17:28:48 +02:00
# For backward compatibility, strip the `-gnu' part.
system="$machine_name-linux";;
2011-11-16 21:39:59 +01:00
*)
# Strip the version number from names such as `gnu0.3',
# `darwin10.2.0', etc.
2012-08-27 17:28:48 +02:00
system="$machine_name-`echo $host_os | "$SED" -e's/@<:@0-9.@:>@*$//g'`";;
2011-11-16 21:39:59 +01:00
esac])
2011-11-21 13:23:48 +01:00
sys_name=$(uname -s | tr 'A-Z ' 'a-z_')
case $sys_name in
cygwin*)
sys_name=cygwin
;;
esac
2012-08-27 17:28:48 +02:00
2003-12-01 15:36:50 +01:00
AC_MSG_RESULT($system)
AC_SUBST(system)
2019-07-02 03:11:52 +02:00
AC_DEFINE_UNQUOTED(SYSTEM, ["$system"], [platform identifier ('cpu-os')])
2003-12-01 15:36:50 +01:00
2006-05-31 13:50:14 +02:00
2008-11-20 15:14:35 +01:00
# State should be stored in /nix/var, unless the user overrides it explicitly.
test "$localstatedir" = '${prefix}/var' && localstatedir=/nix/var
2019-07-02 22:30:15 +02:00
# Set default flags for nix (as per AC_PROG_CC/CXX docs),
# while still allowing the user to override them from the command line.
: ${CFLAGS="-O3"}
: ${CXXFLAGS="-O3"}
2003-04-04 18:14:56 +02:00
AC_PROG_CC
AC_PROG_CXX
2018-01-28 20:19:56 +01:00
AC_PROG_CPP
2019-07-01 19:04:03 +02:00
AX_CXX_COMPILE_STDCXX_17([noext], [mandatory])
2006-05-31 13:50:14 +02:00
2019-02-13 06:03:10 +01:00
AC_CHECK_TOOL([AR], [ar])
2006-05-31 13:50:14 +02:00
2006-09-22 13:13:12 +02:00
# Use 64-bit file system calls so that we can support files > 2 GiB.
2009-10-06 11:14:06 +02:00
AC_SYS_LARGEFILE
2006-09-22 13:13:12 +02:00
2019-07-02 22:28:30 +02:00
# Solaris-specific stuff.
AC_STRUCT_DIRENT_D_TYPE
if test "$sys_name" = sunos; then
# Solaris requires -lsocket -lnsl for network functions
LIBS="-lsocket -lnsl $LIBS"
fi
2003-12-22 17:40:46 +01:00
# Check for pubsetbuf.
AC_MSG_CHECKING([for pubsetbuf])
AC_LANG_PUSH(C++)
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <iostream>
using namespace std;
static char buf[1024];]],
[[cerr.rdbuf()->pubsetbuf(buf, sizeof(buf));]])],
2008-06-09 15:52:45 +02:00
[AC_MSG_RESULT(yes) AC_DEFINE(HAVE_PUBSETBUF, 1, [Whether pubsetbuf is available.])],
2003-12-22 17:40:46 +01:00
AC_MSG_RESULT(no))
AC_LANG_POP(C++)
2006-05-31 13:50:14 +02:00
2016-06-09 16:15:58 +02:00
AC_CHECK_FUNCS([statvfs pipe2])
2007-10-27 18:51:55 +02:00
2012-07-23 22:52:25 +02:00
# Check for lutimes, optionally used for changing the mtime of
# symlinks.
AC_CHECK_FUNCS([lutimes])
2012-07-24 00:42:18 +02:00
# Check whether the store optimiser can optimise symlinks.
AC_MSG_CHECKING([whether it is possible to create a link to a symlink])
ln -s bla tmp_link
if ln tmp_link tmp_link2 2> /dev/null; then
AC_MSG_RESULT(yes)
AC_DEFINE(CAN_LINK_SYMLINK, 1, [Whether link() works on symlinks.])
else
AC_MSG_RESULT(no)
fi
rm -f tmp_link tmp_link2
2009-01-12 17:30:32 +01:00
# Check for <locale>.
2003-12-22 17:40:46 +01:00
AC_LANG_PUSH(C++)
2012-02-15 01:31:56 +01:00
AC_CHECK_HEADERS([locale])
2003-12-22 17:40:46 +01:00
AC_LANG_POP(C++)
2006-05-31 13:50:14 +02:00
2004-04-06 10:40:19 +02:00
AC_DEFUN([NEED_PROG],
2004-04-23 17:16:08 +02:00
[
AC_PATH_PROG($1, $2)
2004-04-06 10:40:19 +02:00
if test -z "$$1"; then
2004-07-18 23:07:27 +02:00
AC_MSG_ERROR([$2 is required])
2004-04-06 10:40:19 +02:00
fi
])
2019-07-03 04:20:37 +02:00
# Note: Usage of `AC_PATH_PROG(..., ..., false)` indicates that this program
# is not required in all cases. (e.g. not when building from a release tarball).
# The use of `false` isn't ideal, because when used somewhere in the build it
# will silently fail without error message; this should be improved.
2008-04-10 11:54:23 +02:00
NEED_PROG(bash, bash)
2006-09-20 17:28:47 +02:00
NEED_PROG(patch, patch)
2004-01-30 17:32:14 +01:00
AC_PATH_PROG(flex, flex, false)
AC_PATH_PROG(bison, bison, false)
2010-03-05 19:26:47 +01:00
NEED_PROG(sed, sed)
2005-03-15 13:03:15 +01:00
NEED_PROG(tar, tar)
2012-03-18 23:54:57 +01:00
NEED_PROG(bzip2, bzip2)
2013-05-14 15:10:14 +02:00
NEED_PROG(gzip, gzip)
2012-06-29 20:26:31 +02:00
NEED_PROG(xz, xz)
2006-02-22 14:55:41 +01:00
AC_PATH_PROG(dot, dot)
2017-04-20 19:11:45 +02:00
AC_PATH_PROG(lsof, lsof, lsof)
2006-10-19 21:20:18 +02:00
2011-04-11 12:13:53 +02:00
2005-03-21 11:06:11 +01:00
NEED_PROG(cat, cat)
2007-05-02 01:16:38 +02:00
NEED_PROG(tr, tr)
2005-03-15 13:03:15 +01:00
AC_ARG_WITH(coreutils-bin, AC_HELP_STRING([--with-coreutils-bin=PATH],
2005-03-21 11:06:11 +01:00
[path of cat, mkdir, etc.]),
coreutils=$withval, coreutils=$(dirname $cat))
2005-03-15 13:03:15 +01:00
AC_SUBST(coreutils)
2003-11-26 11:41:21 +01:00
2011-04-11 12:13:53 +02:00
2004-02-16 16:23:19 +01:00
AC_ARG_WITH(store-dir, AC_HELP_STRING([--with-store-dir=PATH],
2011-07-13 17:57:44 +02:00
[path of the Nix store (defaults to /nix/store)]),
2008-11-20 15:14:35 +01:00
storedir=$withval, storedir='/nix/store')
2004-02-16 16:23:19 +01:00
AC_SUBST(storedir)
2011-04-11 12:13:53 +02:00
2019-07-02 03:12:58 +02:00
# Look for boost, a required dependency.
# Note that AX_BOOST_BASE only exports *CPP* BOOST_CPPFLAGS, no CXX flags,
# and CPPFLAGS are not passed to the C++ compiler automatically.
# Thus we append the returned CPPFLAGS to the CXXFLAGS here.
AX_BOOST_BASE([1.66], [CXXFLAGS="$BOOST_CPPFLAGS $CXXFLAGS"], [AC_MSG_ERROR([Nix requires boost.])])
2019-07-03 02:47:27 +02:00
# For unknown reasons, setting this directly in the ACTION-IF-FOUND above
# ends up with LDFLAGS being empty, so we set it afterwards.
LDFLAGS="$BOOST_LDFLAGS $LDFLAGS"
2019-07-02 03:12:58 +02:00
2015-11-04 16:07:09 +01:00
# Look for OpenSSL, a required dependency.
PKG_CHECK_MODULES([OPENSSL], [libcrypto], [CXXFLAGS="$OPENSSL_CFLAGS $CXXFLAGS"])
2011-04-11 12:13:53 +02:00
2012-03-18 23:54:57 +01:00
# Look for libbz2, a required dependency.
AC_CHECK_LIB([bz2], [BZ2_bzWriteOpen], [true],
2018-09-03 17:57:13 +02:00
[AC_MSG_ERROR([Nix requires libbz2, which is part of bzip2. See https://web.archive.org/web/20180624184756/http://www.bzip.org/.])])
2012-03-18 23:54:57 +01:00
AC_CHECK_HEADERS([bzlib.h], [true],
2018-09-03 17:57:13 +02:00
[AC_MSG_ERROR([Nix requires libbz2, which is part of bzip2. See https://web.archive.org/web/20180624184756/http://www.bzip.org/.])])
2012-03-18 23:54:57 +01:00
# Look for SQLite, a required dependency.
2012-05-04 23:21:43 +02:00
PKG_CHECK_MODULES([SQLITE3], [sqlite3 >= 3.6.19], [CXXFLAGS="$SQLITE3_CFLAGS $CXXFLAGS"])
2003-07-28 16:13:42 +02:00
2011-04-11 12:13:53 +02:00
2015-03-27 12:27:36 +01:00
# Look for libcurl, a required dependency.
PKG_CHECK_MODULES([LIBCURL], [libcurl], [CXXFLAGS="$LIBCURL_CFLAGS $CXXFLAGS"])
2018-10-29 14:44:58 +01:00
# Look for editline, a required dependency.
2019-07-01 18:31:54 +02:00
# The the libeditline.pc file was added only in libeditline >= 1.15.2,
# see https://github.com/troglobit/editline/commit/0a8f2ef4203c3a4a4726b9dd1336869cd0da8607,
# but e.g. Ubuntu 16.04 has an older version, so we fall back to searching for
# editline.h when the pkg-config approach fails.
PKG_CHECK_MODULES([EDITLINE], [libeditline], [CXXFLAGS="$EDITLINE_CFLAGS $CXXFLAGS"], [
AC_CHECK_HEADERS([editline.h], [true],
[AC_MSG_ERROR([Nix requires libeditline; it was found neither via pkg-config nor its normal header.])])
AC_SEARCH_LIBS([readline read_history], [editline], [],
[AC_MSG_ERROR([Nix requires libeditline; it was not found via pkg-config, but via its header, but required functions do not work. Maybe it is too old? >= 1.14 is required.])])
])
2015-03-27 12:27:36 +01:00
2015-02-10 11:54:06 +01:00
# Look for libsodium, an optional dependency.
PKG_CHECK_MODULES([SODIUM], [libsodium],
[AC_DEFINE([HAVE_SODIUM], [1], [Whether to use libsodium for cryptography.])
CXXFLAGS="$SODIUM_CFLAGS $CXXFLAGS"
have_sodium=1], [have_sodium=])
AC_SUBST(HAVE_SODIUM, [$have_sodium])
2015-02-04 16:43:32 +01:00
2015-10-30 12:33:40 +01:00
# Look for liblzma, a required dependency.
PKG_CHECK_MODULES([LIBLZMA], [liblzma], [CXXFLAGS="$LIBLZMA_CFLAGS $CXXFLAGS"])
2018-02-10 03:57:31 +01:00
AC_CHECK_LIB([lzma], [lzma_stream_encoder_mt],
[AC_DEFINE([HAVE_LZMA_MT], [1], [xz multithreaded compression support])])
2015-10-30 12:33:40 +01:00
2018-08-06 11:48:35 +02:00
# Look for libbrotli{enc,dec}.
PKG_CHECK_MODULES([LIBBROTLI], [libbrotlienc libbrotlidec], [CXXFLAGS="$LIBBROTLI_CFLAGS $CXXFLAGS"])
2017-12-29 21:42:14 +01:00
2017-05-29 11:34:24 +02:00
# Look for libseccomp, required for Linux sandboxing.
if test "$sys_name" = linux; then
2018-02-18 08:35:01 +01:00
AC_ARG_ENABLE([seccomp-sandboxing],
AC_HELP_STRING([--disable-seccomp-sandboxing],
[Don't build support for seccomp sandboxing (only recommended if your arch doesn't support libseccomp yet!)]
))
if test "x$enable_seccomp_sandboxing" != "xno"; then
PKG_CHECK_MODULES([LIBSECCOMP], [libseccomp],
[CXXFLAGS="$LIBSECCOMP_CFLAGS $CXXFLAGS"])
have_seccomp=1
2018-02-19 19:13:51 +01:00
AC_DEFINE([HAVE_SECCOMP], [1], [Whether seccomp is available and should be used for sandboxing.])
2018-02-18 08:35:01 +01:00
else
have_seccomp=
fi
else
have_seccomp=
2017-05-29 11:34:24 +02:00
fi
2018-02-18 08:35:01 +01:00
AC_SUBST(HAVE_SECCOMP, [$have_seccomp])
2017-05-29 11:34:24 +02:00
2016-05-04 17:16:48 +02:00
# Look for aws-cpp-sdk-s3.
AC_LANG_PUSH(C++)
AC_CHECK_HEADERS([aws/s3/S3Client.h],
2017-12-22 12:05:13 +01:00
[AC_DEFINE([ENABLE_S3], [1], [Whether to enable S3 support via aws-sdk-cpp.])
2016-05-04 17:16:48 +02:00
enable_s3=1], [enable_s3=])
AC_SUBST(ENABLE_S3, [$enable_s3])
AC_LANG_POP(C++)
2017-12-22 12:05:13 +01:00
if test -n "$enable_s3"; then
2019-01-10 10:10:44 +01:00
declare -a aws_version_tokens=($(printf '#include <aws/core/VersionConfig.h>\nAWS_SDK_VERSION_STRING' | $CPP $CPPFLAGS - | grep -v '^#.*' | sed 's/"//g' | tr '.' ' '))
AC_DEFINE_UNQUOTED([AWS_VERSION_MAJOR], ${aws_version_tokens@<:@0@:>@}, [Major version of aws-sdk-cpp.])
AC_DEFINE_UNQUOTED([AWS_VERSION_MINOR], ${aws_version_tokens@<:@1@:>@}, [Minor version of aws-sdk-cpp.])
2017-12-22 12:05:13 +01:00
fi
2016-05-04 17:16:48 +02:00
2010-10-22 15:39:15 +02:00
# Whether to use the Boehm garbage collector.
2010-10-29 16:00:47 +02:00
AC_ARG_ENABLE(gc, AC_HELP_STRING([--enable-gc],
2012-05-11 01:03:23 +02:00
[enable garbage collection in the Nix expression evaluator (requires Boehm GC) [default=no]]),
2012-01-04 13:45:40 +01:00
gc=$enableval, gc=no)
if test "$gc" = yes; then
2010-10-29 16:00:47 +02:00
PKG_CHECK_MODULES([BDW_GC], [bdw-gc])
CXXFLAGS="$BDW_GC_CFLAGS $CXXFLAGS"
2010-10-22 15:39:15 +02:00
AC_DEFINE(HAVE_BOEHMGC, 1, [Whether to use the Boehm garbage collector.])
fi
2010-10-29 16:00:47 +02:00
2006-05-31 13:50:14 +02:00
2016-09-20 16:31:23 +02:00
# documentation generation switch
AC_ARG_ENABLE(doc-gen, AC_HELP_STRING([--disable-doc-gen],
[disable documentation generation]),
doc_generate=$enableval, doc_generate=yes)
AC_SUBST(doc_generate)
2019-07-03 03:34:17 +02:00
if test "$doc_generate" = yes; then
2019-07-03 04:20:37 +02:00
# Programs required to build the manual
NEED_PROG(xmllint, xmllint)
NEED_PROG(xsltproc, xsltproc)
# Check if docbook works without Internet (if not, likely packages providing the .xsl files are not installed)
2019-07-03 03:34:17 +02:00
AC_MSG_CHECKING([if docbook can run without networking])
if "$xsltproc" --nonet --novalid http://docbook.sourceforge.net/release/xsl-ns/current/profiling/profile.xsl >&AS_MESSAGE_LOG_FD 2>&1; then
AC_MSG_RESULT(yes)
else
AC_MSG_FAILURE([Building the manual requires 'xsltproc --nonet' to work. It did not. Perhaps you lack the necessary xsl files (e.g. package docbook-xsl-ns on Debian)?])
fi
fi
2016-09-20 16:31:23 +02:00
2006-05-31 13:50:14 +02:00
# Setuid installations.
2006-12-07 19:51:11 +01:00
AC_CHECK_FUNCS([setresuid setreuid lchown])
2006-12-03 15:32:22 +01:00
2006-11-29 22:06:58 +01:00
2007-12-14 15:49:35 +01:00
# Nice to have, but not essential.
2017-02-28 13:59:11 +01:00
AC_CHECK_FUNCS([strsignal posix_fallocate sysconf])
2007-12-14 15:49:35 +01:00
2012-03-18 23:54:57 +01:00
# This is needed if bzip2 is a static library, and the Nix libraries
# are dynamic.
2005-09-21 13:12:43 +02:00
if test "$(uname)" = "Darwin"; then
2006-05-31 13:50:14 +02:00
LDFLAGS="-all_load $LDFLAGS"
2005-09-21 13:12:43 +02:00
fi
2012-08-01 22:42:51 +02:00
# Do we have GNU tar?
2012-09-14 16:18:27 +02:00
AC_MSG_CHECKING([if you have a recent GNU tar])
2012-10-10 11:10:28 +02:00
if $tar --version 2> /dev/null | grep -q GNU && tar cvf /dev/null --warning=no-timestamp ./config.log > /dev/null; then
2012-08-01 22:42:51 +02:00
AC_MSG_RESULT(yes)
tarFlags="--warning=no-timestamp"
else
AC_MSG_RESULT(no)
fi
AC_SUBST(tarFlags)
2017-05-15 17:30:33 +02:00
AC_ARG_WITH(sandbox-shell, AC_HELP_STRING([--with-sandbox-shell=PATH],
[path of a statically-linked shell to use as /bin/sh in sandboxes]),
sandbox_shell=$withval)
AC_SUBST(sandbox_shell)
2019-02-13 06:03:10 +01:00
AC_ARG_ENABLE(shared, AC_HELP_STRING([--enable-shared],
[Build shared libraries for Nix [default=yes]]),
shared=$enableval, shared=yes)
if test "$shared" = yes; then
AC_SUBST(BUILD_SHARED_LIBS, 1, [Whether to build shared libraries.])
else
AC_SUBST(BUILD_SHARED_LIBS, 0, [Whether to build shared libraries.])
fi
2017-05-15 17:30:33 +02:00
2013-11-25 16:51:22 +01:00
# Expand all variables in config.status.
test "$prefix" = NONE && prefix=$ac_default_prefix
test "$exec_prefix" = NONE && exec_prefix='${prefix}'
for name in $ac_subst_vars; do
2019-01-10 10:10:44 +01:00
declare $name="$(eval echo "${!name}")"
declare $name="$(eval echo "${!name}")"
declare $name="$(eval echo "${!name}")"
2013-11-25 16:51:22 +01:00
done
2014-09-22 12:50:38 +02:00
rm -f Makefile.config
2013-11-22 20:30:24 +01:00
AC_CONFIG_HEADER([config.h])
2013-11-25 11:56:14 +01:00
AC_CONFIG_FILES([])
2003-04-08 17:36:54 +02:00
AC_OUTPUT