AC_INIT(nix, m4_esyscmd([echo -n $(cat ./version)$VERSION_SUFFIX])) AC_CONFIG_SRCDIR(README) AC_CONFIG_AUX_DIR(config) AM_INIT_AUTOMAKE([dist-bzip2 foreign]) AC_DEFINE_UNQUOTED(NIX_VERSION, ["$VERSION"], [Nix version.]) AC_PROG_SED # Construct a Nix system name (like "i686-linux"). AC_CANONICAL_HOST AC_MSG_CHECKING([for the canonical Nix system name]) AC_ARG_WITH(system, AC_HELP_STRING([--with-system=SYSTEM], [Platform identifier (e.g., `i686-linux').]), [system=$withval], [case "$host_cpu" in i*86) machine_name="i686";; amd64) machine_name="x86_64";; *) machine_name="$host_cpu";; esac case "$host_os" in linux-gnu*) # For backward compatibility, strip the `-gnu' part. system="$machine_name-linux";; *) # Strip the version number from names such as `gnu0.3', # `darwin10.2.0', etc. system="$machine_name-`echo $host_os | "$SED" -e's/@<:@0-9.@:>@*$//g'`";; esac]) sys_name=$(uname -s | tr 'A-Z ' 'a-z_') case $sys_name in cygwin*) sys_name=cygwin ;; esac AC_MSG_RESULT($system) AC_SUBST(system) AC_DEFINE_UNQUOTED(SYSTEM, ["$system"], [platform identifier (`cpu-os')]) # State should be stored in /nix/var, unless the user overrides it explicitly. test "$localstatedir" = '${prefix}/var' && localstatedir=/nix/var # Windows-specific stuff. On Cygwin, dynamically linking against the # ATerm DLL works, except that it requires the ATerm "lib" directory # to be in $PATH, as Windows doesn't have anything like an RPATH # embedded in executable. Since this is kind of annoying, we use # static libraries for now. if test "$sys_name" = "cygwin"; then AC_DISABLE_SHARED AC_ENABLE_STATIC fi # Solaris-specific stuff. if test "$sys_name" = sunos; then # Solaris requires -lsocket -lnsl for network functions LIBS="-lsocket -lnsl $LIBS" fi AC_PROG_CC AC_PROG_CXX # To build programs to be run in the build machine if test "$CC_FOR_BUILD" = ""; then if test "$cross_compiling" = "yes"; then AC_CHECK_PROGS(CC_FOR_BUILD, gcc cc) else CC_FOR_BUILD="$CC" fi fi AC_SUBST([CC_FOR_BUILD]) # We are going to use libtool. AC_DISABLE_STATIC AC_ENABLE_SHARED AC_PROG_LIBTOOL if test "$enable_shared" = yes; then SUB_CONFIGURE_FLAGS="--enable-shared --disable-static" else SUB_CONFIGURE_FLAGS="--enable-static --disable-shared" fi AC_SUBST(SUB_CONFIGURE_FLAGS) # Use 64-bit file system calls so that we can support files > 2 GiB. AC_SYS_LARGEFILE # 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));]])], [AC_MSG_RESULT(yes) AC_DEFINE(HAVE_PUBSETBUF, 1, [Whether pubsetbuf is available.])], AC_MSG_RESULT(no)) AC_LANG_POP(C++) # Check for chroot support (requires chroot() and bind mounts). AC_CHECK_FUNCS([chroot]) AC_CHECK_FUNCS([unshare]) AC_CHECK_HEADERS([sched.h], [], [], []) AC_CHECK_HEADERS([sys/param.h], [], [], []) AC_CHECK_HEADERS([sys/mount.h], [], [], [#ifdef HAVE_SYS_PARAM_H # include <sys/param.h> # endif ]) # Check for <locale>. AC_LANG_PUSH(C++) AC_CHECK_HEADERS([locale], [], [], []) AC_LANG_POP(C++) # Check for <err.h>. AC_CHECK_HEADER([err.h], [], [bsddiff_compat_include="-Icompat-include"]) AC_SUBST([bsddiff_compat_include]) # Check whether we have the personality() syscall, which allows us to # do i686-linux builds on x86_64-linux machines. AC_CHECK_HEADERS([sys/personality.h]) # Check for tr1/unordered_set. AC_LANG_PUSH(C++) AC_CHECK_HEADERS([tr1/unordered_set], [], [], []) AC_LANG_POP(C++) AC_DEFUN([NEED_PROG], [ AC_PATH_PROG($1, $2) if test -z "$$1"; then AC_MSG_ERROR([$2 is required]) fi ]) NEED_PROG(curl, curl) NEED_PROG(bash, bash) NEED_PROG(patch, patch) AC_PATH_PROG(xmllint, xmllint, false) AC_PATH_PROG(xsltproc, xsltproc, false) AC_PATH_PROG(w3m, w3m, false) AC_PATH_PROG(flex, flex, false) AC_PATH_PROG(bison, bison, false) NEED_PROG(perl, perl) NEED_PROG(sed, sed) NEED_PROG(tar, tar) AC_PATH_PROG(dot, dot) AC_PATH_PROG(dblatex, dblatex) AC_PATH_PROG(gzip, gzip) AC_PATH_PROG(openssl_prog, openssl, openssl) # if not found, call openssl in $PATH AC_SUBST(openssl_prog) AC_DEFINE_UNQUOTED(OPENSSL_PATH, ["$openssl_prog"], [Path of the OpenSSL binary]) # Test that Perl has the open/fork feature (Perl 5.8.0 and beyond). AC_MSG_CHECKING([whether Perl is recent enough]) if ! $perl -e 'open(FOO, "-|", "true"); while (<FOO>) { print; }; close FOO or die;'; then AC_MSG_RESULT(no) AC_MSG_ERROR([Your Perl version is too old. Nix requires Perl 5.8.0 or newer.]) fi AC_MSG_RESULT(yes) # Figure out where to install Perl modules. AC_MSG_CHECKING([for the Perl installation prefix]) perlversion=$($perl -e 'use Config; print $Config{version};') perlarchname=$($perl -e 'use Config; print $Config{archname};') AC_SUBST(perllibdir, [$\(libdir\)/perl5/site_perl/$perlversion/$perlarchname]) AC_MSG_RESULT($perllibdir) NEED_PROG(cat, cat) NEED_PROG(tr, tr) AC_ARG_WITH(coreutils-bin, AC_HELP_STRING([--with-coreutils-bin=PATH], [path of cat, mkdir, etc.]), coreutils=$withval, coreutils=$(dirname $cat)) AC_SUBST(coreutils) AC_ARG_WITH(docbook-rng, AC_HELP_STRING([--with-docbook-rng=PATH], [path of the DocBook RelaxNG schema]), docbookrng=$withval, docbookrng=/docbook-rng-missing) AC_SUBST(docbookrng) AC_ARG_WITH(docbook-xsl, AC_HELP_STRING([--with-docbook-xsl=PATH], [path of the DocBook XSL stylesheets]), docbookxsl=$withval, docbookxsl=/docbook-xsl-missing) AC_SUBST(docbookxsl) AC_ARG_WITH(xml-flags, AC_HELP_STRING([--with-xml-flags=FLAGS], [extra flags to be passed to xmllint and xsltproc]), xmlflags=$withval, xmlflags=) AC_SUBST(xmlflags) AC_ARG_WITH(store-dir, AC_HELP_STRING([--with-store-dir=PATH], [path of the Nix store (defaults to /nix/store)]), storedir=$withval, storedir='/nix/store') AC_SUBST(storedir) AC_ARG_WITH(openssl, AC_HELP_STRING([--with-openssl=PATH], [prefix of the OpenSSL library]), openssl=$withval, openssl=) AM_CONDITIONAL(HAVE_OPENSSL, test -n "$openssl") if test -n "$openssl"; then LDFLAGS="-L$openssl/lib -lcrypto $LDFLAGS" CFLAGS="-I$openssl/include $CFLAGS" CXXFLAGS="-I$openssl/include $CXXFLAGS" AC_DEFINE(HAVE_OPENSSL, 1, [Whether to use OpenSSL.]) fi AC_ARG_WITH(bzip2, AC_HELP_STRING([--with-bzip2=PATH], [prefix of bzip2]), bzip2=$withval, bzip2=) AM_CONDITIONAL(HAVE_BZIP2, test -n "$bzip2") ATERM_VERSION=2.5 AC_SUBST(ATERM_VERSION) if test -z "$bzip2"; then # Headers and libraries will be used from the temporary installation # in externals/inst-bzip2. bzip2_lib='-L${top_builddir}/externals/inst-bzip2/lib -lbz2' bzip2_include='-I${top_builddir}/externals/inst-bzip2/include' # The binary will be copied to $libexecdir. bzip2_bin='${libexecdir}/nix' # But for testing, we have to use the temporary copy :-( bzip2_bin_test='${top_builddir}/externals/inst-bzip2/bin' else bzip2_lib="-L$bzip2/lib -lbz2" bzip2_include="-I$bzip2/include" bzip2_bin="$bzip2/bin" bzip2_bin_test="$bzip2/bin" fi AC_SUBST(bzip2_lib) AC_SUBST(bzip2_include) AC_SUBST(bzip2_bin) AC_SUBST(bzip2_bin_test) AC_ARG_WITH(sqlite, AC_HELP_STRING([--with-sqlite=PATH], [prefix of SQLite]), sqlite=$withval, sqlite=) AM_CONDITIONAL(HAVE_SQLITE, test -n "$sqlite") SQLITE_VERSION=3070900 AC_SUBST(SQLITE_VERSION) if test -z "$sqlite"; then sqlite_lib='${top_builddir}/externals/sqlite-autoconf-$(SQLITE_VERSION)/libsqlite3.la' sqlite_include='-I${top_builddir}/externals/sqlite-autoconf-$(SQLITE_VERSION)' sqlite_bin='${top_builddir}/externals/sqlite-autoconf-$(SQLITE_VERSION)' else sqlite_lib="-L$sqlite/lib -lsqlite3" sqlite_include="-I$sqlite/include" sqlite_bin="$sqlite/bin" fi AC_SUBST(sqlite_lib) AC_SUBST(sqlite_include) AC_SUBST(sqlite_bin) # Whether to use the Boehm garbage collector. AC_ARG_ENABLE(gc, AC_HELP_STRING([--enable-gc], [enable garbage collection in the Nix expression evaluator (requires Boehm GC)]), gc=$enableval, gc=no) if test "$gc" = yes; then PKG_CHECK_MODULES([BDW_GC], [bdw-gc]) CXXFLAGS="$BDW_GC_CFLAGS $CXXFLAGS" AC_DEFINE(HAVE_BOEHMGC, 1, [Whether to use the Boehm garbage collector.]) fi # Check for the required Perl dependencies (DBI and DBD::SQLite). perlFlags="-I$perllibdir" AC_ARG_WITH(dbi, AC_HELP_STRING([--with-dbi=PATH], [prefix of the Perl DBI library]), perlFlags="$perlFlags -I$withval") AC_ARG_WITH(dbd-sqlite, AC_HELP_STRING([--with-dbd-sqlite=PATH], [prefix of the Perl DBD::SQLite library]), perlFlags="$perlFlags -I$withval") AC_MSG_CHECKING([whether DBD::SQLite works]) if ! $perl $perlFlags -e 'use DBI; use DBD::SQLite;' 2>&5; then AC_MSG_RESULT(no) AC_MSG_FAILURE([The Perl modules DBI and/or DBD::SQLite are missing.]) fi AC_MSG_RESULT(yes) AC_SUBST(perlFlags) AC_ARG_ENABLE(init-state, AC_HELP_STRING([--disable-init-state], [do not initialise DB etc. in `make install']), init_state=$enableval, init_state=yes) AM_CONDITIONAL(INIT_STATE, test "$init_state" = "yes") # Setuid installations. AC_CHECK_FUNCS([setresuid setreuid lchown]) # Nice to have, but not essential. AC_CHECK_FUNCS([strsignal posix_fallocate nanosleep sysconf]) # This is needed if ATerm or bzip2 are static libraries, # and the Nix libraries are dynamic. if test "$(uname)" = "Darwin"; then LDFLAGS="-all_load $LDFLAGS" fi AM_CONFIG_HEADER([config.h]) AC_CONFIG_FILES([Makefile externals/Makefile src/Makefile src/bin2c/Makefile src/boost/Makefile src/boost/format/Makefile src/libutil/Makefile src/libstore/Makefile src/libmain/Makefile src/nix-store/Makefile src/nix-hash/Makefile src/libexpr/Makefile src/nix-instantiate/Makefile src/nix-env/Makefile src/nix-worker/Makefile src/nix-setuid-helper/Makefile src/nix-log2xml/Makefile src/bsdiff-4.3/Makefile perl/Makefile scripts/Makefile corepkgs/Makefile doc/Makefile doc/manual/Makefile misc/Makefile misc/emacs/Makefile tests/Makefile ]) AC_OUTPUT