# Copyright (C) Internet Systems Consortium, Inc. ("ISC") # # 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 http://mozilla.org/MPL/2.0/. # # See the COPYRIGHT file distributed with this work for additional # information regarding copyright ownership. dnl AC_DIVERT_PUSH(1)dnl esyscmd([sed -e 's/^/# /' -e '/Portions of this code/,$d' COPYRIGHT])dnl AC_DIVERT_POP()dnl AC_INIT(BIND, [9.11], [info@isc.org], [], [https://www.isc.org/downloads/BIND/]) AC_PREREQ(2.59) AC_CONFIG_HEADER(config.h) AC_CONFIG_MACRO_DIR([libtool.m4]) AC_CANONICAL_HOST AC_PROG_MAKE_SET # # GNU libtool support # case $build_os in sunos*) # Just set the maximum command line length for sunos as it otherwise # takes a exceptionally long time to work it out. Required for libtool. lt_cv_sys_max_cmd_len=4096; ;; esac AC_PROG_LIBTOOL AC_PROG_INSTALL AC_PROG_LN_S AC_SUBST(STD_CINCLUDES) AC_SUBST(STD_CDEFINES) AC_SUBST(STD_CWARNINGS) AC_SUBST(CCOPT) AC_SUBST(CCNOOPT) AC_SUBST(BACKTRACECFLAGS) # Warn if the user specified libbind, which is now deprecated AC_ARG_ENABLE(libbind, AS_HELP_STRING([--enable-libbind], [deprecated])) case "$enable_libbind" in yes) AC_MSG_ERROR(['libbind' is no longer part of the BIND 9 distribution. It is available from http://www.isc.org as a separate download.]) ;; no|'') ;; esac 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])) AC_ARG_ENABLE(warn_shadow, AS_HELP_STRING([--enable-warn-shadow], [turn on -Wshadow when compiling])) AC_ARG_ENABLE(warn_error, AS_HELP_STRING([--enable-warn-error], [turn on -Werror when compiling])) AC_ARG_ENABLE(developer, AS_HELP_STRING([--enable-developer], [enable developer build settings])) XTARGETS= case "$enable_developer" in yes) STD_CDEFINES="$STD_CDEFINES -DISC_LIST_CHECKINIT=1" test "${enable_fixed_rrset+set}" = set || enable_fixed_rrset=yes test "${enable_querytrace+set}" = set || enable_querytrace=yes test "${with_atf+set}" = set || with_atf=yes test "${enable_filter_aaaa+set}" = set || enable_filter_aaaa=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}' ;; esac AC_SUBST(XTARGETS) # American Fuzzy Lop AC_ARG_ENABLE(afl, AS_HELP_STRING([--enable-afl], [enable American Fuzzy Lop test harness [default=no]]), [AC_DEFINE([ENABLE_AFL], [1], [Define to enable American Fuzzy Lop test harness])]) case "$enable_afl" in yes) LIBS="$LIBS -lpthread" ;; esac #libseccomp sandboxing AC_CHECK_FUNCS(getrandom) AC_ARG_ENABLE(seccomp, AS_HELP_STRING([--enable-seccomp], [enable support for libseccomp system call filtering [default=no]])) case "$enable_seccomp" in yes) case $host_os in linux*) ;; *) AC_MSG_WARN([seccomp is not supported on non-linux platforms; disabling it]) enable_seccomp=no ;; esac AC_SEARCH_LIBS(seccomp_init, [seccomp]) if test "X$ac_cv_search_seccomp_init" = "X-lseccomp" ; then AC_TRY_RUN([ #include #include #include #include #include int main(void) { int ret; ret = prctl(PR_GET_SECCOMP, 0, 0, 0, 0); if (ret < 0) { switch (errno) { case ENOSYS: return 1; case EINVAL: return 1; default: return 1; } } ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, NULL, 0, 0); if (ret < 0) { switch (errno) { case EINVAL: return 1; case EFAULT: return 0; default: return 1; } } return 1; } ] , AC_DEFINE([HAVE_LIBSECCOMP], 1, [Define to use libseccomp system call filtering.]) , [] ) fi ;; *) ;; esac # # 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 # # Etags. # AC_PATH_PROGS(ETAGS, etags emacs-etags) # # Some systems, e.g. RH7, have the Exuberant Ctags etags instead of # GNU emacs etags, and it requires the -L flag. # if test "X$ETAGS" != "X"; then AC_MSG_CHECKING(for Exuberant Ctags etags) if $ETAGS --version 2>&1 | grep 'Exuberant Ctags' >/dev/null 2>&1; then AC_MSG_RESULT(yes) ETAGS="$ETAGS -L" else AC_MSG_RESULT(no) fi fi AC_SUBST(ETAGS) # # 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; it is used by the tools in bin/python. # If python is unavailable, we simply don't build those. # AC_ARG_WITH(python, AS_HELP_STRING([--with-python=PATH], [specify path to python interpreter]), use_python="$withval", use_python="unspec") AC_ARG_WITH(python-install-dir, AS_HELP_STRING([--with-python-install-dir=PATH], [installation directory for Python modules]), use_python_install_dir="$withval", use_python_install_dir="unspec") python="python python3 python3.5 python3.4 python3.3 python3.2 python2 python2.7" testargparse='try: import argparse except: exit(1)' testply='try: from ply import * except: exit(1)' testminvers='import sys if (sys.version_info < (2,7)) or (sys.version_info < (3,2) and sys.version_info >= (3,0)): exit(1)' case "$use_python" in no) AC_MSG_CHECKING([for python support]) AC_MSG_RESULT(disabled) ;; unspec|yes|*) case "$use_python" in unspec|yes|'') for p in $python do AC_PATH_PROGS(PYTHON, $p) if test "X$PYTHON" = "X"; then continue; fi AC_MSG_CHECKING([python2 version >= 2.7 or python3 version >= 3.2]) if ${PYTHON:-false} -c "$testminvers"; then AC_MSG_RESULT([found]) else AC_MSG_RESULT([not found]) unset ac_cv_path_PYTHON unset PYTHON continue fi AC_MSG_CHECKING([python module 'argparse']) if ${PYTHON:-false} -c "$testargparse"; then AC_MSG_RESULT([found]) else AC_MSG_RESULT([not found]) unset ac_cv_path_PYTHON unset PYTHON continue fi AC_MSG_CHECKING([python module 'ply']) if ${PYTHON:-false} -c "$testply"; then AC_MSG_RESULT([found]) break else AC_MSG_RESULT([not found]) unset ac_cv_path_PYTHON unset PYTHON fi done if test "X$PYTHON" != "X" then case "$use_python_install_dir" in unspec) PYTHON_INSTALL_DIR="" PYTHON_INSTALL_LIB="" ;; *) PYTHON_INSTALL_DIR="$use_python_install_dir" PYTHON_INSTALL_LIB="--install-lib=$use_python_install_dir" ;; esac else AC_MSG_CHECKING([for python support]) case "$use_python" in unspec) AC_MSG_RESULT(disabled) ;; yes) AC_MSG_ERROR([missing python]) ;; esac fi ;; *) case "$use_python" in /*) PYTHON="$use_python" ;; *) AC_PATH_PROGS(PYTHON, $use_python) ;; esac AC_MSG_CHECKING([python2 version >= 2.7 or python3 version >= 3.2]) if ${PYTHON:-false} -c "$testminvers"; then AC_MSG_RESULT([found]) else AC_MSG_ERROR([not found]) fi AC_MSG_CHECKING([python module 'argparse']) if ${PYTHON:-false} -c "$testargparse"; then AC_MSG_RESULT([found, using $PYTHON]) else AC_MSG_ERROR([not found]) fi AC_MSG_CHECKING([python module 'ply']) if ${PYTHON:-false} -c "$testply"; then AC_MSG_RESULT([found, using $PYTHON]) else AC_MSG_ERROR([not found]) fi ;; esac ;; esac PYTHON_TOOLS='' CHECKDS='' COVERAGE='' KEYMGR='' if test "X$PYTHON" != "X"; then PYTHON_TOOLS=python CHECKDS=checkds COVERAGE=coverage KEYMGR=keymgr fi AC_SUBST(CHECKDS) AC_SUBST(COVERAGE) AC_SUBST(KEYMGR) AC_SUBST(PYTHON_TOOLS) AC_SUBST(PYTHON_INSTALL_DIR) AC_SUBST(PYTHON_INSTALL_LIB) # # Special processing of paths depending on whether --prefix, # --sysconfdir or --localstatedir arguments were given. What's # desired is some compatibility with the way previous versions # of BIND built; they defaulted to /usr/local for most parts of # the installation, but named.boot/named.conf was in /etc # and named.pid was in /var/run. # # So ... if none of --prefix, --sysconfdir or --localstatedir are # specified, set things up that way. If --prefix is given, use # it for sysconfdir and localstatedir the way configure normally # would. To change the prefix for everything but leave named.conf # in /etc or named.pid in /var/run, then do this the usual configure way: # ./configure --prefix=/somewhere --sysconfdir=/etc # ./configure --prefix=/somewhere --localstatedir=/var # # To put named.conf and named.pid in /usr/local with everything else, # set the prefix explicitly to /usr/local even though that's the default: # ./configure --prefix=/usr/local # case "$prefix" in NONE) case "$sysconfdir" in '${prefix}/etc') sysconfdir=/etc ;; esac case "$localstatedir" in '${prefix}/var') localstatedir=/var ;; esac ;; esac 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_PROG_CC AC_PROG_CC_C99 # # OS dependent CC flags # case "$host" in # OSF 5.0: recv/send are only available with -D_POSIX_PII_SOCKET or # -D_XOPEN_SOURCE_EXTENDED. *-dec-osf*) STD_CDEFINES="$STD_CDEFINES -D_POSIX_PII_SOCKET" CPPFLAGS="$CPPFLAGS -D_POSIX_PII_SOCKET" ;; #HP-UX: need -D_XOPEN_SOURCE_EXTENDED and -lxnet for CMSG macros *-hp-hpux*) STD_CDEFINES="$STD_CDEFINES -D_XOPEN_SOURCE_EXTENDED" CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED" LIBS="-lxnet $LIBS" ;; # Solaris: need -D_XPG4_2 and -D__EXTENSIONS__ for CMSG macros *-solaris*) STD_CDEFINES="$STD_CDEFINES -D_XPG4_2 -D__EXTENSIONS__" CPPFLAGS="$CPPFLAGS -D_XPG4_2 -D__EXTENSIONS__" ;; # POSIX doesn't include the IPv6 Advanced Socket API and glibc hides # parts of the IPv6 Advanced Socket API as a result. This is stupid # as it breaks how the two halves (Basic and Advanced) of the IPv6 # Socket API were designed to be used but we have to live with it. # Define _GNU_SOURCE to pull in the IPv6 Advanced Socket API. *-linux* | *-kfreebsd*-gnu*) STD_CDEFINES="$STD_CDEFINES -D_GNU_SOURCE" CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" ;; # # Starting with OSX 10.7 (Lion) we must choose which IPv6 API to use. # Setting this is sufficient to select the correct behavior for BIND 9. # *-darwin*) STD_CDEFINES="$STD_CDEFINES -D__APPLE_USE_RFC_3542" CPPFLAGS="$CPPFLAGS -D__APPLE_USE_RFC_3542" ;; esac # # 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 ]) AC_C_CONST AC_C_INLINE AC_C_VOLATILE AC_CHECK_FUNC(sysctlbyname, AC_DEFINE(HAVE_SYSCTLBYNAME)) AC_C_FLEXIBLE_ARRAY_MEMBER # # 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) # BSDI doesn't have ftello fseeko AC_CHECK_FUNCS(ftello fseeko) # # UnixWare 7.1.1 with the feature supplement to the UDK compiler # is reported to not support "static inline" (RT #1212). # AC_MSG_CHECKING(for static inline breakage) AC_TRY_COMPILE([ static inline int foo1() { return 0; } static inline int foo2() { return foo1(); } ], [foo1();], [AC_MSG_RESULT(no)], [AC_MSG_RESULT(yes) AC_DEFINE(inline, ,[Define to empty if your compiler does not support "static inline".])]) AC_TYPE_SIZE_T AC_TYPE_SSIZE_T AC_TYPE_UINTPTR_T AC_CHECK_TYPE(socklen_t, [AC_DEFINE(ISC_SOCKADDR_LEN_T, socklen_t)], [ AC_TRY_COMPILE( [ #include #include int getsockname(int, struct sockaddr *, size_t *); ],[], [AC_DEFINE(ISC_SOCKADDR_LEN_T, size_t)], [AC_DEFINE(ISC_SOCKADDR_LEN_T, int)]) ], [ #include #include ]) AC_SUBST(ISC_SOCKADDR_LEN_T) AC_HEADER_TIME AC_MSG_CHECKING(for long long) AC_TRY_COMPILE([],[long long i = 0; return (0);], [AC_MSG_RESULT(yes) ISC_PLATFORM_HAVELONGLONG="#define ISC_PLATFORM_HAVELONGLONG 1"], [AC_MSG_RESULT(no) ISC_PLATFORM_HAVELONGLONG="#undef ISC_PLATFORM_HAVELONGLONG"]) AC_SUBST(ISC_PLATFORM_HAVELONGLONG) # # check for uname library routine # AC_MSG_CHECKING(for uname) AC_TRY_COMPILE([ #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)], [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 if we have lifconf # AC_MSG_CHECKING(for struct lifconf) AC_TRY_COMPILE([ #include #include #include ], [ struct lifconf lifconf; lifconf.lifc_len = 0; ] , [AC_MSG_RESULT(yes) ISC_PLATFORM_HAVELIFCONF="#define ISC_PLATFORM_HAVELIFCONF 1"], [AC_MSG_RESULT(no) ISC_PLATFORM_HAVELIFCONF="#undef ISC_PLATFORM_HAVELIFCONF"]) AC_SUBST(ISC_PLATFORM_HAVELIFCONF) # # check if we have kqueue # AC_ARG_ENABLE(kqueue, AS_HELP_STRING([--enable-kqueue], [use BSD kqueue when available [default=yes]]), want_kqueue="$enableval", want_kqueue="yes") case $want_kqueue in yes) AC_CHECK_FUNC(kqueue, ac_cv_have_kqueue=yes, ac_cv_have_kqueue=no) case $ac_cv_have_kqueue in yes) ISC_PLATFORM_HAVEKQUEUE="#define ISC_PLATFORM_HAVEKQUEUE 1" ;; *) ISC_PLATFORM_HAVEKQUEUE="#undef ISC_PLATFORM_HAVEKQUEUE" ;; esac ;; *) ISC_PLATFORM_HAVEKQUEUE="#undef ISC_PLATFORM_HAVEKQUEUE" ;; esac AC_SUBST(ISC_PLATFORM_HAVEKQUEUE) # # 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. # AC_ARG_ENABLE(epoll, AS_HELP_STRING([--enable-epoll], [use Linux epoll when available [default=auto]]), want_epoll="$enableval", want_epoll="auto") case $want_epoll in auto) AC_MSG_CHECKING(epoll support) AC_TRY_RUN([ #include int main() { if (epoll_create(1) < 0) return (1); return (0); } ], [AC_MSG_RESULT(yes) ISC_PLATFORM_HAVEEPOLL="#define ISC_PLATFORM_HAVEEPOLL 1"], [AC_MSG_RESULT(no) ISC_PLATFORM_HAVEEPOLL="#undef ISC_PLATFORM_HAVEEPOLL"], [AC_MSG_RESULT(no) ISC_PLATFORM_HAVEEPOLL="#undef ISC_PLATFORM_HAVEEPOLL"]) ;; yes) ISC_PLATFORM_HAVEEPOLL="#define ISC_PLATFORM_HAVEEPOLL 1" ;; *) ISC_PLATFORM_HAVEEPOLL="#undef ISC_PLATFORM_HAVEEPOLL" ;; esac AC_SUBST(ISC_PLATFORM_HAVEEPOLL) # # check if we support /dev/poll # AC_ARG_ENABLE(devpoll, AS_HELP_STRING([--enable-devpoll], [use /dev/poll when available [default=yes]]), want_devpoll="$enableval", want_devpoll="yes") case $want_devpoll in yes) AC_CHECK_HEADERS(sys/devpoll.h devpoll.h, ISC_PLATFORM_HAVEDEVPOLL="#define ISC_PLATFORM_HAVEDEVPOLL 1" , ISC_PLATFORM_HAVEDEVPOLL="#undef ISC_PLATFORM_HAVEDEVPOLL" ) ;; *) ISC_PLATFORM_HAVEDEVPOLL="#undef ISC_PLATFORM_HAVEDEVPOLL" ;; esac AC_SUBST(ISC_PLATFORM_HAVEDEVPOLL) # # check if we need to #include sys/select.h explicitly # case $ac_cv_header_unistd_h in yes) AC_MSG_CHECKING(if unistd.h or sys/types.h defines fd_set) AC_TRY_COMPILE([ #include /* Ultrix */ #include ], [fd_set read_set; return (0);], [AC_MSG_RESULT(yes) ISC_PLATFORM_NEEDSYSSELECTH="#undef ISC_PLATFORM_NEEDSYSSELECTH" LWRES_PLATFORM_NEEDSYSSELECTH="#undef LWRES_PLATFORM_NEEDSYSSELECTH"], [AC_MSG_RESULT(no) case $ac_cv_header_sys_select_h in yes) ISC_PLATFORM_NEEDSYSSELECTH="#define ISC_PLATFORM_NEEDSYSSELECTH 1" LWRES_PLATFORM_NEEDSYSSELECTH="#define LWRES_PLATFORM_NEEDSYSSELECTH 1" ;; no) AC_MSG_ERROR([need either working unistd.h or sys/select.h]) ;; esac ]) ;; no) case $ac_cv_header_sys_select_h in yes) ISC_PLATFORM_NEEDSYSSELECTH="#define ISC_PLATFORM_NEEDSYSSELECTH 1" LWRES_PLATFORM_NEEDSYSSELECTH="#define LWRES_PLATFORM_NEEDSYSSELECTH 1" ;; no) AC_MSG_ERROR([need either unistd.h or sys/select.h]) ;; esac ;; esac AC_SUBST(ISC_PLATFORM_NEEDSYSSELECTH) AC_SUBST(LWRES_PLATFORM_NEEDSYSSELECTH) # # Find the machine's endian flavor. # AC_C_BIGENDIAN # # GeoIP support? # GEOIPLINKSRCS= GEOIPLINKOBJS= AC_ARG_WITH(geoip, AS_HELP_STRING([--with-geoip=PATH], [Build with GeoIP support (yes|no|path)]), use_geoip="$withval", use_geoip="no") if test "yes" = "$use_geoip" then for d in /usr /usr/local /opt/local do if test -f $d/include/GeoIP.h then use_geoip=$d break fi done fi case "$use_geoip" in no|'') AC_MSG_CHECKING([for GeoIP support]) AC_MSG_RESULT([disabled]) ;; *) if test -d "$use_geoip" -o -L "$use_geoip" then CFLAGS="$CFLAGS -I$use_geoip/include" CPPFLAGS="$CPPFLAGS -I$use_geoip/include" LIBS="$LIBS -L$use_geoip/lib" case "$host_os" in netbsd*|openbsd*|solaris*) LIBS="$LIBS -Wl,-rpath=$use_geoip/lib" ;; esac elif test "yes" = "$use_geoip" then AC_MSG_ERROR([GeoIP path not found]) else AC_MSG_ERROR([GeoIP path $use_geoip does not exist]) fi AC_CHECK_HEADER(GeoIP.h, [], [AC_MSG_ERROR([GeoIP header file not found])] ) AC_SEARCH_LIBS(GeoIP_id_by_addr_gl, GeoIP, [], [AC_MSG_ERROR([suitable GeoIP library not found])] ) AC_SEARCH_LIBS(fabsf, m, [], [AC_MSG_ERROR([Math library not found])] ) AC_DEFINE(HAVE_GEOIP, 1, Build with GeoIP support) GEOIPLINKSRCS='${GEOIPLINKSRCS}' GEOIPLINKOBJS='${GEOIPLINKOBJS}' AC_MSG_CHECKING([for GeoIP support]) AC_MSG_RESULT([yes]) AC_MSG_CHECKING([for GeoIP Country IPv6 support]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([ #include #include ], [ struct in6_addr in6; GeoIP_country_name_by_ipnum_v6(NULL, in6); ])], [ AC_MSG_RESULT([yes]) AC_DEFINE(HAVE_GEOIP_V6, 1, Build with GeoIP Country IPv6 support) ], [AC_MSG_RESULT([no])] ) AC_MSG_CHECKING([for GeoIP City IPv6 support]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([ #include #include #include ], [ struct in6_addr in6; int i = GEOIP_CITY_EDITION_REV0_V6; GeoIP_record_by_ipnum_v6(NULL, in6); ])], [ AC_MSG_RESULT([yes]) AC_DEFINE(HAVE_GEOIP_CITY_V6, 1, Build with GeoIP City IPv6 support) ], [AC_MSG_RESULT([no])] ) ;; esac AC_SUBST(GEOIPLINKSRCS) AC_SUBST(GEOIPLINKOBJS) AC_MSG_CHECKING(for GSSAPI library) AC_ARG_WITH(gssapi, AS_HELP_STRING([--with-gssapi=[PATH|[/path/]krb5-config]], [Specify path for system-supplied GSSAPI [default=yes]]), use_gssapi="$withval", use_gssapi="yes") # 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` saved_cppflags="$CPPFLAGS" CPPFLAGS="$gssapi_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 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" 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" 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 use_gssapi="no" done 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" DNS_GSSAPI_LIBS="$gssapi_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 -lcrypto -lcrypt -lasn1 -lroken -lcom_err" \ "-lgssapi -lkrb5 -lgssapi_krb5 -lcrypto -lcrypt -lasn1 -lroken -lcom_err" \ "-lgssapi -lkrb5 -lhx509 -lcrypto -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" else LIBS="-L$use_gssapi/lib $TRY_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_HAVEGSSAPI) 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 $DNS_CRYPTO_LIBS" # # Applications linking with libdns also need to link with these libraries. # AC_SUBST(DNS_CRYPTO_LIBS) # # was --with-randomdev specified? # AC_MSG_CHECKING(for random device) AC_ARG_WITH(randomdev, AS_HELP_STRING([--with-randomdev=PATH], [Specify path for random device]), use_randomdev="$withval", use_randomdev="unspec") case "$use_randomdev" in unspec) case "$cross_compiling" in yes) AC_MSG_RESULT(unspecified) AC_MSG_ERROR([ need --with-randomdev=PATH or --with-randomdev=no]) esac case "$host" in *-openbsd*) devrandom=/dev/arandom ;; *) devrandom=/dev/random ;; esac AC_MSG_RESULT($devrandom) AC_CHECK_FILE($devrandom, AC_DEFINE_UNQUOTED(PATH_RANDOMDEV, "$devrandom"),) ;; yes) AC_MSG_ERROR([--with-randomdev must specify a path]) ;; no) AC_MSG_RESULT(disabled) ;; *) AC_DEFINE_UNQUOTED(PATH_RANDOMDEV, "$use_randomdev") AC_MSG_RESULT(using "$use_randomdev") ;; esac # # Only check dsa signature generation on these platforms when performing # system tests. # CHECK_DSA=0 if grep "#define PATH_RANDOMDEV " confdefs.h > /dev/null then case "$host" in *darwin*|*freebsd*) CHECK_DSA=1 ;; esac fi AC_SUBST(CHECK_DSA) # # Do we have arc4random(), etc ? # Will use stir and if not exist addrandom # AC_CHECK_FUNCS(arc4random) AC_CHECK_FUNCS(arc4random_stir) AC_CHECK_FUNCS(arc4random_addrandom) sinclude(config.threads.in)dnl if $use_threads then if test "X$GCC" = "Xyes"; then case "$host" in *-freebsd*) CC="$CC -pthread" CCOPT="$CCOPT -pthread" CCNOOPT="$CCNOOPT -pthread" STD_CDEFINES="$STD_CDEFINES -D_THREAD_SAFE" ;; *-openbsd*) CC="$CC -pthread" CCOPT="$CCOPT -pthread" CCNOOPT="$CCNOOPT -pthread" ;; *-solaris*) LIBS="$LIBS -lthread" ;; *-ibm-aix*) STD_CDEFINES="$STD_CDEFINES -D_THREAD_SAFE" ;; esac else case $host in *-dec-osf*) CC="$CC -pthread" CCOPT="$CCOPT -pthread" CCNOOPT="$CCNOOPT -pthread" ;; *-solaris*) CC="$CC -mt" CCOPT="$CCOPT -mt" CCNOOPT="$CCNOOPT -mt" ;; *-ibm-aix*) STD_CDEFINES="$STD_CDEFINES -D_THREAD_SAFE" ;; *-sco-sysv*uw*|*-*-sysv*UnixWare*) CC="$CC -Kthread" CCOPT="$CCOPT -Kthread" CCNOOPT="$CCNOOPT -Kthread" ;; *-*-sysv*OpenUNIX*) CC="$CC -Kpthread" CCOPT="$CCOPT -Kpthread" CCNOOPT="$CCNOOPT -Kpthread" ;; esac fi ALWAYS_DEFINES="-D_REENTRANT" ISC_PLATFORM_USETHREADS="#define ISC_PLATFORM_USETHREADS 1" THREADOPTOBJS='${THREADOPTOBJS}' THREADOPTSRCS='${THREADOPTSRCS}' thread_dir=pthreads # # We'd like to use sigwait() too # AC_CHECK_FUNC(sigwait, AC_DEFINE(HAVE_SIGWAIT), AC_CHECK_LIB(c, sigwait, AC_DEFINE(HAVE_SIGWAIT), AC_CHECK_LIB(pthread, sigwait, AC_DEFINE(HAVE_SIGWAIT), AC_CHECK_LIB(pthread, _Psigwait, AC_DEFINE(HAVE_SIGWAIT),)))) AC_CHECK_FUNC(pthread_attr_getstacksize, AC_DEFINE(HAVE_PTHREAD_ATTR_GETSTACKSIZE),) AC_CHECK_FUNC(pthread_attr_setstacksize, AC_DEFINE(HAVE_PTHREAD_ATTR_SETSTACKSIZE),) AC_ARG_WITH(locktype, AS_HELP_STRING([--with-locktype=ARG], [Specify mutex lock type (adaptive or standard)]), locktype="$withval", locktype="adaptive") case "$locktype" in 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.]) ;; esac AC_CHECK_HEADERS(sched.h) case "$host" in *solaris-*) AC_CHECK_LIB(rt, sched_yield) ;; esac AC_CHECK_FUNCS(sched_yield pthread_yield pthread_yield_np) # # Additional OS-specific issues related to pthreads and sigwait. # case "$host" in # # One more place to look for sigwait. # *-freebsd*) AC_CHECK_LIB(c_r, sigwait, AC_DEFINE(HAVE_SIGWAIT),) case $host in *-freebsd5.[[012]]|*-freebsd5.[[012]].*);; *-freebsd5.[[3456789]]|*-freebsd5.[[3456789]].*) AC_DEFINE(NEED_PTHREAD_SCOPE_SYSTEM) ;; *-freebsd6.*) AC_DEFINE(NEED_PTHREAD_SCOPE_SYSTEM) ;; esac ;; # # BSDI 3.0 through 4.0.1 needs pthread_init() to be # called before certain pthreads calls. This is deprecated # in BSD/OS 4.1. # *-bsdi3.*|*-bsdi4.0*) AC_DEFINE(NEED_PTHREAD_INIT) ;; # # LinuxThreads requires some changes to the way we # deal with signals. # *-linux*) AC_DEFINE(HAVE_LINUXTHREADS) ;; # # Ensure the right sigwait() semantics on Solaris and make # sure we call pthread_setconcurrency. # *-solaris*) AC_DEFINE(_POSIX_PTHREAD_SEMANTICS) AC_CHECK_FUNC(pthread_setconcurrency, AC_DEFINE(CALL_PTHREAD_SETCONCURRENCY)) ;; # # UnixWare does things its own way. # *-sco-sysv*uw*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*) AC_DEFINE(HAVE_UNIXWARE_SIGWAIT) ;; esac # Look for functions relating to thread naming AC_CHECK_FUNCS(pthread_setname_np pthread_set_name_np) AC_CHECK_HEADERS([pthread_np.h], [], [], [#include ]) # # Look for sysconf to allow detection of the number of processors. # AC_CHECK_FUNC(sysconf, AC_DEFINE(HAVE_SYSCONF),) else ISC_PLATFORM_USETHREADS="#undef ISC_PLATFORM_USETHREADS" thread_dir=nothreads THREADOPTOBJS="" THREADOPTSRCS="" ALWAYS_DEFINES="" fi AC_SUBST(ALWAYS_DEFINES) AC_SUBST(ISC_PLATFORM_USETHREADS) AC_SUBST(THREADOPTOBJS) AC_SUBST(THREADOPTSRCS) ISC_THREAD_DIR=$thread_dir AC_SUBST(ISC_THREAD_DIR) AC_MSG_CHECKING(for libtool) AC_ARG_WITH(libtool, AS_HELP_STRING([--with-libtool], [use GNU libtool]), use_libtool="$withval", use_libtool="no") 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 --tag=CC' LIBTOOL_MODE_INSTALL='--mode=install --tag=CC' LIBTOOL_MODE_LINK='--mode=link --tag=CC' LIBTOOL_MODE_UNINSTALL='--mode=uninstall --tag=CC' INSTALL_LIBRARY='${INSTALL_PROGRAM}' case "$host" in *) LIBTOOL_ALLOW_UNDEFINED= ;; esac case "$host" in *-ibm-aix*) LIBTOOL_IN_MAIN="-Wl,-bI:T_testlist.imp" ;; *) LIBTOOL_IN_MAIN= ;; esac; ;; *) 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= LIBTOOL_ALLOW_UNDEFINED= LIBTOOL_IN_MAIN= INSTALL_LIBRARY='${INSTALL_DATA}' ;; esac AC_SUBST(INSTALL_LIBRARY) # # was --enable-native-pkcs11 specified? # (note it implies both --without-openssl and --with-pkcs11) # AC_ARG_ENABLE(native-pkcs11, AS_HELP_STRING([--enable-native-pkcs11], [use native PKCS11 for all crypto [default=no]]), want_native_pkcs11="$enableval", want_native_pkcs11="no") # # was --with-openssl specified? # AC_ARG_WITH(openssl, AS_HELP_STRING([--with-openssl[=PATH]], [Build with OpenSSL [yes|no|path]. (Crypto is required for DNSSEC)]), use_openssl="$withval", use_openssl="auto") # # was --with-pkcs11 specified? # AC_ARG_WITH(pkcs11, AS_HELP_STRING([--with-pkcs11[=PATH]], [Build with PKCS11 support [yes|no|path] (PATH is for the PKCS11 provider)]), use_pkcs11="$withval", use_pkcs11="auto") # # were --with-ecdsa, --with-gost, --with-eddsa, --with-aes specified # AC_ARG_WITH(ecdsa, AS_HELP_STRING([--with-ecdsa], [Crypto ECDSA]), with_ecdsa="$withval", with_ecdsa="auto") AC_ARG_WITH(gost, AS_HELP_STRING([--with-gost], [Crypto GOST [yes|no|raw|asn1].]), with_gost="$withval", with_gost="auto") AC_ARG_WITH(eddsa, AS_HELP_STRING([--with-eddsa], [Crypto EDDSA [yes|all|no].]), with_eddsa="$withval", with_eddsa="auto") AC_ARG_WITH(aes, AS_HELP_STRING([--with-aes], [Crypto AES]), with_aes="$withval", with_aes="checkcc") # # was --enable-openssl-hash specified? # AC_ARG_ENABLE(openssl-hash, AS_HELP_STRING([--enable-openssl-hash], [use OpenSSL for hash functions [default=no]]), want_openssl_hash="$enableval", want_openssl_hash="checkcc") # # Client Cookie algorithm choice # AC_ARG_WITH(cc-alg, AS_HELP_STRING([--with-cc-alg=ALG], [choose the algorithm for Client Cookie [aes|sha1|sha256]]), with_cc_alg="$withval", with_cc_alg="auto") case $with_cc_alg in *1) with_cc_alg="sha1" ;; *2*) with_cc_alg="sha256" ;; auto) if test "no" != "$with_aes" then with_aes="yes" fi ;; *) with_cc_alg="aes" if test "no" != "$with_aes" then with_aes="yes" fi ;; esac if test "checkcc" = "with_aes" then with_aes="no" fi AC_MSG_CHECKING(for OpenSSL library) OPENSSL_WARNING= openssldirs="/usr /usr/local /usr/local/ssl /usr/pkg /usr/sfw" if test "yes" = "$want_native_pkcs11" then use_openssl="native_pkcs11" AC_MSG_RESULT(use of native PKCS11 instead) fi if test "auto" = "$use_openssl" then for d in $openssldirs do if test -f $d/include/openssl/opensslv.h then use_openssl=$d break fi done fi OPENSSL_ECDSA="" OPENSSL_GOST="" OPENSSL_ED25519="" gosttype="raw" case "$with_gost" in raw) with_gost="yes" ;; asn1) AC_DEFINE(PREFER_GOSTASN1, 1, [Define if GOST private keys are encoded in ASN.1.]) gosttype="asn1" with_gost="yes" ;; auto|yes|no) ;; *) AC_MSG_ERROR(unknown GOST private key encoding) ;; esac case "$use_openssl" in native_pkcs11) AC_MSG_RESULT(disabled because of native PKCS11) DST_OPENSSL_INC="" CRYPTO="-DPKCS11CRYPTO" OPENSSLECDSALINKOBJS="" OPENSSLECDSALINKSRCS="" OPENSSLEDDSALINKOBJS="" OPENSSLEDDSALINKSRCS="" OPENSSLGOSTLINKOBJS="" OPENSSLGOSTLINKSRCS="" OPENSSLLINKOBJS="" OPENSSLLINKSRCS="" ;; no) AC_MSG_RESULT(no) DST_OPENSSL_INC="" CRYPTO="" OPENSSLECDSALINKOBJS="" OPENSSLECDSALINKSRCS="" OPENSSLEDDSALINKOBJS="" OPENSSLEDDSALINKSRCS="" OPENSSLGOSTLINKOBJS="" OPENSSLGOSTLINKSRCS="" OPENSSLLINKOBJS="" OPENSSLLINKSRCS="" ;; auto) DST_OPENSSL_INC="" CRYPTO="" OPENSSLECDSALINKOBJS="" OPENSSLECDSALINKSRCS="" OPENSSLEDDSALINKOBJS="" OPENSSLEDDSALINKSRCS="" OPENSSLGOSTLINKOBJS="" OPENSSLGOSTLINKSRCS="" OPENSSLLINKOBJS="" OPENSSLLINKSRCS="" AC_MSG_ERROR( [OpenSSL was not found in any of $openssldirs; use --with-openssl=/path If you don't want OpenSSL, use --without-openssl]) ;; *) if test "yes" = "$want_native_pkcs11" then AC_MSG_RESULT() AC_MSG_ERROR([OpenSSL and native PKCS11 cannot be used together.]) fi if test "yes" = "$use_openssl" then # User did not specify a path - guess it for d in $openssldirs do if test -f $d/include/openssl/opensslv.h then use_openssl=$d break fi done if test "yes" = "$use_openssl" then AC_MSG_RESULT(not found) AC_MSG_ERROR( [OpenSSL was not found in any of $openssldirs; use --with-openssl=/path]) fi elif ! test -f "$use_openssl"/include/openssl/opensslv.h then AC_MSG_ERROR(["$use_openssl/include/openssl/opensslv.h" not found]) fi CRYPTO='-DOPENSSL' if test "/usr" = "$use_openssl" then DST_OPENSSL_INC="" DST_OPENSSL_LIBS="-lcrypto" else DST_OPENSSL_INC="-I$use_openssl/include" case $host in *-solaris*) DST_OPENSSL_LIBS="-L$use_openssl/lib -R$use_openssl/lib -lcrypto" ;; *-hp-hpux*) DST_OPENSSL_LIBS="-L$use_openssl/lib -Wl,+b: -lcrypto" ;; *-apple-darwin*) # # Apple's ld seaches for serially for dynamic # then static libraries. This means you can't # use -L to override dynamic system libraries # with static ones when linking. Instead # we specify a absolute path. # if test -f "$use_openssl/lib/libcrypto.dylib" then DST_OPENSSL_LIBS="-L$use_openssl/lib -lcrypto" else DST_OPENSSL_LIBS="$use_openssl/lib/libcrypto.a" fi ;; *) DST_OPENSSL_LIBS="-L$use_openssl/lib -lcrypto" ;; esac fi AC_MSG_RESULT(using OpenSSL from $use_openssl/lib and $use_openssl/include) saved_cc="$CC" saved_cflags="$CFLAGS" saved_libs="$LIBS" CFLAGS="$DST_OPENSSL_INC $CFLAGS" LIBS="$DST_OPENSSL_LIBS $LIBS" AC_MSG_CHECKING(whether linking with OpenSSL works) AC_TRY_RUN([ #include int main() { ERR_clear_error(); return (0); } ], [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no) AC_MSG_ERROR(Could not run test program using OpenSSL from $use_openssl/lib and $use_openssl/include. Please check the argument to --with-openssl and your shared library configuration (e.g., LD_LIBRARY_PATH).)], [AC_MSG_RESULT(assuming it does work on target platform)]) AC_MSG_CHECKING(whether linking with OpenSSL requires -ldl) AC_TRY_LINK([ #include #if !defined(LIBRESSL_VERSION_NUMBER) && (OPENSSL_VERSION_NUMBER >= 0x10100004L) #include #else #include #include #endif ], [ #if !defined(LIBRESSL_VERSION_NUMBER) && (OPENSSL_VERSION_NUMBER >= 0x10100004L) OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_ALL_BUILTIN, NULL); #else DSO_METHOD_dlfcn(); #endif ], [AC_MSG_RESULT(no)], [LIBS="$LIBS -ldl" AC_TRY_LINK([ #if !defined(LIBRESSL_VERSION_NUMBER) && (OPENSSL_VERSION_NUMBER >= 0x10100004L) #include #else #include #include #endif ], [ #if !defined(LIBRESSL_VERSION_NUMBER) && (OPENSSL_VERSION_NUMBER >= 0x10100004L) OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_ALL_BUILTIN, NULL); #else DSO_METHOD_dlfcn(); #endif ], [AC_MSG_RESULT(yes) DST_OPENSSL_LIBS="$DST_OPENSSL_LIBS -ldl" ], [AC_MSG_RESULT(unknown) AC_MSG_ERROR(OpenSSL has unsupported dynamic loading)], [AC_MSG_RESULT(assuming it does work on target platform)]) ], [AC_MSG_RESULT(assuming it does work on target platform)] ) AC_MSG_CHECKING(for OpenSSL FIPS mode support) have_fips_mode="" AC_TRY_LINK([#include ], [FIPS_mode();], have_fips_mode=yes, have_fips_mode=no) if test "x$have_fips_mode" = "xyes" then AC_DEFINE([HAVE_FIPS_MODE], [1], [Define if OpenSSL provides FIPS_mode()]) AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi AC_MSG_CHECKING(for OpenSSL DSA support) if test -f $use_openssl/include/openssl/dsa.h then AC_DEFINE(HAVE_OPENSSL_DSA) AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi AC_CHECK_FUNCS(EVP_sha256 EVP_sha384 EVP_sha512) AC_CHECK_FUNCS([DH_get0_key ECDSA_SIG_get0 RSA_set0_key DSA_get0_pqg]) AC_MSG_CHECKING(for OpenSSL ECDSA support) have_ecdsa="" AC_TRY_RUN([ #include #include int main() { EC_KEY *ec256, *ec384; #if !defined(HAVE_EVP_SHA256) || !defined(HAVE_EVP_SHA384) return (1); #endif ec256 = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1); ec384 = EC_KEY_new_by_curve_name(NID_secp384r1); if (ec256 == NULL || ec384 == NULL) return (2); return (0); } ], [AC_MSG_RESULT(yes) have_ecdsa="yes"], [AC_MSG_RESULT(no) have_ecdsa="no"], [AC_MSG_RESULT(using --with-ecdsa)]) case "$with_ecdsa" in yes) case "$have_ecdsa" in no) AC_MSG_ERROR([ecdsa not supported]) ;; *) have_ecdsa=yes ;; esac ;; no) have_ecdsa=no ;; *) case "$have_ecdsa" in yes|no) ;; *) AC_MSG_ERROR([need --with-ecdsa=[[yes or no]]]) ;; esac ;; esac case $have_ecdsa in yes) OPENSSL_ECDSA="yes" OPENSSLECDSALINKOBJS='${OPENSSLECDSALINKOBJS}' OPENSSLECDSALINKSRCS='${OPENSSLECDSALINKSRCS}' AC_DEFINE(HAVE_OPENSSL_ECDSA, 1, [Define if your OpenSSL version supports ECDSA.]) ;; *) ;; esac AC_MSG_CHECKING(for OpenSSL GOST support) have_gost="" case "$use_pkcs11" in auto|no) ;; *) if $use_threads; then CC="$CC -pthread" fi ;; esac AC_TRY_RUN([ #include #include int main() { #if !defined(LIBRESSL_VERSION_NUMBER) && (OPENSSL_VERSION_NUMBER >= 0x10000000L) ENGINE *e; EC_KEY *ek; ek = NULL; OPENSSL_config(NULL); e = ENGINE_by_id("gost"); if (e == NULL) return (1); if (ENGINE_init(e) <= 0) return (1); return (0); #else return (1); #endif } ], [AC_MSG_RESULT(yes) have_gost="yes"], [AC_MSG_RESULT(no) have_gost="no"], [AC_MSG_RESULT(using --with-gost)]) case "$with_gost" in yes) case "$have_gost" in no) AC_MSG_ERROR([gost not supported]) ;; *) have_gost=yes ;; esac ;; no) have_gost=no ;; *) case "$have_gost" in yes|no) ;; *) AC_MSG_ERROR([need --with-gost=[[yes, no, raw or asn1]]]) ;; esac ;; esac case $have_gost in yes) OPENSSL_GOST="yes" OPENSSLGOSTLINKOBJS='${OPENSSLGOSTLINKOBJS}' OPENSSLGOSTLINKSRCS='${OPENSSLGOSTLINKSRCS}' AC_DEFINE(HAVE_OPENSSL_GOST, 1, [Define if your OpenSSL version supports GOST.]) ;; *) ;; esac AC_MSG_CHECKING(for OpenSSL Ed25519 support) have_ed25519="" have_ed448="" AC_TRY_RUN([ #include #include int main() { EVP_PKEY_CTX *ctx; ctx = EVP_PKEY_CTX_new_id(NID_ED25519, NULL); if (ctx == NULL) return (2); return (0); } ], [AC_MSG_RESULT(yes) have_ed25519="yes"], [AC_MSG_RESULT(no) have_ed25519="no"], [AC_MSG_RESULT(using --with-eddsa)]) case "$with_eddsa" in yes|all) case "$have_ed25519" in no) AC_MSG_ERROR([eddsa not supported]) ;; *) have_ed25519=yes ;; esac ;; no) have_ed25519=no ;; *) case "$have_ed25519" in yes|no) ;; *) AC_MSG_ERROR([need --with-eddsa=[[yes, all or no]]]) ;; esac ;; esac case $have_ed25519 in yes) OPENSSL_ED25519="yes" OPENSSLEDDSALINKOBJS='${OPENSSLEDDSALINKOBJS}' OPENSSLEDDSALINKSRCS='${OPENSSLEDDSALINKSRCS}' AC_DEFINE(HAVE_OPENSSL_ED25519, 1, [Define if your OpenSSL version supports Ed25519.]) AC_MSG_CHECKING(for OpenSSL Ed448 support) AC_TRY_RUN([ #include #include int main() { EVP_PKEY_CTX *ctx; ctx = EVP_PKEY_CTX_new_id(NID_ED448, NULL); if (ctx == NULL) return (2); return (0); } ], [AC_MSG_RESULT(yes) have_ed448="yes"], [AC_MSG_RESULT(no) have_ed448="no"], [AC_MSG_RESULT(using --with-eddsa)]) case $with_eddsa in all) have_ed448=yes ;; *) ;; esac case $have_ed448 in yes) AC_DEFINE(HAVE_OPENSSL_ED448, 1, [Define if your OpenSSL version supports Ed448.]) ;; *) ;; esac ;; *) ;; esac have_aes="no" AC_MSG_CHECKING(for OpenSSL AES support) AC_TRY_RUN([ #include int main() { const EVP_CIPHER *aes128, *aes192, *aes256; aes128 = EVP_aes_128_ecb(); aes192 = EVP_aes_192_ecb(); aes256 = EVP_aes_256_ecb(); if (aes128 == NULL || aes192 == NULL || aes256 == NULL) return (1); return (0); } ], [AC_MSG_RESULT(yes) have_aes="evp"], [AC_CHECK_FUNC(AES_encrypt, [AC_MSG_RESULT(yes) have_aes="yes"], [AC_MSG_RESULT(no)])], [AC_MSG_RESULT(using --with-aes) # Expect cross-compiling with a modern OpenSSL have_aes="evp"]) ISC_OPENSSL_INC="" ISC_OPENSSL_LIBS="" if test "yes" = "$with_aes" then case "$have_aes" in evp) AC_DEFINE(HAVE_OPENSSL_EVP_AES, 1, [Define if your OpenSSL version supports EVP AES]) ISC_OPENSSL_INC="$DST_OPENSSL_INC" ISC_OPENSSL_LIBS="$DST_OPENSSL_LIBS" ;; yes) AC_DEFINE(HAVE_OPENSSL_AES, 1, [Define if your OpenSSL version supports AES]) ISC_OPENSSL_INC="$DST_OPENSSL_INC" ISC_OPENSSL_LIBS="$DST_OPENSSL_LIBS" ;; *) ;; esac fi CC="$saved_cc" CFLAGS="$saved_cflags" LIBS="$saved_libs" OPENSSLLINKOBJS='${OPENSSLLINKOBJS}' OPENSSLLINKSRCS='${OPENSSLLINKSRCS}' ;; esac # # This would include the system openssl path (and linker options to use # it as needed) if it is found. # AC_SUBST(DST_OPENSSL_INC) AC_SUBST(OPENSSLECDSALINKOBJS) AC_SUBST(OPENSSLECDSALINKSRCS) AC_SUBST(OPENSSLEDDSALINKOBJS) AC_SUBST(OPENSSLEDDSALINKSRCS) AC_SUBST(OPENSSLGOSTLINKOBJS) AC_SUBST(OPENSSLGOSTLINKSRCS) AC_SUBST(OPENSSLLINKOBJS) AC_SUBST(OPENSSLLINKSRCS) AC_SUBST(OPENSSL_ECDSA) AC_SUBST(OPENSSL_ED25519) AC_SUBST(OPENSSL_GOST) DNS_CRYPTO_LIBS="$DNS_CRYPTO_LIBS $DST_OPENSSL_LIBS" ISC_PLATFORM_WANTAES="#undef ISC_PLATFORM_WANTAES" if test "yes" = "$with_aes" then if test "X$CRYPTO" = "X" then with_aes="no" fi fi if test "yes" = "$with_aes" then ISC_PLATFORM_WANTAES="#define ISC_PLATFORM_WANTAES 1" fi AC_SUBST(ISC_PLATFORM_WANTAES) # # Choose Client Cookie algorithm # AC_MSG_CHECKING(for the Algorithm for Client Cookie) if test "auto" = "$with_cc_alg" then if test "yes" = "$with_aes" then with_cc_alg="aes" else with_cc_alg="sha256" fi fi case $with_cc_alg in sha1) AC_MSG_RESULT(sha1) if test "X$CRYPTO" = "X-DOPENSSL" then if test "checkcc" = "$want_openssl_hash" then want_openssl_hash="yes" fi fi AC_DEFINE(HMAC_SHA1_CC, 1, [Use HMAC-SHA1 for Client Cookie generation]) ;; sha256) AC_MSG_RESULT(sha256) if test "X$CRYPTO" = "X-DOPENSSL" then if test "checkcc" = "$want_openssl_hash" then want_openssl_hash="yes" fi fi AC_DEFINE(HMAC_SHA256_CC, 1, [Use HMAC-SHA256 for Client Cookie generation]) ;; aes) AC_MSG_RESULT(aes) if test "yes" != "$with_aes" then AC_MSG_ERROR("Client Cookie wants to use unavailable AES"); fi AC_DEFINE(AES_CC, 1, [Use AES for Client Cookie generation]) ;; esac if test "checkcc" = "$want_openssl_hash" then want_openssl_hash="no" fi # # Use OpenSSL for hash functions # AC_MSG_CHECKING(for using OpenSSL for hash functions) ISC_PLATFORM_OPENSSLHASH="#undef ISC_PLATFORM_OPENSSLHASH" case $want_openssl_hash in yes) if test "$CRYPTO" != "-DOPENSSL" then AC_MSG_ERROR([No OpenSSL for hash functions]) fi AC_MSG_RESULT(yes) ISC_PLATFORM_OPENSSLHASH="#define ISC_PLATFORM_OPENSSLHASH 1" ISC_OPENSSL_INC="$DST_OPENSSL_INC" ISC_OPENSSL_LIBS="$DST_OPENSSL_LIBS" ;; no) AC_MSG_RESULT(no) ;; esac AC_SUBST(ISC_PLATFORM_OPENSSLHASH) AC_SUBST(ISC_OPENSSL_INC) AC_SUBST(ISC_OPENSSL_LIBS) # # PKCS11 (aka crypto hardware) support (--with moved just after openssl) # AC_MSG_CHECKING(for PKCS11 support) if test "auto" = "$use_pkcs11" then if test "yes" = "$want_native_pkcs11" then use_pkcs11="yes" else use_pkcs11="no" fi fi case "$use_pkcs11" in no) AC_MSG_RESULT(no) USE_PKCS11="" PKCS11_TEST="" PKCS11_TOOLS="" ISC_PK11_C="" ISC_PK11_O="" ISC_PK11_API_C="" ISC_PK11_API_O="" ISC_PK11_RESULT_C="" ISC_PK11_RESULT_O="" ISC_ISCPK11_API_C="" ISC_ISCPK11_API_O="" ;; yes|*) AC_MSG_RESULT(yes) if ! $use_threads; then AC_MSG_ERROR([PKCS11 requires thread support]) fi if test "X$CRYPTO" = "X-DOPENSSL" then AC_MSG_CHECKING(for OpenSSL with PKCS11 support) saved_cc="$CC" saved_cflags="$CFLAGS" saved_libs="$LIBS" CC="$CC -pthread" CFLAGS="$CFLAGS $DST_OPENSSL_INC" LIBS="$LIBS $DST_OPENSSL_LIBS" AC_TRY_RUN([ #include #include int main() { ENGINE *e; OPENSSL_config(NULL); e = ENGINE_by_id("pkcs11"); if (e == NULL) return (1); if (ENGINE_init(e) <= 0) return (1); return (0); } ], [AC_MSG_RESULT(yes) PKCS11_TEST=pkcs11ssl PKCS11_ENGINE='-DPKCS11_ENGINE="\"pkcs11\""'], [AC_MSG_RESULT(no) PKCS11_TEST='' PKCS11_ENGINE='-DPKCS11_ENGINE=NULL'], [AC_MSG_RESULT(cross compile, defaulting to no) PKCS11_TEST='' PKCS11_ENGINE='-DPKCS11_ENGINE=NULL']) CC="$saved_cc" CFLAGS="$saved_cflags" LIBS="$saved_libs" else PKCS11_TEST='' PKCS11_ENGINE='-DPKCS11_ENGINE=NULL' fi USE_PKCS11='-DUSE_PKCS11' PKCS11_TOOLS=pkcs11 AC_CHECK_FUNC(getpassphrase, AC_DEFINE(HAVE_GETPASSPHRASE),) ISC_PK11_C="pk11.c" ISC_PK11_O="pk11.$O" ISC_PK11_API_C="pk11_api.c" ISC_PK11_API_O="pk11_api.$O" ISC_PK11_RESULT_C="pk11_result.c" ISC_PK11_RESULT_O="pk11_result.$O" ISC_ISCPK11_API_C="unix/pk11_api.c" ISC_ISCPK11_API_O="unix/pk11_api.$O" ;; esac AC_SUBST(USE_PKCS11) AC_SUBST(PKCS11_TOOLS) AC_SUBST(PKCS11_ENGINE) AC_SUBST(ISC_PK11_C) AC_SUBST(ISC_PK11_O) AC_SUBST(ISC_PK11_API_C) AC_SUBST(ISC_PK11_API_O) AC_SUBST(ISC_PK11_RESULT_C) AC_SUBST(ISC_PK11_RESULT_O) AC_SUBST(ISC_ISCPK11_API_C) AC_SUBST(ISC_ISCPK11_API_O) AC_MSG_CHECKING(for PKCS11 tools) case "$use_pkcs11" in no) PKCS11_PROVIDER="undefined" AC_MSG_RESULT(disabled) ;; yes|'') PKCS11_PROVIDER="undefined" AC_MSG_RESULT(enabled) ;; *) PKCS11_PROVIDER="$use_pkcs11" AC_MSG_RESULT([enabled, PKCS11 provider is $PKCS11_PROVIDER]) ;; esac AC_SUBST(PKCS11_PROVIDER) PKCS11_ECDSA="" PKCS11_GOST="" PKCS11_ED25519="" set_pk11_flavor="no" AC_MSG_CHECKING(for native PKCS11) case "$want_native_pkcs11" in yes) AC_MSG_RESULT(using native PKCS11 crypto) PKCS11LINKOBJS='${PKCS11LINKOBJS}' PKCS11LINKSRCS='${PKCS11LINKSRCS}' PKCS11_TEST=pkcs11 AC_MSG_CHECKING(for PKCS11 ECDSA) case "$with_ecdsa" in no) AC_MSG_RESULT(disabled) ;; *) AC_MSG_RESULT(enabled) PKCS11_ECDSA="yes" AC_DEFINE(HAVE_PKCS11_ECDSA, 1, [Define if your PKCS11 provider supports ECDSA.]) ;; esac AC_MSG_CHECKING(for PKCS11 GOST) case "$with_gost" in yes) AC_MSG_RESULT(enabled) PKCS11_GOST="yes" AC_DEFINE(HAVE_PKCS11_GOST, 1, [Define if your PKCS11 provider supports GOST.]) ;; *) AC_MSG_RESULT(disabled) ;; esac AC_MSG_CHECKING(for PKCS11 Ed25519) case "$with_eddsa" in yes|all) AC_MSG_RESULT(enabled) PKCS11_ED25519="yes" AC_DEFINE(HAVE_PKCS11_ED25519, 1, [Define if your PKCS11 provider supports Ed25519.]) AC_MSG_CHECKING(for PKCS11 Ed448) case "$with_eddsa" in all) AC_MSG_RESULT(enabled) AC_DEFINE(HAVE_PKCS11_ED448, 1, [Define if your PKCS11 provider supports Ed448.]) ;; *) AC_MSG_RESULT(disabled) ;; esac ;; *) AC_MSG_RESULT(disabled) ;; esac AC_MSG_CHECKING(for PKCS11 flavor) case "$PKCS11_PROVIDER" in *nfast*) AC_MSG_RESULT(Thales nCipher) # default pk11_flavor="PK11_THALES_FLAVOR" set_pk11_flavor="yes" ;; *libsofthsm2*) AC_MSG_RESULT(SoftHSMv2) pk11_flavor="PK11_SOFTHSMV2_FLAVOR" set_pk11_flavor="yes" ;; *libsofthsm*) AC_MSG_RESULT(SoftHSM) pk11_flavor="PK11_SOFTHSMV1_FLAVOR" set_pk11_flavor="yes" ;; *cryptech*) AC_MSG_RESULT(Cryptech) pk11_flavor="PK11_CRYPTECH_FLAVOR" set_pk11_flavor="yes" ;; *Keyper*) AC_MSG_RESULT(AEP Keyper) pk11_flavor="PK11_AEP_FLAVOR" set_pk11_flavor="yes" ;; undefined) AC_MSG_RESULT(undefined provider?) ;; *) AC_MSG_RESULT(unknown provider: tweaks are in lib/isc/include/pk11/site.h) ;; esac if test "yes" = "$set_pk11_flavor" ; then CFLAGS="$CFLAGS -DPK11_FLAVOR=$pk11_flavor" fi ;; no|'') AC_MSG_RESULT(disabled) ;; esac AC_SUBST(PKCS11LINKOBJS) AC_SUBST(PKCS11LINKSRCS) AC_SUBST(CRYPTO) AC_SUBST(PKCS11_ECDSA) AC_SUBST(PKCS11_GOST) AC_SUBST(PKCS11_ED25519) AC_SUBST(PKCS11_TEST) # 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 # # was --with-lmdb specified? # AC_MSG_CHECKING(for lmdb library) 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" LIBS="$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" LIBS="$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) AC_SEARCH_LIBS([mdb_env_create], [lmdb], [], [AC_MSG_ERROR([found lmdb include but not library.]) have_lmdb=""]) elif test "X$use_lmdb" = Xyes then AC_MSG_ERROR([include/lmdb.h not found.]) else AC_MSG_RESULT(no) fi NZD_TOOLS="" NZDSRCS= NZDTARGETS= if test "X${have_lmdb}" != "X" then CFLAGS="$CFLAGS $lmdb_cflags" AC_DEFINE(HAVE_LMDB, 1, [Define if lmdb was found]) NZD_TOOLS="nzd" NZDSRCS='${NZDSRCS}' NZDTARGETS='${NZDTARGETS}' fi AC_SUBST(NZD_TOOLS) AC_SUBST(NZDSRCS) AC_SUBST(NZDTARGETS) # # was --with-libxml2 specified? # AC_MSG_CHECKING(for libxml2 library) AC_ARG_WITH(libxml2, AS_HELP_STRING([--with-libxml2[=PATH]], [build with libxml2 library [yes|no|path]]), use_libxml2="$withval", use_libxml2="auto") case "$use_libxml2" in no) DST_LIBXML2_INC="" ;; auto|yes) case X`(xml2-config --version) 2>/dev/null` in X2.[[6789]].*) libxml2_libs=`xml2-config --libs` libxml2_cflags=`xml2-config --cflags` ;; *) if test "yes" = "$use_libxml2" ; then AC_MSG_RESULT(no) AC_MSG_ERROR(required libxml2 version not available) else libxml2_libs= libxml2_cflags= fi ;; esac ;; *) if test -f "$use_libxml2/bin/xml2-config" ; then libxml2_libs=`$use_libxml2/bin/xml2-config --libs` libxml2_cflags=`$use_libxml2/bin/xml2-config --cflags` fi ;; esac if test "X$libxml2_libs" != "X" then CFLAGS="$CFLAGS $libxml2_cflags" LIBS="$LIBS $libxml2_libs" # # Sanity check xml2-config output. # AC_TRY_LINK([#include ], [return(xmlTextWriterStartElement(NULL, NULL));], AC_MSG_RESULT(yes), AC_MSG_ERROR(xml2-config returns badness)) AC_DEFINE(HAVE_LIBXML2, 1, [Define if libxml2 was found]) XMLSTATS=1 else AC_MSG_RESULT(no) fi AC_SUBST(XMLSTATS) # # was --with-libjson specified? # AC_MSG_CHECKING(for json library) AC_ARG_WITH(libjson, AS_HELP_STRING([--with-libjson[=PATH]], [build with libjson0 library [yes|no|path]]), use_libjson="$withval", use_libjson="auto") have_libjson="" have_libjson_c="" case "$use_libjson" in no) libjson_libs="" ;; auto|yes) for d in /usr /usr/local /opt/local do if test -f "${d}/include/json/json.h" then if test ${d} != /usr then libjson_cflags="-I ${d}/include" LIBS="$LIBS -L${d}/lib" fi have_libjson="yes" elif test -f "${d}/include/json-c/json.h" then if test ${d} != /usr then libjson_cflags="-I ${d}/include" LIBS="$LIBS -L${d}/lib" fi have_libjson="yes" have_libjson_c="yes" fi done ;; *) if test -f "${use_libjson}/include/json/json.h" then libjson_cflags="-I${use_libjson}/include" LIBS="$LIBS -L${use_libjson}/lib" have_libjson="yes" elif test -f "${use_libjson}/include/json-c/json.h" then libjson_cflags="-I${use_libjson}/include" LIBS="$LIBS -L${use_libjson}/lib" have_libjson="yes" have_libjson_c="yes" else AC_MSG_ERROR([$use_libjson/include/json{,-c}/json.h not found.]) fi ;; esac if test "X${have_libjson}" != "X" then AC_MSG_RESULT(yes) AC_SEARCH_LIBS([json_object_new_int64], [json json-c], [], [AC_MSG_ERROR([found libjson include but not library.]) have_libjson=""]) elif test "X$use_libjson" = Xyes then AC_MSG_ERROR([include/json{,-c}/json.h not found.]) else AC_MSG_RESULT(no) fi if test "X${have_libjson}" != "X" then CFLAGS="$CFLAGS $libjson_cflags" AC_DEFINE(HAVE_JSON, 1, [Define if libjson was found]) if test "X${have_libjson_c}" = Xyes then AC_DEFINE(HAVE_JSON_C, 1, [Define if json-c was found]) fi JSONSTATS=1 fi AC_SUBST(JSONSTATS) # # was --with-zlib specified? # AC_MSG_CHECKING(for zlib library) AC_ARG_WITH(zlib, AS_HELP_STRING([--with-zlib[=PATH]], [build with zlib for HTTP compression [default=yes]]), with_zlib="$withval", with_zlib="auto") have_zlib="" case "$with_zlib" in no) zlib_libs="" ;; auto|yes) for d in /usr /usr/local /opt/local do if test -f "${d}/include/zlib.h" then if test ${d} != /usr then zlib_cflags="-I ${d}/include" LIBS="$LIBS -L${d}/lib" fi have_zlib="yes" fi done ;; *) if test -f "${with_zlib}/include/zlib.h" then zlib_cflags="-I${with_zlib}/include" LIBS="$LIBS -L${with_zlib}/lib" have_zlib="yes" else AC_MSG_ERROR([$with_zlib/include/zlib.h not found.]) fi ;; esac if test "X${have_zlib}" != "X" then AC_MSG_RESULT(yes) AC_SEARCH_LIBS([deflate], [z], [], [AC_MSG_ERROR([found zlib include but not library.]) have_zlib=""]) elif test "X$with_zlib" = Xyes then AC_MSG_ERROR([include/zlib.h not found.]) else AC_MSG_RESULT(no) fi ZLIB= if test "X${have_zlib}" != "X" then CFLAGS="$CFLAGS $zlib_cflags" AC_DEFINE(HAVE_ZLIB, 1, [Define if zlib was found]) ZLIB=1 fi AC_SUBST(ZLIB) # # In solaris 10, SMF can manage named service # AC_CHECK_LIB(scf, smf_enable_instance) # # flockfile is usually provided by pthreads, but we may want to use it # even if compiled with --disable-threads. getc_unlocked might also not # be defined. # AC_CHECK_FUNC(flockfile, AC_DEFINE(HAVE_FLOCKFILE),) AC_CHECK_FUNC(getc_unlocked, AC_DEFINE(HAVE_GETCUNLOCKED),) # # Indicate what the final decision was regarding threads. # AC_MSG_CHECKING(whether to build with threads) if $use_threads; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi # # End of pthreads stuff. # # # Large File # AC_ARG_ENABLE(largefile, AS_HELP_STRING([--enable-largefile], [64-bit file support]), want_largefile="yes", want_largefile="no") case $want_largefile in yes) ALWAYS_DEFINES="$ALWAYS_DEFINES -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" ;; *) ;; esac # # Additional compiler settings. # MKDEPCC="$CC" MKDEPCFLAGS="-M" IRIX_DNSSEC_WARNINGS_HACK="" if test "X$GCC" = "Xyes"; then STD_CWARNINGS="$STD_CWARNINGS -W -Wall -Wmissing-prototypes -Wcast-qual -Wwrite-strings -Wformat -Wpointer-arith" AC_MSG_CHECKING(if "$CC" supports -fno-strict-aliasing) SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror -fno-strict-aliasing" AC_TRY_COMPILE(,, [FNOSTRICTALIASING=yes],[FNOSTRICTALIASING=no]) CFLAGS="$SAVE_CFLAGS" if test "yes" = "$FNOSTRICTALIASING"; then AC_MSG_RESULT(yes) STD_CWARNINGS="$STD_CWARNINGS -fno-strict-aliasing" else AC_MSG_RESULT(no) fi # # turn off delete null pointer checks # AC_MSG_CHECKING(if "$CC" supports -fno-delete-null-pointer-checks) SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror -fno-delete-null-pointer-checks" AC_TRY_COMPILE(,, [FNODELETENULLPOINTERCHECKS=yes], [FNODELETENULLPOINTERCHECKS=no]) CFLAGS="$SAVE_CFLAGS" if test "yes" = "$FNODELETENULLPOINTERCHECKS"; then AC_MSG_RESULT(yes) STD_CWARNINGS="$STD_CWARNINGS -fno-delete-null-pointer-checks" else AC_MSG_RESULT(no) fi case "$host" in *-hp-hpux*) CFLAGS="$CFLAGS -Wl,+vnocompatwarnings" BACKTRACECFLAGS="$BACKTRACECFLAGS -Wl,+vnocompatwarnings" ;; esac if test "X$enable_warn_shadow" = Xyes; then STD_CWARNINGS="$STD_CWARNINGS -Wshadow" fi if test "X$enable_warn_error" = Xyes; then STD_CWARNINGS="$STD_CWARNINGS -Werror" fi else case $host in *-dec-osf*) CC="$CC -std" CCOPT="$CCOPT -std" CCNOOPT="$CCNOOPT -std" MKDEPCC="$CC" ;; *-hp-hpux*) CC="$CC -Ae -z" # The version of the C compiler that constantly warns about # 'const' as well as alignment issues is unfortunately not # able to be discerned via the version of the operating # system, nor does cc have a version flag. case "`$CC +W 123 2>&1`" in *Unknown?option*) STD_CWARNINGS="+w1" ;; *) # Turn off the pointlessly noisy warnings. STD_CWARNINGS="+w1 +W 474,530,2193,2236" ;; esac CCOPT="$CCOPT -Ae -z" CCNOOPT="$CCNOOPT -Ae -z" CFLAGS="$CFLAGS -Wl,+vnocompatwarnings" BACKTRACECFLAGS="$BACKTRACECFLAGS -Wl,+vnocompatwarnings" MKDEPPROG='cc -Ae -E -Wp,-M >/dev/null 2>>$TMP' ;; *-sgi-irix*) STD_CWARNINGS="-fullwarn -woff 1209" # # Silence more than 250 instances of # "prototyped function redeclared without prototype" # and 11 instances of # "variable ... was set but never used" # from lib/dns/sec/openssl. # IRIX_DNSSEC_WARNINGS_HACK="-woff 1692,1552" ;; *-solaris*) MKDEPCFLAGS="-xM" ;; *-sco-sysv*uw*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*) # UnixWare CC="$CC -w" ;; esac fi AC_SUBST(MKDEPCC) AC_SUBST(MKDEPCFLAGS) AC_SUBST(MKDEPPROG) AC_SUBST(IRIX_DNSSEC_WARNINGS_HACK) # # NLS # AC_CHECK_FUNC(catgets, AC_DEFINE(HAVE_CATGETS),) # # -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 mips-sgi-irix*) ;; *-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) 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) 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. # AC_ARG_ENABLE(backtrace, AS_HELP_STRING([--enable-backtrace], [log stack backtrace on abort [default=yes]]), want_backtrace="$enableval", want_backtrace="yes") case $want_backtrace in yes) ISC_PLATFORM_USEBACKTRACE="#define ISC_PLATFORM_USEBACKTRACE 1" AC_TRY_LINK([#include ], [return (backtrace((void **)0, 0));], [AC_DEFINE([HAVE_LIBCTRACE], [], [if system have backtrace function])],) ;; *) ISC_PLATFORM_USEBACKTRACE="#undef ISC_PLATFORM_USEBACKTRACE" ;; esac AC_SUBST(ISC_PLATFORM_USEBACKTRACE) 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) AC_SUBST(LIBTOOL_ALLOW_UNDEFINED) AC_SUBST(LIBTOOL_IN_MAIN) 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. # # # IPv6 # AC_ARG_ENABLE(ipv6, AS_HELP_STRING([--enable-ipv6], [use IPv6 [default=autodetect]])) case "$enable_ipv6" in yes|''|autodetect) AC_DEFINE(WANT_IPV6) ;; no) ;; esac # # 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_TRY_COMPILE([ #include #include #include ], [struct sockaddr_in6 sin6; return (0);], [AC_MSG_RESULT(yes) found_ipv6=yes], [AC_MSG_RESULT(no) found_ipv6=no]) # # See whether IPv6 support is provided via a Kame add-on. # This is done before other IPv6 linking tests to LIBS is properly set. # AC_MSG_CHECKING(for Kame IPv6 support) AC_ARG_WITH(kame, AS_HELP_STRING([--with-kame[=PATH]], [use Kame IPv6 [default path /usr/local/v6]]), use_kame="$withval", use_kame="no") case "$use_kame" in no) ;; yes) kame_path=/usr/local/v6 ;; *) kame_path="$use_kame" ;; esac case "$use_kame" in no) AC_MSG_RESULT(no) ;; *) if test -f $kame_path/lib/libinet6.a; then AC_MSG_RESULT($kame_path/lib/libinet6.a) LIBS="-L$kame_path/lib -linet6 $LIBS" else AC_MSG_ERROR([$kame_path/lib/libinet6.a not found. Please choose the proper path with the following command: configure --with-kame=PATH ]) fi ;; esac # # Whether netinet6/in6.h is needed has to be defined in isc/platform.h. # Including it on Kame-using platforms is very bad, though, because # Kame uses #error against direct inclusion. So include it on only # the platform that is otherwise broken without it -- BSD/OS 4.0 through 4.1. # This is done before the in6_pktinfo check because that's what # netinet6/in6.h is needed for. # changequote({, }) case "$host" in *-bsdi4.[01]*) ISC_PLATFORM_NEEDNETINET6IN6H="#define ISC_PLATFORM_NEEDNETINET6IN6H 1" LWRES_PLATFORM_NEEDNETINET6IN6H="#define LWRES_PLATFORM_NEEDNETINET6IN6H 1" isc_netinet6in6_hack="#include " ;; *) ISC_PLATFORM_NEEDNETINET6IN6H="#undef ISC_PLATFORM_NEEDNETINET6IN6H" LWRES_PLATFORM_NEEDNETINET6IN6H="#undef LWRES_PLATFORM_NEEDNETINET6IN6H" isc_netinet6in6_hack="" ;; esac changequote([, ]) # # This is similar to the netinet6/in6.h issue. # case "$host" in *-sco-sysv*uw*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*) # UnixWare ISC_PLATFORM_NEEDNETINETIN6H="#define ISC_PLATFORM_NEEDNETINETIN6H 1" LWRES_PLATFORM_NEEDNETINETIN6H="#define LWRES_PLATFORM_NEEDNETINETIN6H 1" ISC_PLATFORM_FIXIN6ISADDR="#define ISC_PLATFORM_FIXIN6ISADDR 1" isc_netinetin6_hack="#include " ;; *) ISC_PLATFORM_NEEDNETINETIN6H="#undef ISC_PLATFORM_NEEDNETINETIN6H" LWRES_PLATFORM_NEEDNETINETIN6H="#undef LWRES_PLATFORM_NEEDNETINETIN6H" ISC_PLATFORM_FIXIN6ISADDR="#undef ISC_PLATFORM_FIXIN6ISADDR" isc_netinetin6_hack="" ;; esac # # Now delve deeper into the suitability of the IPv6 support. # case "$found_ipv6" in yes) ISC_PLATFORM_HAVEIPV6="#define ISC_PLATFORM_HAVEIPV6 1" LWRES_PLATFORM_HAVEIPV6="#define LWRES_PLATFORM_HAVEIPV6 1" AC_MSG_CHECKING(for in6_addr) AC_TRY_COMPILE([ #include #include #include $isc_netinetin6_hack $isc_netinet6in6_hack ], [struct in6_addr in6; return (0);], [AC_MSG_RESULT(yes) ISC_PLATFORM_HAVEINADDR6="#undef ISC_PLATFORM_HAVEINADDR6" LWRES_PLATFORM_HAVEINADDR6="#undef LWRES_PLATFORM_HAVEINADDR6" isc_in_addr6_hack=""], [AC_MSG_RESULT(no) ISC_PLATFORM_HAVEINADDR6="#define ISC_PLATFORM_HAVEINADDR6 1" LWRES_PLATFORM_HAVEINADDR6="#define LWRES_PLATFORM_HAVEINADDR6 1" isc_in_addr6_hack="#define in6_addr in_addr6"]) AC_MSG_CHECKING(for in6addr_any) AC_TRY_LINK([ #include #include #include $isc_netinetin6_hack $isc_netinet6in6_hack $isc_in_addr6_hack ], [struct in6_addr in6; in6 = in6addr_any; return (in6.s6_addr[0]);], [AC_MSG_RESULT(yes) ISC_PLATFORM_NEEDIN6ADDRANY="#undef ISC_PLATFORM_NEEDIN6ADDRANY" LWRES_PLATFORM_NEEDIN6ADDRANY="#undef LWRES_PLATFORM_NEEDIN6ADDRANY"], [AC_MSG_RESULT(no) ISC_PLATFORM_NEEDIN6ADDRANY="#define ISC_PLATFORM_NEEDIN6ADDRANY 1" LWRES_PLATFORM_NEEDIN6ADDRANY="#define LWRES_PLATFORM_NEEDIN6ADDRANY 1"]) AC_MSG_CHECKING(for in6addr_loopback) AC_TRY_LINK([ #include #include #include $isc_netinetin6_hack $isc_netinet6in6_hack $isc_in_addr6_hack ], [struct in6_addr in6; in6 = in6addr_loopback; return (in6.s6_addr[0]);], [AC_MSG_RESULT(yes) ISC_PLATFORM_NEEDIN6ADDRLOOPBACK="#undef ISC_PLATFORM_NEEDIN6ADDRLOOPBACK" LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK="#undef LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK"], [AC_MSG_RESULT(no) ISC_PLATFORM_NEEDIN6ADDRLOOPBACK="#define ISC_PLATFORM_NEEDIN6ADDRLOOPBACK 1" LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK="#define LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK 1"]) AC_MSG_CHECKING(for sin6_scope_id in struct sockaddr_in6) AC_TRY_COMPILE([ #include #include #include $isc_netinetin6_hack $isc_netinet6in6_hack ], [struct sockaddr_in6 xyzzy; xyzzy.sin6_scope_id = 0; return (0);], [AC_MSG_RESULT(yes) ISC_PLATFORM_HAVESCOPEID="#define ISC_PLATFORM_HAVESCOPEID 1" result="#define LWRES_HAVE_SIN6_SCOPE_ID 1"], [AC_MSG_RESULT(no) ISC_PLATFORM_HAVESCOPEID="#undef ISC_PLATFORM_HAVESCOPEID" result="#undef LWRES_HAVE_SIN6_SCOPE_ID"]) LWRES_HAVE_SIN6_SCOPE_ID="$result" AC_MSG_CHECKING(for in6_pktinfo) AC_TRY_COMPILE([ #include #include #include $isc_netinetin6_hack $isc_netinet6in6_hack ], [struct in6_pktinfo xyzzy; return (0);], [AC_MSG_RESULT(yes) ISC_PLATFORM_HAVEIN6PKTINFO="#define ISC_PLATFORM_HAVEIN6PKTINFO 1"], [AC_MSG_RESULT(no -- disabling runtime ipv6 support) ISC_PLATFORM_HAVEIN6PKTINFO="#undef ISC_PLATFORM_HAVEIN6PKTINFO"]) ;; no) ISC_PLATFORM_HAVEIPV6="#undef ISC_PLATFORM_HAVEIPV6" LWRES_PLATFORM_HAVEIPV6="#undef LWRES_PLATFORM_HAVEIPV6" ISC_PLATFORM_NEEDIN6ADDRANY="#undef ISC_PLATFORM_NEEDIN6ADDRANY" LWRES_PLATFORM_NEEDIN6ADDRANY="#undef LWRES_PLATFORM_NEEDIN6ADDRANY" ISC_PLATFORM_HAVEIN6PKTINFO="#undef ISC_PLATFORM_HAVEIN6PKTINFO" LWRES_HAVE_SIN6_SCOPE_ID="#define LWRES_HAVE_SIN6_SCOPE_ID 1" ISC_PLATFORM_HAVESCOPEID="#define ISC_PLATFORM_HAVESCOPEID 1" ISC_IPV6_H="ipv6.h" ISC_IPV6_O="ipv6.$O" ISC_ISCIPV6_O="unix/ipv6.$O" ISC_IPV6_C="ipv6.c" ;; esac AC_MSG_CHECKING(for struct sockaddr_storage) AC_TRY_COMPILE([ #include #include $isc_netinetin6_hack $isc_netinet6in6_hack ], [struct sockaddr_storage storage; return (0);], [AC_MSG_RESULT(yes) ISC_PLATFORM_HAVESOCKADDRSTORAGE="#define ISC_PLATFORM_HAVESOCKADDRSTORAGE 1"], [AC_MSG_RESULT(no) ISC_PLATFORM_HAVESOCKADDRSTORAGE="#undef ISC_PLATFORM_HAVESOCKADDRSTORAGE"]) AC_SUBST(ISC_PLATFORM_HAVEIPV6) AC_SUBST(LWRES_PLATFORM_HAVEIPV6) AC_SUBST(ISC_PLATFORM_NEEDNETINETIN6H) AC_SUBST(LWRES_PLATFORM_NEEDNETINETIN6H) AC_SUBST(ISC_PLATFORM_NEEDNETINET6IN6H) AC_SUBST(LWRES_PLATFORM_NEEDNETINET6IN6H) AC_SUBST(ISC_PLATFORM_HAVEINADDR6) AC_SUBST(LWRES_PLATFORM_HAVEINADDR6) AC_SUBST(ISC_PLATFORM_NEEDIN6ADDRANY) AC_SUBST(LWRES_PLATFORM_NEEDIN6ADDRANY) AC_SUBST(ISC_PLATFORM_NEEDIN6ADDRLOOPBACK) AC_SUBST(LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK) AC_SUBST(ISC_PLATFORM_HAVEIN6PKTINFO) AC_SUBST(ISC_PLATFORM_FIXIN6ISADDR) AC_SUBST(ISC_PLATFORM_HAVESOCKADDRSTORAGE) AC_SUBST(ISC_IPV6_H) AC_SUBST(ISC_IPV6_O) AC_SUBST(ISC_ISCIPV6_O) AC_SUBST(ISC_IPV6_C) AC_SUBST(LWRES_HAVE_SIN6_SCOPE_ID) AC_SUBST(ISC_PLATFORM_HAVESCOPEID) AC_MSG_CHECKING([for struct if_laddrreq]) AC_TRY_LINK([ #include #include ],[ struct if_laddrreq a; ], [AC_MSG_RESULT(yes) ISC_PLATFORM_HAVEIF_LADDRREQ="#define ISC_PLATFORM_HAVEIF_LADDRREQ 1"], [AC_MSG_RESULT(no) ISC_PLATFORM_HAVEIF_LADDRREQ="#undef ISC_PLATFORM_HAVEIF_LADDRREQ"]) AC_SUBST(ISC_PLATFORM_HAVEIF_LADDRREQ) AC_MSG_CHECKING([for struct if_laddrconf]) AC_TRY_LINK([ #include #include ],[ struct if_laddrconf a; ], [AC_MSG_RESULT(yes) ISC_PLATFORM_HAVEIF_LADDRCONF="#define ISC_PLATFORM_HAVEIF_LADDRCONF 1"], [AC_MSG_RESULT(no) ISC_PLATFORM_HAVEIF_LADDRCONF="#undef ISC_PLATFORM_HAVEIF_LADDRCONF"]) AC_SUBST(ISC_PLATFORM_HAVEIF_LADDRCONF) # # Check for network functions that are often missing. We do this # after the libtool checking, so we can put the right suffix on # the files. It also needs to come after checking for a Kame add-on, # which provides some (all?) of the desired functions. # AC_MSG_CHECKING([for inet_ntop with IPv6 support]) AC_TRY_RUN([ #include #include #include #include main() { char a[16],b[64]; return(inet_ntop(AF_INET6, a, b, sizeof(b)) == (char*)0);}], [AC_MSG_RESULT(yes) ISC_PLATFORM_NEEDNTOP="#undef ISC_PLATFORM_NEEDNTOP"], [AC_MSG_RESULT(no) ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS inet_ntop.$O" ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS inet_ntop.c" ISC_PLATFORM_NEEDNTOP="#define ISC_PLATFORM_NEEDNTOP 1"], [AC_MSG_RESULT(assuming inet_ntop not needed) ISC_PLATFORM_NEEDNTOP="#undef ISC_PLATFORM_NEEDNTOP"]) # On NetBSD 1.4.2 and maybe others, inet_pton() incorrectly accepts # addresses with less than four octets, like "1.2.3". Also leading # zeros should also be rejected. AC_MSG_CHECKING([for working inet_pton with IPv6 support]) AC_TRY_RUN([ #include #include #include #include main() { char a[16]; return (inet_pton(AF_INET, "1.2.3", a) == 1 ? 1 : inet_pton(AF_INET, "1.2.3.04", a) == 1 ? 1 : (inet_pton(AF_INET6, "::1.2.3.4", a) != 1)); }], [AC_MSG_RESULT(yes) ISC_PLATFORM_NEEDPTON="#undef ISC_PLATFORM_NEEDPTON"], [AC_MSG_RESULT(no) ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS inet_pton.$O" ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS inet_pton.c" ISC_PLATFORM_NEEDPTON="#define ISC_PLATFORM_NEEDPTON 1"], [AC_MSG_RESULT(assuming inet_pton needed) ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS inet_pton.$O" ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS inet_pton.c" ISC_PLATFORM_NEEDPTON="#define ISC_PLATFORM_NEEDPTON 1"]) AC_SUBST(ISC_PLATFORM_NEEDNTOP) AC_SUBST(ISC_PLATFORM_NEEDPTON) # # Look for a 4.4BSD-style sa_len member in struct sockaddr. # case "$host" in *-dec-osf*) # Turn on 4.4BSD style sa_len support. AC_DEFINE(_SOCKADDR_LEN) ;; esac AC_MSG_CHECKING(for sa_len in struct sockaddr) AC_TRY_COMPILE([ #include #include ], [struct sockaddr sa; sa.sa_len = 0; return (0);], [AC_MSG_RESULT(yes) ISC_PLATFORM_HAVESALEN="#define ISC_PLATFORM_HAVESALEN 1" LWRES_PLATFORM_HAVESALEN="#define LWRES_PLATFORM_HAVESALEN 1"], [AC_MSG_RESULT(no) ISC_PLATFORM_HAVESALEN="#undef ISC_PLATFORM_HAVESALEN" LWRES_PLATFORM_HAVESALEN="#undef LWRES_PLATFORM_HAVESALEN"]) AC_SUBST(ISC_PLATFORM_HAVESALEN) AC_SUBST(LWRES_PLATFORM_HAVESALEN) # # Look for a 4.4BSD or 4.3BSD struct msghdr # AC_MSG_CHECKING(for struct msghdr flavor) AC_TRY_COMPILE([ #include #include ], [struct msghdr msg; msg.msg_flags = 0; return (0);], [AC_MSG_RESULT(4.4BSD) ISC_PLATFORM_MSGHDRFLAVOR="#define ISC_NET_BSD44MSGHDR 1"], [AC_MSG_RESULT(4.3BSD) ISC_PLATFORM_MSGHDRFLAVOR="#define ISC_NET_BSD43MSGHDR 1"]) AC_SUBST(ISC_PLATFORM_MSGHDRFLAVOR) # # Look for in_port_t. # AC_MSG_CHECKING(for type in_port_t) AC_TRY_COMPILE([ #include #include ], [in_port_t port = 25; return (0);], [AC_MSG_RESULT(yes) ISC_PLATFORM_NEEDPORTT="#undef ISC_PLATFORM_NEEDPORTT"], [AC_MSG_RESULT(no) ISC_PLATFORM_NEEDPORTT="#define ISC_PLATFORM_NEEDPORTT 1"]) AC_SUBST(ISC_PLATFORM_NEEDPORTT) # # 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). # AC_ARG_ENABLE(tcp_fastopen, AS_HELP_STRING([--disable-tcp-fastopen], [disable TCP Fast Open support [default=autodetect]])) AC_MSG_CHECKING(for TCP_FASTOPEN socket option) case "$enable_tcp_fastopen" in yes|''|autodetect) AC_EGREP_CPP(has_tfo, [ #include #include #include #ifdef TCP_FASTOPEN int has_tfo() { return (0); } #endif ], [AC_MSG_RESULT(yes) ISC_PLATFORM_HAVETFO="#define ISC_PLATFORM_HAVETFO 1"], [AC_MSG_RESULT(no) ISC_PLATFORM_HAVETFO="#undef ISC_PLATFORM_HAVETFO"]) ;; no) AC_MSG_RESULT(disabled) ISC_PLATFORM_HAVETFO="#undef ISC_PLATFORM_HAVETFO" ;; esac AC_SUBST(ISC_PLATFORM_HAVETFO) # # Check for addrinfo # AC_MSG_CHECKING(for struct addrinfo) AC_TRY_COMPILE([ #include ], [struct addrinfo a; return (0);], [AC_MSG_RESULT(yes) ISC_LWRES_NEEDADDRINFO="#undef ISC_LWRES_NEEDADDRINFO" ISC_IRS_NEEDADDRINFO="#undef ISC_IRS_NEEDADDRINFO" AC_DEFINE(HAVE_ADDRINFO)], [AC_MSG_RESULT(no) ISC_LWRES_NEEDADDRINFO="#define ISC_LWRES_NEEDADDRINFO 1" ISC_IRS_NEEDADDRINFO="#define ISC_IRS_NEEDADDRINFO 1"]) AC_SUBST(ISC_LWRES_NEEDADDRINFO) AC_SUBST(ISC_IRS_NEEDADDRINFO) # # Check for rrsetinfo # AC_MSG_CHECKING(for struct rrsetinfo) AC_TRY_COMPILE([ #include ], [struct rrsetinfo r; return (0);], [AC_MSG_RESULT(yes) ISC_LWRES_NEEDRRSETINFO="#undef ISC_LWRES_NEEDRRSETINFO"], [AC_MSG_RESULT(no) ISC_LWRES_NEEDRRSETINFO="#define ISC_LWRES_NEEDRRSETINFO 1"]) AC_SUBST(ISC_LWRES_NEEDRRSETINFO) AC_MSG_CHECKING(for int sethostent) AC_TRY_COMPILE([ #include ], [int i = sethostent(0); return(0);], [AC_MSG_RESULT(yes) ISC_LWRES_SETHOSTENTINT="#define ISC_LWRES_SETHOSTENTINT 1"], [AC_MSG_RESULT(no) ISC_LWRES_SETHOSTENTINT="#undef ISC_LWRES_SETHOSTENTINT"]) AC_SUBST(ISC_LWRES_SETHOSTENTINT) AC_MSG_CHECKING(for int endhostent) AC_TRY_COMPILE([ #include ], [int i = endhostent(); return(0);], [AC_MSG_RESULT(yes) ISC_LWRES_ENDHOSTENTINT="#define ISC_LWRES_ENDHOSTENTINT 1"], [AC_MSG_RESULT(no) ISC_LWRES_ENDHOSTENTINT="#undef ISC_LWRES_ENDHOSTENTINT"]) AC_SUBST(ISC_LWRES_ENDHOSTENTINT) AC_MSG_CHECKING(for getnetbyaddr(in_addr_t, ...)) AC_TRY_COMPILE([ #include struct netent *getnetbyaddr(in_addr_t, int);], [], [AC_MSG_RESULT(yes) ISC_LWRES_GETNETBYADDRINADDR="#define ISC_LWRES_GETNETBYADDRINADDR 1"], [AC_MSG_RESULT(no) ISC_LWRES_GETNETBYADDRINADDR="#undef ISC_LWRES_GETNETBYADDRINADDR"]) AC_SUBST(ISC_LWRES_GETNETBYADDRINADDR) AC_MSG_CHECKING(for int setnetent) AC_TRY_COMPILE([ #include ], [int i = setnetent(0); return(0);], [AC_MSG_RESULT(yes) ISC_LWRES_SETNETENTINT="#define ISC_LWRES_SETNETENTINT 1"], [AC_MSG_RESULT(no) ISC_LWRES_SETNETENTINT="#undef ISC_LWRES_SETNETENTINT"]) AC_SUBST(ISC_LWRES_SETNETENTINT) AC_MSG_CHECKING(for int endnetent) AC_TRY_COMPILE([ #include ], [int i = endnetent(); return(0);], [AC_MSG_RESULT(yes) ISC_LWRES_ENDNETENTINT="#define ISC_LWRES_ENDNETENTINT 1"], [AC_MSG_RESULT(no) ISC_LWRES_ENDNETENTINT="#undef ISC_LWRES_ENDNETENTINT"]) AC_SUBST(ISC_LWRES_ENDNETENTINT) AC_MSG_CHECKING(for gethostbyaddr(const void *, size_t, ...)) AC_TRY_COMPILE([ #include struct hostent *gethostbyaddr(const void *, size_t, int);], [return(0);], [AC_MSG_RESULT(yes) ISC_LWRES_GETHOSTBYADDRVOID="#define ISC_LWRES_GETHOSTBYADDRVOID 1"], [AC_MSG_RESULT(no) ISC_LWRES_GETHOSTBYADDRVOID="#undef ISC_LWRES_GETHOSTBYADDRVOID"]) AC_SUBST(ISC_LWRES_GETHOSTBYADDRVOID) AC_MSG_CHECKING(for h_errno in netdb.h) AC_TRY_COMPILE([ #include ], [h_errno = 1; return(0);], [AC_MSG_RESULT(yes) ISC_LWRES_NEEDHERRNO="#undef ISC_LWRES_NEEDHERRNO"], [AC_MSG_RESULT(no) ISC_LWRES_NEEDHERRNO="#define ISC_LWRES_NEEDHERRNO 1"]) AC_SUBST(ISC_LWRES_NEEDHERRNO) # # Sadly, the definitions of system-supplied getnameinfo(3) vary. Try to catch # known variations here: # AC_MSG_CHECKING(for getnameinfo prototype definitions) AC_TRY_COMPILE([ #include #include #include int getnameinfo(const struct sockaddr *, socklen_t, char *, socklen_t, char *, socklen_t, unsigned int);], [ return (0);], [AC_MSG_RESULT(socklen_t for buflen; u_int for flags) AC_DEFINE(IRS_GETNAMEINFO_SOCKLEN_T, socklen_t, [Define to the sockaddr length type used by getnameinfo(3).]) AC_DEFINE(IRS_GETNAMEINFO_BUFLEN_T, socklen_t, [Define to the buffer length type used by getnameinfo(3).]) AC_DEFINE(IRS_GETNAMEINFO_FLAGS_T, unsigned int, [Define to the flags type used by getnameinfo(3).])], [AC_TRY_COMPILE([ #include #include #include int getnameinfo(const struct sockaddr *, socklen_t, char *, size_t, char *, size_t, int);], [ return (0);], [AC_MSG_RESULT(size_t for buflen; int for flags) AC_DEFINE(IRS_GETNAMEINFO_SOCKLEN_T, socklen_t) AC_DEFINE(IRS_GETNAMEINFO_BUFLEN_T, size_t) AC_DEFINE(IRS_GETNAMEINFO_FLAGS_T, int)], [AC_TRY_COMPILE([ #include #include #include int getnameinfo(const struct sockaddr *, size_t, char *, size_t, char *, size_t, int);], [ return (0);], [AC_MSG_RESULT(size_t for buflen; int for flags) AC_DEFINE(IRS_GETNAMEINFO_SOCKLEN_T, size_t) AC_DEFINE(IRS_GETNAMEINFO_BUFLEN_T, size_t) AC_DEFINE(IRS_GETNAMEINFO_FLAGS_T, int)], [AC_MSG_RESULT(not match any subspecies; assume standard definition) AC_DEFINE(IRS_GETNAMEINFO_SOCKLEN_T, socklen_t) AC_DEFINE(IRS_GETNAMEINFO_BUFLEN_T, socklen_t) AC_DEFINE(IRS_GETNAMEINFO_FLAGS_T, int)])])]) # # ...and same for gai_strerror(). # AC_MSG_CHECKING(for gai_strerror prototype definitions) AC_TRY_COMPILE([ #include #include #include char *gai_strerror(int ecode);], [ return (0); ], [AC_MSG_RESULT(returning char *) AC_DEFINE([IRS_GAISTRERROR_RETURN_T], [char *], [return type of gai_strerror])], [AC_MSG_RESULT(not match any subspecies; assume standard definition) AC_DEFINE([IRS_GAISTRERROR_RETURN_T], [const char *])]) AC_CHECK_FUNC(getipnodebyname, [ISC_LWRES_GETIPNODEPROTO="#undef ISC_LWRES_GETIPNODEPROTO"], [ISC_LWRES_GETIPNODEPROTO="#define ISC_LWRES_GETIPNODEPROTO 1"]) AC_CHECK_FUNC(getnameinfo, [ISC_LWRES_GETNAMEINFOPROTO="#undef ISC_LWRES_GETNAMEINFOPROTO"], [ISC_LWRES_GETNAMEINFOPROTO="#define ISC_LWRES_GETNAMEINFOPROTO 1"]) AC_CHECK_FUNC(getaddrinfo, [ISC_LWRES_GETADDRINFOPROTO="#undef ISC_LWRES_GETADDRINFOPROTO" AC_DEFINE(HAVE_GETADDRINFO)], [ISC_LWRES_GETADDRINFOPROTO="#define ISC_LWRES_GETADDRINFOPROTO 1"]) AC_CHECK_FUNC(gai_strerror, AC_DEFINE(HAVE_GAISTRERROR)) AC_SUBST(ISC_LWRES_GETIPNODEPROTO) AC_SUBST(ISC_LWRES_GETADDRINFOPROTO) AC_SUBST(ISC_LWRES_GETNAMEINFOPROTO) AC_SUBST(ISC_IRS_GETNAMEINFOSOCKLEN) AC_ARG_ENABLE(getifaddrs, AS_HELP_STRING([--enable-getifaddrs], [enable the use of getifaddrs() [yes|no].]), want_getifaddrs="$enableval", want_getifaddrs="yes") # # This interface iteration code for getifaddrs() will fall back to using # /proc/net/if_inet6 if getifaddrs() in glibc doesn't return any IPv6 # addresses. # case $want_getifaddrs in glibc) AC_MSG_WARN("--enable-getifaddrs=glibc is no longer required") AC_CHECK_FUNC(getifaddrs, AC_DEFINE(HAVE_GETIFADDRS)) ;; yes) AC_CHECK_FUNC(getifaddrs, AC_DEFINE(HAVE_GETIFADDRS)) ;; no) ;; esac # # Look for a sysctl call to get the list of network interfaces. # case $ac_cv_header_sys_sysctl_h in yes) AC_MSG_CHECKING(for interface list sysctl) AC_EGREP_CPP(found_rt_iflist, [ #include #include #include #ifdef NET_RT_IFLIST found_rt_iflist #endif ], [AC_MSG_RESULT(yes) AC_DEFINE(HAVE_IFLIST_SYSCTL)], [AC_MSG_RESULT(no)]) ;; esac # # Check for some other useful functions that are not ever-present. # # We test for strsep() using AC_TRY_LINK instead of AC_CHECK_FUNC # because AIX 4.3.3 with patches for bos.adt.include to version 4.3.3.77 # reportedly defines strsep() without declaring it in when # -D_LINUX_SOURCE_COMPAT is not defined [RT #2190], and # AC_CHECK_FUNC() incorrectly succeeds because it declares # the function itself. AC_MSG_CHECKING(for correctly declared strsep()) AC_TRY_LINK([#include ], [char *sp; char *foo = strsep(&sp, ".");], [AC_MSG_RESULT(yes); ISC_PLATFORM_NEEDSTRSEP="#undef ISC_PLATFORM_NEEDSTRSEP"], [AC_MSG_RESULT(no); ISC_PLATFORM_NEEDSTRSEP="#define ISC_PLATFORM_NEEDSTRSEP 1"]) AC_SUBST(ISC_PLATFORM_NEEDSTRSEP) AC_CHECK_FUNC(memmove, [ISC_PLATFORM_NEEDMEMMOVE="#undef ISC_PLATFORM_NEEDMEMMOVE"], [ISC_PLATFORM_NEEDMEMMOVE="#define ISC_PLATFORM_NEEDMEMMOVE 1"]) AC_SUBST(ISC_PLATFORM_NEEDMEMMOVE) AC_CHECK_FUNC(strtoul, [ISC_PLATFORM_NEEDSTRTOUL="#undef ISC_PLATFORM_NEEDSTRTOUL" LWRES_PLATFORM_NEEDSTRTOUL="#undef LWRES_PLATFORM_NEEDSTRTOUL" GENRANDOMLIB=""], [ISC_PLATFORM_NEEDSTRTOUL="#define ISC_PLATFORM_NEEDSTRTOUL 1" LWRES_PLATFORM_NEEDSTRTOUL="#define LWRES_PLATFORM_NEEDSTRTOUL 1" GENRANDOMLIB='${ISCLIBS}']) AC_SUBST(ISC_PLATFORM_NEEDSTRTOUL) AC_SUBST(LWRES_PLATFORM_NEEDSTRTOUL) AC_SUBST(GENRANDOMLIB) AC_CHECK_FUNC(strlcpy, [ISC_PLATFORM_NEEDSTRLCPY="#undef ISC_PLATFORM_NEEDSTRLCPY" LWRES_PLATFORM_NEEDSTRLCPY="#undef LWRES_PLATFORM_NEEDSTRLCPY"], [ISC_PLATFORM_NEEDSTRLCPY="#define ISC_PLATFORM_NEEDSTRLCPY 1" LWRES_PLATFORM_NEEDSTRLCPY="#define LWRES_PLATFORM_NEEDSTRLCPY 1"]) AC_SUBST(ISC_PLATFORM_NEEDSTRLCPY) AC_SUBST(LWRES_PLATFORM_NEEDSTRLCPY) AC_CHECK_FUNC(strlcat, [ISC_PLATFORM_NEEDSTRLCAT="#undef ISC_PLATFORM_NEEDSTRLCAT"], [ISC_PLATFORM_NEEDSTRLCAT="#define ISC_PLATFORM_NEEDSTRLCAT 1"]) AC_SUBST(ISC_PLATFORM_NEEDSTRLCAT) AC_CHECK_FUNC(strcasestr, [ISC_PLATFORM_NEEDSTRCASESTR="#undef ISC_PLATFORM_NEEDSTRCASESTR"], [ISC_PLATFORM_NEEDSTRCASESTR="#define ISC_PLATFORM_NEEDSTRCASESTR 1"]) AC_SUBST(ISC_PLATFORM_NEEDSTRCASESTR) AC_SUBST(READLINE_LIB) 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 ISC_PRINT_OBJS= ISC_PRINT_SRCS= ISC_PLATFORM_NEEDPRINTF='#undef ISC_PLATFORM_NEEDPRINTF' ISC_PLATFORM_NEEDFPRINTF='#undef ISC_PLATFORM_NEEDFPRINTF' ISC_PLATFORM_NEEDSPRINTF='#undef ISC_PLATFORM_NEEDSPRINTF' ISC_PLATFORM_NEEDVSNPRINTF='#undef ISC_PLATFORM_NEEDVSNPRINTF' LWRES_PLATFORM_NEEDVSNPRINTF='#undef LWRES_PLATFORM_NEEDVSNPRINTF' AC_MSG_CHECKING(sprintf return type) AC_TRY_COMPILE([ #include ], [ char buf[2]; return(*sprintf(buf,"x"));], [AC_MSG_RESULT(char *) ISC_PRINT_OBJS="print.$O" ISC_PRINT_SRCS="print.c" ISC_PLATFORM_NEEDSPRINTF="#define ISC_PLATFORM_NEEDSPRINTF" LWRES_PLATFORM_NEEDSPRINTF="#define LWRES_PLATFORM_NEEDSPRINTF" ],[AC_MSG_RESULT(int)]) AC_CHECK_FUNC(vsnprintf, [], [ISC_PRINT_OBJS="print.$O" ISC_PRINT_SRCS="print.c" ISC_PLATFORM_NEEDVSNPRINTF="#define ISC_PLATFORM_NEEDVSNPRINTF 1" LWRES_PLATFORM_NEEDVSNPRINTF="#define LWRES_PLATFORM_NEEDVSNPRINTF 1"]) AC_MSG_CHECKING(printf for %z support) AC_TRY_RUN([ #include int main() { size_t j = 0; char buf[100]; buf[0] = 0; sprintf(buf, "%zu", j); return ((buf[0] == '0' && buf[1] == '\0') ? 0 : 1); } ], [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no) ISC_PRINT_OBJS="print.$O" ISC_PRINT_SRCS="print.c" ISC_PLATFORM_NEEDPRINTF='#define ISC_PLATFORM_NEEDPRINTF 1' ISC_PLATFORM_NEEDFPRINTF='#define ISC_PLATFORM_NEEDFPRINTF 1' ISC_PLATFORM_NEEDFSRINTF='#define ISC_PLATFORM_NEEDSPRINTF 1' ISC_PLATFORM_NEEDVSNPRINTF="#define ISC_PLATFORM_NEEDVSNPRINTF 1" LWRES_PLATFORM_NEEDVSNPRINTF="#define LWRES_PLATFORM_NEEDVSNPRINTF 1"], [AC_MSG_RESULT(assuming target platform supports %z)]) AC_SUBST(ISC_PLATFORM_NEEDPRINTF) AC_SUBST(ISC_PLATFORM_NEEDFPRINTF) AC_SUBST(ISC_PLATFORM_NEEDSPRINTF) AC_SUBST(ISC_PLATFORM_NEEDVSNPRINTF) AC_SUBST(LWRES_PLATFORM_NEEDSPRINTF) AC_SUBST(LWRES_PLATFORM_NEEDVSNPRINTF) ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS $ISC_PRINT_OBJS" ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS $ISC_PRINT_SRCS" AC_SUBST(ISC_EXTRA_OBJS) AC_SUBST(ISC_EXTRA_SRCS) AC_CHECK_FUNC(strerror, AC_DEFINE(HAVE_STRERROR)) # # Use our own SPNEGO implementation? # AC_ARG_ENABLE(isc-spnego, AS_HELP_STRING([--disable-isc-spnego], [use SPNEGO from GSSAPI library])) if test -n "$USE_GSSAPI" then case "$enable_isc_spnego" in yes|'') USE_ISC_SPNEGO='-DUSE_ISC_SPNEGO' DST_EXTRA_OBJS="$DST_EXTRA_OBJS spnego.$O" DST_EXTRA_SRCS="$DST_EXTRA_SRCS spnego.c" AC_MSG_RESULT(using SPNEGO from lib/dns) ;; no) AC_MSG_RESULT(using SPNEGO from GSSAPI library) ;; esac fi AC_SUBST(USE_ISC_SPNEGO) 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. AC_ARG_ENABLE(chroot, AS_HELP_STRING([--disable-chroot], [disable chroot])) case "$enable_chroot" in yes|'') AC_CHECK_FUNCS(chroot) ;; no) ;; esac AC_ARG_ENABLE(linux-caps, AS_HELP_STRING([--disable-linux-caps], [disable linux capabilities])) case "$enable_linux_caps" in yes|'') AC_CHECK_HEADERS(linux/types.h) AC_CHECK_HEADERS([sys/capability.h]) AC_CHECK_HEADERS([linux/capability.h], [], [], [#ifdef HAVE_LINUX_TYPES_H #include #endif ]) AC_CHECK_LIB(cap, cap_set_proc) ;; no) ;; esac AC_CHECK_HEADERS(sys/prctl.h) 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.]) ;; *-sunos*) 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_FUNC(tzset, AC_DEFINE(HAVE_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(st_mtim.tv_nsec) AC_TRY_COMPILE([#include ],[struct stat s; return(s.st_mtim.tv_nsec);], [AC_MSG_RESULT(yes) ISC_PLATFORM_HAVESTATNSEC="#define ISC_PLATFORM_HAVESTATNSEC 1"], [AC_MSG_RESULT(no) ISC_PLATFORM_HAVESTATNSEC="#undef ISC_PLATFORM_HAVESTATNSEC"]) AC_SUBST(ISC_PLATFORM_HAVESTATNSEC) # # BSD/OS, and perhaps some others, don't define rlim_t. # AC_MSG_CHECKING(for type rlim_t) AC_TRY_COMPILE([ #include #include #include ], [rlim_t rl = 19671212; return (0);], [AC_MSG_RESULT(yes) ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE rlim_t"], [AC_MSG_RESULT(no) AC_MSG_CHECKING(type of rlim_cur) AC_TRY_RUN([ #include #include #include main() { struct rlimit r; exit(!(sizeof(r.rlim_cur) == sizeof(int)));}], [AC_MSG_RESULT(int) ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE int"], [ AC_TRY_RUN([ #include #include #include main() { struct rlimit r; exit(!(sizeof(r.rlim_cur) == sizeof(long int)));}], [AC_MSG_RESULT(long int) ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE long int"], [ AC_TRY_RUN([ #include #include #include main() { struct rlimit r; exit((!sizeof(r.rlim_cur) == sizeof(long long int)));}], [AC_MSG_RESULT(long long int) ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE long long int"], [AC_MSG_ERROR([unable to determine sizeof rlim_cur]) ],[AC_MSG_ERROR(this cannot happen)]) ],[AC_MSG_ERROR(this cannot happen)]) ],[ AC_ARG_WITH(rlimtype, , rlimtype="$withval", rlimtype="long long int") ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE $rlimtype" AC_MSG_RESULT(cannot determine type of rlim_cur when cross compiling - assuming $rlimtype)]) ]) AC_SUBST(ISC_PLATFORM_RLIMITTYPE) # # Older HP-UX doesn't have gettune # case "$host" in *-hp-hpux*) AC_CHECK_HEADERS(sys/dyntune.h) ;; *) ;; esac # # Compaq TruCluster requires more code for handling cluster IP aliases # case "$host" in *-dec-osf*) AC_CHECK_LIB(clua, clua_getaliasaddress, LIBS="-lclua $LIBS") AC_CHECK_FUNC(clua_getaliasaddress, AC_DEFINE(HAVE_TRUCLUSTER, 1, [Define if running under Compaq TruCluster])) ;; *) ;; esac # # Some hosts need msg_namelen to match the size of the socket structure. # Some hosts don't set msg_namelen appropriately on return from recvmsg(). # case $host in *os2*|*hp-mpeix*) AC_DEFINE(BROKEN_RECVMSG, 1, [Define if recvmsg() does not meet all of the BSD socket API specifications.]) ;; esac # # Microsoft has their own way of handling shared libraries that requires # additional qualifiers on extern variables. Unix systems don't need it. # AC_SUBST(ISC_PLATFORM_USEDECLSPEC) ISC_PLATFORM_USEDECLSPEC="#undef ISC_PLATFORM_USEDECLSPEC" AC_SUBST(LWRES_PLATFORM_USEDECLSPEC) LWRES_PLATFORM_USEDECLSPEC="#undef LWRES_PLATFORM_USEDECLSPEC" AC_SUBST(IRS_PLATFORM_USEDECLSPEC) IRS_PLATFORM_USEDECLSPEC="#undef IRS_PLATFORM_USEDECLSPEC" # # Random remaining OS-specific issues involving compiler warnings. # XXXDCL print messages to indicate some compensation is being done? # AC_SUBST(ISC_PLATFORM_BRACEPTHREADONCEINIT) ISC_PLATFORM_BRACEPTHREADONCEINIT="#undef ISC_PLATFORM_BRACEPTHREADONCEINIT" case "$host" in *-aix5.[[123]].*) hack_shutup_pthreadonceinit=yes ;; *-bsdi3.1*) hack_shutup_sputaux=yes ;; *-bsdi4.0*) hack_shutup_sigwait=yes hack_shutup_sputaux=yes ;; [*-bsdi4.[12]*]) hack_shutup_stdargcast=yes ;; [*-solaris2.[89]]) hack_shutup_pthreadonceinit=yes ;; *-solaris2.1[[0-9]]) AC_TRY_COMPILE([ #include ], [ static pthread_once_t once_test = { PTHREAD_ONCE_INIT }; ], [hack_shutup_pthreadonceinit=yes], ) ;; esac case "$hack_shutup_pthreadonceinit" in yes) # # Shut up PTHREAD_ONCE_INIT unbraced initializer warnings. # ISC_PLATFORM_BRACEPTHREADONCEINIT="#define ISC_PLATFORM_BRACEPTHREADONCEINIT 1" ;; esac case "$hack_shutup_sigwait" in yes) # # Shut up a -Wmissing-prototypes warning for sigwait(). # AC_DEFINE(SHUTUP_SIGWAIT) ;; esac case "$hack_shutup_sputaux" in yes) # # Shut up a -Wmissing-prototypes warning from . # AC_DEFINE(SHUTUP_SPUTAUX) ;; esac case "$hack_shutup_stdargcast" in yes) # # Shut up a -Wcast-qual warning from va_start(). # AC_DEFINE(SHUTUP_STDARG_CAST) ;; esac AC_CHECK_HEADERS(strings.h, ISC_PLATFORM_HAVESTRINGSH="#define ISC_PLATFORM_HAVESTRINGSH 1" , ISC_PLATFORM_HAVESTRINGSH="#undef ISC_PLATFORM_HAVESTRINGSH" ) AC_SUBST(ISC_PLATFORM_HAVESTRINGSH) # # Check for if_nametoindex() for IPv6 scoped addresses support # AC_CHECK_FUNC(if_nametoindex, ac_cv_have_if_nametoindex=yes, ac_cv_have_if_nametoindex=no) case $ac_cv_have_if_nametoindex in no) case "$host" in *-hp-hpux*) AC_CHECK_LIB(ipv6, if_nametoindex, ac_cv_have_if_nametoindex=yes LIBS="-lipv6 $LIBS",) ;; esac esac case $ac_cv_have_if_nametoindex in yes) ISC_PLATFORM_HAVEIFNAMETOINDEX="#define ISC_PLATFORM_HAVEIFNAMETOINDEX 1" AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Define to 1 if you have the if_nametoindex function.]) ;; *) ISC_PLATFORM_HAVEIFNAMETOINDEX="#undef ISC_PLATFORM_HAVEIFNAMETOINDEX" ;; esac AC_SUBST(ISC_PLATFORM_HAVEIFNAMETOINDEX) AC_CHECK_FUNCS(nanosleep usleep explicit_bzero) # # Machine architecture dependent features # have_stdatomic=no AC_MSG_CHECKING(for usable stdatomic.h) AC_TRY_COMPILE([ #include #include ], [ atomic_int_fast32_t val = 0; atomic_fetch_add_explicit(&val, 1, memory_order_relaxed); ], [AC_MSG_RESULT(yes) have_stdatomic=yes ISC_PLATFORM_HAVESTDATOMIC="#define ISC_PLATFORM_HAVESTDATOMIC 1"], [AC_MSG_RESULT(no) have_stdatomic=no ISC_PLATFORM_HAVESTDATOMIC="#undef ISC_PLATFORM_HAVESTDATOMIC"]) AC_ARG_ENABLE(atomic, AS_HELP_STRING([--enable-atomic], [enable machine specific atomic operations [default=autodetect]]), enable_atomic="$enableval", enable_atomic="autodetect") case "$enable_atomic" in yes|''|autodetect) case "$host" in powerpc-ibm-aix*) if test "X$GCC" = "Xyes"; then AC_MSG_CHECKING([if asm("ics"); works]) AC_TRY_COMPILE(,[ main() { asm("ics"); exit(0); } ], [AC_MSG_RESULT(yes) use_atomic=yes], [ saved_cflags="$CFLAGS" CFLAGS="$CFLAGS -Wa,-many" AC_TRY_RUN([ main() { asm("ics"); exit(0); } ], [AC_MSG_RESULT([yes, required -Wa,-many]) use_atomic=yes], [AC_MSG_RESULT([no, use_atomic disabled]) CFLAGS="$saved_cflags" use_atomic=no], [AC_MSG_RESULT([cross compile, assume yes]) CFLAGS="$saved_cflags" use_atomic=yes]) ] ) else use_atomic=yes fi ;; *) use_atomic=yes ;; esac ;; no) have_stdatomic=no ISC_PLATFORM_HAVESTDATOMIC="#undef ISC_PLATFORM_HAVESTDATOMIC" use_atomic=no arch=noatomic ;; esac if test "X$have_stdatomic" = "Xyes"; then AC_MSG_CHECKING(if -latomic is needed to use 64-bit stdatomic.h primitives) 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=""], [AC_MSG_RESULT(yes) ISC_ATOMIC_LIBS="-latomic"] ) LIBS="$LIBS $ISC_ATOMIC_LIBS" fi AC_SUBST(ISC_PLATFORM_HAVESTDATOMIC) ISC_PLATFORM_USEOSFASM="#undef ISC_PLATFORM_USEOSFASM" ISC_PLATFORM_USEGCCASM="#undef ISC_PLATFORM_USEGCCASM" ISC_PLATFORM_USESTDASM="#undef ISC_PLATFORM_USESTDASM" ISC_PLATFORM_USEMACASM="#undef ISC_PLATFORM_USEMACASM" if test "yes" = "$use_atomic"; then have_atomic=yes # set default case "$host" in [i[3456]86-*]) # XXX: some old x86 architectures actually do not support # (some of) these operations. Do we need stricter checks? AC_CHECK_SIZEOF([void *]) if test $ac_cv_sizeof_void_p = 8; then arch=x86_64 have_xaddq=yes else arch=x86_32 fi ;; x86_64-*|amd64-*) AC_CHECK_SIZEOF([void *]) if test $ac_cv_sizeof_void_p = 8; then arch=x86_64 have_xaddq=yes else arch=x86_32 fi ;; alpha*-*) arch=alpha ;; powerpc-*|powerpc64-*) arch=powerpc ;; mips-*|mipsel-*|mips64-*|mips64el-*) arch=mips ;; ia64-*) arch=ia64 ;; *) have_atomic=no arch=noatomic ;; esac AC_MSG_CHECKING([architecture type for atomic operations]) AC_MSG_RESULT($arch) fi if test "yes" = "$have_atomic"; then AC_MSG_CHECKING([compiler support for inline assembly code]) compiler=generic # Check whether the compiler supports the assembly syntax we provide. if test "X$GCC" = "Xyes"; then # GCC's ASM extension always works compiler=gcc if test $arch = "x86_64"; then # We can share the same code for gcc with x86_32 arch=x86_32 fi if test $arch = "powerpc"; then # # The MacOS (and maybe others) uses "r0" for register # zero. Under linux/ibm it is "0" for register 0. # Probe to see if we have a MacOS style assembler. # AC_MSG_CHECKING([Checking for MacOS style assembler syntax]) AC_TRY_COMPILE(, [ __asm__ volatile ("li r0, 0x0\n"::); ], [ AC_MSG_RESULT(yes) compiler="mac" ISC_PLATFORM_USEMACASM="#define ISC_PLATFORM_USEMACASM 1" ], [AC_MSG_RESULT(no)]) fi else case "$host" in alpha*-dec-osf*) # Tru64 compiler has its own syntax for inline # assembly. AC_TRY_COMPILE(, [ #ifndef __DECC #error "unexpected compiler" #endif return (0);], [compiler=osf],) ;; powerpc-ibm-aix*) compiler=aix ;; esac fi case "$compiler" in gcc) ISC_PLATFORM_USEGCCASM="#define ISC_PLATFORM_USEGCCASM 1" ;; osf) ISC_PLATFORM_USEOSFASM="#define ISC_PLATFORM_USEOSFASM 1" ;; aix) ;; mac) ;; *) # See if the generic __asm function works. If not, # we need to disable the atomic operations. AC_TRY_LINK(, [ __asm("nop") ], [compiler="standard" ISC_PLATFORM_USESTDASM="#define ISC_PLATFORM_USESTDASM 1"], [compiler="not supported (atomic operations disabled)" have_atomic=no arch=noatomic ]); ;; esac AC_MSG_RESULT($compiler) fi if test "yes" = "$have_atomic"; then ISC_PLATFORM_HAVEXADD="#define ISC_PLATFORM_HAVEXADD 1" ISC_PLATFORM_HAVECMPXCHG="#define ISC_PLATFORM_HAVECMPXCHG 1" ISC_PLATFORM_HAVEATOMICSTORE="#define ISC_PLATFORM_HAVEATOMICSTORE 1" if test "yes" = "$have_xaddq"; then ISC_PLATFORM_HAVEXADDQ="#define ISC_PLATFORM_HAVEXADDQ 1" ISC_PLATFORM_HAVEATOMICSTOREQ="#define ISC_PLATFORM_HAVEATOMICSTOREQ 1" else ISC_PLATFORM_HAVEXADDQ="#undef ISC_PLATFORM_HAVEXADDQ" ISC_PLATFORM_HAVEATOMICSTOREQ="#undef ISC_PLATFORM_HAVEATOMICSTOREQ" fi else ISC_PLATFORM_HAVEXADD="#undef ISC_PLATFORM_HAVEXADD" ISC_PLATFORM_HAVECMPXCHG="#undef ISC_PLATFORM_HAVECMPXCHG" ISC_PLATFORM_HAVEATOMICSTORE="#undef ISC_PLATFORM_HAVEATOMICSTORE" ISC_PLATFORM_HAVEXADDQ="#undef ISC_PLATFORM_HAVEXADDQ" ISC_PLATFORM_HAVEATOMICSTOREQ="#undef ISC_PLATFORM_HAVEATOMICSTOREQ" fi AC_SUBST(ISC_PLATFORM_HAVEXADD) AC_SUBST(ISC_PLATFORM_HAVEXADDQ) AC_SUBST(ISC_PLATFORM_HAVECMPXCHG) AC_SUBST(ISC_PLATFORM_HAVEATOMICSTORE) AC_SUBST(ISC_PLATFORM_HAVEATOMICSTOREQ) AC_SUBST(ISC_PLATFORM_USEGCCASM) AC_SUBST(ISC_PLATFORM_USEOSFASM) AC_SUBST(ISC_PLATFORM_USESTDASM) AC_SUBST(ISC_PLATFORM_USEMACASM) ISC_ARCH_DIR=$arch AC_SUBST(ISC_ARCH_DIR) # # 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 # # CPU relax (for spin locks) # if $use_threads then case "$host" in [i[3456]86-*]) # x86_32 AC_MSG_CHECKING([if asm("rep; nop"); works]) AC_TRY_COMPILE(,[asm("rep; nop");], [AC_MSG_RESULT(yes) ISC_PLATFORM_BUSYWAITNOP="#define ISC_PLATFORM_BUSYWAITNOP asm(\"rep; nop\")"], [AC_MSG_RESULT(no)], [AC_MSG_RESULT([cross compile, assume yes]) ISC_PLATFORM_BUSYWAITNOP="#define ISC_PLATFORM_BUSYWAITNOP asm(\"rep; nop\")"]) ;; x86_64-*|amd64-*) # x86_64 AC_MSG_CHECKING([if asm("rep; nop"); works]) AC_TRY_COMPILE(,[asm("rep; nop");], [AC_MSG_RESULT(yes) ISC_PLATFORM_BUSYWAITNOP="#define ISC_PLATFORM_BUSYWAITNOP asm(\"rep; nop\")"], [AC_MSG_RESULT(no)], [AC_MSG_RESULT([cross compile, assume yes]) ISC_PLATFORM_BUSYWAITNOP="#define ISC_PLATFORM_BUSYWAITNOP asm(\"rep; nop\")"]) ;; ia64-*) # ia64 AC_MSG_CHECKING([if asm("hint @pause"); works]) AC_TRY_COMPILE(,[asm("hint @pause");], [AC_MSG_RESULT(yes) ISC_PLATFORM_BUSYWAITNOP="#define ISC_PLATFORM_BUSYWAITNOP asm(\"hint @pause\")"], [AC_MSG_RESULT(no)], [AC_MSG_RESULT([cross compile, assume yes]) ISC_PLATFORM_BUSYWAITNOP="#define ISC_PLATFORM_BUSYWAITNOP asm(\"hint @pause\")"]) ;; sparc-*) # sparc AC_MSG_CHECKING([if cpu_relax(); or __cpu_relax(); works]) AC_CHECK_FUNC(cpu_relax, [AC_MSG_RESULT(yes) ISC_PLATFORM_BUSYWAITNOP="#define ISC_PLATFORM_BUSYWAITNOP cpu_relax()"], [AC_CHECK_FUNC(__cpu_relax, [AC_MSG_RESULT(yes) ISC_PLATFORM_BUSYWAITNOP="#define ISC_PLATFORM_BUSYWAITNOP __cpu_relax()"], [AC_MSG_RESULT(no)])]) ;; esac fi AC_SUBST(ISC_PLATFORM_BUSYWAITNOP) # # Activate "rrset-order fixed" or not? # 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 # # Enable response policy rewriting using NS IP addresses # AC_ARG_ENABLE(rpz-nsip, AS_HELP_STRING([--disable-rpz-nsip], [disable rpz nsip rules [default=enabled]]), enable_nsip="$enableval", enable_nsip="yes") case "$enable_nsip" in yes) AC_DEFINE(ENABLE_RPZ_NSIP, 1, [Define to enable rpz-nsip rules.]) ;; no) ;; *) ;; esac # # Enable response policy rewriting using NS name # AC_ARG_ENABLE(rpz-nsdname, AS_HELP_STRING([--disable-rpz-nsdname], [disable rpz nsdname rules [default=enabled]]), enable_nsdname="$enableval", enable_nsdname="yes") case "$enable_nsdname" in yes) AC_DEFINE(ENABLE_RPZ_NSDNAME, 1, [Define to enable rpz-nsdname rules.]) ;; no) ;; *) ;; esac # # Activate "filter-aaaa-on-v4/v6" or not? # AC_ARG_ENABLE(filter-aaaa, [ --enable-filter-aaaa enable filtering of AAAA records [[default=no]]], enable_filter="$enableval", enable_filter="no") case "$enable_filter" in yes) AC_DEFINE(ALLOW_FILTER_AAAA, 1, [Define to enable the "filter-aaaa-on-v4" and "filter-aaaa-on-v6" options.]) ;; no) ;; *) ;; esac # # Activate 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= DNSTAP_PB_C_H= if test "x$use_dnstap" != "xno"; then if ! $use_threads; then AC_MSG_ERROR([Dnstap requires threads.]) fi 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 CFLAGS="$CFLAGS -I$withval/include/google" else CFLAGS="$CFLAGS -I$withval/include" fi LDFLAGS="$LDFLAGS -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 CFLAGS="$CFLAGS -I/usr/include/google" else if test -f /usr/local/include/google/protobuf-c/protobuf-c.h then CFLAGS="$CFLAGS -I/usr/local/include/google" LDFLAGS="$LDFLAGS -L/usr/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 AC_ARG_WITH([libfstrm], AS_HELP_STRING([--with-libfstrm=path], [Path where libfstrm is installed, for dnstap]), [ CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" AC_PATH_PROG([FSTRM_CAPTURE], [fstrm_capture], [], [$PATH$PATH_SEPARATOR$withval/bin]) ],[ AC_PATH_PROG([FSTRM_CAPTURE], [fstrm_capture]) ]) AC_SEARCH_LIBS([fstrm_iothr_init], [fstrm], [], AC_MSG_ERROR([The fstrm library was not found. Please install fstrm!])) AC_SEARCH_LIBS([protobuf_c_message_pack], [protobuf-c], [], AC_MSG_ERROR([The protobuf-c library was not found. Please install protobuf-c!])) AC_DEFINE(HAVE_DNSTAP, 1, [Define to 1 to enable dnstap support]) DNSTAP=dnstap DNSTAPSRCS='${DNSTAPSRCS}' DNSTAPOBJS='${DNSTAPOBJS}' DNSTAPTARGETS='${DNSTAPTARGETS}' DNSTAP_PB_C_H="dnstap.pb-c.h" fi AC_SUBST(DNSTAP) AC_SUBST(DNSTAPSRCS) AC_SUBST(DNSTAPOBJS) AC_SUBST(DNSTAPTARGETS) AC_SUBST(DNSTAP_PB_C_H) # # The following sets up how non-blocking i/o is established. # Sunos, cygwin and solaris 2.x (x<5) require special handling. # case "$host" in *-sunos*) AC_DEFINE(PORT_NONBLOCK, O_NDELAY);; *-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. # # # Look for TeX. # AC_PATH_PROGS(LATEX, latex, latex) AC_SUBST(LATEX) AC_PATH_PROGS(PDFLATEX, pdflatex, pdflatex) AC_SUBST(PDFLATEX) AC_PATH_PROGS(DBLATEX, dblatex, dblatex) AC_SUBST(DBLATEX) # # Look for w3m # AC_PATH_PROGS(W3M, w3m, w3m) AC_SUBST(W3M) # # Look for pandoc # AC_PATH_PROG(PANDOC, pandoc, pandoc) AC_SUBST(PANDOC) # # Look for xsltproc (libxslt) # AC_PATH_PROG(XSLTPROC, xsltproc, xsltproc) AC_SUBST(XSLTPROC) # # Look for xmllint (libxml2) # AC_PATH_PROG(XMLLINT, xmllint, xmllint) AC_SUBST(XMLLINT) # # Look for Doxygen # AC_PATH_PROG(DOXYGEN, doxygen, doxygen) AC_SUBST(DOXYGEN) # # Look for curl # AC_PATH_PROG(CURL, curl, curl) AC_SUBST(CURL) # # Subroutine for searching for an ordinary file (e.g., a stylesheet) # in a number of directories: # # NOM_PATH_FILE(VARIABLE, FILENAME, DIRECTORIES) # # If the file FILENAME is found in one of the DIRECTORIES, the shell # variable VARIABLE is defined to its absolute pathname. Otherwise, # it is set to FILENAME, with no directory prefix (that's not terribly # useful, but looks less confusing in substitutions than leaving it # empty). The variable VARIABLE will be substituted into output files. # AC_DEFUN(NOM_PATH_FILE, [ $1="" AC_MSG_CHECKING(for $2) for d in $3 do f=$d/$2 if test -f $f then $1=$f AC_MSG_RESULT($f) break fi done if test "X[$]$1" = "X" then AC_MSG_RESULT("not found"); $1=$2 fi AC_SUBST($1) ]) # # Look for Docbook-XSL stylesheets. Location probably varies by system. # If it's not explicitly specified, guess where it might be found, based on # where SGML stuff lives on some systems (FreeBSD is the only one we're sure # of at the moment). # AC_MSG_CHECKING(for Docbook-XSL path) AC_ARG_WITH(docbook-xsl, AS_HELP_STRING([--with-docbook-xsl[=PATH]], [specify path for Docbook-XSL stylesheets]), docbook_path="$withval", docbook_path="auto") case "$docbook_path" in auto) AC_MSG_RESULT(auto) docbook_xsl_trees="/usr/pkg/share/xsl/docbook /usr/local/share/xsl/docbook-ns /usr/local/share/xsl/docbook /usr/share/xsl/docbook /opt/local/share/xsl/docbook-xsl /opt/local/share/xsl/docbook-xsl-nons /usr/share/xml/docbook/stylesheet/docbook-xsl" ;; *) docbook_xsl_trees="$withval" AC_MSG_RESULT($docbook_xsl_trees) ;; esac # # Look for stylesheets we need. # NOM_PATH_FILE(XSLT_DOCBOOK_STYLE_HTML, html/docbook.xsl, $docbook_xsl_trees) NOM_PATH_FILE(XSLT_DOCBOOK_STYLE_XHTML, xhtml/docbook.xsl, $docbook_xsl_trees) NOM_PATH_FILE(XSLT_DOCBOOK_STYLE_MAN, manpages/docbook.xsl, $docbook_xsl_trees) NOM_PATH_FILE(XSLT_DOCBOOK_CHUNK_HTML, html/chunk.xsl, $docbook_xsl_trees) NOM_PATH_FILE(XSLT_DOCBOOK_CHUNK_XHTML, xhtml/chunk.xsl, $docbook_xsl_trees) NOM_PATH_FILE(XSLT_DOCBOOK_CHUNKTOC_HTML, html/chunktoc.xsl, $docbook_xsl_trees) NOM_PATH_FILE(XSLT_DOCBOOK_CHUNKTOC_XHTML, xhtml/chunktoc.xsl, $docbook_xsl_trees) NOM_PATH_FILE(XSLT_DOCBOOK_MAKETOC_HTML, html/maketoc.xsl, $docbook_xsl_trees) NOM_PATH_FILE(XSLT_DOCBOOK_MAKETOC_XHTML, xhtml/maketoc.xsl, $docbook_xsl_trees) # # Same dance for dblatex # dblatex_xsl_trees="/usr/local/share/xml/docbook/stylesheet/dblatex /usr/pkg/share/xml/docbook/stylesheet/dblatex /usr/share/xml/docbook/stylesheet/dblatex" NOM_PATH_FILE(XSLT_DBLATEX_STYLE, xsl/docbook.xsl, $dblatex_xsl_trees) NOM_PATH_FILE(XSLT_DBLATEX_FASTBOOK, xsl/latex_book_fast.xsl, $dblatex_xsl_trees) # # IDN support using idnkit # AC_ARG_WITH(idnkit, AS_HELP_STRING([--with-idnkit[=PATH]], [enable IDN support using idnkit [yes|no|path]]), use_idnkit="$withval", use_idnkit="no") case "$use_idnkit" in yes) if test X$prefix = XNONE ; then idnkit_path=/usr/local else idnkit_path=$prefix fi ;; no) ;; *) idnkit_path="$use_idnkit" ;; esac iconvinc= iconvlib= AC_ARG_WITH(libiconv, AS_HELP_STRING([--with-libiconv[=IPREFIX]], [GNU libiconv are in IPREFIX [default PREFIX]]), use_libiconv="$withval", use_libiconv="no") case "$use_libiconv" in yes) if test X$prefix = XNONE ; then iconvlib="-L/usr/local/lib -R/usr/local/lib -liconv" else iconvlib="-L$prefix/lib -R$prefix/lib -liconv" fi ;; no) iconvlib= ;; *) iconvlib="-L$use_libiconv/lib -R$use_libiconv/lib -liconv" ;; esac AC_ARG_WITH(iconv, AS_HELP_STRING([--with-iconv[=LIBSPEC]], [specify iconv library [default -liconv]]), iconvlib="$withval") case "$iconvlib" in no) iconvlib= ;; yes) iconvlib=-liconv ;; esac AC_ARG_WITH(idnlib, AS_HELP_STRING([--with-idnlib=ARG], [specify libidnkit]), idnlib="$withval", idnlib="no") if test "yes" = "$idnlib"; then AC_MSG_ERROR([You must specify ARG for --with-idnlib.]) fi IDNKIT_LIBS= if test "no" != "$use_idnkit"; then AC_DEFINE(WITH_IDNKIT, 1, [define if idnkit support is to be included.]) STD_CINCLUDES="$STD_CINCLUDES -I$idnkit_path/include" if test "no" != "$idnlib"; then IDNKIT_LIBS="$idnlib $iconvlib" else IDNKIT_LIBS="-L$idnkit_path/lib -lidnkit $iconvlib" fi fi AC_SUBST(IDNKIT_LIBS) # # IDN support using libidn2 # LIBIDN2_CFLAGS= LIBIDN2_LDFLAGS= LIBIDN2_LIBS= AC_ARG_WITH(libidn2, AS_HELP_STRING([--with-libidn2[=PATH]], [enable IDN support using GNU libidn2 [yes|no|path]]), use_libidn2="$withval", use_libidn2="no") AS_CASE([$use_libidn2], [no],[:], [yes],[:], [*],[ LIBIDN2_CFLAGS="-I$use_libidn2/include" LIBIDN2_LDFLAGS="-L$use_libidn2/lib" ]) AS_IF([test "$use_libidn2" != "no"], [save_CFLAGS="$CFLAGS" save_LIBS="$LIBS" save_LDFLAGS="$LDFLAGS" CFLAGS="$LIBIDN2_CFLAGS $CFLAGS" LDFLAGS="$LIBIDN2_LDFLAGS $LDFLAGS" AC_SEARCH_LIBS([idn2_to_ascii_8z], [idn2], [AC_DEFINE(WITH_IDN_SUPPORT, 1, [define if IDN input support is to be included.]) AC_DEFINE(WITH_LIBIDN2, 1, [define if libidn2 support is to be included.]) LIBIDN2_LIBS="$LIBIDN2_LDFLAGS -lidn2"], [AC_MSG_ERROR([libidn2 requested, but not found])]) AC_TRY_LINK([#include ], [idn2_to_unicode_8zlz(".", NULL, IDN2_NONTRANSITIONAL|IDN2_NFC_INPUT);], [AC_MSG_RESULT(yes) AC_DEFINE(WITH_IDN_OUT_SUPPORT, 1, [define if IDN output support is to be included.])], [AC_MSG_RESULT([no])]) CFLAGS="$save_CFLAGS" LIBS="$save_LIBS" LDFLAGS="$save_LDFLAGS" ]) AC_SUBST([LIBIDN2_CFLAGS]) AC_SUBST([LIBIDN2_LIBS]) # # IDN support in general # # check if idnkit and libidn2 are not used at the same time if test "$use_idnkit" != no && test "$use_libidn2" != no; then AC_MSG_ERROR([idnkit and libidn2 cannot be used at the same time.]) fi # the IDN support is on if test "$use_idnkit" != no || test "$use_libidn2" != no; then AC_DEFINE(WITH_IDN_SUPPORT, 1, [define if IDN input support is to be included.]) if test "$use_libidn2" = no || test "$use_libidn2_out" != no; then AC_DEFINE(WITH_IDN_OUT_SUPPORT, 1, [define if IDN output support is to be included.]) fi fi # # Check whether to build Automated Test Framework unit tests # AC_ARG_WITH(atf, AS_HELP_STRING([--with-atf],[support Automated Test Framework]), atf="$withval", atf="no") if test "yes" = "$atf"; then atf=`pwd`/unit/atf ATFBUILD=atf-src AC_SUBST(ATFBUILD) AC_CONFIG_COMMANDS([atf-config], [( mkdir -p unit/atf-src; cd unit/atf-src; case "$srcdir" in /*) ;; *) srcdir="../../$srcdir";; esac ${SHELL} "${srcdir}${srcdir:+/unit/atf-src/}./configure" --enable-tools --disable-shared MISSING=: --prefix $atfdir; ) || AC_MSG_ERROR([Failed to configure ATF.]) ], [atfdir=`pwd`/unit/atf]) AC_MSG_RESULT(building ATF from bind9/unit/atf-src) fi ATFLIBS= if test "no" != "$atf"; then AC_DEFINE(ATF_TEST, 1, [define if ATF unit tests are to be built.]) STD_CINCLUDES="$STD_CINCLUDES -I$atf/include" ATFBIN="$atf/bin" ATFLIBS="-L$atf/lib -latf-c" AC_CHECK_LIB(m, exp, libm=yes, libm=no) if test "yes" = "$libm"; then ATFLIBS="$ATFLIBS -lm" fi UNITTESTS=tests fi AC_SUBST(ATFBIN) AC_SUBST(ATFLIBS) AC_SUBST(UNITTESTS) AC_CHECK_HEADERS(locale.h) AC_CHECK_FUNCS(setlocale) # # was --with-tuning specified? # AC_ARG_WITH(tuning, AS_HELP_STRING([--with-tuning=ARG], [Specify server tuning (large or default)]), use_tuning="$withval", use_tuning="no") case "$use_tuning" in large) if ! $use_threads; then AC_MSG_ERROR([Large-system tuning requires threads.]) fi AC_DEFINE(TUNE_LARGE, 1, [Define to use large-system tuning.]) AC_MSG_RESULT(using large-system tuning) ;; no|default) AC_MSG_RESULT(using default tuning) ;; yes|*) AC_MSG_ERROR([You must specify "large" or "default" for --with-tuning.]) ;; esac # # was --enable-querytrace specified? # 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 # # 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_LWRES_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_LWRES_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/lwres/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_LWRES_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_VERSIONSHORT="${PRODUCT} ${MAJORVER}.${MINORVER}${PATCHVER:+.}${PATCHVER}${RELEASETYPE}${RELEASEVER}${EXTENSIONS}" AC_SUBST(BIND9_VERSIONSHORT) 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(LIBISC_API) LIBISC_API="$srcdir/lib/isc/api" AC_SUBST_FILE(LIBISCCC_API) LIBISCCC_API="$srcdir/lib/isccc/api" AC_SUBST_FILE(LIBISCCFG_API) LIBISCCFG_API="$srcdir/lib/isccfg/api" AC_SUBST_FILE(LIBDNS_API) LIBDNS_API="$srcdir/lib/dns/api" AC_SUBST_FILE(LIBDNS_MAPAPI) LIBDNS_MAPAPI="$srcdir/lib/dns/mapapi" AC_SUBST_FILE(LIBBIND9_API) LIBBIND9_API="$srcdir/lib/bind9/api" AC_SUBST_FILE(LIBLWRES_API) LIBLWRES_API="$srcdir/lib/lwres/api" AC_SUBST_FILE(LIBIRS_API) LIBIRS_API="$srcdir/lib/irs/api" # # 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" AC_ARG_WITH(dlopen, AS_HELP_STRING([--with-dlopen=ARG], [support dynamically loadable DLZ drivers]), dlopen="$withval", dlopen="yes") case $host in *-sunos*) dlopen="no" ;; esac if test "yes" = "$dlopen"; then AC_CHECK_LIB(dl, dlopen, have_dl=yes, have_dl=no) if test "yes" = "$have_dl"; then LIBS="-ldl $LIBS" fi AC_CHECK_FUNCS(dlopen dlclose dlsym,,dlopen=no) fi if test "yes" = "$dlopen"; then case $host in *-linux*|*-gnu*) SO_CFLAGS="-fPIC" SO_LDFLAGS="" if test "yes" = "$have_dl" then if test "yes" = "$use_libtool"; then SO_LDFLAGS="-Xcompiler -shared" SO_LD="${CC}" else SO_LDFLAGS="-shared" SO_LD="${CC}" fi else SO_LDFLAGS="-shared" SO_LD="ld" fi ;; *-freebsd*|*-openbsd*) LDFLAGS="${LDFLAGS} -Wl,-E" SO_CFLAGS="-fpic" if test "yes" = "$use_libtool"; then SO_LDFLAGS="-Xcompiler -shared" SO_LD="${CC}" else SO_LDFLAGS="-shared" SO_LD="${CC}" fi ;; *-netbsd*) SO_CFLAGS="-fpic" SO_LDFLAGS="-Bshareable -x" SO_LD="ld" SO_STRIP="sed -e s/-Wl,//g" ;; *-solaris*) SO_CFLAGS="-KPIC" SO_LDFLAGS="-G -z text" SO_LD="ld" ;; *-hp-hpux*) SO=sl SO_CFLAGS="+z" SO_LDFLAGS="-b +vnocompatwarnings" SO_LD="ld" ;; *) SO_CFLAGS="-fPIC" ;; esac if test "X$GCC" = "Xyes"; then SO_CFLAGS="-fPIC" if test -z "$SO_LD" then if test "yes" = "$use_libtool"; then SO_LDFLAGS="-Xcompiler -shared" SO_LD="${CC}" else SO_LDFLAGS="-shared" SO_LD="${CC}" fi fi fi # If we still don't know how to make shared objects, don't make any. if test -n "$SO_LD"; then SO_TARGETS="\${SO_TARGETS}" AC_DEFINE(ISC_DLZ_DLOPEN, 1, [Define to allow building of objects for dlopen().]) fi fi 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) sinclude(contrib/dlz/config.dlz.in) AC_MSG_CHECKING(contributed DLZ drivers) 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 isc-config.sh 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([ make/Makefile make/mkdep 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/python/Makefile bin/python/isc/Makefile bin/python/isc/utils.py bin/python/isc/tests/Makefile bin/python/dnssec-checkds.py bin/python/dnssec-coverage.py bin/python/dnssec-keymgr.py 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/dnskey_test.py bin/python/isc/tests/policy_test.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/dlz/prereq.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/inline/checkdsa.sh bin/tests/system/lwresd/Makefile bin/tests/system/pipelined/Makefile bin/tests/system/rndc/Makefile bin/tests/system/rsabigexponent/Makefile bin/tests/system/tkey/Makefile bin/tests/virtual-time/Makefile bin/tests/virtual-time/conf.sh bin/tools/Makefile contrib/scripts/check-secure-delegation.pl contrib/scripts/zone-edit.sh doc/Makefile doc/arm/Makefile doc/arm/noteversion.xml doc/arm/pkgversion.xml doc/arm/releaseinfo.xml doc/doxygen/Doxyfile doc/doxygen/Makefile doc/doxygen/doxygen-input-filter doc/misc/Makefile doc/tex/Makefile doc/tex/armstyle.sty doc/xsl/Makefile doc/xsl/isc-docbook-chunk.xsl doc/xsl/isc-docbook-html.xsl doc/xsl/isc-manpage.xsl doc/xsl/isc-notes-html.xsl isc-config.sh 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/$arch/Makefile lib/isc/$arch/include/Makefile lib/isc/$arch/include/isc/Makefile lib/isc/$thread_dir/Makefile lib/isc/$thread_dir/include/Makefile lib/isc/$thread_dir/include/isc/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/tests/Makefile lib/isc/nls/Makefile lib/isc/unix/Makefile lib/isc/unix/include/Makefile lib/isc/unix/include/isc/Makefile lib/isc/unix/include/pkcs11/Makefile lib/isccc/Makefile lib/isccc/include/Makefile lib/isccc/include/isccc/Makefile lib/isccfg/Makefile lib/isccfg/include/Makefile lib/isccfg/include/isccfg/Makefile lib/isccfg/tests/Makefile lib/lwres/Makefile lib/lwres/include/Makefile lib/lwres/include/lwres/Makefile lib/lwres/include/lwres/netdb.h lib/lwres/include/lwres/platform.h lib/lwres/man/Makefile lib/lwres/tests/Makefile lib/lwres/unix/Makefile lib/lwres/unix/include/Makefile lib/lwres/unix/include/lwres/Makefile lib/samples/Makefile lib/samples/Makefile-postinstall unit/Makefile unit/unittest.sh ]) # # Do it # AC_OUTPUT # # Now that the Makefiles exist we can ensure that everything is rebuilt. # 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 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 $use_threads; then echo " Multiprocessing support (--enable-threads)" if test "yes" = "$enable_full_report" -o "standard" = "$locktype"; then echo " Mutex lock type: $locktype" fi fi test "large" = "$use_tuning" && echo " Large-system tuning (--with-tuning)" test "no" = "$use_dnstap" || \ echo " Allow 'dnstap' packet logging (--enable-dnstap)" test "no" = "$use_geoip" || echo " GeoIP access control (--with-geoip)" test "no" = "$use_gssapi" || echo " GSS-API (--with-gssapi)" if test "yes" = "$enable_full_report" -o "aes" != "$with_cc_alg"; then echo " Algorithm: $with_cc_alg" fi # these lines are only printed if run with --enable-full-report if test "yes" = "$enable_full_report"; then test "no" = "$enable_ipv6" -o "no" = "$found_ipv6" || \ echo " IPv6 support (--enable-ipv6)" test "X$CRYPTO" = "X" -o "yes" = "$want_native_pkcs11" || \ echo " OpenSSL cryptography/DNSSEC (--with-openssl)" test "X$PYTHON" = "X" || echo " Python tools (--with-python)" test "X$XMLSTATS" = "X" || echo " XML statistics (--with-libxml2)" test "X$JSONSTATS" = "X" || echo " JSON statistics (--with-libjson)" test "X$ZLIB" = "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" = "$use_libidn2" || echo " IDN support (--with-libidn2)" fi if test "no" != "$use_pkcs11"; then if test "yes" = "$want_native_pkcs11"; then echo " Native PKCS#11/Cryptoki support (--enable-native-pkcs11)" else echo " PKCS#11/Cryptoki support using OpenSSL (--with-pkcs11)" fi echo " Provider library: $PKCS11_PROVIDER" fi if test "yes" = "$OPENSSL_GOST" -o "yes" = "$PKCS11_GOST"; then echo " GOST algorithm support (encoding: $gosttype) (--with-gost)" fi test "yes" = "$OPENSSL_ECDSA" -o "$PKCS11_ECDSA" && \ echo " ECDSA algorithm support (--with-ecdsa)" test "yes" = "$OPENSSL_ED25519" -o "$PKCS11_ED25519" && \ echo " EDDSA algorithm support (--with-eddsa)" test "yes" = "$enable_fixed" && \ echo " Allow 'fixed' rrset-order (--enable-fixed-rrset)" test "yes" = "$enable_filter" && \ echo " AAAA filtering (--enable-filter-aaaa)" test "yes" = "$enable_seccomp" && \ echo " Use libseccomp system call filtering (--enable-seccomp)" test "yes" = "$want_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" = "$atf" || echo " Automated Testing Framework (--with-atf)" echo " Dynamically loadable zone (DLZ) drivers:" test "no" = "$use_dlz_bdb" || \ echo " Berkeley DB (--with-dlz-bdb)" test "no" = "$use_dlz_ldap" || \ echo " LDAP (--with-dlz-ldap)" test "no" = "$use_dlz_mysql" || \ echo " MySQL (--with-dlz-mysql)" test "no" = "$use_dlz_odbc" || \ echo " ODBC (--with-dlz-odbc)" test "no" = "$use_dlz_postgres" || \ echo " Postgres (--with-dlz-postgres)" test "no" = "$use_dlz_filesystem" || \ echo " Filesystem (--with-dlz-filesystem)" test "no" = "$use_dlz_stub" || \ echo " Stub (--with-dlz-stub)" test "$use_dlz_bdb $use_dlz_ldap $use_dlz_mysql $use_dlz_odbc $use_dlz_postgres $use_dlz_filesystem $use_dlz_stub" = "no no no no no no no" && echo " None" echo "-------------------------------------------------------------------------------" echo "Features disabled or unavailable on this platform:" $use_threads || echo " Multiprocessing support (--enable-threads)" test "no" = "$enable_ipv6" -o "no" = "$found_ipv6" && \ echo " IPv6 support (--enable-ipv6)" test "large" = "$use_tuning" || echo " Large-system tuning (--with-tuning)" test "no" = "$use_dnstap" && \ echo " Allow 'dnstap' packet logging (--enable-dnstap)" test "no" = "$use_geoip" && echo " GeoIP access control (--with-geoip)" test "no" = "$use_gssapi" && echo " GSS-API (--with-gssapi)" test "yes" = "$enable_fixed" || \ echo " Allow 'fixed' rrset-order (--enable-fixed-rrset)" if test "X$CRYPTO" = "X" -o "yes" = "$want_native_pkcs11" then echo " OpenSSL cryptography/DNSSEC (--with-openssl)" elif test "no" = "$use_pkcs11"; then echo " PKCS#11/Cryptoki support (--with-pkcs11)" fi test "yes" = "$want_native_pkcs11" || echo " Native PKCS#11/Cryptoki support (--enable-native-pkcs11)" test "X$CRYPTO" = "X" -o "yes" = "$OPENSSL_GOST" -o "yes" = "$PKCS11_GOST" || \ echo " GOST algorithm support (--with-gost)" test "X$CRYPTO" = "X" -o "yes" = "$OPENSSL_ECDSA" -o "yes" = "$PKCS11_ECDSA" || \ echo " ECDSA algorithm support (--with-ecdsa)" test "X$CRYPTO" = "X" -o "yes" = "$OPENSSL_ED25519" -o "yes" = "$PKCS11_ED25519" || \ echo " EDDSA algorithm support (--with-eddsa)" test "yes" = "$enable_seccomp" || \ echo " Use libseccomp system call filtering (--enable-seccomp)" test "yes" = "$want_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" = "$atf" && echo " Automated Testing Framework (--with-atf)" test "X$PYTHON" = "X" && echo " Python tools (--with-python)" test "X$XMLSTATS" = "X" && echo " XML statistics (--with-libxml2)" test "X$JSONSTATS" = "X" && echo " JSON statistics (--with-libjson)" test "X$ZLIB" = "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" = "$use_libidn2" && echo " IDN support (--with-libidn2)" echo "-------------------------------------------------------------------------------" echo "Configured paths:" echo " prefix: $prefix" echo " sysconfdir: $sysconfdir" echo " localstatedir: $localstatedir" echo "-------------------------------------------------------------------------------" echo "Compiler: $CC" $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 if test "X$CRYPTO" = "X"; then cat << \EOF BIND 9 is being built without cryptography support. This means it will not have DNSSEC support. Use --with-openssl, or --with-pkcs11 and --enable-native-pkcs11 to enable cryptography. EOF fi # Tell Emacs to edit this file in shell mode. # Local Variables: # mode: sh # End: