# Copyright (C) Internet Systems Consortium, Inc. ("ISC") # # SPDX-License-Identifier: MPL-2.0 # # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, you can obtain one at https://mozilla.org/MPL/2.0/. # # See the COPYRIGHT file distributed with this work for additional # information regarding copyright ownership. AC_INIT(BIND, [9.16], [https://gitlab.isc.org/isc-projects/bind9/-/issues/new?issuable_template=Bug], [], [https://www.isc.org/downloads/]) AC_PREREQ([2.60]) # # Enable maintainer mode by default, but allow to disable it in the CI # AM_MAINTAINER_MODE([enable]) AC_CONFIG_HEADER(config.h) AC_CONFIG_MACRO_DIR([m4]) AC_CANONICAL_HOST # # Enable system extensions to C and POSIX # AC_USE_SYSTEM_EXTENSIONS # # Enable large file support # AC_SYS_LARGEFILE AC_FUNC_FSEEKO LFS_CFLAGS=`getconf LFS_CFLAGS 2>/dev/null` LFS_LDFLAGS=`getconf LFS_LDFLAGS 2>/dev/null` LFS_LIBS=`getconf LFS_LIBS 2>/dev/null` AC_SUBST([LFS_CFLAGS]) AC_SUBST([LFS_LDFLAGS]) AC_SUBST([LFS_LIBS]) # Enable RFC 3542 APIs on macOS AC_DEFINE([__APPLE_USE_RFC_3542], [1], [Select RFC3542 IPv6 API on macOS]) AC_PROG_MAKE_SET AC_PROG_LIBTOOL AC_PROG_INSTALL AC_PROG_LN_S AX_POSIX_SHELL AC_PROG_MKDIR_P AC_SUBST(STD_CINCLUDES) AC_SUBST(STD_CDEFINES) AC_SUBST(STD_CWARNINGS) AC_SUBST(CCOPT) AC_SUBST(CCNOOPT) AC_SUBST(BACKTRACECFLAGS) # # Use pkg-config # PKG_PROG_PKG_CONFIG AS_IF([test -z "$PKG_CONFIG"], [AC_MSG_ERROR([The pkg-config script could not be found or is too old.])]) # [pairwise: --enable-buffer-useinline, --disable-buffer-useinline] AC_ARG_ENABLE(buffer_useinline, AS_HELP_STRING([--enable-buffer-useinline], [define ISC_BUFFER_USEINLINE when compiling [default=yes]]), if test yes = "${enable}" then AC_DEFINE([ISC_BUFFER_USEINLINE], [1], [Define if you want to use inline buffers]) fi, AC_DEFINE([ISC_BUFFER_USEINLINE], [1])) # [pairwise: --enable-warn-shadow, --disable-warn-shadow] AC_ARG_ENABLE([warn_shadow], [AS_HELP_STRING([--enable-warn-shadow], [turn on -Wshadow when compiling])]) # [pairwise: --enable-warn-error, --disable-warn-error] AC_ARG_ENABLE([warn_error], [AS_HELP_STRING([--enable-warn-error], [turn on -Werror when compiling])]) # [pairwise: --enable-developer, --disable-developer] AC_ARG_ENABLE([developer], [AS_HELP_STRING([--enable-developer], [enable developer build settings])]) XTARGETS= AS_IF([test "$enable_developer" = "yes"], [STD_CDEFINES="$STD_CDEFINES -DISC_MEM_DEFAULTFILL=1 -DISC_LIST_CHECKINIT=1" test "${enable_fixed_rrset+set}" = set || enable_fixed_rrset=yes test "${enable_querytrace+set}" = set || enable_querytrace=yes test "${with_cmocka+set}" = set || with_cmocka=yes test "${with_dlz_filesystem+set}" = set || with_dlz_filesystem=yes test "${enable_symtable+set}" = set || enable_symtable=all test "${enable_warn_error+set}" = set || enable_warn_error=yes test "${enable_warn_shadow+set}" = set || enable_warn_shadow=yes test "${with_zlib+set}" = set || with_zlib=yes XTARGETS='${XTARGETS}' ]) AC_SUBST([XTARGETS]) # Fuzzing is not included in pairwise testing as fuzzing tools are # not present in the relevant Docker image. # # [pairwise: skip] AC_ARG_ENABLE([fuzzing], [AS_HELP_STRING([--enable-fuzzing=], [Enable fuzzing using American Fuzzy Lop or libFuzzer (default=no)])], [], [enable_fuzzing=no]) AC_MSG_CHECKING([whether to enable fuzzing mode]) AS_CASE([$enable_fuzzing], [no],[AC_MSG_RESULT([no])], [afl],[ AC_MSG_RESULT([using AFL]) AC_DEFINE([ENABLE_AFL], [1], [Define to enable American Fuzzy Lop test harness]) CFLAGS="$CFLAGS -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION=1" LIBS="$LIBS -lpthread"], [libfuzzer],[ AC_MSG_RESULT([using libFuzzer]) CFLAGS="$CFLAGS -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION=1 -fsanitize=fuzzer,address,undefined" LDFLAGS="$LDFLAGS -fsanitize=fuzzer,address,undefined"], [*],[AC_MSG_ERROR([You need to explicitly select the fuzzer])]) AS_IF([test "$enable_fuzzing" = "afl"], [AC_MSG_CHECKING("for AFL enabled compiler") AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [#ifndef __AFL_COMPILER #error AFL compiler required #endif ])], [AC_MSG_RESULT([yes])], [AC_MSG_ERROR([set CC=afl- when --enable-fuzzing=afl is used])]) ]) # # Make very sure that these are the first files processed by # config.status, since we use the processed output as the input for # AC_SUBST_FILE() substitutions in other files. # AC_CONFIG_FILES([make/rules make/includes]) AC_PATH_PROG(AR, ar) ARFLAGS="cruv" AC_SUBST(AR) AC_SUBST(ARFLAGS) # The POSIX ln(1) program. Non-POSIX systems may substitute # "copy" or something. LN=ln AC_SUBST(LN) case "$AR" in "") AC_MSG_ERROR([ ar program not found. Please fix your PATH to include the directory in which ar resides, or set AR in the environment with the full path to ar. ]) ;; esac # # Look for w3m # AC_PATH_PROGS(W3M, w3m, w3m) AC_SUBST(W3M) # # Look for pandoc # AC_PATH_PROG(PANDOC, pandoc, pandoc) AC_SUBST(PANDOC) # # Perl is optional; it is used only by some of the system test scripts. # Note: the backtrace feature (see below) uses perl to build the symbol table, # but it still compiles without perl, in which case an empty table will be used. # AC_PATH_PROGS(PERL, perl5 perl) AC_SUBST(PERL) # # Python is also optional but required by default so that dnssec-keymgr gets # installed unless explicitly prevented by the user using --without-python. # testminvers='import sys if (sys.version_info < (2,7)) or (sys.version_info < (3,2) and sys.version_info >= (3,0)): exit(1)' testargparse='try: import argparse except: exit(1)' testply='try: import ply except: exit(1)' testsetuptools='try: from setuptools import setup except: exit(1)' testdistutils='try: from distutils.core import setup except: exit(1)' default_with_python="python python3 python3.11 python3.10 python3.9 python3.8 python3.7 python3.6 python3.5 python3.4 python3.3 python3.2 python2 python2.7" AC_ARG_VAR([PYTHON], [path to python executable]) # [pairwise: --with-python, --without-python] AC_ARG_WITH([python], AS_HELP_STRING([--with-python=PATH], [specify path to Python interpreter]), [], [with_python=$default_with_python]) # [pairwise: skip] AC_ARG_WITH([python-install-dir], AS_HELP_STRING([--with-python-install-dir=PATH], [installation directory for Python modules]), [], with_python_install_dir="") AS_IF([test "$with_python" = "yes"], [with_python=$default_with_python]) AS_IF([test "$with_python" = "no"], [AC_MSG_CHECKING([for Python support]) unset PYTHON AC_MSG_RESULT([disabled])], [for p in $with_python do AS_CASE([$p], [/*],[PYTHON="$p"]) AC_PATH_PROG([PYTHON], [$p]) # Do not cache the result of the check from the previous line. If the # first found Python interpreter has missing module dependencies and # the result of the above check is cached, subsequent module checks # will erroneously keep on using the cached path to the first found # Python interpreter instead of different ones. unset ac_cv_path_PYTHON AS_IF([test -z "$PYTHON"], [continue]) AC_MSG_CHECKING([if $PYTHON is python2 version >= 2.7 or python3 version >= 3.2]) AS_IF(["$PYTHON" -c "$testminvers" 2>/dev/null], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]) unset PYTHON continue]) AC_MSG_CHECKING([Python module 'argparse']) AS_IF(["$PYTHON" -c "$testargparse" 2>/dev/null], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]) unset PYTHON continue]) AC_MSG_CHECKING([Python module 'ply']) AS_IF(["$PYTHON" -c "$testply" 2>/dev/null], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]) unset PYTHON continue]) AC_MSG_CHECKING([Python module 'setuptools']) AS_IF(["$PYTHON" -c "$testsetuptools" 2>/dev/null], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]) AC_MSG_CHECKING([Python module 'distutils']) AS_IF(["$PYTHON" -c "$testdistutils" 2>/dev/null], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]) unset PYTHON continue])]) # Stop looking any further once we find a Python interpreter # satisfying all requirements. break done AS_IF([test "X$PYTHON" = "X"], [AC_MSG_CHECKING([for Python support]) AC_MSG_RESULT([no]) AC_MSG_ERROR([m4_normalize( [Python >= 2.7 or >= 3.2 and the PLY package are required for dnssec-keymgr and other Python-based tools. PLY may be available from your OS package manager as python-ply or python3-ply; it can also be installed via pip. To build without Python/PLY, use --without-python.] )])])]) PYTHON_TOOLS='' CHECKDS='' COVERAGE='' KEYMGR='' AS_IF([test "X$PYTHON" != "X"], [PYTHON_TOOLS=python CHECKDS=checkdstool COVERAGE=coverage KEYMGR=keymgr PYTHON_INSTALL_DIR="$with_python_install_dir" AS_IF([test -n "$with_python_install_dir"], [PYTHON_INSTALL_LIB="--install-lib=$with_python_install_dir"])]) AC_SUBST(CHECKDS) AC_SUBST(COVERAGE) AC_SUBST(KEYMGR) AC_SUBST(PYTHON_TOOLS) AC_SUBST(PYTHON_INSTALL_DIR) AC_SUBST(PYTHON_INSTALL_LIB) # # expanded_sysconfdir is needed for replacement in the python utilities # expanded_sysconfdir=`eval echo $sysconfdir` AC_SUBST(expanded_sysconfdir) # # Make sure INSTALL uses an absolute path, else it will be wrong in all # Makefiles, since they use make/rules.in and INSTALL will be adjusted by # configure based on the location of the file where it is substituted. # Since in BIND9 INSTALL is only substituted into make/rules.in, an immediate # subdirectory of install-sh, This relative path will be wrong for all # directories more than one level down from install-sh. # case "$INSTALL" in /*) ;; *) # # Not all systems have dirname. # changequote({, }) ac_dir="`echo $INSTALL | sed 's%/[^/]*$%%'`" changequote([, ]) ac_prog="`echo $INSTALL | sed 's%.*/%%'`" test "X$ac_dir" = "X$ac_prog" && ac_dir=. test -d "$ac_dir" && ac_dir="`(cd \"$ac_dir\" && pwd)`" INSTALL="$ac_dir/$ac_prog" ;; esac AC_PATH_PROGS([PYTEST], [pytest-3 py.test-3 pytest py.test pytest-pypy], []) AS_IF([test -z "$PYTEST"], [AC_MSG_WARN([pytest not found, some system tests will be skipped])]) AC_SUBST([PYTEST]) AC_PROG_CC AC_PROG_CC_C99 # # Using Solaris linker with gcc on Solaris breaks Thread Local Storage # AS_CASE([$host], [*-solaris*],[ AS_IF([test "$GCC" = "yes"], [LDFLAGS="$LDFLAGS -zrelax=transtls" AC_MSG_WARN([When using GNU C Compiler on Solaris, -zrelax=transtls linker flag is used to fix bug in Thread Local Storage]) ]) ], [*-darwin*],[LDFLAGS="$LDFLAGS -Wl,-flat_namespace"]) # # CCNOOPT defaults to -O0 on gcc and disables optimization when is last # if test "X$CCNOOPT" = "X" -a "X$GCC" = "Xyes"; then CCNOOPT="-O0" fi AC_HEADER_STDC AC_CHECK_HEADERS(fcntl.h regex.h sys/time.h unistd.h sys/mman.h sys/sockio.h sys/select.h sys/param.h sys/sysctl.h net/if6.h sys/socket.h net/route.h linux/netlink.h linux/rtnetlink.h,,, [$ac_includes_default #ifdef HAVE_SYS_PARAM_H # include #endif #ifdef HAVE_SYS_SOCKET_H # include #endif ]) # # Check for thread local storage # AC_CHECK_HEADERS([threads.h], [ AC_MSG_CHECKING([for C11 Thread-Local Storage using thread_local]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [ #include ],[ static thread_local int tls = 0; return (tls); ]) ],[ AC_MSG_RESULT([yes]) AC_DEFINE([HAVE_THREAD_LOCAL],[1],[Define if thread_local keyword is available]) AC_DEFINE([HAVE_TLS],[1],[Define if Thread-Local Storage is available]) ],[ AC_MSG_ERROR([Thread Local Storage support required, update your toolchain to build BIND 9]) ]) ],[ AC_MSG_CHECKING([for Thread-Local Storage using __thread]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [ ],[ static __thread int tls = 0; return (tls); ]) ],[ AC_MSG_RESULT([yes]) AC_DEFINE([HAVE___THREAD],[1],[Define if __thread keyword is available]) AC_DEFINE([HAVE_TLS],[1],[Define if Thread-Local Storage is available]) ],[ AC_MSG_ERROR([Thread Local Storage support required, update your toolchain to build BIND 9]) ]) ]) AC_C_CONST AC_C_INLINE AC_C_VOLATILE AC_C_FLEXIBLE_ARRAY_MEMBER # # Check for yield support on ARM processors # AS_CASE([$host], [arm*], [AC_MSG_CHECKING([for yield instruction support]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[]], [[__asm__ __volatile__ ("yield")]])], [AC_MSG_RESULT([yes]) AC_DEFINE([HAVE_ARM_YIELD], [1], [define if the ARM yield instruction is available])], [AC_MSG_RESULT([no])])]) # # Check for pause support on SPARC processors # AS_CASE([$host], [sparc*], [AC_MSG_CHECKING([for pause instruction support]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[]], [[__asm__ __volatile__ ("pause")]])], [AC_MSG_RESULT([yes]) AC_DEFINE([HAVE_SPARC_PAUSE], [1], [define if the SPARC pause instruction is available])], [AC_MSG_RESULT([no])])]) AC_CHECK_FUNCS([sysctlbyname]) # # Check for the existence of mmap to enable the fast format zones # AC_CHECK_FUNCS(mmap) # # Older versions of HP/UX don't define seteuid() and setegid() # AC_CHECK_FUNCS(seteuid setresuid) AC_CHECK_FUNCS(setegid setresgid) AC_TYPE_SIZE_T AC_TYPE_SSIZE_T AC_TYPE_UINTPTR_T AC_HEADER_TIME # # check for uname library routine # AC_MSG_CHECKING([for uname]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include #include ]], [[ struct utsname uts; uname(&uts); printf("running on %s %s %s for %s\n", uts.sysname, uts.release, uts.version, uts.machine); ]])], [AC_MSG_RESULT(yes) AC_DEFINE([HAVE_UNAME], [1], [define if uname is available]) ], [AC_MSG_RESULT(no) AC_MSG_WARN([uname is not correctly supported]) ]) # # check for GCC noreturn attribute # AC_MSG_CHECKING(for GCC noreturn attribute) AC_TRY_COMPILE([],[void foo() __attribute__((noreturn));], [AC_MSG_RESULT(yes) ISC_PLATFORM_NORETURN_PRE="#define ISC_PLATFORM_NORETURN_PRE" ISC_PLATFORM_NORETURN_POST="#define ISC_PLATFORM_NORETURN_POST __attribute__((noreturn))"], [AC_MSG_RESULT(no) ISC_PLATFORM_NORETURN_PRE="#define ISC_PLATFORM_NORETURN_PRE" ISC_PLATFORM_NORETURN_POST="#define ISC_PLATFORM_NORETURN_POST"]) AC_SUBST(ISC_PLATFORM_NORETURN_PRE) AC_SUBST(ISC_PLATFORM_NORETURN_POST) # # check for GCC malloc attribute # AX_GCC_FUNC_ATTRIBUTE([malloc]) AC_MSG_CHECKING([for extended malloc attributes]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include #include __attribute__ ((malloc, malloc (free, 1)) void * xmalloc(size_t sz) { return malloc(sz); } ]], [[ void *p = xmalloc(8); free(p); ]])], [AC_MSG_RESULT(yes) AC_DEFINE([HAVE_MALLOC_EXT_ATTR], [1], [define if extended attributes for malloc are available]) ], [AC_MSG_RESULT(no)]) # # check for GCC returns_nonnull attribute # AX_GCC_FUNC_ATTRIBUTE([returns_nonnull]) # # check if we have kqueue # # [pairwise: --enable-kqueue, --disable-kqueue] AC_ARG_ENABLE([kqueue], [AS_HELP_STRING([--enable-kqueue], [use BSD kqueue when available [default=yes]])], [], enable_kqueue="yes") AS_IF([test "$enable_kqueue" = "yes"], [AC_CHECK_FUNCS([kqueue])]) # # check if we have epoll. Linux kernel 2.4 has epoll_create() which fails, # so we need to try running the code, not just test its existence. # # [pairwise: --enable-epoll, --disable-epoll] AC_ARG_ENABLE([epoll], [AS_HELP_STRING([--enable-epoll], [use Linux epoll when available [default=auto]])], [], [enable_epoll="yes"]) AS_IF([test "$enable_epoll" = "yes"], [AC_CHECK_FUNCS([epoll_create1])]) # # check if we support /dev/poll # # [pairwise: --enable-devpoll, --disable-devpoll] AC_ARG_ENABLE([devpoll], [AS_HELP_STRING([--enable-devpoll], [use /dev/poll when available [default=yes]])], [], [enable_devpoll="yes"]) AS_IF([test "$enable_devpoll" = "yes"], [AC_CHECK_HEADERS([sys/devpoll.h devpoll.h])]) # # Find the machine's endian flavor. # AC_C_BIGENDIAN # # GeoIP support? # # Should be on by default if libmaxminddb exists. # # [pairwise: skip] AC_ARG_WITH([geoip2], [AS_HELP_STRING([--with-geoip2], [deprecated, use --with-maxminddb])], [AC_MSG_WARN([--with-geoip2 is DEPRECATED and will be removed in a future release, use --with-maxminddb instead])], [with_geoip2="auto"]) # [pairwise: --enable-geoip --with-maxminddb=auto, --enable-geoip --with-maxminddb=yes, --disable-geoip] AC_ARG_ENABLE([geoip], [AS_HELP_STRING([--disable-geoip], [support GeoIP2 geolocation ACLs if available [default=yes]])], [], [enable_geoip="yes"]) # [pairwise: skip] AC_ARG_WITH([maxminddb], [AS_HELP_STRING([--with-maxminddb=PATH], [Build with MaxMind GeoIP2 support (auto|yes|no|path) [default=auto]])], [], [with_maxminddb="$with_geoip2"]) GEOIP2LINKSRCS= GEOIP2LINKOBJS= AS_IF([test "$enable_geoip" = "yes"], [AS_CASE([$with_maxminddb], [no],[AC_MSG_ERROR([Use '--disable-geoip' to disable the GeoIP])], [auto],[PKG_CHECK_MODULES([MAXMINDDB], [libmaxminddb], [AC_DEFINE([HAVE_GEOIP2], [1], [Build with GeoIP2 support]) PKG_CHECK_VAR([MAXMINDDB_PREFIX], [libmaxminddb], [prefix], [], [AC_MSG_ERROR([libmaxminddb prefix not found in pkg-config; set MAXMINDDB_PREFIX in the environment])]) GEOIP2LINKSRCS='${GEOIP2LINKSRCS}' GEOIP2LINKOBJS='${GEOIP2LINKOBJS}' ],[:])], [yes],[PKG_CHECK_MODULES([MAXMINDDB], [libmaxminddb], [AC_DEFINE([HAVE_GEOIP2], [1], [Build with GeoIP2 support]) PKG_CHECK_VAR([MAXMINDDB_PREFIX], [libmaxminddb], [prefix], [], [AC_MSG_ERROR([libmaxminddb prefix not found in pkg-config; set MAXMINDDB_PREFIX in the environment])]) GEOIP2LINKSRCS='${GEOIP2LINKSRCS}' GEOIP2LINKOBJS='${GEOIP2LINKOBJS}' ])], [ # default AX_SAVE_FLAGS([maxminddb]) MAXMINDDB_CFLAGS="-I$with_maxminddb/include" MAXMINDDB_LIBS="-L$with_maxminddb/lib" CFLAGS="$CFLAGS $MAXMINDDB_CFLAGS" LDFLAGS="$LDFLAGS $MAXMINDDB_LIBS" AC_SEARCH_LIBS([MMDB_open], [maxminddb], [AC_DEFINE([HAVE_GEOIP2], [1], [Build with GeoIP2 support]) GEOIP2LINKSRCS='${GEOIP2LINKSRCS}' GEOIP2LINKOBJS='${GEOIP2LINKOBJS}' MAXMINDDB_LIBS="$MAXMINDDB_LIBS $ac_cv_search_MMDB_open" AC_MSG_NOTICE([GeoIP2 default database path set to $with_maxminddb/share/GeoIP]) AS_VAR_COPY([MAXMINDDB_PREFIX], [with_maxminddb]) ], [AC_MSG_ERROR([GeoIP2 requested, but libmaxminddb not found])]) AX_RESTORE_FLAGS([maxminddb]) ]) AC_ARG_VAR([MAXMINDDB_PREFIX], [value of prefix for MAXMINDDB, overriding pkg-config]) ]) AC_SUBST([MAXMINDDB_CFLAGS]) AC_SUBST([MAXMINDDB_LIBS]) AC_SUBST([GEOIP2LINKSRCS]) AC_SUBST([GEOIP2LINKOBJS]) # # Do we have arc4random(), etc ? # AC_CHECK_FUNCS(arc4random arc4random_buf arc4random_uniform getrandom) AX_PTHREAD LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" CC="$PTHREAD_CC" AC_CHECK_FUNCS([pthread_attr_getstacksize pthread_attr_setstacksize]) # [pairwise: --with-locktype=adaptive, --with-locktype=standard] AC_ARG_WITH([locktype], AS_HELP_STRING([--with-locktype=ARG], [Specify mutex lock type (adaptive or standard)]), [], [with_locktype="adaptive"]) AS_CASE([$with_locktype], [adaptive],[ AC_MSG_CHECKING([for PTHREAD_MUTEX_ADAPTIVE_NP]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif #include ]], [[ return (PTHREAD_MUTEX_ADAPTIVE_NP); ]] )], [AC_MSG_RESULT([using adaptive lock type]) AC_DEFINE([HAVE_PTHREAD_MUTEX_ADAPTIVE_NP], 1, [Support for PTHREAD_MUTEX_ADAPTIVE_NP]) ], [AC_MSG_RESULT([using standard lock type])] )], [standard],[AC_MSG_RESULT([using standard lock type])], [AC_MSG_ERROR([You must specify "adaptive" or "standard" for --with-locktype.])] ) AC_CHECK_HEADERS([sched.h]) AC_SEARCH_LIBS([sched_yield],[rt]) AC_CHECK_FUNCS([sched_yield pthread_yield pthread_yield_np]) # Look for functions relating to thread naming AC_CHECK_FUNCS([pthread_setname_np pthread_set_name_np]) AC_CHECK_HEADERS([pthread_np.h], [], [], [#include ]) # libuv PKG_CHECK_MODULES([LIBUV], [libuv >= 1.37.0], [], [PKG_CHECK_MODULES([LIBUV], [libuv >= 1.0.0 libuv < 1.35.0], [], [AC_MSG_ERROR([libuv >= 1.0.0 (except 1.35.0 and 1.36.0) not found])])]) AX_SAVE_FLAGS([libuv]) CFLAGS="$CFLAGS $LIBUV_CFLAGS" LIBS="$LIBS $LIBUV_LIBS" # libuv recvmmsg support AC_CHECK_DECLS([UV_UDP_MMSG_FREE, UV_UDP_MMSG_CHUNK], [], [], [[#include ]]) AC_MSG_CHECKING([whether struct msghdr uses padding for alignment]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include ], [const struct msghdr h = { .__pad1 = 0, .__pad2 = 0 };])], [AC_MSG_RESULT([yes]) AC_DEFINE([HAVE_DECL_UV_UDP_RECVMMSG], [0], [Disable recvmmsg support on systems with MUSL glibc])], [AC_MSG_RESULT([no]) AC_CHECK_DECLS([UV_UDP_RECVMMSG], [], [], [[#include ]])]) AX_RESTORE_FLAGS([libuv]) # # flockfile is usually provided by pthreads # AC_CHECK_FUNCS([flockfile getc_unlocked]) # # Look for sysconf to allow detection of the number of processors. # AC_CHECK_FUNCS([sysconf]) AC_SUBST(ALWAYS_DEFINES) AC_MSG_CHECKING(for libtool) # [pairwise: --with-libtool, --without-libtool] AC_ARG_WITH(libtool, AS_HELP_STRING([--with-libtool], [use GNU libtool]), use_libtool="$withval", use_libtool="no") NO_LIBTOOL_ISCLIBS= NO_LIBTOOL_DNSLIBS= case $use_libtool in yes) AC_MSG_RESULT(yes) AM_PROG_LIBTOOL O=lo A=la LIBTOOL_MKDEP_SED='s;\.o;\.lo;' LIBTOOL_MODE_COMPILE='--mode=compile' LIBTOOL_MODE_INSTALL='--mode=install' LIBTOOL_MODE_LINK='--mode=link' LIBTOOL_MODE_UNINSTALL='--mode=uninstall' INSTALL_LIBRARY='${INSTALL_PROGRAM}' AC_DEFINE([USE_LIBTOOL],[1],[Define if libtool is used for compilation]) ;; *) AC_MSG_RESULT(no) O=o A=a LIBTOOL= AC_SUBST(LIBTOOL) LIBTOOL_MKDEP_SED= LIBTOOL_MODE_COMPILE= LIBTOOL_MODE_INSTALL= LIBTOOL_MODE_LINK= LIBTOOL_MODE_UNINSTALL= INSTALL_LIBRARY='${INSTALL_DATA}' NO_LIBTOOL_ISCLIBS='${NO_LIBTOOL_ISCLIBS}' NO_LIBTOOL_DNSLIBS='${NO_LIBTOOL_DNSLIBS}' ;; esac AC_SUBST(INSTALL_LIBRARY) AC_SUBST(NO_LIBTOOL_ISCLIBS) AC_SUBST(NO_LIBTOOL_DNSLIBS) # # Do we want to use pthread rwlock? # # [pairwise: --enable-pthread-rwlock, --disable-pthread-rwlock] AC_ARG_ENABLE([pthread_rwlock], [AS_HELP_STRING([--enable-pthread-rwlock], [use pthread rwlock instead of internal rwlock implementation])], [], [enable_pthread_rwlock=no]) AS_IF([test "$enable_pthread_rwlock" = "yes"], [AC_CHECK_FUNCS([pthread_rwlock_rdlock], [], [AC_MSG_ERROR([pthread_rwlock_rdlock requested but not found])]) AC_DEFINE([USE_PTHREAD_RWLOCK],[1],[Define if you want to use pthread rwlock implementation]) ]) CRYPTO=OpenSSL # # OpenSSL/LibreSSL is mandatory # PKG_CHECK_MODULES([OPENSSL], [libssl libcrypto], [], [AX_CHECK_OPENSSL([:],[AC_MSG_FAILURE([OpenSSL/LibreSSL not found])])]) AX_SAVE_FLAGS([openssl]) # # This maintenance branch of BIND 9 does not support new OpenSSL APIs # introduced in version 3.0.0. Suppress compiler warnings about using # functions deprecated in newer OpenSSL versions as they will not be # addressed in BIND 9.16. # OPENSSL_CFLAGS="$OPENSSL_CFLAGS -DOPENSSL_SUPPRESS_DEPRECATED" CFLAGS="$CFLAGS $OPENSSL_CFLAGS" LIBS="$LIBS $OPENSSL_LIBS" AC_MSG_CHECKING([for OpenSSL >= 1.0.0 or LibreSSL >= 2.7.0]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include ]], [[#if (!defined(LIBRESSL_VERSION_NUMBER) && (OPENSSL_VERSION_NUMBER < 0x1000000fL)) || \\ (defined(LIBRESSL_VERSION_NUMBER) && (LIBRESSL_VERSION_NUMBER < 0x02070000fL)) #error OpenSSL >= 1.0.0 or LibreSSL >= 2.7.0 required #endif ]])], [AC_MSG_RESULT([yes])], [AC_MSG_FAILURE([not found])]) # # Check for functions added in OpenSSL or LibreSSL # AC_CHECK_FUNCS([OPENSSL_init_ssl OPENSSL_init_crypto OPENSSL_cleanup]) AC_CHECK_FUNCS([CRYPTO_zalloc]) AC_CHECK_FUNCS([EVP_CIPHER_CTX_new EVP_CIPHER_CTX_free]) AC_CHECK_FUNCS([EVP_MD_CTX_new EVP_MD_CTX_free EVP_MD_CTX_reset]) AC_CHECK_FUNCS([HMAC_CTX_new HMAC_CTX_free HMAC_CTX_reset HMAC_CTX_get_md]) AC_CHECK_FUNCS([SSL_read_ex SSL_peek_ex SSL_write_ex]) AC_CHECK_FUNCS([BIO_read_ex BIO_write_ex]) AC_CHECK_FUNCS([BN_GENCB_new]) AC_CHECK_FUNCS([SSL_CTX_up_ref]) AC_CHECK_FUNCS([SSL_CTX_set_min_proto_version]) # # Check for algorithm support in OpenSSL # AC_CHECK_FUNCS([ECDSA_sign ECDSA_verify], [:], [AC_MSG_FAILURE([ECDSA support in OpenSSL is mandatory.])]) AC_MSG_CHECKING([for ECDSA P-256 support]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include #include ]], [[EC_KEY *key = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);]])], [AC_MSG_RESULT([yes])], [AC_MSG_FAILURE([not found. ECDSA P-256 support in OpenSSL is mandatory.])]) AC_MSG_CHECKING([for ECDSA P-384 support]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include #include ]], [[EC_KEY *key = EC_KEY_new_by_curve_name(NID_secp384r1);]])], [AC_MSG_RESULT([yes])], [AC_MSG_FAILURE([not found. ECDSA P-384 support in OpenSSL is mandatory.])]) AC_MSG_CHECKING([for Ed25519 support]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include #include ]], [[EC_KEY *key = EC_KEY_new_by_curve_name(NID_ED25519);]])], [AC_DEFINE([HAVE_OPENSSL_ED25519], [1], [define if OpenSSL supports Ed25519]) AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) AC_MSG_CHECKING([for Ed448 support]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include #include ]], [[EC_KEY *key = EC_KEY_new_by_curve_name(NID_ED448);]])], [AC_DEFINE([HAVE_OPENSSL_ED448], [1], [define if OpenSSL supports Ed448]) AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) # # Check for OpenSSL SHA-1 support # AC_CHECK_FUNCS([EVP_sha1], [:], [AC_MSG_FAILURE([SHA-1 support in OpenSSL is mandatory.])]) # # Check for OpenSSL SHA-2 support # AC_CHECK_FUNCS([EVP_sha224 EVP_sha256 EVP_sha384 EVP_sha512], [:], [AC_MSG_FAILURE([SHA-2 support in OpenSSL is mandatory.])]) # # Check for OpenSSL AES support # AC_CHECK_FUNCS([EVP_aes_128_ecb EVP_aes_192_ecb EVP_aes_256_ecb], [:], [AC_MSG_FAILURE([AES support in OpenSSL is mandatory.])]) # # Check for OpenSSL 1.1.x/LibreSSL functions # AC_CHECK_FUNCS([DH_get0_key ECDSA_SIG_get0 RSA_set0_key]) AC_CHECK_FUNCS([TLS_server_method TLS_client_method]) # # Check whether FIPS mode is available and whether we should enable it # # FIPS is not included in pairwise testing as the relevant Docker image # does not support FIPS mode. # # [pairwise: skip] AC_ARG_ENABLE([fips-mode], [AS_HELP_STRING([--enable-fips-mode], [enable FIPS mode in OpenSSL library [default=no]])], [], [enable_fips_mode="no"]) AC_MSG_CHECKING([whether to enable FIPS mode in OpenSSL library]) AS_CASE([$enable_fips_mode], [yes], [AC_MSG_RESULT([yes]) AC_CHECK_FUNCS([FIPS_mode], [], [AC_MSG_FAILURE([OpenSSL FIPS mode requested but not available.])])], [no], [AC_MSG_RESULT([no])]) AX_RESTORE_FLAGS([openssl]) AC_SUBST([OPENSSL_CFLAGS]) AC_SUBST([OPENSSL_LIBS]) PKCS11_TOOLS= PKCS11_TEST= PKCS11_MANS= # # was --enable-native-pkcs11 specified? # # DNSRPS builds are included in pairwise testing here and not later because both # --enable-native-pkcs11 and --enable-dnsrps-dl require --with-dlopen and the # ordering of the set of ./configure arguments generated during pairwise testing # is random. # # [pairwise: --enable-native-pkcs11 --enable-dnsrps --enable-dnsrps-dl --with-dlopen, --disable-native-pkcs11 --enable-dnsrps --enable-dnsrps-dl --with-dlopen, --disable-native-pkcs11 --enable-dnsrps --enable-dnsrps-dl --with-dlopen, --disable-native-pkcs11 --disable-dnsrps --without-dlopen] AC_ARG_ENABLE(native-pkcs11, AS_HELP_STRING([--enable-native-pkcs11], [use native PKCS11 for public-key crypto [default=no]]), [:], [enable_native_pkcs11="no"]) AC_MSG_CHECKING([for PKCS11 for Public-Key Cryptography]) AS_CASE([$enable_native_pkcs11], [no],[AC_MSG_RESULT([no])], [yes],[PKCS11_TOOLS=pkcs11 PKCS11_TEST=pkcs11 PKCS11_MANS='${pkcs11_man8_MANS}' CRYPTO=pkcs11 AS_IF([$use_threads], [:], [AC_MSG_ERROR([PKCS11 requires threading support])]) AC_MSG_RESULT([yes]) AC_CHECK_FUNCS([getpassphrase]) ]) AC_SUBST([PKCS11_TEST]) AC_SUBST([PKCS11_TOOLS]) AC_SUBST([PKCS11_MANS]) AC_SUBST([CRYPTO]) AS_CASE([$CRYPTO], [pkcs11],[AC_DEFINE([USE_PKCS11], [1], [define if PKCS11 is used for Public-Key Cryptography])], [AC_DEFINE([USE_OPENSSL], [1], [define if OpenSSL is used for Public-Key Cryptography])]) # preparation for automake # AM_CONDITIONAL([PKCS11_TOOLS], [test "$with_native_pkcs11" = "yes"]) # # was --with-pkcs11 specified? # # [pairwise: skip] AC_ARG_WITH([pkcs11], [AS_HELP_STRING([--with-pkcs11[=PATH]], [Build with PKCS11 support [no|path] (PATH is for the PKCS11 provider)])], [:], [with_pkcs11="undefined"]) AS_CASE([$with_pkcs11], [yes|auto],[AC_MSG_ERROR([--with-pkcs11 needs explicit path to the PKCS11 library])], [no|undefined],[with_pkcs11="undefined"]) AC_DEFINE_UNQUOTED([PK11_LIB_LOCATION], ["$with_pkcs11"], [define the default PKCS11 library path]) # for PKCS11 benchmarks have_clock_gt=no AC_CHECK_FUNC(clock_gettime,have_clock_gt=yes,) if test "no" = "$have_clock_gt"; then AC_CHECK_LIB(rt,clock_gettime,have_clock_gt=rt,) fi if test "no" != "$have_clock_gt"; then AC_DEFINE(HAVE_CLOCK_GETTIME, 1, [Define if clock_gettime is available.]) fi if test "rt" = "$have_clock_gt"; then LIBS="-lrt $LIBS" fi AC_MSG_CHECKING(for GSSAPI library) # [pairwise: --with-gssapi=yes, --with-gssapi=auto, --without-gssapi] AC_ARG_WITH(gssapi, AS_HELP_STRING([--with-gssapi=[PATH|[/path/]krb5-config]], [Specify path for system-supplied GSSAPI [default=auto]]), use_gssapi="$withval", use_gssapi="auto") # first try using krb5-config, if that does not work then fall back to "yes" method. case "$use_gssapi" in */krb5-config|krb5-config) AC_MSG_RESULT(trying $use_gssapi) if test krb5-config = "$use_gssapi" then AC_PATH_PROG(KRB5_CONFIG, $use_gssapi) else KRB5_CONFIG="$use_gssapi" fi gssapi_cflags=`$KRB5_CONFIG --cflags gssapi` gssapi_libs=`$KRB5_CONFIG --libs gssapi` krb5_cflags=`$KRB5_CONFIG --cflags krb5` krb5_libs=`$KRB5_CONFIG --libs krb5` saved_cppflags="$CPPFLAGS" CPPFLAGS="$gssapi_cflags $krb5_cflags $CPPFLAGS" AC_CHECK_HEADERS(gssapi.h gssapi/gssapi.h, [ISC_PLATFORM_GSSAPIHEADER="#define ISC_PLATFORM_GSSAPIHEADER <$ac_header>"]) if test "" = "$ISC_PLATFORM_GSSAPIHEADER"; then AC_MSG_RESULT([krb5-config: gssapi.h not found]) CPPFLAGS="$saved_cppflags" use_gssapi="yes" else AC_CHECK_HEADERS(krb5/krb5.h krb5.h, [ISC_PLATFORM_KRB5HEADER="#define ISC_PLATFORM_KRB5HEADER <$ac_header>"]) if test "" = "$ISC_PLATFORM_KRB5HEADER"; then AC_MSG_RESULT([krb5-config: krb5.h not found]) CPPFLAGS="$saved_cppflags" use_gssapi="yes" else CPPFLAGS="$saved_cppflags" saved_libs="$LIBS" LIBS="$gssapi_libs $krb5_libs $LIBS" AC_MSG_CHECKING([krb5-config linking as $LIBS]) AC_TRY_LINK( , [gss_acquire_cred();krb5_init_context()], gssapi_linked=yes, gssapi_linked=no) case $gssapi_linked in yes) AC_MSG_RESULT([krb5-config: linked]);; no) AC_MSG_RESULT([krb5-config: could not determine proper GSSAPI linkage]) use_gssapi="yes" ;; esac LIBS=$saved_libs fi fi if test "yes" = "$use_gssapi"; then AC_MSG_CHECKING([for GSSAPI library, non krb5-config method]) fi ;; esac case "$host" in *darwin*) if test "yes" = "$use_gssapi" -o "auto" = "$use_gssapi" then use_gssapi=framework fi ;; esac # gssapi is just the framework, we really require kerberos v5, so # look for those headers (the gssapi headers must be there, too) # The problem with this implementation is that it doesn't allow # for the specification of gssapi and krb5 headers in different locations, # which probably ought to be fixed although fixing might raise the issue of # trying to build with incompatible versions of gssapi and krb5. if test "yes" = "$use_gssapi" -o "auto" = "$use_gssapi" then # first, deal with the obvious if test \( -f /usr/include/kerberosv5/krb5.h -o \ -f /usr/include/krb5/krb5.h -o \ -f /usr/include/krb5.h \) -a \ \( -f /usr/include/gssapi.h -o \ -f /usr/include/gssapi/gssapi.h \) then use_gssapi=/usr else krb5dirs="/usr/local /usr/local/krb5 /usr/local/kerberosv5 /usr/local/kerberos /usr/pkg /usr/krb5 /usr/kerberosv5 /usr/kerberos /usr" for d in $krb5dirs do if test -f $d/include/gssapi/gssapi_krb5.h -o \ -f $d/include/krb5.h then if test -f $d/include/gssapi/gssapi.h -o \ -f $d/include/gssapi.h then use_gssapi=$d break fi fi done if test "auto" = "$use_gssapi" then use_gssapi="no" fi fi fi case "$use_gssapi" in no) AC_MSG_RESULT(disabled) USE_GSSAPI='' ;; yes) AC_MSG_ERROR([--with-gssapi must specify a path]) ;; */krb5-config|krb5-config) USE_GSSAPI='-DGSSAPI' DST_GSSAPI_INC="$gssapi_cflags $krb5_cflags" DNS_GSSAPI_LIBS="$gssapi_libs $krb5_libs" ;; framework) USE_GSSAPI='-DGSSAPI' ISC_PLATFORM_GSSAPIHEADER="#define ISC_PLATFORM_GSSAPIHEADER " ISC_PLATFORM_KRB5HEADER="#define ISC_PLATFORM_KRB5HEADER " DNS_GSSAPI_LIBS="-framework Kerberos" AC_MSG_RESULT(framework) ;; *) AC_MSG_RESULT(looking in $use_gssapi/lib) USE_GSSAPI='-DGSSAPI' saved_cppflags="$CPPFLAGS" CPPFLAGS="-I$use_gssapi/include $CPPFLAGS" AC_CHECK_HEADERS(gssapi.h gssapi/gssapi.h, [ISC_PLATFORM_GSSAPIHEADER="#define ISC_PLATFORM_GSSAPIHEADER <$ac_header>" gssapi_hack="#include <$ac_header>"]) if test "" = "$ISC_PLATFORM_GSSAPIHEADER"; then AC_MSG_ERROR([gssapi.h not found]) fi AC_CHECK_HEADERS(gssapi_krb5.h gssapi/gssapi_krb5.h, [ISC_PLATFORM_GSSAPI_KRB5_HEADER="#define ISC_PLATFORM_GSSAPI_KRB5_HEADER <$ac_header>" gssapi_krb5_hack="#include <$ac_header>"]) AC_CHECK_HEADERS(krb5.h krb5/krb5.h kerberosv5/krb5.h, [ISC_PLATFORM_KRB5HEADER="#define ISC_PLATFORM_KRB5HEADER <$ac_header>" krb5_hack="#include <$ac_header>"]) if test "" = "$ISC_PLATFORM_KRB5HEADER"; then AC_MSG_ERROR([krb5.h not found]) fi # # XXXDCL This probably doesn't work right on all systems. # It will need to be worked on as problems become evident. # # Essentially the problems here relate to two different # areas. The first area is building with either KTH # or MIT Kerberos, particularly when both are present on # the machine. The other is static versus dynamic linking. # # On the KTH vs MIT issue, Both have libkrb5 that can mess # up the works if one implementation ends up trying to # use the other's krb. This is unfortunately a situation # that very easily arises. # # Dynamic linking when the dependency information is built # into MIT's libgssapi_krb5 or KTH's libgssapi magically makes # all such problems go away, but when that setup is not # present, because either the dynamic libraries lack # dependencies or static linking is being done, then the # problems start to show up. saved_libs="$LIBS" for TRY_LIBS in \ "-lgssapi_krb5" \ "-lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err" \ "-lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err -lresolv" \ "-lgssapi" \ "-lgssapi -lkrb5 -ldes -lcrypt -lasn1 -lroken -lcom_err" \ "-lgssapi -lkrb5 -lcrypt -lasn1 -lroken -lcom_err" \ "-lgssapi -lkrb5 -lgssapi_krb5 -lcrypt -lasn1 -lroken -lcom_err" \ "-lgssapi -lkrb5 -lhx509 -lcrypt -lasn1 -lroken -lcom_err" \ "-lgss -lkrb5" do # Note that this does not include $saved_libs, because # on FreeBSD machines this configure script has added # -L/usr/local/lib to LIBS, which can make the # -lgssapi_krb5 test succeed with shared libraries even # when you are trying to build with KTH in /usr/lib. if test "/usr" = "$use_gssapi" then LIBS="$TRY_LIBS $ISC_OPENSSL_LIBS" else LIBS="-L$use_gssapi/lib $TRY_LIBS $ISC_OPENSSL_LIBS" fi AC_MSG_CHECKING(linking as $TRY_LIBS) AC_TRY_LINK([ #include $gssapi_hack $gssapi_krb5_hack $krb5_hack ] , [gss_acquire_cred(NULL, NULL, 0, NULL, 0, NULL, NULL, NULL);krb5_init_context(NULL); #if defined(HAVE_GSSAPI_KRB5_H) || defined(HAVE_GSSAPI_GSSAPI_KRB5_H) gsskrb5_register_acceptor_identity(NULL); #endif], gssapi_linked=yes, gssapi_linked=no) case $gssapi_linked in yes) AC_MSG_RESULT(yes); break ;; no) AC_MSG_RESULT(no) ;; esac done CPPFLAGS="$saved_cppflags" case $gssapi_linked in no) AC_MSG_ERROR(could not determine proper GSSAPI linkage) ;; esac # # XXXDCL Major kludge. Tries to cope with KTH in /usr/lib # but MIT in /usr/local/lib and trying to build with KTH. # /usr/local/lib can end up earlier on the link lines. # Like most kludges, this one is not only inelegant it # is also likely to be the wrong thing to do at least as # many times as it is the right thing. Something better # needs to be done. # if test "/usr" = "$use_gssapi" -a \ -f /usr/local/lib/libkrb5.a; then FIX_KTH_VS_MIT=yes fi case "$FIX_KTH_VS_MIT" in yes) case "$enable_static_linking" in yes) gssapi_lib_suffix=".a" ;; *) gssapi_lib_suffix=".so" ;; esac for lib in $LIBS; do case $lib in -L*) ;; -l*) new_lib=`echo $lib | sed -e s%^-l%$use_gssapi/lib/lib% \ -e s%$%$gssapi_lib_suffix%` NEW_LIBS="$NEW_LIBS $new_lib" ;; *) AC_MSG_ERROR([KTH vs MIT Kerberos confusion!]) ;; esac done LIBS="$NEW_LIBS" ;; esac DST_GSSAPI_INC="-I$use_gssapi/include" DNS_GSSAPI_LIBS="$LIBS" AC_MSG_RESULT(using GSSAPI from $use_gssapi/lib and $use_gssapi/include) LIBS="$saved_libs" ;; esac AC_SUBST(ISC_PLATFORM_GSSAPIHEADER) AC_SUBST(ISC_PLATFORM_GSSAPI_KRB5_HEADER) AC_SUBST(ISC_PLATFORM_KRB5HEADER) AC_SUBST(USE_GSSAPI) AC_SUBST(DST_GSSAPI_INC) AC_SUBST(DNS_GSSAPI_LIBS) DNS_CRYPTO_LIBS="$DNS_GSSAPI_LIBS" # # Applications linking with libdns also need to link with these libraries. # AC_SUBST(DNS_CRYPTO_LIBS) # # was --with-lmdb specified? # AC_MSG_CHECKING(for lmdb library) # [pairwise: --with-lmdb=auto, --with-lmdb=yes, --without-lmdb] AC_ARG_WITH(lmdb, AS_HELP_STRING([--with-lmdb[=PATH]], [build with LMDB library [yes|no|path]]), use_lmdb="$withval", use_lmdb="auto") have_lmdb="" case "$use_lmdb" in no) LMDB_LIBS="" ;; auto|yes) for d in /usr /usr/local /opt/local do if test -f "${d}/include/lmdb.h" then if test ${d} != /usr then LMDB_CFLAGS="-I ${d}/include" LMDB_LIBS="-L${d}/lib" fi have_lmdb="yes" fi done ;; *) if test -f "${use_lmdb}/include/lmdb.h" then LMDB_CFLAGS="-I${use_lmdb}/include" LMDB_LIBS="-L${use_lmdb}/lib" have_lmdb="yes" else AC_MSG_ERROR([$use_lmdb/include/lmdb.h not found.]) fi ;; esac if test "X${have_lmdb}" != "X" then AC_MSG_RESULT(yes) AX_SAVE_FLAGS([lmdb]) CFLAGS="$CFLAGS $LMDB_CFLAGS" LIBS="$LIBS $LMDB_LIBS" AC_SEARCH_LIBS([mdb_env_create], [lmdb], [], [AC_MSG_ERROR([found lmdb include but not library.]) have_lmdb=""]) LMDB_LIBS="$LMDB_LIBS $ac_cv_search_mdb_env_create" AX_RESTORE_FLAGS([lmdb]) elif test "X$use_lmdb" = Xyes then AC_MSG_ERROR([include/lmdb.h not found.]) else AC_MSG_RESULT(no) fi AC_SUBST([LMDB_CFLAGS]) AC_SUBST([LMDB_LIBS]) NZD_TOOLS="" NZDSRCS= NZDTARGETS= if test "X${have_lmdb}" != "X" then AC_DEFINE(HAVE_LMDB, 1, [Define if lmdb was found]) NZD_TOOLS="nzd" NZDSRCS='${NZDSRCS}' NZDTARGETS='${NZDTARGETS}' NZD_MANS='${nzd_man8_MANS}' fi AC_SUBST(NZD_TOOLS) AC_SUBST(NZDSRCS) AC_SUBST(NZDTARGETS) AC_SUBST(NZD_MANS) # # was --with-libxml2 specified? # # [pairwise: --with-libxml2=auto, --with-libxml2=yes, --without-libxml2] AC_ARG_WITH([libxml2], [AS_HELP_STRING([--with-libxml2], [build with libxml2 library [yes|no|auto] (default is auto)])], [], [with_libxml2="auto"]) AS_CASE([$with_libxml2], [no],[], [auto],[PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.6.0], [AC_DEFINE([HAVE_LIBXML2], [1], [Use libxml2 library])], [:])], [yes],[PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.6.0], [AC_DEFINE([HAVE_LIBXML2], [1], [Use libxml2 library])])], [AC_MSG_ERROR([Specifying libxml2 installation path is not supported, adjust PKG_CONFIG_PATH instead])]) # # DEPRECATED # # [pairwise: skip] AC_ARG_WITH([libjson], [AS_HELP_STRING([--with-libjson], [deprecated, use --with-json-c])], [AC_MSG_WARN([--with-libjson is DEPRECATED and will be removed in a future release, use --with-json-c instead])], [with_libjson="detect"]) # # was --with-json-c specified? # # [pairwise: --with-json-c=detect, --with-json-c=yes, --without-json-c] AC_ARG_WITH([json-c], [AS_HELP_STRING([--with-json-c], [build with json-c library [yes|no|detect] (default is detect)])], [], [with_json_c="$with_libjson"]) AS_CASE([$with_json_c], [no],[], [detect],[PKG_CHECK_MODULES([JSON_C], [json-c >= 0.11], [AC_DEFINE([HAVE_JSON_C], [1], [Use json-c library])], [:])], [yes],[PKG_CHECK_MODULES([JSON_C], [json-c >= 0.11], [AC_DEFINE([HAVE_JSON_C], [1], [Use json-c library])])], [AC_MSG_ERROR([Specifying json-c installation path is not supported, adjust PKG_CONFIG_PATH instead])] ) AC_SUBST([JSON_C_CFLAGS]) AC_SUBST([JSON_C_LIBS]) # [pairwise: --with-zlib=auto, --with-zlib=yes, --without-zlib] AC_ARG_WITH([zlib], [AS_HELP_STRING([--with-zlib], [build with zlib for HTTP compression [default=yes]])], [], with_zlib="auto") AS_CASE([$with_zlib], [no],[], [auto],[PKG_CHECK_MODULES([ZLIB], [zlib], [AC_DEFINE([HAVE_ZLIB], [1], [Use zlib library])], [:])], [yes],[PKG_CHECK_MODULES([ZLIB], [zlib], [AC_DEFINE([HAVE_ZLIB], [1], [Use zlib library])])], [AC_MSG_ERROR([Specifying zlib installation path is not supported, adjust PKG_CONFIG_PATH instead])]) AC_SUBST([ZLIB_CFLAGS]) AC_SUBST([ZLIB_LIBS]) # # In solaris 10, SMF can manage named service # AC_CHECK_LIB(scf, smf_enable_instance) # # Additional compiler settings. # MKDEPCC="$CC" MKDEPCFLAGS="-M" AS_CASE([$host], [*-solaris*],[ AS_IF([test "$GCC" != "yes"], [MKDEPCFLAGS="-xM"])]) AS_IF([test "$GCC" = "yes"], [STD_CWARNINGS="$STD_CWARNINGS -W -Wall -Wmissing-prototypes -Wcast-qual -Wwrite-strings -Wformat -Wpointer-arith -Wno-missing-field-initializers"] ) AX_CHECK_COMPILE_FLAG([-fno-strict-aliasing], [STD_CWARNINGS="$STD_CWARNINGS -fno-strict-aliasing"]) AX_CHECK_COMPILE_FLAG([-Werror -fno-delete-null-pointer-checks], [STC_CWARNINGS="$STD_CWARNINGS -fno-delete-null-pointer-checks"]) AS_IF([test "$enable_warn_shadow" = "yes"], [AX_CHECK_COMPILE_FLAG([-Wshadow], [STD_CWARNINGS="$STD_CWARNINGS -Wshadow"])]) AS_IF([test "$enable_warn_error" = "yes"], [AX_CHECK_COMPILE_FLAG([-Werror], [STD_CWARNINGS="$STD_CWARNINGS -Werror"])]) AC_SUBST([MKDEPCC]) AC_SUBST([MKDEPCFLAGS]) AC_SUBST([MKDEPPROG]) # # -lxnet buys us one big porting headache... standards, gotta love 'em. # # AC_CHECK_LIB(xnet, socket, , # AC_CHECK_LIB(socket, socket) # ) # # Use this for now, instead: # case "$host" in *-linux*) ;; *) AC_CHECK_LIB(socket, socket) AC_CHECK_LIB(nsl, inet_addr) ;; esac # # Work around Solaris's select() limitations. # case "$host" in *-solaris2.[[89]]|*-solaris2.1?) AC_DEFINE(FD_SETSIZE, 65536, [Solaris hack to get select_large_fdset.]) ;; esac # # Purify support # AC_MSG_CHECKING(whether to use purify) # Purify is not included in pairwise testing as that tool is not present # in the relevant Docker image. # # [pairwise: skip] AC_ARG_WITH(purify, AS_HELP_STRING([--with-purify[=PATH]],[use Rational purify]), use_purify="$withval", use_purify="no") case "$use_purify" in no) ;; yes) AC_PATH_PROG(purify_path, purify, purify) ;; *) purify_path="$use_purify" ;; esac case "$use_purify" in no) AC_MSG_RESULT(no) PURIFY="" ;; *) if test -f "$purify_path" || test purify = "$purify_path"; then AC_MSG_RESULT($purify_path) PURIFYFLAGS="`echo $PURIFYOPTIONS`" PURIFY="$purify_path $PURIFYFLAGS" else AC_MSG_ERROR([$purify_path not found. Please choose the proper path with the following command: configure --with-purify=PATH ]) fi ;; esac AC_SUBST(PURIFY) # # Google/Great Performance Tools CPU Profiler # AC_MSG_CHECKING(whether to use gperftools profiler) # Google/Great Performance Tools CPU Profiler is not included in # pairwise testing as that tool is not present in the relevant Docker # image. # # [pairwise: skip] AC_ARG_WITH(gperftools-profiler, AS_HELP_STRING([--with-gperftools-profiler], [use gperftools CPU profiler]), use_profiler="$withval", use_profiler="no") case $use_profiler in yes) AC_MSG_RESULT(yes) AC_DEFINE([HAVE_GPERFTOOLS_PROFILER], 1, [Define to use gperftools CPU profiler.]) LIBS="$LIBS -lprofiler" ;; *) AC_MSG_RESULT(no) ;; esac # # enable/disable dumping stack backtrace. Also check if the system supports # glibc-compatible backtrace() function. # # [pairwise: --enable-backtrace, --disable-backtrace] AC_ARG_ENABLE([backtrace], [AS_HELP_STRING([--enable-backtrace], [log stack backtrace on abort [default=yes]])], [], [enable_backtrace="yes"]) AS_IF([test "$enable_backtrace" = "yes"], [AC_DEFINE([USE_BACKTRACE], [1], [define if we can use backtrace]) AC_CHECK_LIB(execinfo,backtrace,EXILIBS=-lexecinfo,EXILIBS=) LIBS="$LIBS $EXILIBS" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[return (backtrace((void **)0, 0));]] )], [AC_DEFINE([HAVE_LIBCTRACE], [1], [define if system have backtrace function])], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[return _Unwind_Backtrace(NULL, NULL);]] )], [AC_DEFINE([HAVE_UNWIND_BACKTRACE], [1], [define if the compiler supports _Unwind_Backtrace()])] )] )]) # [pairwise: --enable-symtable, --disable-symtable] AC_ARG_ENABLE(symtable, AS_HELP_STRING([--enable-symtable], [use internal symbol table for backtrace [all|minimal(default)|none]]), want_symtable="$enableval", want_symtable="minimal") case $want_symtable in yes|all|minimal) # "yes" is a hidden value equivalent to "minimal" if test "" = "$PERL" then AC_MSG_ERROR([Internal symbol table requires perl but no perl is found. Install perl or explicitly disable the feature by --disable-symtable.]) fi if test "yes" = "$use_libtool"; then AC_MSG_WARN([Internal symbol table does not work with libtool. Disabling symbol table.]) else # we generate the internal symbol table only for those systems # known to work to avoid unexpected build failure. Also, warn # about unsupported systems when the feature is enabled # manually. case $host_os in freebsd*|netbsd*|openbsd*|linux*|solaris*|darwin*) MKSYMTBL_PROGRAM="$PERL" if test "all" = "$want_symtable"; then ALWAYS_MAKE_SYMTABLE="yes" fi ;; *) if test "yes" = "$want_symtable" -o "all" = "$want_symtable" then AC_MSG_WARN([this system is not known to generate internal symbol table safely; disabling it]) fi esac fi ;; *) ;; esac AC_SUBST(MKSYMTBL_PROGRAM) AC_SUBST(ALWAYS_MAKE_SYMTABLE) # # File name extension for static archive files, for those few places # where they are treated differently from dynamic ones. # SA=a AC_SUBST(O) AC_SUBST(A) AC_SUBST(SA) AC_SUBST(LIBTOOL_MKDEP_SED) AC_SUBST(LIBTOOL_MODE_COMPILE) AC_SUBST(LIBTOOL_MODE_INSTALL) AC_SUBST(LIBTOOL_MODE_LINK) AC_SUBST(LIBTOOL_MODE_UNINSTALL) BIND9_CO_RULE=".c.$O:" AC_SUBST(BIND9_CO_RULE) # # Here begins a very long section to determine the system's networking # capabilities. The order of the tests is significant. # # # We do the IPv6 compilation checking after libtool so that we can put # the right suffix on the files. # AC_MSG_CHECKING([for IPv6 structures]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include #include #include ]], [[ struct sockaddr_in6 sin6; struct in6_addr in6; struct in6_pktinfo in6_pi; struct sockaddr_storage storage; in6 = in6addr_any; in6 = in6addr_loopback; sin6.sin6_scope_id = 0; return (0); ]])], [AC_MSG_RESULT([yes])], [AC_MSG_FAILURE([IPv6 support is mandatory])]) # # Allow forcibly disabling TCP Fast Open support as autodetection might yield # confusing results on some systems (e.g. FreeBSD; see set_tcp_fastopen() # comment in lib/isc/unix/socket.c). # # [pairwise: --enable-tcp-fastopen, --disable-tcp-fastopen] AC_ARG_ENABLE([tcp_fastopen], [AS_HELP_STRING([--disable-tcp-fastopen], [disable TCP Fast Open support [default=yes]])], [], [enable_tcp_fastopen="yes"]) AS_IF([test "$enable_tcp_fastopen" = "yes"], [AC_DEFINE([ENABLE_TCP_FASTOPEN], [1], [define if you want TCP_FASTOPEN enabled if available])]) # # Check for some other useful functions that are not ever-present. # AC_CHECK_FUNCS([strlcpy strlcat strnstr]) AC_SUBST(READLINE_LIB) # [pairwise: --with-readline=auto, --with-readline=yes, --without-readline] AC_ARG_WITH(readline, AS_HELP_STRING([--with-readline[=LIBSPEC]], [specify readline library [default auto]]), use_readline="$withval", use_readline="auto") case "$use_readline" in no) ;; *) saved_LIBS="$LIBS" case "$use_readline" in yes|auto) try_readline="-ledit"; or_readline="-lreadline" ;; *) try_readline="$use_readline" esac for readline in "$try_readline" $or_readline do LIBS="$readline" AC_MSG_NOTICE(checking for readline with $readline) AC_CHECK_FUNCS(readline) if test "yes" = "$ac_cv_func_readline" then READLINE_LIB="$readline" break fi for lib in -lterminfo -ltermcap -lncurses -lcurses do AC_MSG_NOTICE(checking for readline with $readline $lib) unset ac_cv_func_readline LIBS="$readline $lib" AC_CHECK_FUNCS(readline) if test "yes" = "$ac_cv_func_readline" then READLINE_LIB="$readline $lib" break fi done if test "yes" = "$ac_cv_func_readline" then break fi done if test "auto" != "$use_readline" && test "X$READLINE_LIB" = "X" then AC_MSG_ERROR([The readline library was not found.]) fi LIBS="$saved_LIBS" ;; esac if test "yes" = "$ac_cv_func_readline" then case "$READLINE_LIB" in *edit*) AC_CHECK_HEADERS(editline/readline.h) AC_CHECK_HEADERS(edit/readline/readline.h) AC_CHECK_HEADERS(edit/readline/history.h) ;; esac AC_CHECK_HEADERS(readline/readline.h) AC_CHECK_HEADERS(readline/history.h) fi AC_SUBST(DST_EXTRA_OBJS) AC_SUBST(DST_EXTRA_SRCS) # # Security Stuff # # Note it is very recommended to *not* disable chroot(), # this is only because chroot() was made obsolete by Posix. # # [pairwise: --enable-chroot, --disable-chroot] AC_ARG_ENABLE(chroot, AS_HELP_STRING([--disable-chroot], [disable chroot])) case "$enable_chroot" in yes|'') AC_CHECK_FUNCS(chroot) ;; no) ;; esac LIBCAP_LIBS="" AC_MSG_CHECKING([whether to enable Linux capabilities]) # [pairwise: --enable-linux-caps, --disable-linux-caps] AC_ARG_ENABLE([linux-caps], [AS_HELP_STRING([--disable-linux-caps], [disable Linux capabilities])], [], [AS_CASE([$host], [*-linux*],[enable_linux_caps=yes], [enable_linux_caps=no])]) AS_IF([test "$enable_linux_caps" = "yes"], [AC_MSG_RESULT([yes]) AC_CHECK_HEADERS([sys/capability.h], [], [AC_MSG_ERROR(m4_normalize([sys/capability.h header is required for Linux capabilities support. Either install libcap or use --disable-linux-caps.]))]) AX_SAVE_FLAGS([cap]) AC_SEARCH_LIBS([cap_set_proc], [cap], [LIBCAP_LIBS="$ac_cv_search_cap_set_proc"], [AC_MSG_ERROR(m4_normalize([libcap is required for Linux capabilities support. Either install libcap or use --disable-linux-caps.]))]) AX_RESTORE_FLAGS([cap])], [AC_MSG_RESULT([no])]) AC_SUBST([LIBCAP_LIBS]) AC_CHECK_HEADERS(sys/un.h, ISC_PLATFORM_HAVESYSUNH="#define ISC_PLATFORM_HAVESYSUNH 1" , ISC_PLATFORM_HAVESYSUNH="#undef ISC_PLATFORM_HAVESYSUNH" ) AC_SUBST(ISC_PLATFORM_HAVESYSUNH) case "$host" in *-solaris*) AC_DEFINE(NEED_SECURE_DIRECTORY, 1, [Define if connect does not honour the permission on the UNIX domain socket.]) ;; esac # # Time Zone Stuff # AC_CHECK_FUNCS([tzset]) AC_MSG_CHECKING(for optarg declaration) AC_TRY_COMPILE([ #include ], [optarg = 0;], [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no) GEN_NEED_OPTARG="-DNEED_OPTARG=1" AC_DEFINE(NEED_OPTARG, 1, [Defined if extern char *optarg is not declared.])]) # # Check for nanoseconds in file stats # AC_MSG_CHECKING([for st_mtim.tv_nsec]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[struct stat s; return(s.st_mtim.tv_nsec); ]])], [AC_DEFINE([HAVE_STAT_NSEC], [1], [define if struct stat has st_mtim.tv_nsec field])]) # # Check for if_nametoindex() for IPv6 scoped addresses support # AC_CHECK_FUNCS([if_nametoindex]) ISC_ATOMIC_LIBS="" AC_CHECK_HEADERS( [stdatomic.h], [AC_MSG_CHECKING([for memory model aware atomic operations]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[atomic_int_fast32_t val = 0; atomic_fetch_add_explicit(&val, 1, memory_order_relaxed);]] )], [AC_MSG_RESULT([stdatomic.h]) AC_MSG_CHECKING([whether -latomic is needed for 64-bit stdatomic.h functions]) AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[atomic_int_fast64_t val = 0; atomic_fetch_add_explicit(&val, 1, memory_order_relaxed);]] )], [AC_MSG_RESULT([no])], [ISC_ATOMIC_LIBS="-latomic" AX_SAVE_FLAGS([atomic]) LIBS="$LIBS $ISC_ATOMIC_LIBS" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[atomic_int_fast64_t val = 0; atomic_fetch_add_explicit(&val, 1, memory_order_relaxed);]] )], [AC_MSG_RESULT([yes])], [AC_MSG_FAILURE([libatomic needed, but linking with -latomic failed, please fix your toolchain.])]) AX_RESTORE_FLAGS([atomic]) ]) ], [AC_MSG_FAILURE([stdatomic.h header found, but compilation failed, please fix your toolchain.])] )], [AC_MSG_CHECKING([for memory model aware atomic operations]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[int32_t val = 0; __atomic_fetch_add(&val, 1, __ATOMIC_RELAXED);]] )], [AC_MSG_RESULT([__atomic builtins]) AC_DEFINE([HAVE___ATOMIC], [1], [define if __atomic builtins are not available]) AC_MSG_CHECKING([whether -latomic is needed for 64-bit __atomic builtins]) AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[int64_t val = 0; __atomic_fetch_add(&val, 1, __ATOMIC_RELAXED);]] )], [AC_MSG_RESULT([no])], [ISC_ATOMIC_LIBS="-latomic" AX_SAVE_FLAGS([atomic]) LIBS="$LIBS $ISC_ATOMIC_LIBS" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[int64_t val = 0; __atomic_fetch_add(&val, 1, __ATOMIC_RELAXED);]] )], [AC_MSG_RESULT([yes])], [AC_MSG_FAILURE([libatomic needed, but linking with -latomic failed, please fix your toolchain.])]) AX_RESTORE_FLAGS([atomic]) ]) ], [AC_MSG_RESULT([__sync builtins]) ]) ]) LIBS="$LIBS $ISC_ATOMIC_LIBS" AC_CHECK_HEADERS([stdalign.h]) AC_CHECK_HEADERS([uchar.h]) # # Check for __builtin_unreachable # AC_MSG_CHECKING([compiler support for __builtin_unreachable()]) AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[]], [[__builtin_unreachable();]] )], [AC_MSG_RESULT([yes]) AC_DEFINE([HAVE_BUILTIN_UNREACHABLE], [1], [define if the compiler supports __builtin_unreachable().]) ], [AC_MSG_RESULT([no]) ]) # # Check for __builtin_expect # AC_MSG_CHECKING([compiler support for __builtin_expect]) AC_TRY_LINK(, [ return (__builtin_expect(1, 1) ? 1 : 0); ], [ have_builtin_expect=yes AC_MSG_RESULT(yes) ], [ have_builtin_expect=no AC_MSG_RESULT(no) ]) if test "yes" = "$have_builtin_expect"; then AC_DEFINE(HAVE_BUILTIN_EXPECT, 1, [Define to 1 if the compiler supports __builtin_expect.]) fi # # Check for __builtin_clz # AC_MSG_CHECKING([compiler support for __builtin_clz]) AC_TRY_LINK(, [ return (__builtin_clz(0xff) == 24 ? 1 : 0); ], [ have_builtin_clz=yes AC_MSG_RESULT(yes) ], [ have_builtin_clz=no AC_MSG_RESULT(no) ]) if test "yes" = "$have_builtin_clz"; then AC_DEFINE(HAVE_BUILTIN_CLZ, 1, [Define to 1 if the compiler supports __builtin_clz.]) fi # # Activate "rrset-order fixed" or not? # # [pairwise: --enable-fixed-rrset, --disable-fixed-rrset] AC_ARG_ENABLE(fixed-rrset, AS_HELP_STRING([--enable-fixed-rrset], [enable fixed rrset ordering [default=no]]), enable_fixed="$enableval", enable_fixed="no") case "$enable_fixed" in yes) AC_DEFINE(DNS_RDATASET_FIXED, 1, [Define to enable "rrset-order fixed" syntax.]) ;; no) ;; *) ;; esac # # Activate dnstap? # # [pairwise: --enable-dnstap, --disable-dnstap] AC_ARG_ENABLE(dnstap, AS_HELP_STRING([--enable-dnstap], [enable dnstap support (requires fstrm, protobuf-c)]), use_dnstap=$enableval, use_dnstap=no) DNSTAP= DNSTAPSRCS= DNSTAPOBJS= DNSTAPTARGETS= if test "x$use_dnstap" != "xno"; then # [pairwise: skip] AC_ARG_WITH([protobuf-c], AS_HELP_STRING([--with-protobuf-c=path], [Path where protobuf-c is installed, for dnstap]), [ # workaround for protobuf-c includes at old dir # before protobuf-c-1.0.0 if test -f $withval/include/google/protobuf-c/protobuf-c.h then PROTOBUF_C_CFLAGS="-I$withval/include/google" else PROTOBUF_C_CFLAGS="-I$withval/include" fi PROTOBUF_C_LIBS="-L$withval/lib" AC_PATH_PROG([PROTOC_C], [protoc-c], [], [$PATH$PATH_SEPARATOR$withval/bin]) ], [ # workaround for protobuf-c includes at old dir # before protobuf-c-1.0.0 if test -f /usr/include/google/protobuf-c/protobuf-c.h then PROTOBUF_C_CFLAGS="-I/usr/include/google" else if test -f /usr/local/include/google/protobuf-c/protobuf-c.h then PROTOBUF_C_CFLAGS="-I/usr/local/include/google" PROTOBUF_C_LIBS="-L/usr/local/lib" elif test -f /opt/local/include/google/protobuf-c/protobuf-c.h then PROTOBUF_C_CFLAGS="-I/opt/local/include/google" PROTOBUF_C_LIBS="-L/opt/local/lib" fi fi AC_PATH_PROG([PROTOC_C],[protoc-c]) ]) if test -z "$PROTOC_C"; then AC_MSG_ERROR([The protoc-c program was not found.]) fi # [pairwise: skip] AC_ARG_WITH([libfstrm], AS_HELP_STRING([--with-libfstrm=path], [Path where libfstrm is installed, for dnstap]), [ FSTRM_CFLAGS="-I$withval/include" FSTRM_LIBS="-L$withval/lib" AC_PATH_PROG([FSTRM_CAPTURE], [fstrm_capture], [], [$PATH$PATH_SEPARATOR$withval/bin]) ],[ for d in /usr /usr/local /opt/local do if test -f "${d}/include/fstrm.h" then if test ${d} != /usr then FSTRM_CFLAGS="-I${d}/include" FSTRM_LIBS="-L${d}/lib" fi have_fstrm="$d" break fi done if test -z "$have_fstrm"; then AC_PATH_PROG([FSTRM_CAPTURE], [fstrm_capture]) else AC_PATH_PROG([FSTRM_CAPTURE], [fstrm_capture], [], [$PATH$PATH_SEPARATOR$have_fstrm/bin]) fi ]) AX_SAVE_FLAGS([dnstap]) CFLAGS="$CFLAGS $PROTOBUF_C_CFLAGS $FSTRM_CFLAGS" LIBS="$LDFLAGS $PROTOBUF_C_LIBS $FSTRM_LIBS" AC_SEARCH_LIBS([fstrm_iothr_init], [fstrm], [], AC_MSG_ERROR([The fstrm library was not found. Please install fstrm!])) FSTRM_LIBS="$FSTRM_LIBS $ac_cv_search_fstrm_iothr_init" AC_SEARCH_LIBS([protobuf_c_message_pack], [protobuf-c], [], AC_MSG_ERROR([The protobuf-c library was not found. Please install protobuf-c!])) PROTOBUF_C_LIBS="$PROTOBUF_C_LIBS $ac_cv_search_protobuf_c_message_pack" AX_RESTORE_FLAGS([dnstap]) AC_DEFINE(HAVE_DNSTAP, 1, [Define to 1 to enable dnstap support]) DNSTAP=dnstap DNSTAPSRCS='${DNSTAPSRCS}' DNSTAPOBJS='${DNSTAPOBJS}' DNSTAPTARGETS='${DNSTAPTARGETS}' DNSTAP_MANS='${dnstap_man1_MANS}' fi AC_SUBST(DNSTAP) AC_SUBST(DNSTAPSRCS) AC_SUBST(DNSTAPOBJS) AC_SUBST(DNSTAPTARGETS) AC_SUBST(DNSTAP_MANS) AC_SUBST([PROTOBUF_C_CFLAGS]) AC_SUBST([PROTOBUF_C_LIBS]) AC_SUBST([FSTRM_CFLAGS]) AC_SUBST([FSTRM_LIBS]) # # The following sets up how non-blocking i/o is established. # cygwin and solaris 2.x (x<5) require special handling. # case "$host" in *-cygwin*) AC_DEFINE(PORT_NONBLOCK, O_NDELAY);; *-solaris2.[[01234]]) AC_DEFINE(PORT_NONBLOCK, O_NONBLOCK) AC_DEFINE(USE_FIONBIO_IOCTL, 1, [Defined if you need to use ioctl(FIONBIO) instead a fcntl call to make non-blocking.]) ;; *) AC_DEFINE(PORT_NONBLOCK, O_NONBLOCK, [Sets which flag to pass to open/fcntl to make non-blocking (O_NDELAY/O_NONBLOCK).]) ;; esac # # Solaris 2.5.1 and earlier cannot bind() then connect() a TCP socket. # This prevents the source address being set. # case "$host" in *-solaris2.[[012345]]|*-solaris2.5.1) AC_DEFINE(BROKEN_TCP_BIND_BEFORE_CONNECT, 1, [Define if you cannot bind() before connect() for TCP sockets.]) ;; esac # # The following sections deal with tools used for formatting # the documentation. They are all optional, unless you are # a developer editing the documentation source. # # # The following sections deal with tools used for formatting # the documentation. They are all optional, unless you are # a developer editing the documentation source. # # # Look for sphinx-build # AC_ARG_VAR([SPHINX_BUILD], [path to sphinx-build binary used to build the documentation]) AC_PATH_PROG([SPHINX_BUILD], [sphinx-build], [:]) AM_CONDITIONAL([HAVE_SPHINX_BUILD], [test "$SPHINX_BUILD" != ":"]) AC_PATH_PROG([XELATEX], [xelatex], [:]) AC_PATH_PROG([LATEXMK], [latexmk], [:]) AM_CONDITIONAL([HAVE_XELATEX], [test "$XELATEX" != ":" && test "$LATEXMK" != ":"]) # # Build the man pages only if we have prebuilt manpages or we can build them from RST sources # BUILD_MANPAGES= AS_IF([test -e doc/man/named.conf.5in || test "$SPHINX_BUILD" != ":"], [BUILD_MANPAGES=man]) AC_SUBST([BUILD_MANPAGES]) # # Pull release date from CHANGES file last modification date # for reproducible builds # release_date=`date -u -r CHANGES +%Y-%m-%d` AC_SUBST([RELEASE_DATE], $release_date) # Don't build the documentation if the sphinx-build is not present PDFTARGET= HTMLTARGET= MANSRCS= AS_IF([test -n "$SPHINX_BUILD"],[ MANSRCS='$(MANPAGES_IN)' HTMLTARGET='html dirhtml' AC_PATH_PROGS([PDFLATEX], [pdflatex], []) AC_PATH_PROGS([LATEXMK], [latexmk], []) AS_IF([test -n "$PDFLATEX" && test -n "$LATEXMK"],[ PDFTARGET='pdf' ]) ]) AC_SUBST([HTMLTARGET]) AC_SUBST([PDFTARGET]) AC_SUBST([MANSRCS]) # # Look for Doxygen # AC_PATH_PROGS([DOXYGEN], [doxygen]) AC_SUBST(DOXYGEN) # # Look for curl # AC_PATH_PROG(CURL, curl, curl) AC_SUBST(CURL) # # Look for xsltproc # AC_PATH_PROG(XSLTPROC, xsltproc, xsltproc) AC_SUBST(XSLTPROC) # # IDN support using libidn2 # LIBIDN2_CFLAGS= LIBIDN2_LDFLAGS= LIBIDN2_LIBS= # [pairwise: --with-libidn2=yes, --without-libidn2] AC_ARG_WITH([libidn2], [AS_HELP_STRING([--with-libidn2[=PATH]], [enable IDN support using GNU libidn2 [yes|no(default)|path]])], [with_libidn2="$withval"], [with_libidn2="no"]) AS_CASE([$with_libidn2], [yes], [PKG_CHECK_MODULES([LIBIDN2], [libidn2], [AC_DEFINE([HAVE_LIBIDN2], [1], [Define if libidn2 was found])])], [no], [], [*], [AX_SAVE_FLAGS([libidn2]) LIBIDN2_CFLAGS="-I$with_libidn2/include" LIBIDN2_LDFLAGS="-L$with_libidn2/lib" CFLAGS="$LIBIDN2_CFLAGS $CFLAGS" CPPFLAGS="$LIBIDN2_CFLAGS $CPPFLAGS" LDFLAGS="$LIBIDN2_LDFLAGS $LDFLAGS" AC_CHECK_HEADERS([idn2.h], [], [AC_MSG_ERROR([idn2.h not found])]) AC_SEARCH_LIBS([idn2_to_ascii_lz], [idn2], [LIBIDN2_LIBS="$ac_cv_search_idn2_to_ascii_lz" AC_DEFINE([HAVE_LIBIDN2], [1], [Define if libidn2 was found])], [AC_MSG_ERROR([libidn2 requested, but not found])]) AX_RESTORE_FLAGS([libidn2])]) AC_SUBST([LIBIDN2_CFLAGS]) AC_SUBST([LIBIDN2_LDFLAGS]) AC_SUBST([LIBIDN2_LIBS]) # # Check whether to build with cmocka unit testing framework # # [pairwise: --with-cmocka=detect, --with-cmocka=yes, --without-cmocka] AC_ARG_WITH([cmocka], [AS_HELP_STRING([--with-cmocka=detect],[enable CMocka based tests (default is detect)])], [],[with_cmocka=detect]) AS_CASE([$with_cmocka], [no],[], [detect],[PKG_CHECK_MODULES([CMOCKA], [cmocka >= 1.1.3], [AC_DEFINE([HAVE_CMOCKA], [1], [Use CMocka]) with_cmocka=yes],[with_cmocka=no])], [yes],[PKG_CHECK_MODULES([CMOCKA], [cmocka >= 1.1.3], [AC_DEFINE([HAVE_CMOCKA], [1], [Use CMocka])])], [AC_MSG_ERROR([Use PKG_CONFIG_PATH to specify path to CMocka library])] ) AC_SUBST([CMOCKA_CFLAGS]) AC_SUBST([CMOCKA_LIBS]) AC_DEFINE([SKIPPED_TEST_EXIT_CODE], [0], [Exit code for skipped tests]) # # Check for kyua execution engine if CMocka was requested # and bail out if execution engine was not found # AC_ARG_VAR([KYUA], [path to kyua execution engine]) AS_IF([test "$with_cmocka" != "no"], [AC_PATH_PROGS([KYUA], [kyua], []) AS_IF([test -z "$KYUA"], [AC_MSG_WARN([kyua test execution engine not found])], [UNITTESTS=tests])]) AC_SUBST([KYUA]) AC_SUBST([UNITTESTS]) # # Check for -Wl,--wrap= support # LD_WRAP_TESTS=false AC_MSG_CHECKING([for linker support for --wrap option]) AX_SAVE_FLAGS([wrap]) LDFLAGS="-Wl,--wrap,exit" AC_LINK_IFELSE( [AC_LANG_PROGRAM([[#include void __real_exit (int status); void __wrap_exit (int status) { __real_exit (0); } ]], [[exit (1);]])], [LD_WRAP_TESTS=true AC_DEFINE([LD_WRAP], [1], [define if the linker supports --wrap option]) AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) AX_RESTORE_FLAGS([wrap]) AC_SUBST([LD_WRAP_TESTS]) # # Check for i18n # AC_CHECK_HEADERS(locale.h) AC_CHECK_FUNCS(setlocale) # # was --with-tuning specified? # # [pairwise: --with-tuning=small, --without-tuning] AC_ARG_WITH([tuning], AS_HELP_STRING([--with-tuning=ARG], [Specify server tuning (default or small)]), [],[with_tuning=no]) AS_CASE([$with_tuning], [small],[AC_MSG_NOTICE(using small system tuning)], [AC_DEFINE(TUNE_LARGE, 1, [Define to use default system tuning.]) AC_MSG_NOTICE(using default system tuning)]) # # was --enable-querytrace specified? # # [pairwise: --enable-querytrace, --disable-querytrace] AC_ARG_ENABLE(querytrace, AS_HELP_STRING([--enable-querytrace], [enable very verbose query trace logging [default=no]]), want_querytrace="$enableval", want_querytrace="no") AC_MSG_CHECKING([whether to enable query trace logging]) case "$want_querytrace" in yes) AC_MSG_RESULT(yes) AC_DEFINE(WANT_QUERYTRACE, 1, [Define to enable very verbose query trace logging.]) ;; no) AC_MSG_RESULT(no) ;; *) AC_MSG_ERROR("--enable-querytrace requires yes or no") ;; esac # # Was --disable-auto-validation specified? # validation_default=auto # [pairwise: --enable-auto-validation, --disable-auto-validation] AC_ARG_ENABLE(auto-validation, AS_HELP_STRING([--enable-auto-validation], [turn on DNSSEC validation by default, using the IANA root key [default=yes]]), [:],[enable_auto_validation=yes]) AS_IF([test "$enable_auto_validation" = "no"],[validation_default=yes]) AC_DEFINE_UNQUOTED([VALIDATION_DEFAULT], ["$validation_default"], [the default value of dnssec-validation option]) # # Substitutions # AC_SUBST(BIND9_TOP_BUILDDIR) BIND9_TOP_BUILDDIR=`pwd` AC_SUBST(BIND9_ISC_BUILDINCLUDE) AC_SUBST(BIND9_ISCCC_BUILDINCLUDE) AC_SUBST(BIND9_ISCCFG_BUILDINCLUDE) AC_SUBST(BIND9_DNS_BUILDINCLUDE) AC_SUBST(BIND9_NS_BUILDINCLUDE) AC_SUBST(BIND9_BIND9_BUILDINCLUDE) AC_SUBST(BIND9_IRS_BUILDINCLUDE) if test "X$srcdir" != "X"; then BIND9_ISC_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/isc/include" BIND9_ISCCC_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/isccc/include" BIND9_ISCCFG_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/isccfg/include" BIND9_DNS_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/dns/include" BIND9_NS_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/ns/include" BIND9_BIND9_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/bind9/include" BIND9_IRS_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/irs/include" else BIND9_ISC_BUILDINCLUDE="" BIND9_ISCCC_BUILDINCLUDE="" BIND9_ISCCFG_BUILDINCLUDE="" BIND9_DNS_BUILDINCLUDE="" BIND9_NS_BUILDINCLUDE="" BIND9_BIND9_BUILDINCLUDE="" BIND9_IRS_BUILDINCLUDE="" fi AC_SUBST_FILE(BIND9_MAKE_INCLUDES) BIND9_MAKE_INCLUDES=$BIND9_TOP_BUILDDIR/make/includes AC_SUBST_FILE(BIND9_MAKE_RULES) BIND9_MAKE_RULES=$BIND9_TOP_BUILDDIR/make/rules . "$srcdir/version" BIND9_PRODUCT="PRODUCT=\"${PRODUCT}\"" AC_SUBST(BIND9_PRODUCT) BIND9_DESCRIPTION="DESCRIPTION=\"${DESCRIPTION}\"" AC_SUBST(BIND9_DESCRIPTION) BIND9_VERSION="${MAJORVER}.${MINORVER}${PATCHVER:+.}${PATCHVER}${RELEASETYPE}${RELEASEVER}${EXTENSIONS}" AC_SUBST(BIND9_VERSION) BIND9_MAJOR="MAJOR=${MAJORVER}.${MINORVER}" AC_SUBST(BIND9_MAJOR) BIND9_VERSIONSTRING="${PRODUCT} ${MAJORVER}.${MINORVER}${PATCHVER:+.}${PATCHVER}${RELEASETYPE}${RELEASEVER}${EXTENSIONS}${DESCRIPTION:+ }${DESCRIPTION}" AC_SUBST(BIND9_VERSIONSTRING) BIND9_SRCID="SRCID=unset_id" if test -f "${srcdir}/srcid"; then . "${srcdir}/srcid" BIND9_SRCID="SRCID=$SRCID" elif test -d "${srcdir}/.git"; then BIND9_SRCID="SRCID="`(cd "${srcdir}";git rev-parse --short HEAD)` fi AC_SUBST(BIND9_SRCID) if test -z "$ac_configure_args"; then BIND9_CONFIGARGS="defaults" else for a in $ac_configure_args do BIND9_CONFIGARGS="$BIND9_CONFIGARGS $a" done fi BIND9_CONFIGARGS="`echo $BIND9_CONFIGARGS | sed 's/^ //'`" BIND9_CONFIGARGS="CONFIGARGS=${BIND9_CONFIGARGS}" AC_SUBST(BIND9_CONFIGARGS) AC_SUBST_FILE(LIBDNS_MAPAPI) LIBDNS_MAPAPI="$srcdir/lib/dns/mapapi" # # Configure any DLZ drivers. # # If config.dlz.in selects one or more DLZ drivers, it will set # CONTRIB_DLZ to a non-empty value, which will be our clue to # build DLZ drivers in contrib. # # This section has to come after the libtool stuff because it needs to # know how to name the driver object files. # CONTRIB_DLZ="" DLZ_DRIVER_INCLUDES="" DLZ_DRIVER_LIBS="" DLZ_DRIVER_SRCS="" DLZ_DRIVER_OBJS="" DLZ_SYSTEM_TEST="" DLZ_DRIVER_MYSQL_INCLUDES="" DLZ_DRIVER_MYSQL_LIBS="" # # Configure support for building a shared library object # # Even when libtool is available it can't always be relied upon # to build an object that can be dlopen()'ed, but this is necessary # for building the dlzexternal system test, so we'll try it the # old-fashioned way. # SO="so" SO_CFLAGS="" SO_LDFLAGS="" SO_LD="" SO_TARGETS="" SO_STRIP="cat" # [pairwise: skip] AC_ARG_WITH([dlopen], AS_HELP_STRING([--with-dlopen=ARG], [support dynamically loadable DLZ and DYNDB drivers]), [], [with_dlopen="auto"]) # # If PIC is disabled, dlopen must also be # AS_IF([test "$pic_mode" = "no"], [AS_CASE([$with_dlopen], [auto],[with_dlopen="no"], [yes],[AC_MSG_ERROR([--with-dlopen requires PIC])])]) AS_CASE([$with_dlopen], [auto|yes],[ # -fsanitize=thread hijacks dlopen and dlclose so use dlsym. AC_SEARCH_LIBS([dlsym],[dl]) AC_CHECK_FUNCS([dlopen dlclose dlsym], [with_dlopen="yes"], [with_dlopen="no"]) ]) AS_IF([test "$with_dlopen" = "yes"], [AS_CASE([$host], [*-linux*|*-gnu*],[ LDFLAGS="${LDFLAGS} -Wl,--export-dynamic" SO_CFLAGS="-fPIC" SO_LDFLAGS="" AS_IF([test "$use_libtool" = "yes"],[ SO_LDFLAGS="-Xcompiler -shared" SO_LD="${CC}" ],[ SO_LDFLAGS="-shared" SO_LD="${CC}" ]) ], [*-freebsd*|*-openbsd*|*-netbsd*],[ LDFLAGS="${LDFLAGS} -Wl,-E" SO_CFLAGS="-fpic" AS_IF([test "$use_libtool" = "yes"],[ SO_LDFLAGS="-Xcompiler -shared" SO_LD="${CC}" ],[ SO_LDFLAGS="-shared" SO_LD="${CC}" ]) ], [*-darwin*],[ SO_CFLAGS="-fPIC" SO_LD="${CC}" AS_IF([test "$use_libtool" = "yes"],[ SO_LDFLAGS="-Xcompiler -dynamiclib -undefined dynamic_lookup" ],[ SO_LDFLAGS="-dynamiclib -undefined dynamic_lookup" ]) ], [*-solaris*],[ SO_CFLAGS="-KPIC" SO_LDFLAGS="-G -z text" SO_LD="ld" ], [ia64-hp-hpux*],[ SO_CFLAGS="+z" SO_LDFLAGS="-b" SO_LD="${CC}" ], [ SO_CFLAGS="-fPIC" ]) AS_IF([test "$GCC" = "yes"],[ SO_CFLAGS="-fPIC" AS_IF([test -z "$SO_LD"], [AS_IF([test "$use_libtool" = "yes"],[ SO_LDFLAGS="-Xcompiler -shared" SO_LD="${CC}" ],[ SO_LDFLAGS="-shared" SO_LD="${CC}" ]) ]) ]) # If we still don't know how to make shared objects, don't make any. AS_IF([test -n "$SO_LD"], [SO_TARGETS="\${SO_TARGETS}" AC_DEFINE([ISC_DLZ_DLOPEN], [1], [Define to allow building of objects for dlopen().]) ]) ]) AS_IF([test "$with_dlopen" = "no" -a "$enable_native_pkcs11" = "yes"], [AC_MSG_ERROR([PKCS11 requires dlopen() support])]) CFLAGS="$CFLAGS $SO_CFLAGS" AC_SUBST(SO) AC_SUBST(SO_CFLAGS) AC_SUBST(SO_LDFLAGS) AC_SUBST(SO_LD) AC_SUBST(SO_STRIP) AC_SUBST(SO_TARGETS) # # Response policy rewriting using DNS Response Policy Service (DNSRPS) # interface. # # DNSRPS can be compiled into BIND everywhere with a reasonably # modern C compiler. It is enabled on systems with dlopen() and librpz.so. # dnsrps_avail=yes AC_MSG_CHECKING([for librpz __attribute__s]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[]], [[ extern void f(char *p __attribute__((unused)), ...) __attribute__((format(printf,1,2))) __attribute__((__noreturn__)); ]])], [ librpz_have_attr=yes AC_DEFINE([LIBRPZ_HAVE_ATTR], [1], [have __attribute__s used in librpz.h]) AC_MSG_RESULT([yes]) ],[ librpz_have_attr=no AC_MSG_RESULT([no]) ]) # DNSRPS builds are included in pairwise testing along --enable-native-pkcs11 # tests above as both of these features require --with-dlopen (see also the # relevant comment there). # # [pairwise: skip] AC_ARG_ENABLE([dnsrps-dl], [AS_HELP_STRING([--enable-dnsrps-dl], [DNS Response Policy Service delayed link [default=$librpz_dl]])], [enable_librpz_dl="$enableval"], [enable_librpz_dl="$with_dlopen"]) AS_IF([test "$enable_librpz_dl" = "yes" -a "$with_dlopen" = "no"], [AC_MSG_ERROR([DNS Response Policy Service delayed link requires dlopen to be enabled])]) # [pairwise: skip] AC_ARG_WITH([dnsrps-libname], [AS_HELP_STRING([--with-dnsrps-libname], [DNSRPS provider library name (librpz.so)])], [librpz_name="$withval"], [librpz_name="librpz.so"]) # [pairwise: skip] AC_ARG_WITH([dnsrps-dir], [AS_HELP_STRING([--with-dnsrps-dir], [path to DNSRPS provider library])], [librpz_path="$withval/$librpz_name"], [librpz_path="$librpz_name"]) AC_DEFINE_UNQUOTED([DNSRPS_LIBRPZ_PATH], ["$librpz_path"], [dnsrps $librpz_name]) AS_IF([test "$enable_librpz_dl" = "yes"], [ dnsrps_lib_open=2 ],[ dnsrps_lib_open=1 # Add librpz.so to linked libraries if we are not using dlopen() AC_SEARCH_LIBS([librpz_client_create], [rpz], [], [dnsrps_lib_open=0 dnsrps_avail=no]) ]) AC_DEFINE_UNQUOTED([DNSRPS_LIB_OPEN], [$dnsrps_lib_open], [0=no DNSRPS 1=static link 2=dlopen()]) # [pairwise: skip] AC_ARG_ENABLE([dnsrps], AS_HELP_STRING([--enable-dnsrps], [enable DNS Response Policy Service API]), [enable_dnsrps=$enableval], [enable_dnsrps=no]) AS_IF([test "$enable_dnsrps" != "no"],[ AS_IF([test "$dnsrps_avail" != "yes"], [AC_MSG_ERROR([dlopen and librpz.so needed for DNSRPS])]) AS_IF([test "$dnsrps_lib_open" = "0"], [AC_MSG_ERROR([dlopen and librpz.so needed for DNSRPS])]) AC_DEFINE([USE_DNSRPS], [1], [Enable DNS Response Policy Service API]) ]) sinclude(contrib/dlz/config.dlz.in) AC_MSG_CHECKING(contributed DLZ drivers) # # Support for constructor and destructor attributes # AX_GCC_FUNC_ATTRIBUTE([constructor]) AX_GCC_FUNC_ATTRIBUTE([destructor]) if test -n "$CONTRIB_DLZ" then AC_MSG_RESULT(yes) DLZ_DRIVER_RULES=contrib/dlz/drivers/rules AC_CONFIG_FILES([$DLZ_DRIVER_RULES contrib/dlz/modules/mysql/Makefile contrib/dlz/modules/mysqldyn/Makefile]) else AC_MSG_RESULT(no) DLZ_DRIVER_RULES=/dev/null fi AC_SUBST(CONTRIB_DLZ) AC_SUBST(DLZ_DRIVER_INCLUDES) AC_SUBST(DLZ_DRIVER_LIBS) AC_SUBST(DLZ_DRIVER_SRCS) AC_SUBST(DLZ_DRIVER_OBJS) AC_SUBST(DLZ_SYSTEM_TEST) AC_SUBST(DLZ_DRIVER_MYSQL_INCLUDES) AC_SUBST(DLZ_DRIVER_MYSQL_LIBS) AC_SUBST_FILE(DLZ_DRIVER_RULES) if test "yes" = "$cross_compiling"; then if test -z "$BUILD_CC"; then AC_MSG_ERROR([BUILD_CC not set]) fi BUILD_CFLAGS="$BUILD_CFLAGS" BUILD_CPPFLAGS="$BUILD_CPPFLAGS" BUILD_LDFLAGS="$BUILD_LDFLAGS" BUILD_LIBS="$BUILD_LIBS" else BUILD_CC="$CC" BUILD_CFLAGS="$CFLAGS" BUILD_CPPFLAGS="$CPPFLAGS $GEN_NEED_OPTARG" BUILD_LDFLAGS="$LDFLAGS" BUILD_LIBS="$LIBS" fi NEWFLAGS="" for e in $BUILD_LDFLAGS ; do case $e in -L*) case $host_os in netbsd*) ee=`echo $e | sed -e 's%^-L%-Wl,-rpath,%'` NEWFLAGS="$NEWFLAGS $e $ee" ;; freebsd*) ee=`echo $e | sed -e 's%^-L%-Wl,-rpath,%'` NEWFLAGS="$NEWFLAGS $e $ee" ;; solaris*) ee=`echo $e | sed -e 's%^-L%-R%'` NEWFLAGS="$NEWFLAGS $e $ee" ;; *) NEWFLAGS="$NEWFLAGS $e" ;; esac ;; *) NEWFLAGS="$NEWFLAGS $e" ;; esac done BUILD_LDFLAGS="$NEWFLAGS" NEWFLAGS="" for e in $DNS_GSSAPI_LIBS ; do case $e in -L*) case $host_os in netbsd*) ee=`echo $e | sed -e 's%^-L%-Wl,-rpath,%'` NEWFLAGS="$NEWFLAGS $e $ee" ;; freebsd*) ee=`echo $e | sed -e 's%^-L%-Wl,-rpath,%'` NEWFLAGS="$NEWFLAGS $e $ee" ;; solaris*) ee=`echo $e | sed -e 's%^-L%-R%'` NEWFLAGS="$NEWFLAGS $e $ee" ;; *) NEWFLAGS="$NEWFLAGS $e" ;; esac ;; *) NEWFLAGS="$NEWFLAGS $e" ;; esac done DNS_GSSAPI_LIBS="$NEWFLAGS" NEWFLAGS="" for e in $ISC_OPENSSL_LIBS ; do case $e in -L*) case $host_os in netbsd*) ee=`echo $e | sed -e 's%^-L%-Wl,-rpath,%'` NEWFLAGS="$NEWFLAGS $e $ee" ;; freebsd*) ee=`echo $e | sed -e 's%^-L%-Wl,-rpath,%'` NEWFLAGS="$NEWFLAGS $e $ee" ;; solaris*) ee=`echo $e | sed -e 's%^-L%-R%'` NEWFLAGS="$NEWFLAGS $e $ee" ;; *) NEWFLAGS="$NEWFLAGS $e" ;; esac ;; *) NEWFLAGS="$NEWFLAGS $e" ;; esac done ISC_OPENSSL_LIBS="$NEWFLAGS" NEWFLAGS="" for e in $DNS_CRYPTO_LIBS ; do case $e in -L*) case $host_os in netbsd*) ee=`echo $e | sed -e 's%^-L%-Wl,-rpath,%'` NEWFLAGS="$NEWFLAGS $e $ee" ;; freebsd*) ee=`echo $e | sed -e 's%^-L%-Wl,-rpath,%'` NEWFLAGS="$NEWFLAGS $e $ee" ;; solaris*) ee=`echo $e | sed -e 's%^-L%-R%'` NEWFLAGS="$NEWFLAGS $e $ee" ;; *) NEWFLAGS="$NEWFLAGS $e" ;; esac ;; *) NEWFLAGS="$NEWFLAGS $e" ;; esac done DNS_CRYPTO_LIBS="$NEWFLAGS" AC_SUBST(BUILD_CC) AC_SUBST(BUILD_CFLAGS) AC_SUBST(BUILD_CPPFLAGS) AC_SUBST(BUILD_LDFLAGS) AC_SUBST(BUILD_LIBS) # # Commands to run at the end of config.status. # Don't just put these into configure, it won't work right if somebody # runs config.status directly (which autoconf allows). # AC_CONFIG_COMMANDS( [chmod], [chmod a+x doc/doxygen/doxygen-input-filter]) # # Files to configure. These are listed here because we used to # specify them as arguments to AC_OUTPUT. It's (now) ok to move these # elsewhere if there's a good reason for doing so. # AC_CONFIG_FILES([ Makefile bin/Makefile bin/check/Makefile bin/confgen/Makefile bin/confgen/unix/Makefile bin/delv/Makefile bin/dig/Makefile bin/dnssec/Makefile bin/named/Makefile bin/named/unix/Makefile bin/nsupdate/Makefile bin/pkcs11/Makefile bin/plugins/Makefile bin/python/Makefile bin/python/dnssec-checkds.py bin/python/dnssec-coverage.py bin/python/dnssec-keymgr.py bin/python/isc/Makefile bin/python/isc/__init__.py bin/python/isc/checkds.py bin/python/isc/coverage.py bin/python/isc/dnskey.py bin/python/isc/eventlist.py bin/python/isc/keydict.py bin/python/isc/keyevent.py bin/python/isc/keymgr.py bin/python/isc/keyseries.py bin/python/isc/keyzone.py bin/python/isc/policy.py bin/python/isc/rndc.py bin/python/isc/tests/Makefile bin/python/isc/tests/dnskey_test.py bin/python/isc/tests/policy_test.py bin/python/isc/utils.py bin/rndc/Makefile bin/tests/Makefile bin/tests/headerdep_test.sh bin/tests/optional/Makefile bin/tests/pkcs11/Makefile bin/tests/pkcs11/benchmarks/Makefile bin/tests/system/Makefile bin/tests/system/conf.sh bin/tests/system/dlzexternal/Makefile bin/tests/system/dlzexternal/ns1/dlzs.conf bin/tests/system/dyndb/Makefile bin/tests/system/dyndb/driver/Makefile bin/tests/system/pipelined/Makefile bin/tests/system/rndc/Makefile bin/tests/system/rpz/Makefile bin/tests/system/rsabigexponent/Makefile bin/tests/system/tkey/Makefile bin/tools/Makefile contrib/scripts/check-secure-delegation.pl contrib/scripts/zone-edit.sh doc/Makefile doc/arm/Makefile doc/doxygen/Doxyfile doc/doxygen/Makefile doc/doxygen/doxygen-input-filter doc/man/Makefile doc/misc/Makefile fuzz/Makefile lib/Makefile lib/bind9/Makefile lib/bind9/include/Makefile lib/bind9/include/bind9/Makefile lib/dns/Makefile lib/dns/include/Makefile lib/dns/include/dns/Makefile lib/dns/include/dst/Makefile lib/dns/tests/Makefile lib/irs/Makefile lib/irs/include/Makefile lib/irs/include/irs/Makefile lib/irs/include/irs/netdb.h lib/irs/include/irs/platform.h lib/irs/tests/Makefile lib/isc/Makefile lib/isc/include/Makefile lib/isc/include/isc/Makefile lib/isc/include/isc/platform.h lib/isc/include/pk11/Makefile lib/isc/include/pkcs11/Makefile lib/isc/netmgr/Makefile lib/isc/pthreads/Makefile lib/isc/pthreads/include/Makefile lib/isc/pthreads/include/isc/Makefile lib/isc/tests/Makefile lib/isc/unix/Makefile lib/isc/unix/include/Makefile lib/isc/unix/include/isc/Makefile lib/isccc/Makefile lib/isccc/include/Makefile lib/isccc/include/isccc/Makefile lib/isccc/tests/Makefile lib/isccfg/Makefile lib/isccfg/include/Makefile lib/isccfg/include/isccfg/Makefile lib/isccfg/tests/Makefile lib/ns/Makefile lib/ns/include/Makefile lib/ns/include/ns/Makefile lib/ns/tests/Makefile make/Makefile make/mkdep unit/unittest.sh util/check-make-install ]) # # Do it # AC_OUTPUT # # Now that the Makefiles exist we can ensure that everything is rebuilt. # # [pairwise: --with-make-clean, --without-make-clean] AC_ARG_WITH(make-clean, AS_HELP_STRING([--with-make-clean], [run "make clean" at end of configure [yes|no]]), make_clean="$withval", make_clean="yes") case "$make_clean" in yes) if test "yes" != "$no_create" then if test "yes" = "$silent" then make clean > /dev/null else make clean fi fi ;; esac # [pairwise: --enable-full-report, --disable-full-report] AC_ARG_ENABLE(full-report, AS_HELP_STRING([--enable-full-report], [report values of all configure options])) report() { echo "===============================================================================" echo "Configuration summary:" echo "-------------------------------------------------------------------------------" echo "Optional features enabled:" if test "yes" = "$enable_full_report" -o "standard" = "$with_locktype"; then echo " Mutex lock type: $with_locktype" fi test "small" = "$with_tuning" && echo " Small-system tuning (--with-tuning)" test "no" = "$use_dnstap" || \ echo " Allow 'dnstap' packet logging (--enable-dnstap)" test -z "$MAXMINDDB_LIBS" || echo " GeoIP2 access control (--enable-geoip)" test "no" = "$use_gssapi" || echo " GSS-API (--with-gssapi)" # these lines are only printed if run with --enable-full-report if test "yes" = "$enable_full_report"; then test "no" = "$found_ipv6" || echo " IPv6 support (--enable-ipv6)" test "X$PYTHON" = "X" || echo " Python tools (--with-python)" test "X$LIBXML2_LIBS" = "X" || echo " XML statistics (--with-libxml2)" test "X$JSON_C_LIBS" = "X" || echo " JSON statistics (--with-json-c): $JSON_C_CFLAGS $JSON_C_LIBS" test "X$ZLIB_LIBS" = "X" || echo " HTTP zlib compression (--with-zlib)" test "X$NZD_TOOLS" = "X" || echo " LMDB database to store configuration for 'addzone' zones (--with-lmdb)" test "no" = "$with_libidn2" || echo " IDN support (--with-libidn2)" fi test "yes" = "$enable_dnsrps" && \ echo " DNS Response Policy Service interface (--enable-dnsrps)" test "yes" = "$enable_fixed" && \ echo " Allow 'fixed' rrset-order (--enable-fixed-rrset)" test "yes" = "$enable_backtrace" && \ echo " Print backtrace on crash (--enable-backtrace)" test "minimal" = "$want_symtable" && \ echo " Use symbol table for backtrace, named only (--enable-symtable)" test "yes" = "$want_symtable" -o "all" = "$want_symtable" && \ echo " Use symbol table for backtrace, all binaries (--enable-symtable=all)" test "no" = "$use_libtool" || echo " Use GNU libtool (--with-libtool)" test "yes" = "$want_querytrace" && \ echo " Very verbose query trace logging (--enable-querytrace)" test "no" = "$with_cmocka" || echo " CMocka Unit Testing Framework (--with-cmocka)" test "auto" = "$validation_default" && echo " DNSSEC validation active by default (--enable-auto-validation)" test "$CRYPTO" = "pkcs11" && ( echo " Using PKCS#11 for Public-Key Cryptography (--with-native-pkcs11)" echo " PKCS#11 module (--with-pkcs11): $with_pkcs11" echo " +--------------------------------------------+" echo " | ==== WARNING ==== |" echo " | |" echo " | The use of native PKCS#11 for Public-Key |" echo " | Cryptography in BIND 9 has been deprecated |" echo " | in favor of OpenSSL engine_pkcs11 from the |" echo " | OpenSC project. The --with-native-pkcs11 |" echo " | configuration option will be removed from |" echo " | the next major BIND 9 release. The option |" echo " | to use the engine_pkcs11 OpenSSL engine is |" echo " | already available in BIND 9; please see |" echo " | the ARM section on PKCS#11 for details. |" echo " +--------------------------------------------+" ) dlz_enabled=no echo " Dynamically loadable zone (DLZ) drivers:" AS_IF([test "$use_dlz_bdb" != "no"], [AS_ECHO([" Berkeley DB (--with-dlz-bdb)"]) dlz_enabled=yes]) AS_IF([test "$use_dlz_ldap" != "no"], [AS_ECHO([" LDAP (--with-dlz-ldap)"]) dlz_enabled=yes]) AS_IF([test "$use_dlz_mysql" != "no"], [AS_ECHO([" MySQL (--with-dlz-mysql)"]) dlz_enabled=yes]) AS_IF([test "$use_dlz_odbc" != "no"], [AS_ECHO([" ODBC (--with-dlz-odbc)"]) dlz_enabled=yes]) AS_IF([test "$use_dlz_postgres" != "no"], [AS_ECHO([" Postgres (--with-dlz-postgres)"]) dlz_enabled=yes]) AS_IF([test "$use_dlz_filesystem" != "no"], [AS_ECHO([" Filesystem (--with-dlz-filesystem)"]) dlz_enabled=yes]) AS_IF([test "$use_dlz_stub" != "no"], [AS_ECHO([" Stub (--with-dlz-stub)"]) dlz_enabled=yes]) AS_IF([test "$dlz_enabled" = "no"], [AS_ECHO([" None"])], [AS_ECHO([" +--------------------------------------------------------+"]) AS_ECHO([" | ==== DEPRECATION WARNING ==== |"]) AS_ECHO([" +--------------------------------------------------------+"]) AS_ECHO([" | Old-style DLZ drivers have been deprecated in favor of |"]) AS_ECHO([" | DLZ modules. The DLZ drivers configuration option will |"]) AS_ECHO([" | be removed from the next major BIND 9 release. |"]) AS_ECHO([" | |"]) AS_ECHO([" | The option to use the DLZ modules is already available |"]) AS_ECHO([" | in BIND 9; please see the ARM section on DLZ modules. |"]) AS_ECHO([" +--------------------------------------------------------+"]) ]) echo "-------------------------------------------------------------------------------" echo "Features disabled or unavailable on this platform:" test "no" = "$found_ipv6" && echo " IPv6 support (--enable-ipv6)" test "small" = "$with_tuning" || echo " Small-system tuning (--with-tuning)" test "no" = "$use_dnstap" && \ echo " Allow 'dnstap' packet logging (--enable-dnstap)" test -z "$MAXMINDDB_LIBS" && echo " GeoIP2 access control (--enable-geoip)" test "no" = "$use_gssapi" && echo " GSS-API (--with-gssapi)" test "no" = "$enable_dnsrps" && \ echo " DNS Response Policy Service interface (--enable-dnsrps)" test "yes" = "$enable_fixed" || \ echo " Allow 'fixed' rrset-order (--enable-fixed-rrset)" test "yes" = "$validation_default" && echo " DNSSEC validation requires configuration (--enablee-auto-validation)" test "$CRYPTO" = "pkcs11" || ( echo " Using PKCS#11 for Public-Key Cryptography (--with-native-pkcs11)" ) test "yes" = "$enable_backtrace" || \ echo " Print backtrace on crash (--enable-backtrace)" test "yes" = "$want_querytrace" || \ echo " Very verbose query trace logging (--enable-querytrace)" test "yes" = "$use_libtool" || echo " Use GNU libtool (--with-libtool)" test "no" = "$with_cmocka" && echo " CMocka Unit Testing Framework (--with-cmocka)" test "X$PYTHON" = "X" && echo " Python tools (--with-python)" test "X$LIBXML2_LIBS" = "X" && echo " XML statistics (--with-libxml2)" test "X$JSON_C_LIBS" = "X" && echo " JSON statistics (--with-json-c)" test "X$ZLIB_LIBS" = "X" && echo " HTTP zlib compression (--with-zlib)" test "X$NZD_TOOLS" = "X" && echo " LMDB database to store configuration for 'addzone' zones (--with-lmdb)" test "no" = "$with_libidn2" && echo " IDN support (--with-libidn2)" echo "-------------------------------------------------------------------------------" echo "Configured paths:" echo " prefix: $prefix" echo " sysconfdir: $sysconfdir" echo " localstatedir: $localstatedir" echo "-------------------------------------------------------------------------------" echo "Compiler: $CC" AS_IF([test "$GCC" = "yes"], [$CC --version 2>&1 | sed 's/^/ /'], [AS_CASE([$host], [*-solaris*],[$CC -V 2>&1 | sed 's/^/ /'], [$CC --version 2>&1 | sed 's/^/ /'])]) if test "X$ac_unrecognized_opts" != "X"; then echo "Unrecognized options:" echo " $ac_unrecognized_opts" fi if test "yes" != "$enable_full_report"; then echo "-------------------------------------------------------------------------------" echo "For more detail, use --enable-full-report." fi echo "===============================================================================" } if test "yes" != "$silent"; then report fi # Tell Emacs to edit this file in shell mode. # Local Variables: # mode: sh # End: