summaryrefslogtreecommitdiffstats
path: root/configure.ac
diff options
context:
space:
mode:
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac1704
1 files changed, 1704 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..dc61f79
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,1704 @@
+# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+#
+# SPDX-License-Identifier: MPL-2.0
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, you can obtain one at https://mozilla.org/MPL/2.0/.
+#
+# See the COPYRIGHT file distributed with this work for additional
+# information regarding copyright ownership.
+
+#
+# Defining the version in m4 requires a bit of dancing around,
+# so the strings are properly concatenated, as you can't use
+# a shell variable in AC_INIT
+#
+m4_define([bind_VERSION_MAJOR], 9)dnl
+m4_define([bind_VERSION_MINOR], 18)dnl
+m4_define([bind_VERSION_PATCH], 19)dnl
+m4_define([bind_VERSION_EXTRA], )dnl
+m4_define([bind_DESCRIPTION], [(Extended Support Version)])dnl
+m4_define([bind_SRCID], [m4_esyscmd_s([git rev-parse --short HEAD | cut -b1-7])])dnl
+m4_define([bind_PKG_VERSION], [[bind_VERSION_MAJOR.bind_VERSION_MINOR.bind_VERSION_PATCH]bind_VERSION_EXTRA])dnl
+
+#
+# Autoconf initialization
+#
+AC_INIT([BIND], bind_PKG_VERSION, [https://gitlab.isc.org/isc-projects/bind9/-/issues/new?issuable_template=Bug], [], [https://www.isc.org/downloads/])
+AC_PREREQ([2.69])
+
+AC_DEFINE([PACKAGE_VERSION_MAJOR], ["][bind_VERSION_MAJOR]["], [BIND 9 Major part of the version])
+AC_DEFINE([PACKAGE_VERSION_MINOR], ["][bind_VERSION_MINOR]["], [BIND 9 Minor part of the version])
+AC_DEFINE([PACKAGE_VERSION_PATCH], ["][bind_VERSION_PATCH]["], [BIND 9 Patch part of the version])
+AC_DEFINE([PACKAGE_VERSION_EXTRA], ["][bind_VERSION_EXTRA]["], [BIND 9 Extra part of the version])
+AC_DEFINE([PACKAGE_DESCRIPTION], [m4_ifnblank(bind_DESCRIPTION, [" ]bind_DESCRIPTION["], [])], [An extra string to print after PACKAGE_STRING])
+AC_DEFINE([PACKAGE_SRCID], ["][bind_SRCID]["], [A short hash from git])
+
+bind_CONFIGARGS="${ac_configure_args:-default}"
+AC_DEFINE_UNQUOTED([PACKAGE_CONFIGARGS], ["$bind_CONFIGARGS"], [Either 'defaults' or used ./configure options])
+
+AC_DEFINE([PACKAGE_BUILDER], ["make"], [make or Visual Studio])
+
+#
+# Get the Canonical System Type
+#
+AC_CANONICAL_BUILD
+AC_CANONICAL_HOST
+AC_CANONICAL_TARGET
+
+AC_CONFIG_SRCDIR([bin/named/main.c])
+AM_INIT_AUTOMAKE([1.14 tar-pax foreign subdir-objects dist-xz no-dist-gzip -Wall -Werror])
+AM_SILENT_RULES([yes])
+AM_EXTRA_RECURSIVE_TARGETS([test unit doc])
+
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_MACRO_DIR([m4])
+
+#
+# Enable maintainer mode by default only when building from git repository
+# and not cross compling
+#
+AS_IF([test "$cross_compiling" = no],
+ [AM_MAINTAINER_MODE(m4_ifset([bind_SRCID],[enable],[disable]))],
+ [AM_MAINTAINER_MODE([disable])])
+
+#
+# Enable system extensions to C and POSIX
+#
+AC_USE_SYSTEM_EXTENSIONS
+
+#
+# Compiler compatibility flags
+#
+m4_version_prereq([2.70],
+ [AC_PROG_CC],
+ [AC_PROG_CC_C99])
+AC_PROG_CPP_WERROR
+
+#
+# Find build compiler when cross compiling
+#
+AX_PROG_CC_FOR_BUILD
+
+#
+# Find the machine's endian flavor.
+#
+AC_C_BIGENDIAN
+
+#
+# Enable large file support
+#
+AC_SYS_LARGEFILE
+AC_FUNC_FSEEKO
+
+# Enable RFC 3542 APIs on macOS
+AC_DEFINE([__APPLE_USE_RFC_3542], [1], [Select RFC3542 IPv6 API on macOS])
+
+AC_PROG_MAKE_SET
+
+# Checks for programs.
+m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) # call AM_PROG_AR only if available
+
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AX_POSIX_SHELL
+AC_PROG_MKDIR_P
+
+# Initialize libtool
+LT_INIT([disable-static dlopen pic-only])
+
+AS_IF([test "$enable_static" != "no" && test "$enable_developer" != "yes"],
+ [AC_MSG_ERROR([Static linking is not supported as it disables dlopen() and certain security features (e.g. RELRO, ASLR)])])
+
+#
+# Set the default CFLAGS, CPPFLAGS, and LDFLAGS
+#
+STD_CFLAGS="-Wall -Wextra -Wwrite-strings -Wpointer-arith -Wno-missing-field-initializers -Wformat -Wshadow"
+
+# These should be always errors
+STD_CFLAGS="$STD_CFLAGS -Werror=implicit-function-declaration -Werror=missing-prototypes -Werror=format-security -Werror=parentheses -Werror=implicit -Werror=strict-prototypes -Werror=vla"
+
+STD_LDFLAGS=""
+
+# ... except in test code
+TEST_CFLAGS="-Wno-vla"
+
+# Fortify the sources by default
+STD_CPPFLAGS="-D_FORTIFY_SOURCE=2"
+
+#
+# Additional compiler settings.
+#
+AX_CHECK_COMPILE_FLAG([-fno-strict-aliasing],
+ [STD_CFLAGS="$STD_CFLAGS -fno-strict-aliasing"])
+# Clang only issues a warning so use -Werror to force a error.
+AX_CHECK_COMPILE_FLAG([-Werror -fno-delete-null-pointer-checks],
+ [STD_CFLAGS="$STD_CFLAGS -fno-delete-null-pointer-checks"])
+AX_CHECK_COMPILE_FLAG([-fdiagnostics-show-option],
+ [STD_CFLAGS="$STD_CFLAGS -fdiagnostics-show-option"])
+
+AX_CHECK_LINK_FLAG([-Wl,--export-dynamic],
+ [STD_LDFLAGS="$STD_LDFLAGS -Wl,--export-dynamic"])
+
+host_macos=no
+AS_CASE([$host],[*-darwin*],[host_macos=yes])
+AM_CONDITIONAL([HOST_MACOS], [test "$host_macos" = "yes"])
+
+#
+# Change defaults for developers if not explicity set.
+# Needs to be before the option is tested.
+#
+# [pairwise: --enable-developer, --disable-developer]
+AC_ARG_ENABLE([developer],
+ [AS_HELP_STRING([--enable-developer],
+ [enable developer build settings])])
+
+AS_IF([test "$enable_developer" = "yes"],
+ [DEVELOPER_MODE=yes
+ STD_CPPFLAGS="$STD_CPPFLAGS -DISC_MEM_DEFAULTFILL=1 -DISC_MEM_TRACKLINES=1 -DISC_LIST_CHECKINIT=1"
+ test "${enable_fixed_rrset+set}" = set || enable_fixed_rrset=yes
+ test "${enable_querytrace+set}" = set || enable_querytrace=yes
+ test "${with_cmocka+set}" = set || with_cmocka=yes
+ test "${with_zlib+set}" = set || with_zlib=yes
+ test "${enable_warn_error+set}" = set || enable_warn_error=yes
+ ])
+
+AC_SUBST([DEVELOPER_MODE])
+AC_SUBST([STD_CFLAGS])
+AC_SUBST([STD_CPPFLAGS])
+AC_SUBST([STD_LDFLAGS])
+AC_SUBST([TEST_CFLAGS])
+
+# [pairwise: --enable-warn-error, --disable-warn-error]
+AC_ARG_ENABLE([warn_error],
+ [AS_HELP_STRING([--enable-warn-error],
+ [turn on -Werror when compiling])],
+ [],[enable_warn_error=no])
+AS_IF([test "$enable_warn_error" = "yes"],
+ [STD_CFLAGS="$STD_CFLAGS -Werror"])
+
+#
+# Use pkg-config
+#
+
+PKG_PROG_PKG_CONFIG
+AS_IF([test -z "$PKG_CONFIG"],
+ [AC_MSG_ERROR([The pkg-config script could not be found or is too old.])])
+
+# Fuzzing is not included in pairwise testing as fuzzing tools are
+# not present in the relevant Docker image.
+#
+# [pairwise: skip]
+AC_ARG_ENABLE([fuzzing],
+ [AS_HELP_STRING([--enable-fuzzing=<afl|libfuzzer|ossfuzz>],
+ [Enable fuzzing using American Fuzzy Lop or libFuzzer (default=no)])],
+ [],
+ [enable_fuzzing=no])
+
+AC_MSG_CHECKING([whether to enable fuzzing mode])
+AS_CASE([$enable_fuzzing],
+ [no],[AC_MSG_RESULT([no])],
+ [afl],[
+ AC_MSG_RESULT([using AFL])
+ AC_DEFINE([ENABLE_AFL], [1],
+ [Define to enable American Fuzzy Lop test harness])
+ STD_CFLAGS="$STD_CFLAGS -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION=1"
+ FUZZ_LOG_COMPILER="afl.sh"],
+ [libfuzzer],[
+ AC_MSG_RESULT([using libFuzzer])
+ STD_CFLAGS="$STD_CFLAGS -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION=1 -fsanitize=fuzzer-no-link,address,undefined"
+ LDFLAGS="$LDFLAGS -fsanitize=address,undefined"
+ FUZZ_LDFLAGS="-fsanitize=fuzzer,address,undefined"
+ FUZZ_LOG_COMPILER="libfuzzer.sh"],
+ [ossfuzz],[
+ AC_MSG_RESULT([using OSS-Fuzz])
+ FUZZ_LDFLAGS="$LIB_FUZZING_ENGINE"],
+ [*],[AC_MSG_ERROR([You need to explicitly select the fuzzer])])
+AM_CONDITIONAL([HAVE_FUZZ_LOG_COMPILER], [test -n "$FUZZ_LOG_COMPILER"])
+AC_SUBST([FUZZ_LOG_COMPILER])
+AC_SUBST([FUZZ_LDFLAGS])
+
+AS_IF([test "$enable_fuzzing" = "afl"],
+ [AC_MSG_CHECKING("for AFL enabled compiler")
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
+ [#ifndef __AFL_COMPILER
+ #error AFL compiler required
+ #endif
+ ])],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_ERROR([set CC=afl-<gcc|clang> when --enable-fuzzing=afl is used])])
+ ])
+
+#
+# Perl is optional; it is used only by some of the system test scripts.
+#
+AC_PATH_PROGS([PERL], [perl5 perl])
+AC_SUBST([PERL])
+AM_CONDITIONAL([HAVE_PERL], [test -n "$PERL"])
+
+AX_PERL_MODULE([Digest::HMAC])
+AM_CONDITIONAL([HAVE_PERLMOD_DIGEST_HMAC],
+ [test "$HAVE_PERLMOD_DIGEST__HMAC" = "yes"])
+
+AX_PERL_MODULE([File::Fetch])
+AM_CONDITIONAL([HAVE_PERLMOD_FILE_FETCH],
+ [test "$HAVE_PERLMOD_FILE__FETCH" = "yes"])
+
+AX_PERL_MODULE([Net::DNS])
+AM_CONDITIONAL([HAVE_PERLMOD_NET_DNS],
+ [test "$HAVE_PERLMOD_NET__DNS" = "yes"])
+
+AX_PERL_MODULE([Net::DNS::Nameserver])
+AM_CONDITIONAL([HAVE_PERLMOD_NET_DNS_NAMESERVER],
+ [test "$HAVE_PERLMOD_NET__DNS__NAMESERVER" = "yes"])
+
+AX_PERL_MODULE([Time::HiRes])
+AM_CONDITIONAL([HAVE_PERLMOD_TIME_HIRES],
+ [test "$HAVE_PERLMOD_TIME__HIRES" = "yes"])
+
+#
+# Python is optional, it is used only by some of the system test scripts.
+#
+AM_PATH_PYTHON([3.6], [], [:])
+AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != ":"])
+
+AC_PATH_PROGS([PYTEST], [pytest-3 py.test-3 pytest py.test pytest-pypy], [])
+AS_IF([test -z "$PYTEST"],
+ [AC_MSG_WARN([pytest not found, some system tests will be skipped])])
+AC_SUBST([PYTEST])
+AM_CONDITIONAL([HAVE_PYTEST], [test -n "$PYTEST"])
+
+AX_PYTHON_MODULE([dns])
+AM_CONDITIONAL([HAVE_PYMOD_DNS], [test "$HAVE_PYMOD_DNS" = "yes"])
+
+#
+# xsltproc is optional, it is used only by system test scripts.
+#
+AC_PATH_PROG([XSLTPROC], [xsltproc])
+
+#
+# Using Solaris linker with gcc on Solaris breaks Thread Local Storage
+#
+AS_CASE([$host],
+ [*-solaris*],[
+ AS_IF([test "$GCC" = "yes"],
+ [LDFLAGS="$LDFLAGS -zrelax=transtls"
+ AC_MSG_WARN([When using GNU C Compiler on Solaris, -zrelax=transtls linker flag is used to fix bug in Thread Local Storage])
+ ])
+ ])
+
+AC_CHECK_HEADERS([fcntl.h regex.h sys/time.h unistd.h sys/mman.h sys/sockio.h sys/select.h sys/param.h sys/sysctl.h net/if6.h sys/socket.h net/route.h linux/netlink.h linux/rtnetlink.h], [], [],
+ [$ac_includes_default
+ #ifdef HAVE_SYS_PARAM_H
+ # include <sys/param.h>
+ #endif
+ #ifdef HAVE_SYS_SOCKET_H
+ # include <sys/socket.h>
+ #endif
+ ])
+
+#
+# Check for thread local storage
+#
+AC_CHECK_HEADERS([threads.h])
+AX_TLS([AS_IF([test "$ac_cv_tls" != "thread_local"],
+ [AC_DEFINE_UNQUOTED([thread_local], [$ac_cv_tls], [Define if the compiler uses a different keyword than thread_local for TLS variables])])],
+ [AC_MSG_ERROR([Thread Local Storage support required, update your toolchain to build BIND 9])])
+
+AC_C_CONST
+AC_C_INLINE
+AC_C_VOLATILE
+
+#
+# Check for yield support on ARM processors
+#
+AS_CASE([$host],
+ [arm*],
+ [AC_MSG_CHECKING([for yield instruction support])
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[]],
+ [[__asm__ __volatile__ ("yield")]])],
+ [AC_MSG_RESULT([yes])
+ AC_DEFINE([HAVE_ARM_YIELD], [1],
+ [define if the ARM yield instruction is available])],
+ [AC_MSG_RESULT([no])])])
+
+#
+# Check for pause support on SPARC processors
+#
+AS_CASE([$host],
+ [sparc*],
+ [AC_MSG_CHECKING([for pause instruction support])
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[]],
+ [[__asm__ __volatile__ ("pause")]])],
+ [AC_MSG_RESULT([yes])
+ AC_DEFINE([HAVE_SPARC_PAUSE], [1],
+ [define if the SPARC pause instruction is available])],
+ [AC_MSG_RESULT([no])])])
+
+AC_CHECK_FUNCS([sysctlbyname])
+
+#
+# Older versions of HP/UX don't define seteuid() and setegid()
+#
+AC_CHECK_FUNCS([seteuid setresuid])
+AC_CHECK_FUNCS([setegid setresgid])
+
+AC_TYPE_SIZE_T
+AC_TYPE_SSIZE_T
+AC_TYPE_UINTPTR_T
+
+#
+# check for uname library routine
+#
+AC_MSG_CHECKING([for uname])
+AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <sys/utsname.h>
+ #include <stdio.h>
+ ]],
+ [[
+ struct utsname uts;
+ uname(&uts);
+ printf("running on %s %s %s for %s\n",
+ uts.sysname, uts.release, uts.version, uts.machine);
+ ]])],
+ [AC_MSG_RESULT(yes)
+ AC_DEFINE([HAVE_UNAME], [1], [define if uname is available])
+ ],
+ [AC_MSG_RESULT(no)
+ AC_MSG_WARN([uname is not correctly supported])
+ ])
+
+#
+# check for GCC noreturn attribute
+#
+AX_GCC_FUNC_ATTRIBUTE([noreturn])
+
+#
+# check for GCC malloc attribute
+#
+AX_GCC_FUNC_ATTRIBUTE([malloc])
+
+AC_MSG_CHECKING([for extended malloc attributes])
+AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+ #include <stddef.h>
+ #include <stdlib.h>
+ __attribute__ ((malloc, malloc (free, 1))
+ void * xmalloc(size_t sz) { return malloc(sz); }
+ ]],
+ [[
+ void *p = xmalloc(8);
+ free(p);
+ ]])],
+ [AC_MSG_RESULT(yes)
+ AC_DEFINE([HAVE_MALLOC_EXT_ATTR], [1], [define if extended attributes for malloc are available])
+ ],
+ [AC_MSG_RESULT(no)])
+
+#
+# check for GCC returns_nonnull attribute
+#
+AX_GCC_FUNC_ATTRIBUTE([returns_nonnull])
+
+#
+# GeoIP support?
+#
+# Should be on by default if libmaxminddb exists.
+#
+# [pairwise: --enable-geoip --with-maxminddb=auto, --enable-geoip --with-maxminddb=yes, --disable-geoip]
+AC_ARG_ENABLE([geoip],
+ [AS_HELP_STRING([--disable-geoip],
+ [support GeoIP2 geolocation ACLs if available [default=yes]])],
+ [], [enable_geoip="yes"])
+
+# [pairwise: skip]
+AC_ARG_WITH([maxminddb],
+ [AS_HELP_STRING([--with-maxminddb=PATH],
+ [Build with MaxMind GeoIP2 support (auto|yes|no|path) [default=auto]])],
+ [], [with_maxminddb="auto"])
+
+AS_IF([test "$enable_geoip" = "yes"],
+ [AS_CASE([$with_maxminddb],
+ [no],[AC_MSG_ERROR([Use '--disable-geoip' to disable the GeoIP])],
+ [auto],[PKG_CHECK_MODULES([MAXMINDDB], [libmaxminddb],
+ [AC_DEFINE([HAVE_GEOIP2], [1], [Build with GeoIP2 support])
+ PKG_CHECK_VAR([MAXMINDDB_PREFIX], [libmaxminddb], [prefix], [], [AC_MSG_ERROR([libmaxminddb prefix not found in pkg-config; set MAXMINDDB_PREFIX in the environment])])
+ ],[:])],
+ [yes],[PKG_CHECK_MODULES([MAXMINDDB], [libmaxminddb],
+ [AC_DEFINE([HAVE_GEOIP2], [1], [Build with GeoIP2 support])
+ PKG_CHECK_VAR([MAXMINDDB_PREFIX], [libmaxminddb], [prefix], [], [AC_MSG_ERROR([libmaxminddb prefix not found in pkg-config; set MAXMINDDB_PREFIX in the environment])])
+ ])],
+ [ # default
+ AX_SAVE_FLAGS([maxminddb])
+ MAXMINDDB_CFLAGS="-I$with_maxminddb/include"
+ MAXMINDDB_LIBS="-L$with_maxminddb/lib"
+ CFLAGS="$CFLAGS $MAXMINDDB_CFLAGS"
+ LIBS="$LIBS $MAXMINDDB_LIBS"
+ AC_SEARCH_LIBS([MMDB_open], [maxminddb],
+ [AC_DEFINE([HAVE_GEOIP2], [1], [Build with GeoIP2 support])
+ MAXMINDDB_LIBS="$MAXMINDDB_LIBS $ac_cv_search_MMDB_open"
+ AC_MSG_NOTICE([GeoIP2 default database path set to $with_maxminddb/share/GeoIP])
+ AS_VAR_COPY([MAXMINDDB_PREFIX], [with_maxminddb])
+ ],
+ [AC_MSG_ERROR([GeoIP2 requested, but libmaxminddb not found])])
+ AX_RESTORE_FLAGS([maxminddb])
+ ])
+ AC_ARG_VAR([MAXMINDDB_PREFIX], [value of prefix for MAXMINDDB, overriding pkg-config])
+])
+
+AM_CONDITIONAL([HAVE_GEOIP2], [test -n "$MAXMINDDB_LIBS"])
+
+AC_SUBST([MAXMINDDB_CFLAGS])
+AC_SUBST([MAXMINDDB_LIBS])
+
+AX_PTHREAD
+
+LIBS="$PTHREAD_LIBS $LIBS"
+CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+CC="$PTHREAD_CC"
+
+AC_CHECK_FUNCS([pthread_attr_getstacksize pthread_attr_setstacksize pthread_barrier_init])
+
+# [pairwise: --with-locktype=adaptive, --with-locktype=standard]
+AC_ARG_WITH([locktype],
+ AS_HELP_STRING([--with-locktype=ARG],
+ [Specify mutex lock type
+ (adaptive or standard)]),
+ [], [with_locktype="adaptive"])
+
+AS_CASE([$with_locktype],
+ [adaptive],[
+ AC_MSG_CHECKING([for PTHREAD_MUTEX_ADAPTIVE_NP])
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+ #ifndef _GNU_SOURCE
+ #define _GNU_SOURCE
+ #endif
+ #include <pthread.h>
+ ]],
+ [[
+ return (PTHREAD_MUTEX_ADAPTIVE_NP);
+ ]]
+ )],
+ [AC_MSG_RESULT([using adaptive lock type])
+ AC_DEFINE([HAVE_PTHREAD_MUTEX_ADAPTIVE_NP], 1,
+ [Support for PTHREAD_MUTEX_ADAPTIVE_NP]) ],
+ [AC_MSG_RESULT([using standard lock type])]
+ )],
+ [standard],[AC_MSG_RESULT([using standard lock type])],
+ [AC_MSG_ERROR([You must specify "adaptive" or "standard" for --with-locktype.])]
+ )
+
+AC_CHECK_HEADERS([sched.h])
+
+AC_SEARCH_LIBS([sched_yield],[rt])
+AC_CHECK_FUNCS([sched_yield pthread_yield pthread_yield_np])
+
+# Look for functions relating to thread naming
+AC_CHECK_FUNCS([pthread_setname_np pthread_set_name_np])
+AC_CHECK_HEADERS([pthread_np.h], [], [], [#include <pthread.h>])
+
+# libuv
+PKG_CHECK_MODULES([LIBUV], [libuv >= 1.37.0], [],
+ [PKG_CHECK_MODULES([LIBUV], [libuv >= 1.0.0 libuv < 1.35.0], [],
+ [AC_MSG_ERROR([libuv >= 1.0.0 (except 1.35.0 and 1.36.0) not found])])])
+
+AX_SAVE_FLAGS([libuv])
+CFLAGS="$CFLAGS $LIBUV_CFLAGS"
+LIBS="$LIBS $LIBUV_LIBS"
+
+# libuv recvmmsg support
+AC_CHECK_DECLS([UV_UDP_MMSG_FREE, UV_UDP_MMSG_CHUNK], [], [], [[#include <uv.h>]])
+AC_MSG_CHECKING([whether struct msghdr uses padding for alignment])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/socket.h>],
+ [const struct msghdr h = { .__pad1 = 0, .__pad2 = 0 };])],
+ [AC_MSG_RESULT([yes])
+ AC_DEFINE([HAVE_DECL_UV_UDP_RECVMMSG],
+ [0], [Disable recvmmsg support on systems with MUSL glibc])],
+ [AC_MSG_RESULT([no])
+ AC_CHECK_DECLS([UV_UDP_RECVMMSG], [], [], [[#include <uv.h>]])])
+
+AX_RESTORE_FLAGS([libuv])
+
+# [pairwise: --enable-doh --with-libnghttp2=auto, --enable-doh --with-libnghttp2=yes, --disable-doh]
+AC_ARG_ENABLE([doh],
+ [AS_HELP_STRING([--disable-doh], [disable DNS over HTTPS, removes dependency on libnghttp2 (default is --enable-doh)])],
+ [], [enable_doh=yes])
+
+# [pairwise: skip]
+AC_ARG_WITH([libnghttp2],
+ [AS_HELP_STRING([--with-libnghttp2],
+ [build with libnghttp2 library [yes|no|auto] (default is auto)])],
+ [], [with_libnghttp2="auto"])
+
+AS_IF([test "$enable_doh" = "yes"],
+ [AS_CASE([$with_libnghttp2],
+ [no],[AC_MSG_ERROR([Use '--disable-doh' to disable DNS-over-HTTPS support])],
+ [auto|yes],[PKG_CHECK_MODULES([LIBNGHTTP2], [libnghttp2 >= 1.6.0],
+ [AC_DEFINE([HAVE_LIBNGHTTP2], [1], [Build with DNS-over-HTTPS support])],
+ [AC_MSG_ERROR(m4_normalize([DNS-over-HTTPS support requested, but libnghttp2 not found.
+ Either install libnghttp2 or use --disable-doh.]))])],
+ [AC_MSG_ERROR([Specifying libnghttp2 installation path is not supported, adjust PKG_CONFIG_PATH instead])])])
+
+AM_CONDITIONAL([HAVE_LIBNGHTTP2], [test -n "$LIBNGHTTP2_LIBS"])
+
+
+#
+# flockfile is usually provided by pthreads
+#
+AC_CHECK_FUNCS([flockfile getc_unlocked])
+
+#
+# Look for sysconf to allow detection of the number of processors.
+#
+AC_CHECK_FUNCS([sysconf])
+
+#
+# Do we want to use pthread rwlock?
+#
+# [pairwise: --enable-pthread-rwlock, --disable-pthread-rwlock]
+AC_ARG_ENABLE([pthread_rwlock],
+ [AS_HELP_STRING([--enable-pthread-rwlock],
+ [use pthread rwlock instead of internal rwlock implementation])],
+ [], [enable_pthread_rwlock=no])
+
+AS_IF([test "$enable_pthread_rwlock" = "yes"],
+ [AC_CHECK_FUNCS([pthread_rwlock_rdlock], [],
+ [AC_MSG_ERROR([pthread_rwlock_rdlock requested but not found])])
+ AC_DEFINE([USE_PTHREAD_RWLOCK],[1],[Define if you want to use pthread rwlock implementation])
+ ])
+
+CRYPTO=OpenSSL
+
+#
+# OpenSSL/LibreSSL is mandatory
+#
+PKG_CHECK_MODULES([OPENSSL], [libssl libcrypto], [],
+ [AX_CHECK_OPENSSL([:],[AC_MSG_FAILURE([OpenSSL/LibreSSL not found])])])
+
+AX_SAVE_FLAGS([openssl])
+
+CFLAGS="$CFLAGS $OPENSSL_CFLAGS"
+LIBS="$LIBS $OPENSSL_LIBS"
+
+AC_MSG_CHECKING([for OpenSSL >= 1.0.0 or LibreSSL >= 2.7.0])
+AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[#include <openssl/opensslv.h>]],
+ [[#if (!defined(LIBRESSL_VERSION_NUMBER) && (OPENSSL_VERSION_NUMBER < 0x1000000fL)) || \\
+ (defined(LIBRESSL_VERSION_NUMBER) && (LIBRESSL_VERSION_NUMBER < 0x02070000fL))
+ #error OpenSSL >= 1.0.0 or LibreSSL >= 2.7.0 required
+ #endif
+ ]])],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_FAILURE([not found])])
+
+#
+# Check for functions added in OpenSSL or LibreSSL
+#
+
+AC_CHECK_FUNCS([BIO_read_ex BIO_write_ex])
+AC_CHECK_FUNCS([BN_GENCB_new])
+AC_CHECK_FUNCS([CRYPTO_zalloc])
+AC_CHECK_FUNCS([ERR_get_error_all])
+AC_CHECK_FUNCS([EVP_CIPHER_CTX_new EVP_CIPHER_CTX_free])
+AC_CHECK_FUNCS([EVP_MD_CTX_new EVP_MD_CTX_free EVP_MD_CTX_reset EVP_MD_CTX_get0_md])
+AC_CHECK_FUNCS([EVP_PKEY_new_raw_private_key EVP_PKEY_eq])
+AC_CHECK_FUNCS([OPENSSL_init_ssl OPENSSL_init_crypto OPENSSL_cleanup])
+AC_CHECK_FUNCS([SSL_CTX_set_keylog_callback])
+AC_CHECK_FUNCS([SSL_CTX_set_min_proto_version])
+AC_CHECK_FUNCS([SSL_CTX_up_ref])
+AC_CHECK_FUNCS([SSL_read_ex SSL_peek_ex SSL_write_ex])
+AC_CHECK_FUNCS([SSL_CTX_set1_cert_store X509_STORE_up_ref])
+AC_CHECK_FUNCS([SSL_SESSION_is_resumable])
+
+#
+# Check for algorithm support in OpenSSL
+#
+
+AC_CHECK_FUNCS([EVP_DigestSignInit EVP_DigestVerifyInit], [:],
+ [AC_MSG_FAILURE([EVP_DigestSignInit/EVP_DigestVerifyInit support in OpenSSL is mandatory.])])
+
+AC_MSG_CHECKING([for ECDSA P-256 support])
+AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[#include <openssl/evp.h>]],
+ [[EVP_PKEY_CTX *kctx = EVP_PKEY_CTX_new_id(NID_X9_62_prime256v1, NULL);]])],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_FAILURE([not found. ECDSA P-256 support in OpenSSL is mandatory.])])
+
+AC_MSG_CHECKING([for ECDSA P-384 support])
+AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[#include <openssl/evp.h>]],
+ [[EVP_PKEY_CTX *kctx = EVP_PKEY_CTX_new_id(NID_secp384r1, NULL);]])],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_FAILURE([not found. ECDSA P-384 support in OpenSSL is mandatory.])])
+
+AC_MSG_CHECKING([for Ed25519 support])
+AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[#include <openssl/evp.h>]],
+ [[EVP_PKEY_CTX *kctx = EVP_PKEY_CTX_new_id(NID_ED25519, NULL);]])],
+ [AC_DEFINE([HAVE_OPENSSL_ED25519], [1], [define if OpenSSL supports Ed25519])
+ AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([no])])
+
+AC_MSG_CHECKING([for Ed448 support])
+AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[#include <openssl/evp.h>]],
+ [[EVP_PKEY_CTX *kctx = EVP_PKEY_CTX_new_id(NID_ED448, NULL);]])],
+ [AC_DEFINE([HAVE_OPENSSL_ED448], [1], [define if OpenSSL supports Ed448])
+ AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([no])])
+
+#
+# Check for OpenSSL SHA-1 support
+#
+AC_CHECK_FUNCS([EVP_sha1], [:],
+ [AC_MSG_FAILURE([SHA-1 support in OpenSSL is mandatory.])])
+
+#
+# Check for OpenSSL SHA-2 support
+#
+AC_CHECK_FUNCS([EVP_sha224 EVP_sha256 EVP_sha384 EVP_sha512], [:],
+ [AC_MSG_FAILURE([SHA-2 support in OpenSSL is mandatory.])])
+
+#
+# Check for OpenSSL AES support
+#
+AC_CHECK_FUNCS([EVP_aes_128_ecb EVP_aes_192_ecb EVP_aes_256_ecb], [:],
+ [AC_MSG_FAILURE([AES support in OpenSSL is mandatory.])])
+
+#
+# Check for OpenSSL 1.1.x/LibreSSL functions
+#
+AC_CHECK_FUNCS([DH_get0_key ECDSA_SIG_get0 RSA_set0_key EVP_PKEY_get0_EC_KEY])
+
+AC_CHECK_FUNCS([TLS_server_method TLS_client_method])
+
+#
+# Check whether FIPS mode is available and whether we should enable it
+#
+# FIPS is not included in pairwise testing as the relevant Docker image
+# does not support FIPS mode.
+#
+# [pairwise: skip]
+AC_ARG_ENABLE([fips-mode],
+ [AS_HELP_STRING([--enable-fips-mode],
+ [enable FIPS mode in OpenSSL library [default=no]])],
+ [], [enable_fips_mode="no"])
+
+AC_MSG_CHECKING([whether to enable FIPS mode in OpenSSL library])
+AS_CASE([$enable_fips_mode],
+ [yes], [AC_MSG_RESULT([yes])
+ AC_CHECK_FUNCS([FIPS_mode],
+ [], [AC_MSG_FAILURE([OpenSSL FIPS mode requested but not available.])])],
+ [no], [AC_MSG_RESULT([no])])
+
+AX_RESTORE_FLAGS([openssl])
+
+AC_SUBST([OPENSSL_CFLAGS])
+AC_SUBST([OPENSSL_LIBS])
+
+AC_CHECK_FUNCS([clock_gettime])
+
+# [pairwise: --with-gssapi=yes, --with-gssapi=auto, --without-gssapi]
+AC_ARG_WITH([gssapi],
+ [AS_HELP_STRING([--with-gssapi=[PATH|[/path/]krb5-config]],
+ [Specify path for system-supplied GSSAPI
+ [default=auto]])],
+ [], [with_gssapi="auto"])
+
+KRB5_CONFIG=
+AS_CASE([$with_gssapi],
+ [no],[AC_MSG_CHECKING([for GSSAPI support])
+ AC_MSG_RESULT([no])],
+ [yes],[AC_PATH_PROG([KRB5_CONFIG], [krb5-config])
+ AS_IF([test -z "$KRB5_CONFIG"],
+ [AC_MSG_ERROR([krb5-config required but not found])])],
+ [auto],[AC_PATH_PROG([KRB5_CONFIG], [krb5-config])],
+ [*krb5-config*],[KRB5_CONFIG="$with_gssapi"],
+ [AC_MSG_ERROR([--with-gssapi requires yes|no|auto|/path/to/krb5-config])])
+
+GSSAPI_CFLAGS=
+GSSAPI_LIBS=
+KRB5_CFLAGS=
+KRB5_LIBS=
+AS_IF([test -n "$KRB5_CONFIG"],
+ [AC_MSG_CHECKING([for gssapi libraries])
+ AX_SAVE_FLAGS([gssapi])
+ GSSAPI_CFLAGS=`"$KRB5_CONFIG" --cflags gssapi`
+ GSSAPI_LIBS=`"$KRB5_CONFIG" --libs gssapi`
+ CFLAGS="$CFLAGS $GSSAPI_CFLAGS"
+ LIBS="$LIBS $GSSAPI_LIBS"
+ AC_MSG_RESULT([$GSSAPI_CFLAGS $GSSAPI_LIBS])
+ AC_CHECK_HEADERS([gssapi/gssapi.h], [],
+ [AC_CHECK_HEADERS([gssapi.h], [],
+ [AC_MSG_ERROR([neither gssapi/gssapi.h nor gssapi.h found])])])
+ AC_CHECK_HEADERS([gssapi/gssapi_krb5.h],
+ [AC_CHECK_HEADERS([gssapi_krb5.h], []
+ [AC_MSG_ERROR([neither gssapi/gssapi_krb5.h nor gssapi_krb5.h found])])])
+ AC_CHECK_FUNCS([gss_acquire_cred],[],
+ [AC_MSG_ERROR([linking with $GSSAPI_LIBS does not work])])
+ AX_RESTORE_FLAGS([gssapi])
+
+ AC_MSG_CHECKING([for krb5 libraries])
+ AX_SAVE_FLAGS([krb5])
+ KRB5_CFLAGS=`"$KRB5_CONFIG" --cflags krb5`
+ KRB5_LIBS=`$KRB5_CONFIG --libs krb5`
+ CFLAGS="$CFLAGS $KRB5_CFLAGS"
+ LIBS="$CFLAGS $KRB5_LIBS"
+ AC_MSG_RESULT([$KRB5_CFLAGS $KRB5_LIBS])
+ AC_CHECK_HEADERS([krb5/krb5.h], [],
+ [AC_CHECK_HEADERS([krb5.h], [],
+ [AC_MSG_ERROR([neither krb5/krb5.h nor krb5 found])])])
+ AC_CHECK_FUNCS([krb5_init_context], [],
+ [AC_MSG_ERROR([linking with $KRB5_LIBS failed])])
+ AX_RESTORE_FLAGS([krb5])
+
+ AC_DEFINE([HAVE_GSSAPI], [1], [Define to 1 if you have the Kerberos Framework available])
+ # kludge to silence compiler warnings which recommend use of GSS.framework on macOS
+ AS_CASE([$host],[*-darwin*],[CFLAGS="$CFLAGS -Wno-deprecated-declarations"])])
+AM_CONDITIONAL([HAVE_GSSAPI], [test -n "$GSSAPI_LIBS"])
+AC_SUBST([GSSAPI_CFLAGS])
+AC_SUBST([GSSAPI_LIBS])
+AC_SUBST([KRB5_CFLAGS])
+AC_SUBST([KRB5_LIBS])
+
+#
+# was --with-lmdb specified?
+#
+
+# [pairwise: --with-lmdb=auto, --with-lmdb=yes, --without-lmdb]
+AC_ARG_WITH([lmdb],
+ [AS_HELP_STRING([--with-lmdb=@<:@PATH@:>@],
+ [use LMDB library @<:@default=auto@:>@, optionally specify the prefix for lmdb library])],
+ [:],
+ [with_lmdb="auto"])
+
+ac_lib_lmdb_found=no
+AS_CASE([$with_lmdb],
+ [no],[],
+ [auto|yes], [PKG_CHECK_MODULES([LMDB], [lmdb],
+ [ac_lib_lmdb_found=yes],
+ [for ac_lib_lmdb_path in /usr /usr/local /opt /opt/local; do
+ AX_LIB_LMDB([$ac_lib_lmdb_path],
+ [ac_lib_lmdb_found=yes
+ break])
+ done
+ ])],
+ [AX_LIB_LMDB([$with_lmdb],[ac_lib_lmdb_found=yes])])
+
+# don't fail when in automatic mode
+AS_IF([test "$with_lmdb" = "auto" && test "$ac_lib_lmdb_found" = "no"],
+ [with_lmdb=no])
+
+# hard fail when LMDB requested, but not found
+AS_IF([test "$with_lmdb" != "no" && test "$ac_lib_lmdb_found" != "yes"],
+ [AC_MSG_ERROR([LMDB requested, but not found])])
+
+AS_IF([test "$ac_lib_lmdb_found" = "yes"],
+ [AC_DEFINE([HAVE_LMDB], [1], [Use lmdb library])])
+
+AC_SUBST([LMDB_CFLAGS])
+AC_SUBST([LMDB_LIBS])
+AM_CONDITIONAL([HAVE_LMDB], [test -n "$LMDB_LIBS"])
+
+#
+# was --with-libxml2 specified?
+#
+# [pairwise: --with-libxml2=auto, --with-libxml2=yes, --without-libxml2]
+AC_ARG_WITH([libxml2],
+ [AS_HELP_STRING([--with-libxml2],
+ [build with libxml2 library [yes|no|auto] (default is auto)])],
+ [], [with_libxml2="auto"])
+
+AS_CASE([$with_libxml2],
+ [no],[],
+ [auto],[PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.6.0],
+ [AC_DEFINE([HAVE_LIBXML2], [1], [Use libxml2 library])],
+ [:])],
+ [yes],[PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.6.0],
+ [AC_DEFINE([HAVE_LIBXML2], [1], [Use libxml2 library])])],
+ [AC_MSG_ERROR([Specifying libxml2 installation path is not supported, adjust PKG_CONFIG_PATH instead])])
+
+AM_CONDITIONAL([HAVE_LIBXML2], [test -n "$LIBXML2_LIBS"])
+
+#
+# was --with-json-c specified?
+#
+# [pairwise: --with-json-c=detect, --with-json-c=yes, --without-json-c]
+AC_ARG_WITH([json-c],
+ [AS_HELP_STRING([--with-json-c],
+ [build with json-c library [yes|no|detect] (default is detect)])],
+ [], [with_json_c="detect"])
+
+AS_CASE([$with_json_c],
+ [no],[],
+ [detect],[PKG_CHECK_MODULES([JSON_C], [json-c >= 0.11],
+ [AC_DEFINE([HAVE_JSON_C], [1], [Use json-c library])],
+ [:])],
+ [yes],[PKG_CHECK_MODULES([JSON_C], [json-c >= 0.11],
+ [AC_DEFINE([HAVE_JSON_C], [1], [Use json-c library])])],
+ [AC_MSG_ERROR([Specifying json-c installation path is not supported, adjust PKG_CONFIG_PATH instead])]
+ )
+
+AM_CONDITIONAL([HAVE_JSON_C], [test -n "$JSON_C_LIBS"])
+
+AC_SUBST([JSON_C_CFLAGS])
+AC_SUBST([JSON_C_LIBS])
+
+#
+# was --with-zlib specified?
+#
+# [pairwise: --with-zlib=auto, --with-zlib=yes, --without-zlib]
+AC_ARG_WITH([zlib],
+ [AS_HELP_STRING([--with-zlib],
+ [build with zlib for HTTP compression
+ [default=yes]])],
+ [], with_zlib="auto")
+
+AS_CASE([$with_zlib],
+ [no],[],
+ [auto],[PKG_CHECK_MODULES([ZLIB], [zlib],
+ [AC_DEFINE([HAVE_ZLIB], [1], [Use zlib library])],
+ [:])],
+ [yes],[PKG_CHECK_MODULES([ZLIB], [zlib],
+ [AC_DEFINE([HAVE_ZLIB], [1], [Use zlib library])])],
+ [AC_MSG_ERROR([Specifying zlib installation path is not supported, adjust PKG_CONFIG_PATH instead])])
+AC_SUBST([ZLIB_CFLAGS])
+AC_SUBST([ZLIB_LIBS])
+
+#
+# Check if the system supports glibc-compatible backtrace() function.
+#
+AC_CHECK_HEADERS([execinfo.h],
+ [AC_SEARCH_LIBS([backtrace_symbols], [execinfo],
+ [AC_CHECK_FUNCS([backtrace_symbols])])])
+
+#
+# We do the IPv6 compilation checking after libtool so that we can put
+# the right suffix on the files.
+#
+AC_MSG_CHECKING([for IPv6 structures])
+AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+ ]],
+ [[
+ struct sockaddr_in6 sin6;
+ struct in6_addr in6;
+ struct in6_pktinfo in6_pi;
+ struct sockaddr_storage storage;
+ in6 = in6addr_any;
+ in6 = in6addr_loopback;
+ sin6.sin6_scope_id = 0;
+ return (0);
+ ]])],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_FAILURE([IPv6 support is mandatory])])
+
+#
+# Allow forcibly disabling TCP Fast Open support as autodetection might yield
+# confusing results on some systems (e.g. FreeBSD; see set_tcp_fastopen()
+# comment in lib/isc/socket.c).
+#
+# [pairwise: --enable-tcp-fastopen, --disable-tcp-fastopen]
+AC_ARG_ENABLE([tcp_fastopen],
+ [AS_HELP_STRING([--disable-tcp-fastopen],
+ [disable TCP Fast Open support [default=yes]])],
+ [], [enable_tcp_fastopen="yes"])
+
+AS_IF([test "$enable_tcp_fastopen" = "yes"],
+ [AC_DEFINE([ENABLE_TCP_FASTOPEN], [1], [define if you want TCP_FASTOPEN enabled if available])])
+
+#
+# Check for some other useful functions that are not ever-present.
+#
+AC_CHECK_FUNCS([strlcpy strlcat strnstr])
+
+#
+# Check for readline support
+#
+
+# editline is not included in pairwise testing as the library
+# is not present in the relevant Docker image.
+#
+# GNU Readline is not included in pairwise testing as the library
+# in the relevant Docker image does not support pkg-config.
+#
+# [pairwise: --with-readline=auto, --with-readline=yes, --with-readline=libedit, --without-readline]
+AC_ARG_WITH([readline],
+ [AS_HELP_STRING([--with-readline=yes|no|libedit|readline],
+ [specify readline library [default auto]])],
+ [], [with_readline="auto"])
+
+AS_CASE([$with_readline],
+ [no],[],
+ [auto|yes],
+ [PKG_CHECK_MODULES([READLINE], [libedit],
+ [AC_DEFINE([HAVE_READLINE_LIBEDIT], [1], [Build with libedit support])],
+ [PKG_CHECK_MODULES([READLINE], [libeditline],
+ [AC_DEFINE([HAVE_READLINE_EDITLINE], [1], [Build with editline support.])],
+ [PKG_CHECK_MODULES([READLINE], [readline],
+ [AC_DEFINE([HAVE_READLINE_READLINE], [1], [Build with readline support.])],
+ [AS_IF([test "$with_readline" = "yes"],
+ [AC_MSG_ERROR([readline support requested, but none of the libraries have been found.])])])])])],
+ [libedit],
+ [PKG_CHECK_MODULES([READLINE], [libedit],
+ [AC_DEFINE([HAVE_READLINE_LIBEDIT], [1], [Build with libedit support])])],
+ [editline],
+ [PKG_CHECK_MODULES([READLINE], [libeditline],
+ [AC_DEFINE([HAVE_READLINE_EDITLINE], [1], [Build with editline support])])],
+ [readline],
+ [PKG_CHECK_MODULES([READLINE], [readline],
+ [AC_DEFINE([HAVE_READLINE_READLINE], [1], [Build with readline support])])],
+ [AC_MSG_ERROR([Unknown readline '$with_readline' library requested.])])
+AM_CONDITIONAL([HAVE_READLINE], [test -n "$READLINE_LIBS"])
+AC_SUBST([READLINE_CFLAGS])
+AC_SUBST([READLINE_LIBS])
+
+#
+# Security Stuff
+#
+# Note it is very recommended to *not* disable chroot(),
+# this is only because chroot() was made obsolete by Posix.
+#
+# [pairwise: --enable-chroot, --disable-chroot]
+AC_ARG_ENABLE(chroot, AS_HELP_STRING([--disable-chroot], [disable chroot]))
+case "$enable_chroot" in
+ yes|'')
+ AC_CHECK_FUNCS(chroot)
+ ;;
+ no)
+ ;;
+esac
+
+LIBCAP_LIBS=""
+AC_MSG_CHECKING([whether to enable Linux capabilities])
+
+# [pairwise: --enable-linux-caps, --disable-linux-caps]
+AC_ARG_ENABLE([linux-caps],
+ [AS_HELP_STRING([--disable-linux-caps],
+ [disable Linux capabilities])],
+ [],
+ [AS_CASE([$host],
+ [*-linux*],[enable_linux_caps=yes],
+ [enable_linux_caps=no])])
+
+AS_IF([test "$enable_linux_caps" = "yes"],
+ [AC_MSG_RESULT([yes])
+ AC_CHECK_HEADERS([sys/capability.h],
+ [],
+ [AC_MSG_ERROR(m4_normalize([sys/capability.h header is required for Linux capabilities support.
+ Either install libcap or use --disable-linux-caps.]))])
+ AX_SAVE_FLAGS([cap])
+ AC_SEARCH_LIBS([cap_set_proc], [cap],
+ [LIBCAP_LIBS="$ac_cv_search_cap_set_proc"],
+ [AC_MSG_ERROR(m4_normalize([libcap is required for Linux capabilities support.
+ Either install libcap or use --disable-linux-caps.]))])
+ AX_RESTORE_FLAGS([cap])],
+ [AC_MSG_RESULT([no])])
+AC_SUBST([LIBCAP_LIBS])
+
+case "$host" in
+*-solaris*)
+ AC_DEFINE(NEED_SECURE_DIRECTORY, 1,
+ [Define if connect does not honour the permission on the UNIX domain socket.])
+ ;;
+esac
+
+#
+# Time Zone Stuff
+#
+AC_CHECK_FUNCS([tzset])
+
+AC_MSG_CHECKING(for optarg declaration)
+AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#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.])]
+)
+
+#
+# Check for nanoseconds in file stats
+#
+AC_MSG_CHECKING([for st_mtim.tv_nsec])
+AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <sys/stat.h>]],
+ [[struct stat s;
+ return(s.st_mtim.tv_nsec);
+ ]])],
+ [AC_MSG_RESULT([yes])
+ AC_DEFINE([HAVE_STAT_NSEC], [1], [define if struct stat has st_mtim.tv_nsec field])],
+ [AC_MSG_RESULT([no])])
+
+#
+# Check for if_nametoindex() for IPv6 scoped addresses support
+#
+AC_CHECK_FUNCS([if_nametoindex])
+
+ISC_ATOMIC_LIBS=""
+AC_CHECK_HEADERS(
+ [stdatomic.h],
+ [AC_MSG_CHECKING([for memory model aware atomic operations])
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <stdatomic.h>]],
+ [[atomic_int_fast32_t val = 0; atomic_fetch_add_explicit(&val, 1, memory_order_relaxed);]]
+ )],
+ [AC_MSG_RESULT([stdatomic.h])
+ AC_MSG_CHECKING([whether -latomic is needed for 64-bit stdatomic.h functions])
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <stdatomic.h>]],
+ [[atomic_int_fast64_t val = 0; atomic_fetch_add_explicit(&val, 1, memory_order_relaxed);]]
+ )],
+ [AC_MSG_RESULT([no])],
+ [ISC_ATOMIC_LIBS="-latomic"
+ AX_SAVE_FLAGS([atomic])
+ LIBS="$LIBS $ISC_ATOMIC_LIBS"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <stdatomic.h>]],
+ [[atomic_int_fast64_t val = 0; atomic_fetch_add_explicit(&val, 1, memory_order_relaxed);]]
+ )],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_FAILURE([libatomic needed, but linking with -latomic failed, please fix your toolchain.])])
+ AX_RESTORE_FLAGS([atomic])
+ ])
+ ],
+ [AC_MSG_FAILURE([stdatomic.h header found, but compilation failed, please fix your toolchain.])]
+ )],
+ [AC_MSG_CHECKING([for memory model aware atomic operations])
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <inttypes.h>]],
+ [[int32_t val = 0; __atomic_fetch_add(&val, 1, __ATOMIC_RELAXED);]]
+ )],
+ [AC_MSG_RESULT([__atomic builtins])
+ AC_DEFINE([HAVE___ATOMIC], [1], [define if __atomic builtins are not available])
+ AC_MSG_CHECKING([whether -latomic is needed for 64-bit __atomic builtins])
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <inttypes.h>]],
+ [[int64_t val = 0; __atomic_fetch_add(&val, 1, __ATOMIC_RELAXED);]]
+ )],
+ [AC_MSG_RESULT([no])],
+ [ISC_ATOMIC_LIBS="-latomic"
+ AX_SAVE_FLAGS([atomic])
+ LIBS="$LIBS $ISC_ATOMIC_LIBS"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <inttypes.h>]],
+ [[int64_t val = 0; __atomic_fetch_add(&val, 1, __ATOMIC_RELAXED);]]
+ )],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_FAILURE([libatomic needed, but linking with -latomic failed, please fix your toolchain.])])
+ AX_RESTORE_FLAGS([atomic])
+ ])
+ ],
+ [AC_MSG_FAILURE([not found])
+ ])
+ ])
+LIBS="$LIBS $ISC_ATOMIC_LIBS"
+
+AC_CHECK_HEADERS([stdalign.h stdnoreturn.h])
+
+AC_CHECK_HEADERS([uchar.h])
+
+#
+# Check for __builtin_unreachable
+#
+AC_MSG_CHECKING([compiler support for __builtin_unreachable()])
+AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[]],
+ [[__builtin_unreachable();]]
+ )],
+ [AC_MSG_RESULT([yes])
+ AC_DEFINE([HAVE_BUILTIN_UNREACHABLE], [1], [define if the compiler supports __builtin_unreachable().])
+ ],
+ [AC_MSG_RESULT([no])
+ ])
+
+#
+# Check for __builtin_clz
+#
+AC_MSG_CHECKING([compiler support for __builtin_clz])
+AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[]],
+ [[return (__builtin_clz(0xff) == 24 ? 1 : 0);]]
+ )],
+ [AC_MSG_RESULT([yes])
+ AC_DEFINE(HAVE_BUILTIN_CLZ, 1, [Define to 1 if the compiler supports __builtin_clz.])
+ ],
+ [AC_MSG_RESULT([no])]
+)
+
+#
+# Check for __builtin_uadd_overflow
+#
+AC_MSG_CHECKING([compiler support for __builtin_*_overflow()])
+AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <limits.h>]],
+ [[return (__builtin_uadd_overflow(UINT_MAX, UINT_MAX, &(unsigned int){ 0 }));]]
+ )],
+ [AC_MSG_RESULT([yes])
+ AC_DEFINE([HAVE_BUILTIN_OVERFLOW], [1], [define if the compiler supports __builtin_*_overflow().])
+ ],
+ [AC_MSG_RESULT([no])
+ ])
+
+#
+# Activate "rrset-order fixed" or not?
+#
+# [pairwise: --enable-fixed-rrset, --disable-fixed-rrset]
+AC_ARG_ENABLE([fixed-rrset],
+ [AS_HELP_STRING([--enable-fixed-rrset],
+ [enable fixed rrset ordering [default=no]])],
+ [], [enable_fixed_rrset="no"])
+AS_IF([test "$enable_fixed_rrset" = "yes"],
+ [AC_DEFINE([DNS_RDATASET_FIXED], [1],
+ [Define to enable "rrset-order fixed" syntax.])])
+
+#
+# Activate dnstap?
+#
+# [pairwise: --enable-dnstap, --disable-dnstap]
+AC_ARG_ENABLE([dnstap],
+ [AS_HELP_STRING([--enable-dnstap],
+ [enable dnstap support
+ (requires fstrm, protobuf-c)])],
+ [], [enable_dnstap=no])
+
+AS_IF([test "$enable_dnstap" != "no"],
+ [PKG_CHECK_MODULES([DNSTAP], [libfstrm libprotobuf-c], [],
+ [AC_MSG_FAILURE([Required libraries (fstrm, protobuf-c) were not found, please install them.])])
+ AC_PATH_PROG([FSTRM_CAPTURE], [fstrm_capture])
+ AC_PATH_PROG([PROTOC_C], [protoc-c])
+ AS_IF([test -z "$PROTOC_C"],
+ [AC_MSG_ERROR([protoc-c compiler not found])])
+ AC_DEFINE([HAVE_DNSTAP], 1, [Define to 1 to enable dnstap support])
+ ])
+
+AC_SUBST([DNSTAP_CFLAGS])
+AC_SUBST([DNSTAP_LIBS])
+AM_CONDITIONAL([HAVE_DNSTAP], [test "$enable_dnstap" != "no"])
+#
+# The following sections deal with tools used for formatting
+# the documentation. They are all optional, unless you are
+# a developer editing the documentation source.
+#
+
+#
+# Look for sphinx-build
+#
+AC_ARG_VAR([SPHINX_BUILD], [path to sphinx-build binary used to build the documentation])
+AC_PATH_PROG([SPHINX_BUILD], [sphinx-build], [])
+AM_CONDITIONAL([HAVE_SPHINX_BUILD], [test -n "$SPHINX_BUILD"])
+
+AC_PATH_PROG([XELATEX], [xelatex], [])
+AC_PATH_PROG([LATEXMK], [latexmk], [])
+AM_CONDITIONAL([HAVE_XELATEX], [test -n "$XELATEX" && test -n "$LATEXMK"])
+
+#
+# Build the man pages only if we have prebuilt manpages or we can build them from RST sources
+#
+AM_CONDITIONAL([BUILD_MANPAGES], [test -e doc/man/named.conf.5in || test -n "$SPHINX_BUILD"])
+
+#
+# Pull release date from CHANGES file last modification date
+# for reproducible builds
+#
+release_date=`date -u -r CHANGES +%Y-%m-%d`
+AC_SUBST([RELEASE_DATE], $release_date)
+
+#
+# Look for Doxygen
+#
+AC_PATH_PROGS([DOXYGEN], [doxygen])
+
+AC_CONFIG_FILES([doc/doxygen/doxygen-input-filter],
+ [chmod +x doc/doxygen/doxygen-input-filter])
+
+#
+# Look for curl
+#
+
+AC_PATH_PROG(CURL, curl, curl)
+AC_SUBST(CURL)
+
+#
+# Look for nc
+#
+
+AC_PATH_PROGS(NC, nc, nc)
+AC_SUBST(NC)
+
+#
+# IDN support using libidn2
+#
+
+LIBIDN2_CFLAGS=
+LIBIDN2_LIBS=
+
+# [pairwise: --with-libidn2=yes, --without-libidn2]
+AC_ARG_WITH([libidn2],
+ [AS_HELP_STRING([--with-libidn2[=PATH]], [enable IDN support using GNU libidn2 [yes|no(default)|path]])],
+ [with_libidn2="$withval"], [with_libidn2="no"])
+AS_CASE([$with_libidn2],
+ [yes], [PKG_CHECK_MODULES([LIBIDN2], [libidn2],
+ [AC_DEFINE([HAVE_LIBIDN2], [1], [Define if libidn2 was found])])],
+ [no], [],
+ [*], [AX_SAVE_FLAGS([libidn2])
+ LIBIDN2_CFLAGS="-I$with_libidn2/include"
+ LIBIDN2_LIBS="-L$with_libidn2/lib"
+ CFLAGS="$CFLAGS $LIBIDN2_CFLAGS"
+ LIBS="$LIBS $LIBIDN2_LIBS"
+ AC_CHECK_HEADERS([idn2.h],
+ [],
+ [AC_MSG_ERROR([idn2.h not found])])
+ AC_SEARCH_LIBS([idn2_to_ascii_lz], [idn2],
+ [LIBIDN2_LIBS="$LIBIDN2_LIBS $ac_cv_search_idn2_to_ascii_lz"
+ AC_DEFINE([HAVE_LIBIDN2], [1], [Define if libidn2 was found])],
+ [AC_MSG_ERROR([libidn2 requested, but not found])])
+ AX_RESTORE_FLAGS([libidn2])])
+AC_SUBST([LIBIDN2_CFLAGS])
+AC_SUBST([LIBIDN2_LIBS])
+
+#
+# Check whether to build with cmocka unit testing framework
+#
+# [pairwise: --with-cmocka=detect, --with-cmocka=yes, --without-cmocka]
+AC_ARG_WITH([cmocka],
+ [AS_HELP_STRING([--with-cmocka=detect],[enable CMocka based tests (default is detect)])],
+ [],[with_cmocka=detect])
+
+AS_CASE([$with_cmocka],
+ [no],[],
+ [detect],[PKG_CHECK_MODULES([CMOCKA], [cmocka >= 1.1.3],
+ [AC_DEFINE([HAVE_CMOCKA], [1], [Use CMocka])
+ with_cmocka=yes],[with_cmocka=no])],
+ [yes],[PKG_CHECK_MODULES([CMOCKA], [cmocka >= 1.1.3],
+ [AC_DEFINE([HAVE_CMOCKA], [1], [Use CMocka])])],
+ [AC_MSG_ERROR([Use PKG_CONFIG_PATH to specify path to CMocka library])]
+ )
+AC_SUBST([CMOCKA_CFLAGS])
+AC_SUBST([CMOCKA_LIBS])
+
+AM_CONDITIONAL([HAVE_CMOCKA], [test "$with_cmocka" = "yes"])
+
+#
+# Compile with jemalloc (either provided as package or wired in the system on FreeBSD)
+#
+# [pairwise: --with-jemalloc=detect, --with-jemalloc=yes, --without-jemalloc]
+AC_ARG_WITH([jemalloc],
+ [AS_HELP_STRING([--with-jemalloc=detect],[enable jemalloc memory allocator (default is detect)])],
+ [],[with_jemalloc=detect])
+
+AS_CASE([$with_jemalloc],
+ [no],[],
+ [yes],[AX_CHECK_JEMALLOC(
+ [AC_DEFINE([HAVE_JEMALLOC], [1], [Define to 1 if jemalloc is available])],
+ [AC_MSG_ERROR([jemalloc not found])])],
+ [AX_CHECK_JEMALLOC(
+ [AC_DEFINE([HAVE_JEMALLOC], [1], [Define to 1 if jemalloc is available])
+ with_jemalloc=yes],
+ [AC_MSG_WARN([jemalloc not found; performance will be reduced])
+ with_jemalloc=no])])
+
+AS_IF([test "$with_jemalloc" = "no"],
+ [AS_CASE([$host],
+ [*-freebsd*],[AC_MSG_ERROR([You cannot compile without jemalloc; jemalloc is the system allocator on FreeBSD])])
+ AC_CHECK_FUNCS([malloc_size malloc_usable_size])])
+
+AM_CONDITIONAL([HAVE_JEMALLOC], [test "$with_jemalloc" = "yes"])
+
+#
+# was --with-tuning specified?
+#
+# [pairwise: --with-tuning=small, --without-tuning]
+AC_ARG_WITH([tuning],
+ AS_HELP_STRING([--with-tuning=ARG],
+ [Specify server tuning (default or small)]),
+ [],[with_tuning=no])
+
+AS_CASE([$with_tuning],
+ [small],[AC_MSG_NOTICE(using small system tuning)],
+ [AC_DEFINE(TUNE_LARGE, 1, [Define to use default system tuning.])
+ AC_MSG_NOTICE(using default system tuning)])
+
+#
+# was --enable-querytrace or --enable-singletrace specified?
+#
+# [pairwise: --enable-singletrace --enable-querytrace, --disable-singletrace --enable-querytrace, --disable-singletrace --disable-querytrace]
+AC_ARG_ENABLE([singletrace],
+ AS_HELP_STRING([--enable-singletrace],
+ [enable single-query trace logging
+ [default=no]]),
+ enable_singletrace="$enableval", enable_singletrace="no")
+
+AC_MSG_CHECKING([whether to enable single-query trace logging])
+case "$enable_singletrace" in
+yes)
+ enable_querytrace=yes
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(WANT_SINGLETRACE, 1, [Define to enable single-query tracing.])
+ ;;
+no)
+ AC_MSG_RESULT(no)
+ ;;
+*)
+ AC_MSG_ERROR("--enable-singletrace requires yes or no")
+ ;;
+esac
+
+# [pairwise: skip]
+AC_ARG_ENABLE(querytrace,
+ AS_HELP_STRING([--enable-querytrace],
+ [enable very verbose query trace logging
+ [default=no]]),
+ enable_querytrace="$enableval",
+ enable_querytrace="$enable_singletrace")
+
+AC_MSG_CHECKING([whether to enable query trace logging])
+case "$enable_querytrace" in
+yes)
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(WANT_QUERYTRACE, 1, [Define to enable very verbose query trace logging.])
+ ;;
+no)
+ AS_IF([test "$enable_singletrace" = "yes"],
+ [AC_MSG_ERROR([--enable-singletrace requires --enable-querytrace])])
+ AC_MSG_RESULT(no)
+ ;;
+*)
+ AC_MSG_ERROR("--enable-querytrace requires yes or no (not $enable_querytrace)")
+ ;;
+esac
+
+#
+# Was --disable-auto-validation specified?
+#
+
+validation_default=auto
+
+# [pairwise: --enable-auto-validation, --disable-auto-validation]
+AC_ARG_ENABLE(auto-validation,
+ AS_HELP_STRING([--enable-auto-validation],
+ [turn on DNSSEC validation by default, using the IANA root key [default=yes]]),
+ [:],[enable_auto_validation=yes])
+AS_IF([test "$enable_auto_validation" = "no"],[validation_default=yes])
+AC_DEFINE_UNQUOTED([VALIDATION_DEFAULT], ["$validation_default"], [the default value of dnssec-validation option])
+
+#
+#
+# Response policy rewriting using DNS Response Policy Service (DNSRPS)
+# interface.
+#
+# DNSRPS can be compiled into BIND everywhere with a reasonably
+# modern C compiler. It is enabled on systems with dlopen() and librpz.so.
+#
+dnsrps_avail=yes
+AC_MSG_CHECKING([for librpz __attribute__s])
+AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[]],
+ [[
+ extern void f(char *p __attribute__((unused)), ...)
+ __attribute__((format(printf,1,2))) __attribute__((__noreturn__));
+ ]])],
+ [
+ librpz_have_attr=yes
+ AC_DEFINE([LIBRPZ_HAVE_ATTR], [1], [have __attribute__s used in librpz.h])
+ AC_MSG_RESULT([yes])
+ ],[
+ librpz_have_attr=no
+ AC_MSG_RESULT([no])
+ ])
+
+# [pairwise: --enable-dnsrps --enable-dnsrps-dl, --disable-dnsrps]
+AC_ARG_ENABLE([dnsrps-dl],
+ [AS_HELP_STRING([--enable-dnsrps-dl],
+ [DNS Response Policy Service delayed link
+ [default=$librpz_dl]])],
+ [enable_librpz_dl="$enableval"], [enable_librpz_dl="$with_dlopen"])
+
+AS_IF([test "$enable_librpz_dl" = "yes" -a "$with_dlopen" = "no"],
+ [AC_MSG_ERROR([DNS Response Policy Service delayed link requires dlopen to be enabled])])
+
+# [pairwise: skip]
+AC_ARG_WITH([dnsrps-libname],
+ [AS_HELP_STRING([--with-dnsrps-libname],
+ [DNSRPS provider library name (librpz.so)])],
+ [librpz_name="$withval"], [librpz_name="librpz.so"])
+
+# [pairwise: skip]
+AC_ARG_WITH([dnsrps-dir],
+ [AS_HELP_STRING([--with-dnsrps-dir],
+ [path to DNSRPS provider library])],
+ [librpz_path="$withval/$librpz_name"], [librpz_path="$librpz_name"])
+AC_DEFINE_UNQUOTED([DNSRPS_LIBRPZ_PATH], ["$librpz_path"],
+ [dnsrps $librpz_name])
+AS_IF([test "$enable_librpz_dl" = "yes"],
+ [
+ dnsrps_lib_open=2
+ ],[
+ dnsrps_lib_open=1
+ # Add librpz.so to linked libraries if we are not using dlopen()
+ AC_SEARCH_LIBS([librpz_client_create], [rpz], [],
+ [dnsrps_lib_open=0
+ dnsrps_avail=no])
+ ])
+AC_DEFINE_UNQUOTED([DNSRPS_LIB_OPEN], [$dnsrps_lib_open],
+ [0=no DNSRPS 1=static link 2=dlopen()])
+
+# [pairwise: skip]
+AC_ARG_ENABLE([dnsrps],
+ AS_HELP_STRING([--enable-dnsrps],
+ [enable DNS Response Policy Service API]),
+ [enable_dnsrps=$enableval], [enable_dnsrps=no])
+
+AS_IF([test "$enable_dnsrps" != "no"],[
+ AS_IF([test "$dnsrps_avail" != "yes"],
+ [AC_MSG_ERROR([dlopen and librpz.so needed for DNSRPS])])
+ AS_IF([test "$dnsrps_lib_open" = "0"],
+ [AC_MSG_ERROR([dlopen and librpz.so needed for DNSRPS])])
+ AC_DEFINE([USE_DNSRPS], [1], [Enable DNS Response Policy Service API])
+ ])
+
+AC_CHECK_HEADERS([glob.h])
+
+#
+# Support for constructor and destructor attributes
+#
+AX_GCC_FUNC_ATTRIBUTE([constructor])
+AX_GCC_FUNC_ATTRIBUTE([destructor])
+
+#
+# Files to configure. These are listed here because we used to
+# specify them as arguments to AC_OUTPUT.
+#
+
+# Top
+
+AC_CONFIG_FILES([Makefile])
+
+# Binaries
+
+AC_CONFIG_FILES([bin/Makefile
+ bin/named/Makefile
+ bin/rndc/Makefile
+ bin/dig/Makefile
+ bin/delv/Makefile
+ bin/dnssec/Makefile
+ bin/tools/Makefile
+ bin/nsupdate/Makefile
+ bin/check/Makefile
+ bin/confgen/Makefile
+ bin/plugins/Makefile])
+
+# Libraries
+
+AC_CONFIG_FILES([lib/Makefile
+ lib/isc/Makefile
+ lib/dns/Makefile
+ lib/ns/Makefile
+ lib/irs/Makefile
+ lib/isccfg/Makefile
+ lib/isccc/Makefile
+ lib/bind9/Makefile])
+
+# Documentation
+
+AC_CONFIG_FILES([doc/Makefile
+ doc/arm/Makefile
+ doc/man/Makefile
+ doc/misc/Makefile])
+
+# Unit Tests
+
+AC_CONFIG_FILES([tests/Makefile
+ tests/isc/Makefile
+ tests/dns/Makefile
+ tests/ns/Makefile
+ tests/irs/Makefile
+ tests/isccfg/Makefile
+ tests/libtest/Makefile])
+
+AC_CONFIG_FILES([tests/unit-test-driver.sh],
+ [chmod +x tests/unit-test-driver.sh])
+
+# System Tests
+
+AC_CONFIG_FILES([bin/tests/Makefile
+ bin/tests/system/Makefile
+ bin/tests/system/conf.sh
+ bin/tests/system/dyndb/driver/Makefile
+ bin/tests/system/dlzexternal/driver/Makefile
+ bin/tests/system/hooks/driver/Makefile])
+
+AC_CONFIG_FILES([bin/tests/system/ifconfig.sh],
+ [chmod +x bin/tests/system/ifconfig.sh])
+AC_CONFIG_FILES([bin/tests/system/legacy.run.sh],
+ [chmod +x bin/tests/system/legacy.run.sh])
+AC_CONFIG_FILES([bin/tests/system/start.sh],
+ [chmod +x bin/tests/system/start.sh])
+AC_CONFIG_FILES([bin/tests/system/stop.sh],
+ [chmod +x bin/tests/system/stop.sh])
+
+# Fuzz Tests
+
+AC_CONFIG_FILES([fuzz/Makefile])
+
+# Misc
+
+AC_CONFIG_FILES([util/check-make-install])
+
+#
+# Do it
+#
+
+AC_OUTPUT
+
+# [pairwise: --enable-full-report, --disable-full-report]
+AC_ARG_ENABLE(full-report,
+ AS_HELP_STRING([--enable-full-report],
+ [report values of all configure options]))
+
+report() {
+ echo "==============================================================================="
+ echo "Configuration summary:"
+ echo "-------------------------------------------------------------------------------"
+ echo "Optional features enabled:"
+ if test "yes" = "$with_jemalloc"; then
+ echo " Memory allocator: jemalloc"
+ fi
+ if test "yes" = "$enable_full_report" -o "standard" = "$with_locktype"; then
+ echo " Mutex lock type: $with_locktype"
+ fi
+ test "small" = "$with_tuning" && echo " Small-system tuning (--with-tuning)"
+ test "no" = "$enable_dnstap" || \
+ echo " Allow 'dnstap' packet logging (--enable-dnstap)"
+ test -z "$MAXMINDDB_LIBS" || echo " GeoIP2 access control (--enable-geoip)"
+ test -z "$GSSAPI_LIBS" || echo " GSS-API (--with-gssapi)"
+
+ # these lines are only printed if run with --enable-full-report
+ if test "yes" = "$enable_full_report"; then
+ test -z "$LIBXML2_LIBS" || echo " XML statistics (--with-libxml2)"
+ test -z "$JSON_C_LIBS" || echo " JSON statistics (--with-json-c): $JSON_C_CFLAGS $JSON_C_LIBS"
+ test -z "$ZLIB_LIBS" || echo " HTTP zlib compression (--with-zlib)"
+ test -z "$LMDB_LIBS" || echo " LMDB database to store configuration for 'addzone' zones (--with-lmdb)"
+ test -z "$LIBIDN2_LIBS" || echo " IDN support (--with-libidn2)"
+ fi
+
+ test "yes" = "$enable_dnsrps" && \
+ echo " DNS Response Policy Service interface (--enable-dnsrps)"
+ test "yes" = "$enable_fixed_rrset" && \
+ echo " Allow 'fixed' rrset-order (--enable-fixed-rrset)"
+ test "yes" = "$enable_querytrace" && \
+ echo " Very verbose query trace logging (--enable-querytrace)"
+ test "yes" = "$enable_singletrace" && \
+ echo " Single-query trace logging (--enable-singletrace)"
+ test -z "$HAVE_CMOCKA" || echo " CMocka Unit Testing Framework (--with-cmocka)"
+
+ test "auto" = "$validation_default" && echo " DNSSEC validation active by default (--enable-auto-validation)"
+
+ echo "-------------------------------------------------------------------------------"
+
+ echo "Features disabled or unavailable on this platform:"
+ if test "no" = "$with_jemalloc"; then
+ echo " Memory allocator: system"
+ echo
+ echo " +------------------------------------------+"
+ echo " | ==== WARNING ==== |"
+ echo " | |"
+ echo " | This is NOT a recommended configuration. |"
+ echo " | Using the system memory allocator causes |"
+ echo " | reduced performance and increased memory |"
+ echo " | fragmentation. Installing the jemalloc |"
+ echo " | memory allocator (version >= 4.0.0) is |"
+ echo " | strongly recommended. |"
+ echo " +------------------------------------------+"
+ echo
+ fi
+ test "small" = "$with_tuning" || echo " Small-system tuning (--with-tuning)"
+
+ test "no" = "$enable_dnstap" && \
+ echo " Allow 'dnstap' packet logging (--enable-dnstap)"
+ test -z "$MAXMINDDB_LIBS" && echo " GeoIP2 access control (--enable-geoip)"
+ test -z "$GSSAPI_LIBS" && echo " GSS-API (--with-gssapi)"
+
+ test "no" = "$enable_dnsrps" && \
+ echo " DNS Response Policy Service interface (--enable-dnsrps)"
+
+ test "yes" = "$enable_fixed_rrset" || \
+ echo " Allow 'fixed' rrset-order (--enable-fixed-rrset)"
+
+ test "yes" = "$validation_default" && echo " DNSSEC validation requires configuration (--enable-auto-validation)"
+
+ test "yes" = "$enable_querytrace" || \
+ echo " Very verbose query trace logging (--enable-querytrace)"
+ test "yes" = "$enable_singletrace" || \
+ echo " Single-query trace logging (--enable-singletrace)"
+
+ test "no" = "$with_cmocka" && echo " CMocka Unit Testing Framework (--with-cmocka)"
+
+ test -z "$LIBXML2_LIBS" && echo " XML statistics (--with-libxml2)"
+ test -z "$JSON_C_LIBS" && echo " JSON statistics (--with-json-c)"
+ test -z "$ZLIB_LIBS" && echo " HTTP zlib compression (--with-zlib)"
+ test -z "$LMDB_LIBS" && echo " LMDB database to store configuration for 'addzone' zones (--with-lmdb)"
+ test -z "$LIBIDN2_LIBS" && echo " IDN support (--with-libidn2)"
+
+ echo "-------------------------------------------------------------------------------"
+ echo "Configured paths:"
+ echo " prefix: $prefix"
+ echo " sysconfdir: $sysconfdir"
+ echo " localstatedir: $localstatedir"
+ echo "-------------------------------------------------------------------------------"
+ echo "Compiler: $CC"
+ AS_IF([test "$GCC" = "yes"],
+ [$CC --version 2>&1 | sed 's/^/ /'],
+ [AS_CASE([$host],
+ [*-solaris*],[$CC -V 2>&1 | sed 's/^/ /'],
+ [$CC --version 2>&1 | sed 's/^/ /'])])
+ echo "CFLAGS: $STD_CFLAGS $CFLAGS"
+ echo "CPPFLAGS: $STD_CPPFLAGS $CPPFLAGS"
+ echo "LDFLAGS: $LDFLAGS"
+
+ if test "X$ac_unrecognized_opts" != "X"; then
+ echo "-------------------------------------------------------------------------------"
+ echo "Unrecognized options:"
+ echo " $ac_unrecognized_opts"
+ fi
+
+ if test "yes" != "$enable_full_report"; then
+ echo "-------------------------------------------------------------------------------"
+ echo "For more detail, use --enable-full-report."
+ fi
+ echo "==============================================================================="
+}
+
+if test "yes" != "$silent"; then
+ report
+fi
+
+# Tell Emacs to edit this file in shell mode.
+# Local Variables:
+# mode: sh
+# End: