cfd4d2c42e
Security Fixes Prevents named from aborting with a require assertion failure on servers with DNS64 enabled. These crashes might occur as a result of specific queries that are received. New Features * Elliptic Curve Digital Signature Algorithm keys and signatures in DNSSEC are now supported per RFC 6605. [RT #21918] Feature Changes * Improves OpenSSL error logging [RT #29932] * nslookup now returns a nonzero exit code when it is unable to get an answer. [RT #29492] Other critical bug fixes are included. Approved by: delphij (mentor) MFC after: 3 days Security: CVE-2012-5688 Sponsored by: DK Hostmaster A/S
3653 lines
93 KiB
Plaintext
3653 lines
93 KiB
Plaintext
# Copyright (C) 2004-2012 Internet Systems Consortium, Inc. ("ISC")
|
|
# Copyright (C) 1998-2003 Internet Software Consortium.
|
|
#
|
|
# Permission to use, copy, modify, and/or distribute this software for any
|
|
# purpose with or without fee is hereby granted, provided that the above
|
|
# copyright notice and this permission notice appear in all copies.
|
|
#
|
|
# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
|
|
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
|
|
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
# PERFORMANCE OF THIS SOFTWARE.
|
|
|
|
dnl
|
|
AC_DIVERT_PUSH(1)dnl
|
|
esyscmd([sed "s/^/# /" COPYRIGHT])dnl
|
|
AC_DIVERT_POP()dnl
|
|
|
|
AC_REVISION($Revision: 1.512.8.15 $)
|
|
|
|
AC_INIT(lib/dns/name.c)
|
|
AC_PREREQ(2.59)
|
|
|
|
AC_CONFIG_HEADER(config.h)
|
|
|
|
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)
|
|
|
|
# Warn if the user specified libbind, which is now deprecated
|
|
AC_ARG_ENABLE(libbind, [ --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(developer, [ --enable-developer enable developer build settings])
|
|
case "$enable_developer" in
|
|
yes)
|
|
test "${enable_fixed_rrset+set}" = set || enable_fixed_rrset=yes
|
|
test "${with_atf+set}" = set || with_atf=yes
|
|
test "${enable_filter_aaaa+set}" = set || enable_filter_aaaa=yes
|
|
test "${enable_rpz_nsip+set}" = set || enable_rpz_nsip=yes
|
|
test "${enable_rpz_nsdname+set}" = set || enable_rpz_nsdname=yes
|
|
test "${with_dlz_filesystem+set}" = set || with_dlz_filesystem=yes
|
|
case "$host" in
|
|
*-darwin*)
|
|
test "${enable_exportlib+set}" = set || enable_exportlib=yes
|
|
;;
|
|
*-linux*)
|
|
test "${enable_exportlib+set}" = set || enable_exportlib=yes
|
|
;;
|
|
esac
|
|
;;
|
|
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)
|
|
|
|
#
|
|
# 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
|
|
|
|
#
|
|
# 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 "$ac_dir" = "$ac_prog" && ac_dir=.
|
|
test -d "$ac_dir" && ac_dir="`(cd \"$ac_dir\" && pwd)`"
|
|
INSTALL="$ac_dir/$ac_prog"
|
|
;;
|
|
esac
|
|
|
|
#
|
|
# On these hosts, we really want to use cc, not gcc, even if it is
|
|
# found. The gcc that these systems have will not correctly handle
|
|
# pthreads.
|
|
#
|
|
# However, if the user sets $CC to be something, let that override
|
|
# our change.
|
|
#
|
|
if test "X$CC" = "X" ; then
|
|
case "$host" in
|
|
*-dec-osf*)
|
|
CC="cc"
|
|
;;
|
|
*-solaris*)
|
|
# Use Sun's cc if it is available, but watch
|
|
# out for /usr/ucb/cc; it will never be the right
|
|
# compiler to use.
|
|
#
|
|
# If setting CC here fails, the AC_PROG_CC done
|
|
# below might still find gcc.
|
|
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
|
|
for ac_dir in $PATH; do
|
|
test -z "$ac_dir" && ac_dir=.
|
|
case "$ac_dir" in
|
|
/usr/ucb)
|
|
# exclude
|
|
;;
|
|
*)
|
|
if test -f "$ac_dir/cc"; then
|
|
CC="$ac_dir/cc"
|
|
break
|
|
fi
|
|
;;
|
|
esac
|
|
done
|
|
IFS="$ac_save_ifs"
|
|
;;
|
|
*-hp-hpux*)
|
|
CC="cc"
|
|
;;
|
|
mips-sgi-irix*)
|
|
CC="cc"
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
AC_PROG_CC
|
|
|
|
#
|
|
# gcc's optimiser is broken at -02 for ultrasparc
|
|
#
|
|
if test "$ac_env_CFLAGS_set" != set -a "X$GCC" = "Xyes"; then
|
|
case "$host" in
|
|
sparc-*)
|
|
CCFLAGS="-g -O1"
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
#
|
|
# 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
|
|
|
|
AC_HEADER_STDC
|
|
|
|
AC_CHECK_HEADERS(fcntl.h regex.h sys/time.h unistd.h sys/sockio.h sys/select.h sys/param.h sys/sysctl.h net/if6.h,,,
|
|
[$ac_includes_default
|
|
#ifdef HAVE_SYS_PARAM_H
|
|
# include <sys/param.h>
|
|
#endif
|
|
])
|
|
|
|
AC_C_CONST
|
|
AC_C_INLINE
|
|
AC_C_VOLATILE
|
|
AC_CHECK_FUNC(sysctlbyname, AC_DEFINE(HAVE_SYSCTLBYNAME))
|
|
AC_C_FLEXIBLE_ARRAY_MEMBER
|
|
|
|
#
|
|
# Older versions of HP/UX don't define seteuid() and setegid()
|
|
#
|
|
AC_CHECK_FUNCS(seteuid setresuid)
|
|
AC_CHECK_FUNCS(setegid setresgid)
|
|
|
|
#
|
|
# 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(, [
|
|
foo1();
|
|
}
|
|
|
|
static inline int foo1() {
|
|
return 0;
|
|
}
|
|
|
|
static inline int foo2() {
|
|
return 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_CHECK_TYPE(ssize_t, int)
|
|
AC_CHECK_TYPE(uintptr_t,unsigned long)
|
|
AC_CHECK_TYPE(socklen_t,
|
|
[AC_DEFINE(ISC_SOCKADDR_LEN_T, socklen_t)],
|
|
[
|
|
AC_TRY_COMPILE(
|
|
[
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
int getsockname(int, struct sockaddr *, size_t *);
|
|
],[],
|
|
[AC_DEFINE(ISC_SOCKADDR_LEN_T, size_t)],
|
|
[AC_DEFINE(ISC_SOCKADDR_LEN_T, int)])
|
|
],
|
|
[
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
])
|
|
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 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 <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <net/if.h>
|
|
],
|
|
[
|
|
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,
|
|
[ --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,
|
|
[ --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 <sys/epoll.h>
|
|
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"])
|
|
;;
|
|
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,
|
|
[ --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 <sys/types.h> /* Ultrix */
|
|
#include <unistd.h>],
|
|
[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
|
|
|
|
#
|
|
# was --with-openssl specified?
|
|
#
|
|
OPENSSL_WARNING=
|
|
AC_MSG_CHECKING(for OpenSSL library)
|
|
AC_ARG_WITH(openssl,
|
|
[ --with-openssl[=PATH] Build with OpenSSL [yes|no|path].
|
|
(Required for DNSSEC)],
|
|
use_openssl="$withval", use_openssl="auto")
|
|
|
|
openssldirs="/usr /usr/local /usr/local/ssl /usr/pkg /usr/sfw"
|
|
if test "$use_openssl" = "auto"
|
|
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=""
|
|
case "$use_openssl" in
|
|
no)
|
|
AC_MSG_RESULT(no)
|
|
DST_OPENSSL_INC=""
|
|
USE_OPENSSL=""
|
|
OPENSSLLINKOBJS=""
|
|
OPENSSLLINKSRCS=""
|
|
;;
|
|
auto)
|
|
DST_OPENSSL_INC=""
|
|
USE_OPENSSL=""
|
|
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 "$use_openssl" = "yes"
|
|
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 "$use_openssl" = "yes"
|
|
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
|
|
USE_OPENSSL='-DOPENSSL'
|
|
if test "$use_openssl" = "/usr"
|
|
then
|
|
DST_OPENSSL_INC=""
|
|
DNS_OPENSSL_LIBS="-lcrypto"
|
|
else
|
|
DST_OPENSSL_INC="-I$use_openssl/include"
|
|
case $host in
|
|
*-solaris*)
|
|
DNS_OPENSSL_LIBS="-L$use_openssl/lib -R$use_openssl/lib -lcrypto"
|
|
;;
|
|
*-hp-hpux*)
|
|
DNS_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
|
|
DNS_OPENSSL_LIBS="-L$use_openssl/lib -lcrypto"
|
|
else
|
|
DNS_OPENSSL_LIBS="$use_openssl/lib/libcrypto.a"
|
|
fi
|
|
;;
|
|
*)
|
|
DNS_OPENSSL_LIBS="-L$use_openssl/lib -lcrypto"
|
|
;;
|
|
esac
|
|
fi
|
|
AC_MSG_RESULT(using OpenSSL from $use_openssl/lib and $use_openssl/include)
|
|
|
|
saved_cflags="$CFLAGS"
|
|
saved_libs="$LIBS"
|
|
CFLAGS="$CFLAGS $DST_OPENSSL_INC"
|
|
LIBS="$LIBS $DNS_OPENSSL_LIBS"
|
|
AC_MSG_CHECKING(whether linking with OpenSSL works)
|
|
AC_TRY_RUN([
|
|
#include <openssl/err.h>
|
|
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 <openssl/err.h>],
|
|
[ DSO_METHOD_dlfcn(); ],
|
|
[AC_MSG_RESULT(no)],
|
|
[LIBS="$LIBS -ldl"
|
|
AC_TRY_LINK([
|
|
#include <openssl/err.h>
|
|
],[ DSO_METHOD_dlfcn(); ],
|
|
[AC_MSG_RESULT(yes)
|
|
DNS_OPENSSL_LIBS="$DNS_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_ARG_ENABLE(openssl-version-check,
|
|
[AC_HELP_STRING([--enable-openssl-version-check],
|
|
[Check OpenSSL Version @<:@default=yes@:>@])])
|
|
case "$enable_openssl_version_check" in
|
|
yes|'')
|
|
AC_MSG_CHECKING(OpenSSL library version)
|
|
AC_TRY_RUN([
|
|
#include <stdio.h>
|
|
#include <openssl/opensslv.h>
|
|
int main() {
|
|
if ((OPENSSL_VERSION_NUMBER >= 0x009070cfL &&
|
|
OPENSSL_VERSION_NUMBER < 0x00908000L) ||
|
|
OPENSSL_VERSION_NUMBER >= 0x0090804fL)
|
|
return (0);
|
|
printf("\n\nFound OPENSSL_VERSION_NUMBER %#010x\n",
|
|
OPENSSL_VERSION_NUMBER);
|
|
printf("Require OPENSSL_VERSION_NUMBER 0x009070cf or greater (0.9.7l)\n"
|
|
"Require OPENSSL_VERSION_NUMBER 0x0090804f or greater (0.9.8d)\n\n");
|
|
return (1);
|
|
}
|
|
],
|
|
[AC_MSG_RESULT(ok)],
|
|
[AC_MSG_RESULT(not compatible)
|
|
OPENSSL_WARNING=yes
|
|
],
|
|
[AC_MSG_RESULT(assuming target platform has compatible version)])
|
|
;;
|
|
no)
|
|
AC_MSG_RESULT(Skipped OpenSSL version check)
|
|
;;
|
|
esac
|
|
|
|
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_MSG_CHECKING(for OpenSSL ECDSA support)
|
|
have_ecdsa=""
|
|
AC_TRY_RUN([
|
|
#include <stdio.h>
|
|
#include <openssl/ecdsa.h>
|
|
#include <openssl/objects.h>
|
|
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"])
|
|
case $have_ecdsa in
|
|
yes)
|
|
OPENSSL_ECDSA="yes"
|
|
AC_DEFINE(HAVE_OPENSSL_ECDSA)
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
|
|
AC_MSG_CHECKING(for OpenSSL GOST support)
|
|
have_gost=""
|
|
AC_TRY_RUN([
|
|
#include <openssl/conf.h>
|
|
#include <openssl/engine.h>
|
|
int main() {
|
|
#if (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)])
|
|
AC_ARG_WITH(gost, , with_gost="$withval", with_gost="auto")
|
|
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 or no]]]) ;;
|
|
esac
|
|
;;
|
|
esac
|
|
case $have_gost in
|
|
yes)
|
|
OPENSSL_GOST="yes"
|
|
AC_DEFINE(HAVE_OPENSSL_GOST, 1,
|
|
[Define if your OpenSSL version supports GOST.])
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
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(USE_OPENSSL)
|
|
AC_SUBST(DST_OPENSSL_INC)
|
|
AC_SUBST(OPENSSLLINKOBJS)
|
|
AC_SUBST(OPENSSLLINKSRCS)
|
|
AC_SUBST(OPENSSL_ECDSA)
|
|
AC_SUBST(OPENSSL_GOST)
|
|
|
|
DNS_CRYPTO_LIBS="$DNS_CRYPTO_LIBS $DNS_OPENSSL_LIBS"
|
|
|
|
#
|
|
# Use OpenSSL for hash functions
|
|
#
|
|
|
|
AC_ARG_ENABLE(openssl-hash,
|
|
[ --enable-openssl-hash use OpenSSL for hash functions [[default=no]]],
|
|
want_openssl_hash="$enableval", want_openssl_hash="no")
|
|
case $want_openssl_hash in
|
|
yes)
|
|
if test "$USE_OPENSSL" = ""
|
|
then
|
|
AC_MSG_ERROR([No OpenSSL for hash functions])
|
|
fi
|
|
ISC_PLATFORM_OPENSSLHASH="#define ISC_PLATFORM_OPENSSLHASH 1"
|
|
ISC_OPENSSL_INC="$DST_OPENSSL_INC"
|
|
;;
|
|
no)
|
|
ISC_PLATFORM_OPENSSLHASH="#undef ISC_PLATFORM_OPENSSLHASH"
|
|
ISC_OPENSSL_INC=""
|
|
;;
|
|
esac
|
|
AC_SUBST(ISC_PLATFORM_OPENSSLHASH)
|
|
AC_SUBST(ISC_OPENSSL_INC)
|
|
|
|
#
|
|
# PKCS11 (aka crypto hardware) support
|
|
#
|
|
# This works only with the right OpenSSL with PKCS11 engine!
|
|
#
|
|
|
|
AC_MSG_CHECKING(for PKCS11 support)
|
|
AC_ARG_WITH(pkcs11,
|
|
[ --with-pkcs11[=PATH] Build with PKCS11 support [yes|no|path]
|
|
(PATH is for the PKCS11 provider)],
|
|
use_pkcs11="$withval", use_pkcs11="no")
|
|
|
|
case "$use_pkcs11" in
|
|
no|'')
|
|
AC_MSG_RESULT(disabled)
|
|
USE_PKCS11=''
|
|
PKCS11_TOOLS=''
|
|
;;
|
|
yes|*)
|
|
AC_MSG_RESULT(using OpenSSL with PKCS11 support)
|
|
USE_PKCS11='-DUSE_PKCS11'
|
|
PKCS11_TOOLS=pkcs11
|
|
;;
|
|
esac
|
|
AC_SUBST(USE_PKCS11)
|
|
AC_SUBST(PKCS11_TOOLS)
|
|
|
|
AC_MSG_CHECKING(for PKCS11 tools)
|
|
case "$use_pkcs11" in
|
|
no|yes|'')
|
|
AC_MSG_RESULT(disabled)
|
|
PKCS11_PROVIDER="undefined"
|
|
;;
|
|
*)
|
|
AC_MSG_RESULT(PKCS11 provider is "$use_pkcs11")
|
|
PKCS11_PROVIDER="$use_pkcs11"
|
|
;;
|
|
esac
|
|
AC_SUBST(PKCS11_PROVIDER)
|
|
|
|
AC_MSG_CHECKING(for GSSAPI library)
|
|
AC_ARG_WITH(gssapi,
|
|
[ --with-gssapi=PATH Specify path for system-supplied GSSAPI [[default=yes]]],
|
|
use_gssapi="$withval", use_gssapi="yes")
|
|
|
|
# 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 "$use_gssapi" = "yes"
|
|
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])
|
|
;;
|
|
*)
|
|
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>"])
|
|
|
|
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>"])
|
|
|
|
AC_CHECK_HEADERS(krb5.h krb5/krb5.h kerberosv5/krb5.h,
|
|
[ISC_PLATFORM_KRB5HEADER="#define ISC_PLATFORM_KRB5HEADER <$ac_header>"])
|
|
|
|
if test "$ISC_PLATFORM_KRB5HEADER" = ""; then
|
|
AC_MSG_ERROR([krb5.h not found])
|
|
fi
|
|
|
|
CPPFLAGS="$saved_cppflags"
|
|
|
|
#
|
|
# 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" \
|
|
"-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 "$use_gssapi" = "/usr"
|
|
then
|
|
LIBS="$TRY_LIBS"
|
|
else
|
|
LIBS="-L$use_gssapi/lib $TRY_LIBS"
|
|
fi
|
|
AC_MSG_CHECKING(linking as $TRY_LIBS)
|
|
AC_TRY_LINK( , [gss_acquire_cred();krb5_init_context()],
|
|
gssapi_linked=yes, gssapi_linked=no)
|
|
case $gssapi_linked in
|
|
yes) AC_MSG_RESULT(yes); break ;;
|
|
no) AC_MSG_RESULT(no) ;;
|
|
esac
|
|
done
|
|
|
|
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 "$use_gssapi" = "/usr" -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,
|
|
[ --with-randomdev=PATH Specify path for random device],
|
|
use_randomdev="$withval", use_randomdev="unspec")
|
|
|
|
case "$use_randomdev" in
|
|
unspec)
|
|
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
|
|
|
|
#
|
|
# Do we have arc4random() ?
|
|
#
|
|
AC_CHECK_FUNC(arc4random, AC_DEFINE(HAVE_ARC4RANDOM))
|
|
|
|
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"
|
|
STD_CDEFINES="$STD_CDEFINES -D_THREAD_SAFE"
|
|
;;
|
|
*-openbsd*)
|
|
CC="$CC -pthread"
|
|
CCOPT="$CCOPT -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"
|
|
;;
|
|
*-solaris*)
|
|
CC="$CC -mt"
|
|
CCOPT="$CCOPT -mt"
|
|
;;
|
|
*-ibm-aix*)
|
|
STD_CDEFINES="$STD_CDEFINES -D_THREAD_SAFE"
|
|
;;
|
|
*-sco-sysv*uw*|*-*-sysv*UnixWare*)
|
|
CC="$CC -Kthread"
|
|
CCOPT="$CCOPT -Kthread"
|
|
;;
|
|
*-*-sysv*OpenUNIX*)
|
|
CC="$CC -Kpthread"
|
|
CCOPT="$CCOPT -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),)
|
|
|
|
#
|
|
# 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 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)
|
|
|
|
#
|
|
# was --with-libxml2 specified?
|
|
#
|
|
AC_MSG_CHECKING(for libxml2 library)
|
|
AC_ARG_WITH(libxml2,
|
|
[ --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.[[678]].*)
|
|
libxml2_libs=`xml2-config --libs`
|
|
libxml2_cflags=`xml2-config --cflags`
|
|
;;
|
|
*)
|
|
libxml2_libs=
|
|
libxml2_cflags=
|
|
;;
|
|
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
|
|
AC_MSG_RESULT(yes)
|
|
CFLAGS="$CFLAGS $libxml2_cflags"
|
|
LIBS="$LIBS $libxml2_libs"
|
|
AC_DEFINE(HAVE_LIBXML2, 1, [Define if libxml2 was found])
|
|
else
|
|
AC_MSG_RESULT(no)
|
|
fi
|
|
|
|
#
|
|
# 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, [ --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
|
|
AC_MSG_CHECKING(if "$CC" supports -fno-strict-aliasing)
|
|
SAVE_CFLAGS=$CFLAGS
|
|
CFLAGS="$CFLAGS -fno-strict-aliasing"
|
|
AC_TRY_COMPILE(,, [FNOSTRICTALIASING=yes],[FNOSTRICTALIASING=no])
|
|
CFLAGS=$SAVE_CFLAGS
|
|
if test "$FNOSTRICTALIASING" = "yes"; then
|
|
AC_MSG_RESULT(yes)
|
|
STD_CWARNINGS="$STD_CWARNINGS -W -Wall -Wmissing-prototypes -Wcast-qual -Wwrite-strings -Wformat -Wpointer-arith -fno-strict-aliasing"
|
|
else
|
|
AC_MSG_RESULT(no)
|
|
STD_CWARNINGS="$STD_CWARNINGS -W -Wall -Wmissing-prototypes -Wcast-qual -Wwrite-strings -Wformat -Wpointer-arith"
|
|
fi
|
|
case "$host" in
|
|
*-hp-hpux*)
|
|
LDFLAGS="-Wl,+vnocompatwarnings $LDFLAGS"
|
|
;;
|
|
esac
|
|
else
|
|
case $host in
|
|
*-dec-osf*)
|
|
CC="$CC -std"
|
|
CCOPT="$CCOPT -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"
|
|
LDFLAGS="-Wl,+vnocompatwarnings $LDFLAGS"
|
|
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,
|
|
[ --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_path = purify; 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)
|
|
|
|
|
|
AC_ARG_WITH(libtool,
|
|
[ --with-libtool use GNU libtool],
|
|
use_libtool="$withval", use_libtool="no")
|
|
|
|
case $use_libtool in
|
|
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'
|
|
case "$host" in
|
|
*) LIBTOOL_ALLOW_UNDEFINED= ;;
|
|
esac
|
|
case "$host" in
|
|
*-ibm-aix*) LIBTOOL_IN_MAIN="-Wl,-bI:T_testlist.imp" ;;
|
|
*) LIBTOOL_IN_MAIN= ;;
|
|
esac;
|
|
;;
|
|
*)
|
|
O=o
|
|
A=a
|
|
LIBTOOL=
|
|
AC_SUBST(LIBTOOL)
|
|
LIBTOOL_MKDEP_SED=
|
|
LIBTOOL_MODE_COMPILE=
|
|
LIBTOOL_MODE_INSTALL=
|
|
LIBTOOL_MODE_LINK=
|
|
LIBTOOL_ALLOW_UNDEFINED=
|
|
LIBTOOL_IN_MAIN=
|
|
;;
|
|
esac
|
|
|
|
#
|
|
# enable/disable dumping stack backtrace. Also check if the system supports
|
|
# glibc-compatible backtrace() function.
|
|
#
|
|
AC_ARG_ENABLE(backtrace,
|
|
[ --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 <execinfo.h>],
|
|
[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,
|
|
[ --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 "$use_libtool" = "yes"; 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 $want_symtable = all; then
|
|
ALWAYS_MAKE_SYMTABLE="yes"
|
|
fi
|
|
;;
|
|
*)
|
|
if test $want_symtable = yes -o $want_symtable = all
|
|
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_ALLOW_UNDEFINED)
|
|
AC_SUBST(LIBTOOL_IN_MAIN)
|
|
|
|
#
|
|
# build exportable DNS library?
|
|
#
|
|
AC_ARG_ENABLE(exportlib,
|
|
[ --enable-exportlib build exportable library (GNU make required)
|
|
[[default=no]]])
|
|
case "$enable_exportlib" in
|
|
yes)
|
|
gmake=
|
|
for x in gmake gnumake make; do
|
|
if $x --version 2>/dev/null | grep GNU > /dev/null; then
|
|
gmake=$x
|
|
break;
|
|
fi
|
|
done
|
|
if test -z "$gmake"; then
|
|
AC_MSG_ERROR([exportlib requires GNU make. Install it or disable the feature.])
|
|
fi
|
|
LIBEXPORT=lib/export
|
|
AC_SUBST(LIBEXPORT)
|
|
BIND9_CO_RULE="%.$O: \${srcdir}/%.c"
|
|
;;
|
|
no|*)
|
|
BIND9_CO_RULE=".c.$O:"
|
|
;;
|
|
esac
|
|
AC_SUBST(BIND9_CO_RULE)
|
|
|
|
AC_ARG_WITH(export-libdir,
|
|
[ --with-export-libdir[=PATH]
|
|
installation directory for the export library
|
|
[[EPREFIX/lib/bind9]]],
|
|
export_libdir="$withval",)
|
|
if test -z "$export_libdir"; then
|
|
export_libdir="\${exec_prefix}/lib/bind9/"
|
|
fi
|
|
AC_SUBST(export_libdir)
|
|
|
|
AC_ARG_WITH(export-includedir,
|
|
[ --with-export-includedir[=PATH]
|
|
installation directory for the header files of the
|
|
export library [[PREFIX/include/bind9]]],
|
|
export_includedir="$withval",)
|
|
if test -z "$export_includedir"; then
|
|
export_includedir="\${prefix}/include/bind9/"
|
|
fi
|
|
AC_SUBST(export_includedir)
|
|
|
|
#
|
|
# 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,
|
|
[ --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 <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>],
|
|
[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,
|
|
[ --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 <netinet6/in6.h>"
|
|
;;
|
|
*)
|
|
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 <netinet/in6.h>"
|
|
;;
|
|
*)
|
|
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 <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
$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 <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
$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 <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
$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 <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
$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 <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
$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_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_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 <sys/types.h>
|
|
#include <net/if6.h>
|
|
],[ 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 <sys/types.h>
|
|
#include <net/if6.h>
|
|
],[ 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 <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#include <arpa/inet.h>
|
|
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 <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#include <arpa/inet.h>
|
|
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 <sys/types.h>
|
|
#include <sys/socket.h>],
|
|
[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 <sys/types.h>
|
|
#include <sys/socket.h>],
|
|
[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 <sys/types.h>
|
|
#include <netinet/in.h>],
|
|
[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)
|
|
|
|
#
|
|
# Check for addrinfo
|
|
#
|
|
AC_MSG_CHECKING(for struct addrinfo)
|
|
AC_TRY_COMPILE([
|
|
#include <netdb.h>],
|
|
[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 <netdb.h>],
|
|
[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 <netdb.h>],
|
|
[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 <netdb.h>],
|
|
[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 <netdb.h>
|
|
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 <netdb.h>],
|
|
[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 <netdb.h>],
|
|
[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 <netdb.h>
|
|
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 <netdb.h>],
|
|
[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 <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netdb.h>
|
|
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_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 <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netdb.h>
|
|
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_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_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 <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netdb.h>
|
|
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,
|
|
[ --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 <sys/param.h>
|
|
#include <sys/sysctl.h>
|
|
#include <sys/socket.h>
|
|
#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 <string.h> 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 <string.h>], [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"],
|
|
[ISC_PLATFORM_NEEDSTRLCPY="#define ISC_PLATFORM_NEEDSTRLCPY 1"])
|
|
AC_SUBST(ISC_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)
|
|
|
|
ISC_PRINT_OBJS=
|
|
ISC_PRINT_SRCS=
|
|
AC_MSG_CHECKING(sprintf)
|
|
AC_TRY_COMPILE([
|
|
#include <stdio.h>
|
|
],
|
|
[ char buf[2]; return(*sprintf(buf,"x"));],
|
|
[
|
|
ISC_PRINT_OBJS="print.$O"
|
|
ISC_PRINT_SRCS="print.c"
|
|
ISC_PLATFORM_NEEDSPRINTF="#define ISC_PLATFORM_NEEDSPRINTF"
|
|
LWRES_PLATFORM_NEEDSPRINTF="#define LWRES_PLATFORM_NEEDSPRINTF"
|
|
],
|
|
[ISC_PLATFORM_NEEDSPRINTF="#undef ISC_PLATFORM_NEEDSPRINTF"
|
|
LWRES_PLATFORM_NEEDSPRINTF="#undef LWRES_PLATFORM_NEEDSPRINTF"]
|
|
)
|
|
AC_SUBST(ISC_PLATFORM_NEEDSPRINTF)
|
|
AC_SUBST(LWRES_PLATFORM_NEEDSPRINTF)
|
|
|
|
AC_CHECK_FUNC(vsnprintf,
|
|
[ISC_PLATFORM_NEEDVSNPRINTF="#undef ISC_PLATFORM_NEEDVSNPRINTF"
|
|
LWRES_PLATFORM_NEEDVSNPRINTF="#undef LWRES_PLATFORM_NEEDVSNPRINTF"],
|
|
[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_SUBST(ISC_PLATFORM_NEEDVSNPRINTF)
|
|
AC_SUBST(LWRES_PLATFORM_NEEDVSNPRINTF)
|
|
ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS $ISC_PRINT_OBJS"
|
|
ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS $ISC_PRINT_SRCS"
|
|
|
|
AC_CHECK_FUNC(strerror, AC_DEFINE(HAVE_STRERROR))
|
|
|
|
AC_SUBST(ISC_EXTRA_OBJS)
|
|
AC_SUBST(ISC_EXTRA_SRCS)
|
|
|
|
#
|
|
# Use our own SPNEGO implementation?
|
|
#
|
|
AC_ARG_ENABLE(isc-spnego,
|
|
[ --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)
|
|
|
|
# Determine the printf format characters to use when printing
|
|
# values of type isc_int64_t. This will normally be "ll", but where
|
|
# the compiler treats "long long" as a alias for "long" and printf
|
|
# doesn't know about "long long" use "l". Hopefully the sprintf
|
|
# will produce a inconsistent result in the later case. If the compiler
|
|
# fails due to seeing "%lld" we fall back to "l".
|
|
#
|
|
# Digital Unix 4.0 (gcc?) (long long) is 64 bits as is its long. It uses
|
|
# %ld even for (long long)/
|
|
#
|
|
# Win32 uses "%I64d", but that's defined elsewhere since we don't use
|
|
# configure on Win32.
|
|
#
|
|
AC_MSG_CHECKING(printf format modifier for 64-bit integers)
|
|
AC_TRY_RUN([
|
|
#include <stdio.h>
|
|
main() {
|
|
long long int j = 0;
|
|
char buf[100];
|
|
buf[0] = 0;
|
|
sprintf(buf, "%lld", j);
|
|
exit((sizeof(long long int) != sizeof(long int))? 0 :
|
|
(strcmp(buf, "0") != 0));
|
|
}
|
|
],
|
|
[AC_MSG_RESULT(ll)
|
|
ISC_PLATFORM_QUADFORMAT='#define ISC_PLATFORM_QUADFORMAT "ll"'
|
|
LWRES_PLATFORM_QUADFORMAT='#define LWRES_PLATFORM_QUADFORMAT "ll"'],
|
|
[AC_MSG_RESULT(l)
|
|
ISC_PLATFORM_QUADFORMAT='#define ISC_PLATFORM_QUADFORMAT "l"'
|
|
LWRES_PLATFORM_QUADFORMAT='#define LWRES_PLATFORM_QUADFORMAT "l"'],
|
|
[AC_MSG_RESULT(assuming target platform uses ll)
|
|
ISC_PLATFORM_QUADFORMAT='#define ISC_PLATFORM_QUADFORMAT "ll"'
|
|
LWRES_PLATFORM_QUADFORMAT='#define LWRES_PLATFORM_QUADFORMAT "ll"'])
|
|
AC_SUBST(ISC_PLATFORM_QUADFORMAT)
|
|
AC_SUBST(LWRES_PLATFORM_QUADFORMAT)
|
|
|
|
#
|
|
# 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,
|
|
[ --disable-chroot disable chroot])
|
|
case "$enable_chroot" in
|
|
yes|'')
|
|
AC_CHECK_FUNCS(chroot)
|
|
;;
|
|
no)
|
|
;;
|
|
esac
|
|
AC_ARG_ENABLE(linux-caps,
|
|
[ --disable-linux-caps disable linux capabilities])
|
|
case "$enable_linux_caps" in
|
|
yes|'')
|
|
AC_CHECK_HEADERS(linux/capability.h sys/capability.h)
|
|
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 <unistd.h>
|
|
],
|
|
[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.])])
|
|
|
|
#
|
|
# BSD/OS, and perhaps some others, don't define rlim_t.
|
|
#
|
|
AC_MSG_CHECKING(for type rlim_t)
|
|
AC_TRY_COMPILE([
|
|
#include <sys/types.h>
|
|
#include <sys/time.h>
|
|
#include <sys/resource.h>],
|
|
[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 <sys/types.h>
|
|
#include <sys/time.h>
|
|
#include <sys/resource.h>
|
|
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 <sys/types.h>
|
|
#include <sys/time.h>
|
|
#include <sys/resource.h>
|
|
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 <sys/types.h>
|
|
#include <sys/time.h>
|
|
#include <sys/resource.h>
|
|
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 <pthread.h> ], [ 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 <stdio.h>.
|
|
#
|
|
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"
|
|
;;
|
|
*)
|
|
ISC_PLATFORM_HAVEIFNAMETOINDEX="#undef ISC_PLATFORM_HAVEIFNAMETOINDEX"
|
|
;;
|
|
esac
|
|
AC_SUBST(ISC_PLATFORM_HAVEIFNAMETOINDEX)
|
|
|
|
AC_CHECK_FUNCS(nanosleep)
|
|
|
|
#
|
|
# Machine architecture dependent features
|
|
#
|
|
AC_ARG_ENABLE(atomic,
|
|
[ --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("isc"); 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)
|
|
use_atomic=no
|
|
arch=noatomic
|
|
;;
|
|
esac
|
|
|
|
ISC_PLATFORM_USEOSFASM="#undef ISC_PLATFORM_USEOSFASM"
|
|
if test "$use_atomic" = "yes"; then
|
|
AC_MSG_CHECKING([architecture type for atomic operations])
|
|
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_RESULT($arch)
|
|
fi
|
|
|
|
if test "$have_atomic" = "yes"; 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 "$have_atomic" = "yes"; 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"
|
|
else
|
|
ISC_PLATFORM_HAVEXADD="#undef ISC_PLATFORM_HAVEXADD"
|
|
ISC_PLATFORM_HAVECMPXCHG="#undef ISC_PLATFORM_HAVECMPXCHG"
|
|
ISC_PLATFORM_HAVEATOMICSTORE="#undef ISC_PLATFORM_HAVEATOMICSTORE"
|
|
fi
|
|
|
|
if test "$have_xaddq" = "yes"; then
|
|
ISC_PLATFORM_HAVEXADDQ="#define ISC_PLATFORM_HAVEXADDQ 1"
|
|
else
|
|
ISC_PLATFORM_HAVEXADDQ="#undef ISC_PLATFORM_HAVEXADDQ"
|
|
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_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)
|
|
|
|
#
|
|
# Activate "rrset-order fixed" or not?
|
|
#
|
|
AC_ARG_ENABLE(fixed-rrset,
|
|
[ --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,
|
|
[ --enable-rpz-nsip enable rpz-nsip rules [[default=no]]],
|
|
enable_nsip="$enableval",
|
|
enable_nsip="no")
|
|
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,
|
|
[ --enable-rpz-nsdname enable rpz-nsdname rules [[default=no]]],
|
|
enable_nsdname="$enableval",
|
|
enable_nsdname="no")
|
|
case "$enable_nsdname" in
|
|
yes)
|
|
AC_DEFINE(ENABLE_RPZ_NSDNAME, 1,
|
|
[Define to enable rpz-nsdname rules.])
|
|
;;
|
|
no)
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
|
|
#
|
|
# Activate "filter-aaaa-on-v4" or not?
|
|
#
|
|
AC_ARG_ENABLE(filter-aaaa,
|
|
[ --enable-filter-aaaa enable filtering of AAAA records over IPv4
|
|
[[default=no]]],
|
|
enable_filter="$enableval",
|
|
enable_filter="no")
|
|
case "$enable_filter" in
|
|
yes)
|
|
AC_DEFINE(ALLOW_FILTER_AAAA_ON_V4, 1,
|
|
[Define to enable the "filter-aaaa-on-v4" option.])
|
|
;;
|
|
no)
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
|
|
#
|
|
# 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)
|
|
|
|
#
|
|
# Look for w3m
|
|
#
|
|
|
|
AC_PATH_PROGS(W3M, w3m, w3m)
|
|
AC_SUBST(W3M)
|
|
|
|
#
|
|
# 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)
|
|
|
|
#
|
|
# 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,
|
|
[ --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 /usr/share/xsl/docbook"
|
|
;;
|
|
*)
|
|
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 db2latex
|
|
#
|
|
# No idea where this lives except on FreeBSD.
|
|
#
|
|
|
|
db2latex_xsl_trees="/usr/local/share"
|
|
|
|
#
|
|
# Look for stylesheets we need.
|
|
#
|
|
|
|
NOM_PATH_FILE(XSLT_DB2LATEX_STYLE, db2latex/xsl/docbook.xsl, $db2latex_xsl_trees)
|
|
|
|
#
|
|
# Look for "admonition" image directory. Can't use NOM_PATH_FILE()
|
|
# because it's a directory, so just do the same things, inline.
|
|
#
|
|
|
|
AC_MSG_CHECKING(for db2latex/xsl/figures)
|
|
for d in $db2latex_xsl_trees
|
|
do
|
|
dd=$d/db2latex/xsl/figures
|
|
if test -d $dd
|
|
then
|
|
XSLT_DB2LATEX_ADMONITIONS=$dd
|
|
AC_MSG_RESULT($dd)
|
|
break
|
|
fi
|
|
done
|
|
if test "X$XSLT_DB2LATEX_ADMONITIONS" = "X"
|
|
then
|
|
AC_MSG_RESULT(not found)
|
|
XSLT_DB2LATEX_ADMONITIONS=db2latex/xsl/figures
|
|
fi
|
|
AC_SUBST(XSLT_DB2LATEX_ADMONITIONS)
|
|
|
|
#
|
|
# IDN support
|
|
#
|
|
AC_ARG_WITH(idn,
|
|
[ --with-idn[=MPREFIX] enable IDN support using idnkit [default PREFIX]],
|
|
use_idn="$withval", use_idn="no")
|
|
case "$use_idn" in
|
|
yes)
|
|
if test X$prefix = XNONE ; then
|
|
idn_path=/usr/local
|
|
else
|
|
idn_path=$prefix
|
|
fi
|
|
;;
|
|
no)
|
|
;;
|
|
*)
|
|
idn_path="$use_idn"
|
|
;;
|
|
esac
|
|
|
|
iconvinc=
|
|
iconvlib=
|
|
AC_ARG_WITH(libiconv,
|
|
[ --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,
|
|
[ --with-iconv[=LIBSPEC] specify iconv library [default -liconv]],
|
|
iconvlib="$withval")
|
|
case "$iconvlib" in
|
|
no)
|
|
iconvlib=
|
|
;;
|
|
yes)
|
|
iconvlib=-liconv
|
|
;;
|
|
esac
|
|
|
|
AC_ARG_WITH(idnlib,
|
|
[ --with-idnlib=ARG specify libidnkit],
|
|
idnlib="$withval", idnlib="no")
|
|
if test "$idnlib" = yes; then
|
|
AC_MSG_ERROR([You must specify ARG for --with-idnlib.])
|
|
fi
|
|
|
|
IDNLIBS=
|
|
if test "$use_idn" != no; then
|
|
AC_DEFINE(WITH_IDN, 1, [define if idnkit support is to be included.])
|
|
STD_CINCLUDES="$STD_CINCLUDES -I$idn_path/include"
|
|
if test "$idnlib" != no; then
|
|
IDNLIBS="$idnlib $iconvlib"
|
|
else
|
|
IDNLIBS="-L$idn_path/lib -lidnkit $iconvlib"
|
|
fi
|
|
fi
|
|
AC_SUBST(IDNLIBS)
|
|
|
|
#
|
|
# Check whether to build Automated Test Framework unit tests
|
|
#
|
|
AC_ARG_WITH(atf,
|
|
[ --with-atf=ARG Automated Test Framework support],
|
|
atf="$withval", atf="no")
|
|
if test "$atf" = yes; then
|
|
atf=`pwd`/unit/atf
|
|
ATFBUILD=atf-src
|
|
AC_SUBST(ATFBUILD)
|
|
AC_CONFIG_COMMANDS([atf-config],
|
|
[cd unit/atf-src; ${SHELL} ./configure MISSING=: --prefix $atfdir; cd ../..],
|
|
[atfdir=`pwd`/unit/atf])
|
|
AC_MSG_RESULT(building ATF from bind9/unit/atf-src)
|
|
fi
|
|
|
|
ATFLIBS=
|
|
if test "$atf" != no; 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"
|
|
UNITTESTS=tests
|
|
fi
|
|
AC_SUBST(ATFBIN)
|
|
AC_SUBST(ATFLIBS)
|
|
AC_SUBST(UNITTESTS)
|
|
|
|
AC_CHECK_HEADERS(locale.h)
|
|
AC_CHECK_FUNCS(setlocale)
|
|
|
|
#
|
|
# 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)
|
|
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"
|
|
else
|
|
BIND9_ISC_BUILDINCLUDE=""
|
|
BIND9_ISCCC_BUILDINCLUDE=""
|
|
BIND9_ISCCFG_BUILDINCLUDE=""
|
|
BIND9_DNS_BUILDINCLUDE=""
|
|
BIND9_LWRES_BUILDINCLUDE=""
|
|
BIND9_BIND9_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_VERSION="VERSION=${MAJORVER}.${MINORVER}${PATCHVER:+.}${PATCHVER}${RELEASETYPE}${RELEASEVER}"
|
|
AC_SUBST(BIND9_VERSION)
|
|
|
|
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(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=""
|
|
|
|
#
|
|
# 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_LD=""
|
|
SO_TARGETS=""
|
|
|
|
AC_ARG_WITH(dlopen,
|
|
[ --with-dlopen=ARG Support dynamically loadable DLZ drivers],
|
|
dlopen="$withval", dlopen="yes")
|
|
|
|
if test "$dlopen" = "yes"; then
|
|
AC_CHECK_LIB(dl, dlopen, have_dl=yes, have_dl=no)
|
|
if test "$have_dl" = "yes"; then
|
|
LIBS="-ldl $LIBS"
|
|
fi
|
|
AC_CHECK_FUNCS(dlopen dlclose dlsym,,dlopen=no)
|
|
fi
|
|
|
|
if test "$dlopen" = "yes"; then
|
|
case $host in
|
|
*-linux*)
|
|
SO_CFLAGS="-fPIC"
|
|
if test "$have_dl" = "yes"
|
|
then
|
|
SO_LD="${CC} -shared"
|
|
else
|
|
SO_LD="ld -shared"
|
|
fi
|
|
;;
|
|
*-freebsd*|*-openbsd*|*-netbsd*)
|
|
SO_CFLAGS="-fpic"
|
|
SO_LD="ld -Bshareable -x"
|
|
;;
|
|
*-solaris*)
|
|
SO_CFLAGS="-KPIC"
|
|
SO_LD="ld -G -z text"
|
|
;;
|
|
*-hp-hpux*)
|
|
SO=sl
|
|
SO_CFLAGS="+z"
|
|
SO_LD="ld -b"
|
|
;;
|
|
*)
|
|
SO_CFLAGS="-fPIC"
|
|
;;
|
|
esac
|
|
|
|
if test "X$GCC" = "Xyes"; then
|
|
SO_CFLAGS="-fPIC"
|
|
test -n "$SO_LD" || SO_LD="${CC} -shared"
|
|
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
|
|
|
|
AC_SUBST(SO)
|
|
AC_SUBST(SO_CFLAGS)
|
|
AC_SUBST(SO_LD)
|
|
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])
|
|
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_FILE(DLZ_DRIVER_RULES)
|
|
|
|
if test "$cross_compiling" = "yes"; then
|
|
if test -z "$BUILD_CC"; then
|
|
AC_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 $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/dig/Makefile
|
|
bin/dnssec/Makefile
|
|
bin/named/Makefile
|
|
bin/named/unix/Makefile
|
|
bin/nsupdate/Makefile
|
|
bin/pkcs11/Makefile
|
|
bin/rndc/Makefile
|
|
bin/tests/Makefile
|
|
bin/tests/atomic/Makefile
|
|
bin/tests/db/Makefile
|
|
bin/tests/dst/Makefile
|
|
bin/tests/hashes/Makefile
|
|
bin/tests/headerdep_test.sh
|
|
bin/tests/master/Makefile
|
|
bin/tests/mem/Makefile
|
|
bin/tests/names/Makefile
|
|
bin/tests/net/Makefile
|
|
bin/tests/rbt/Makefile
|
|
bin/tests/resolver/Makefile
|
|
bin/tests/sockaddr/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/named.conf
|
|
bin/tests/system/ecdsa/prereq.sh
|
|
bin/tests/system/filter-aaaa/Makefile
|
|
bin/tests/system/gost/prereq.sh
|
|
bin/tests/system/lwresd/Makefile
|
|
bin/tests/system/rpz/Makefile
|
|
bin/tests/system/tkey/Makefile
|
|
bin/tests/system/tsiggss/Makefile
|
|
bin/tests/tasks/Makefile
|
|
bin/tests/timers/Makefile
|
|
bin/tests/virtual-time/Makefile
|
|
bin/tests/virtual-time/conf.sh
|
|
bin/tools/Makefile
|
|
contrib/check-secure-delegation.pl
|
|
contrib/zone-edit.sh
|
|
doc/Makefile
|
|
doc/arm/Makefile
|
|
doc/doxygen/Doxyfile
|
|
doc/doxygen/Makefile
|
|
doc/doxygen/doxygen-input-filter
|
|
doc/misc/Makefile
|
|
doc/xsl/Makefile
|
|
doc/xsl/isc-docbook-chunk.xsl
|
|
doc/xsl/isc-docbook-html.xsl
|
|
doc/xsl/isc-docbook-latex.xsl
|
|
doc/xsl/isc-manpage.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/export/Makefile
|
|
lib/export/dns/Makefile
|
|
lib/export/dns/include/Makefile
|
|
lib/export/dns/include/dns/Makefile
|
|
lib/export/dns/include/dst/Makefile
|
|
lib/export/irs/Makefile
|
|
lib/export/irs/include/Makefile
|
|
lib/export/irs/include/irs/Makefile
|
|
lib/export/isc/$thread_dir/Makefile
|
|
lib/export/isc/$thread_dir/include/Makefile
|
|
lib/export/isc/$thread_dir/include/isc/Makefile
|
|
lib/export/isc/Makefile
|
|
lib/export/isc/include/Makefile
|
|
lib/export/isc/include/isc/Makefile
|
|
lib/export/isc/nls/Makefile
|
|
lib/export/isc/unix/Makefile
|
|
lib/export/isc/unix/include/Makefile
|
|
lib/export/isc/unix/include/isc/Makefile
|
|
lib/export/isccfg/Makefile
|
|
lib/export/isccfg/include/Makefile
|
|
lib/export/isccfg/include/isccfg/Makefile
|
|
lib/export/samples/Makefile
|
|
lib/export/samples/Makefile-postinstall
|
|
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/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/tests/Makefile
|
|
lib/isc/nls/Makefile
|
|
lib/isc/unix/Makefile
|
|
lib/isc/unix/include/Makefile
|
|
lib/isc/unix/include/isc/Makefile
|
|
lib/isccc/Makefile
|
|
lib/isccc/include/Makefile
|
|
lib/isccc/include/isccc/Makefile
|
|
lib/isccfg/Makefile
|
|
lib/isccfg/include/Makefile
|
|
lib/isccfg/include/isccfg/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/unix/Makefile
|
|
lib/lwres/unix/include/Makefile
|
|
lib/lwres/unix/include/lwres/Makefile
|
|
lib/tests/Makefile
|
|
lib/tests/include/Makefile
|
|
lib/tests/include/tests/Makefile
|
|
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,
|
|
[ --with-make-clean Run "make clean" at end of configure [[yes|no]].],
|
|
make_clean="$withval", make_clean="yes")
|
|
case "$make_clean" in
|
|
yes)
|
|
make clean
|
|
;;
|
|
esac
|
|
|
|
if test "X$USE_OPENSSL" = "X"; then
|
|
cat << \EOF
|
|
BIND is being built without OpenSSL. This means it will not have DNSSEC support.
|
|
EOF
|
|
fi
|
|
|
|
if test "X$OPENSSL_WARNING" != "X"; then
|
|
cat << \EOF
|
|
WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
|
|
WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
|
|
WARNING WARNING
|
|
WARNING Your OpenSSL crypto library may be vulnerable to WARNING
|
|
WARNING one or more of the the following known security WARNING
|
|
WARNING flaws: WARNING
|
|
WARNING WARNING
|
|
WARNING CAN-2002-0659, CAN-2006-4339, CVE-2006-2937 and WARNING
|
|
WARNING CVE-2006-2940. WARNING
|
|
WARNING WARNING
|
|
WARNING It is recommended that you upgrade to OpenSSL WARNING
|
|
WARNING version 0.9.8d/0.9.7l (or greater). WARNING
|
|
WARNING WARNING
|
|
WARNING You can disable this warning by specifying: WARNING
|
|
WARNING WARNING
|
|
WARNING --disable-openssl-version-check WARNING
|
|
WARNING WARNING
|
|
WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
|
|
WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
|
|
EOF
|
|
fi
|
|
|
|
# Tell Emacs to edit this file in shell mode.
|
|
# Local Variables:
|
|
# mode: sh
|
|
# End:
|