358 lines
		
	
	
	
		
			9.6 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			358 lines
		
	
	
	
		
			9.6 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| 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)
 | |
| 
 | |
| 
 | |
| 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=)
 | |
| if test -n "$gc"; 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${libdir}/perl5/site_perl"
 | |
| 
 | |
| 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
 | |
|    corepkgs/nar/Makefile
 | |
|    corepkgs/buildenv/Makefile
 | |
|    corepkgs/channels/Makefile
 | |
|    doc/Makefile
 | |
|    doc/manual/Makefile
 | |
|    misc/Makefile
 | |
|    misc/emacs/Makefile
 | |
|    tests/Makefile
 | |
|   ])
 | |
| AC_OUTPUT
 |