diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-06 00:53:35 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-06 00:53:35 +0000 |
commit | 69c6a41ffb878ef98c9378ed4b1634a404cfaa7f (patch) | |
tree | b2a4f704565d62fbb129ab9dc3b35977c50e6e7f /configure.ac | |
parent | Initial commit. (diff) | |
download | knot-upstream/2.7.6.tar.xz knot-upstream/2.7.6.zip |
Adding upstream version 2.7.6.upstream/2.7.6upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | configure.ac | 725 |
1 files changed, 725 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..658d6db --- /dev/null +++ b/configure.ac @@ -0,0 +1,725 @@ +AC_PREREQ([2.60]) + +m4_define([knot_VERSION_MAJOR], 2)dnl +m4_define([knot_VERSION_MINOR], 7)dnl +m4_define([knot_VERSION_PATCH], 6)dnl Leave empty if the master branch! +m4_include([m4/knot-version.m4]) + +AC_INIT([knot], knot_PKG_VERSION, [knot-dns@labs.nic.cz]) + +# Update library versions +# https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html +KNOT_LIB_VERSION([libknot], 8, 0, 0) +KNOT_LIB_VERSION([libdnssec], 6, 0, 0) +KNOT_LIB_VERSION([libzscanner], 2, 0, 0) + +# Store ./configure parameters and CFLAGS +AC_DEFINE_UNQUOTED([CONFIGURE_PARAMS],["$*"],[Params passed to configure]) +AC_DEFINE_UNQUOTED([CONFIGURE_CFLAGS],["$CFLAGS"],[Passed CFLAGS from environment]) + +AM_INIT_AUTOMAKE([foreign std-options subdir-objects no-dist-gzip dist-xz -Wall -Werror]) +AM_SILENT_RULES([yes]) +AC_CONFIG_SRCDIR([src/knot]) +AC_CONFIG_HEADERS([src/config.h]) +AC_CONFIG_MACRO_DIR([m4]) +AC_USE_SYSTEM_EXTENSIONS +AC_CANONICAL_HOST + +AC_SUBST([KNOT_VERSION_MAJOR], knot_VERSION_MAJOR) +AC_SUBST([KNOT_VERSION_MINOR], knot_VERSION_MINOR) +AC_SUBST([KNOT_VERSION_PATCH], knot_VERSION_PATCH) + +AC_CONFIG_FILES([src/libknot/version.h + src/libdnssec/version.h + src/libzscanner/version.h]) + +# Automatically update release date based on NEWS +AC_PROG_SED +release_date=$($SED -n 's/^Knot DNS .* (\(.*\))/\1/p;q;' ${srcdir}/NEWS) +AC_SUBST([RELEASE_DATE], $release_date) + +# Set compiler compatibility flags +AC_PROG_CC_C99 +AM_PROG_CC_C_O +AC_PROG_CPP_WERROR + +# Set default CFLAGS +CFLAGS="$CFLAGS -Wall -Werror=format-security -Werror=implicit -Wstrict-prototypes" + +AX_CHECK_COMPILE_FLAG("-fpredictive-commoning", [CFLAGS="$CFLAGS -fpredictive-commoning"], [], "-Werror") +AX_CHECK_LINK_FLAG(["-Wl,--exclude-libs,ALL"], [ldflag_exclude_libs="-Wl,--exclude-libs,ALL"], [ldflag_exclude_libs=""], "") +AC_SUBST([LDFLAG_EXCLUDE_LIBS], $ldflag_exclude_libs) + +# Check if an archiver is available +m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) + +AC_PROG_INSTALL + +# Initialize libtool +LT_INIT + +# Use pkg-config +PKG_PROG_PKG_CONFIG +m4_ifdef([PKG_INSTALLDIR], [PKG_INSTALLDIR], [AC_SUBST([pkgconfigdir], ['${libdir}/pkgconfig'])]) +AC_CONFIG_FILES([src/knotd.pc + src/libknot.pc + src/libdnssec.pc + src/libzscanner.pc + ]) + +# Default directories +knot_prefix=$ac_default_prefix +AS_IF([test "$prefix" != NONE], [knot_prefix=$prefix]) + +run_dir="${localstatedir}/run/knot" +AC_ARG_WITH([rundir], + AC_HELP_STRING([--with-rundir=path], [Path to run-time variable data (pid, sockets...). [default=LOCALSTATEDIR/run/knot]]), + [run_dir=$withval]) +AC_SUBST(run_dir) + +storage_dir="${localstatedir}/lib/knot" +AC_ARG_WITH([storage], + AC_HELP_STRING([--with-storage=path], [Default storage directory (slave zones, persistent data). [default=LOCALSTATEDIR/lib/knot]]), + [storage_dir=$withval]) +AC_SUBST(storage_dir) + +config_dir="${sysconfdir}/knot" +AC_ARG_WITH([configdir], + AC_HELP_STRING([--with-configdir=path], [Default directory for configuration. [default=SYSCONFDIR/knot]]), + [config_dir=$withval]) +AC_SUBST(config_dir) + +module_dir= +module_instdir="${libdir}/knot/modules-${KNOT_VERSION_MAJOR}.${KNOT_VERSION_MINOR}" +AC_ARG_WITH([moduledir], + AC_HELP_STRING([--with-moduledir=path], [Path to auto-loaded dynamic modules. [default not set]]), + [module_dir=$withval module_instdir=$module_dir]) +AC_SUBST(module_instdir) +AC_SUBST(module_dir) + +# Build Knot DNS daemon +AC_ARG_ENABLE([daemon], + AS_HELP_STRING([--disable-daemon], [Don't build Knot DNS main daemon]), [], [enable_daemon=yes]) +AM_CONDITIONAL([HAVE_DAEMON], [test "$enable_daemon" = "yes"]) + +# Build Knot DNS modules +AC_ARG_ENABLE([modules], + AS_HELP_STRING([--disable-modules], [Don't build Knot DNS modules]), [], [enable_modules=yes]) + +# Build Knot DNS utilities +AC_ARG_ENABLE([utilities], + AS_HELP_STRING([--disable-utilities], [Don't build Knot DNS utilities]), [], [enable_utilities=yes]) +AM_CONDITIONAL([HAVE_UTILS], [test "$enable_utilities" = "yes"]) + +# Build Knot DNS documentation +AC_ARG_ENABLE([documentation], + AS_HELP_STRING([--disable-documentation], [Don't build Knot DNS documentation]), [], [enable_documentation=yes]) +AM_CONDITIONAL([HAVE_DOCS], [test "$enable_documentation" = "yes"]) + +AM_CONDITIONAL([HAVE_LIBUTILS], test "$enable_utilities" != "no" -o \ + "$enable_daemon" != "no") +###################### +# Generic dependencies +###################### + +# A temporary workaround for linking issue on FreeBSD with Clang +AS_CASE([$host_os], + [freebsd*], [exclude_libs_libdnssec=no], + [*], [exclude_libs_libdnssec=yes] +) +AM_CONDITIONAL([EXCLUDE_LIBS_LIBDNSSEC], [test "$exclude_libs_libdnssec" = "yes"]) + +AC_ARG_ENABLE([fastparser], + AS_HELP_STRING([--disable-fastparser], [Disable use of fastest zone parser]),[],[ + # Set zone parser type - fastest on release build, slowest on dev build + AS_IF([test -d ".git" -o "$PATCH_VERSION" = "dev"],[ + enable_fastparser=no + ],[ + enable_fastparser=yes + ]) + ]) + +AX_CC_CLANG +AS_IF([test "$enable_fastparser" = "yes"],[ + AS_IF([test -n "$CC_CLANG_VERSION"],[ + enable_fastparser=no + AC_MSG_WARN([Fast zone parser disabled due to possible compiler bug.]) + AC_MSG_WARN([See https://llvm.org/bugs/show_bug.cgi?id=23490 for details.]) + AC_MSG_WARN([Use --enable-fastparser=force if your know your clang is fixed.]) + ]) +]) + +AS_IF([test "$enable_fastparser" = "force"],[enable_fastparser=yes]) + +AM_CONDITIONAL([FAST_PARSER], [test "$enable_fastparser" = "yes"]) + +# GnuTLS crypto backend +PKG_CHECK_MODULES([gnutls], [gnutls >= 3.3], [ + save_CFLAGS=$CFLAGS + save_LIBS=$LIBS + CFLAGS="$CFLAGS $gnutls_CFLAGS" + LIBS="$LIBS $gnutls_LIBS" + + AC_CHECK_FUNC([gnutls_pkcs11_copy_pubkey], [enable_pkcs11=yes], [enable_pkcs11=no]) + AS_IF([test "$enable_pkcs11" = yes], + [AC_DEFINE([ENABLE_PKCS11], [1], [PKCS #11 support available])]) + + AC_CHECK_DECL([GNUTLS_PK_EDDSA_ED25519], + [AC_DEFINE([HAVE_ED25519], [1], [GnuTLS ED25519 support available]) + enable_ed25519=yes], + [enable_ed25519=no], + [#include <gnutls/gnutls.h>]) + + AC_CHECK_FUNC([gnutls_privkey_sign_data2], + [AC_DEFINE([HAVE_SIGN_DATA2], [1], [gnutls_privkey_sign_data2 available])]) + + CFLAGS=$save_CFLAGS + LIBS=$save_LIBS +]) +AM_CONDITIONAL([ENABLE_PKCS11], [test "$enable_pkcs11" = "yes"]) + +AC_ARG_ENABLE([recvmmsg], + AS_HELP_STRING([--enable-recvmmsg=auto|yes|no], [enable recvmmsg() network API [default=auto]]), + [], [enable_recvmmsg=auto]) + +AS_CASE([$enable_recvmmsg], + [auto|yes],[ + AC_CHECK_FUNC([recvmmsg], + [AC_CHECK_FUNC([sendmmsg],[enable_recvmmsg=yes],[enable_recvmmsg=no])], + [enable_recvmmsg=no])], + [no],[], + [*], [AC_MSG_ERROR([Invalid value of --enable-recvmmsg.] + )]) + +AS_IF([test "$enable_recvmmsg" = yes],[ + AC_DEFINE([ENABLE_RECVMMSG], [1], [Use recvmmsg().])]) + +AC_ARG_ENABLE([reuseport], + AS_HELP_STRING([--enable-reuseport=auto|yes|no], [enable Linux SO_REUSEPORT support [default=auto]]), + [enable_reuseport="$enableval"], [enable_reuseport=auto]) + +AC_DEFUN([CHECK_REUSEPORT], [ + AC_CHECK_DECL( + [SO_REUSEPORT], + [$1], + [$2], + [ + #include <sys/socket.h> + ] + )]) + +AS_IF([test "$enable_reuseport" != no], [ + AS_CASE([$enable_reuseport], + [auto],[ + AS_CASE([$host_os], + [linux*], [CHECK_REUSEPORT([enable_reuseport=yes], [enable_reuseport=no])], + [*], [enable_reuseport=no] + )], + [yes],[ + AS_CASE([$host_os], + [linux*], [CHECK_REUSEPORT([enable_reuseport=yes], [AC_MSG_ERROR([SO_REUSEPORT support not detected.])])], + [*], [AC_MSG_ERROR(["SO_REUSEPORT not supported on $host_os."])] + )], + [*], [AC_MSG_ERROR([Invalid value of --enable-reuseport.])] + )]) + +AS_IF([test "$enable_reuseport" = yes],[ + AC_DEFINE([ENABLE_REUSEPORT], [1], [Use SO_REUSEPORT.])]) + +######################################### +# Dependencies needed for Knot DNS daemon +######################################### + +# Systemd integration +AC_ARG_ENABLE([systemd], + AS_HELP_STRING([--enable-systemd=auto|yes|no], [enable systemd integration [default=auto]]), + [enable_systemd="$enableval"], [enable_systemd=auto]) + +AS_IF([test "$enable_daemon" = "yes"],[ + +AS_IF([test "$enable_systemd" != "no"],[ + AS_CASE([$enable_systemd], + [auto],[PKG_CHECK_MODULES([systemd], [libsystemd], [enable_systemd=yes], [ + PKG_CHECK_MODULES([systemd], [libsystemd-daemon libsystemd-journal], [enable_systemd=yes], [enable_systemd=no])])], + [yes],[PKG_CHECK_MODULES([systemd], [libsystemd], [], [ + PKG_CHECK_MODULES([systemd], [libsystemd-daemon libsystemd-journal])])], + [*],[AC_MSG_ERROR([Invalid value of --enable-systemd.])]) + ]) + +AS_IF([test "$enable_systemd" = "yes"],[ + AC_DEFINE([ENABLE_SYSTEMD], [1], [Use systemd integration.])]) + +]) dnl enable_daemon + +# Alternative memory allocator +malloc_LIBS= +AC_ARG_WITH([memory-allocator], + AS_HELP_STRING([--with-memory-allocator=auto|LIBRARY], + [Use specific memory allocator for the server (e.g. jemalloc) [default=auto]]), + AS_CASE([$withval], + [auto], [], + [*], [malloc_LIBS="-l$withval"] + ) + with_memory_allocator=[$withval] +) +AS_IF([test "$with_memory_allocator" = ""], [with_memory_allocator="auto"]) +AC_SUBST([malloc_LIBS]) + +dnl Check for userspace-rcu library +AC_ARG_WITH(urcu, +[ --with-urcu=DIR where to find userspace-rcu library]) + +AS_IF([test "$enable_daemon" = "yes"],[ + +AS_IF([test "$with_urcu" != "no"], [ + PKG_CHECK_MODULES([liburcu], liburcu, [ + liburcu_PKGCONFIG="liburcu >= 0.4.0" + AC_SUBST([liburcu_PKGCONFIG]) + with_urcu=yes + ],[ + for try_urcu in "$with_urcu" "" "/usr/local"; do + save_LIBS="$LIBS" + save_CPPFLAGS="$CPPFLAGS" + + AS_IF([test -d "$try_urcu"], [ + liburcu_CFLAGS="-I$try_urcu/include" + liburcu_LIBS="-L$try_urcu/lib" + ],[ + liburcu_CFLAGS="" + liburcu_LIBS="" + ]) + + CPPFLAGS="$CPPFLAGS $liburcu_CFLAGS" + LIBS="$LIBS $liburcu_LIBS" + + AC_SEARCH_LIBS([rcu_set_pointer_sym], [urcu], [ + with_urcu=yes + liburcu_LIBS="$liburcu_LIBS -lurcu" + AC_SUBST([liburcu_CFLAGS]) + AC_SUBST([liburcu_LIBS]) + break + ],[ + CPPFLAGS="$save_CPPFLAGS" + LIBS="$save_LIBS" + with_urcu=no + # do not cache result of AC_SEARCH_LIBS test + unset ac_cv_search_rcu_set_pointer_sym + ]) + done + CPPFLAGS="$save_CPPFLAGS" + LIBS="$save_LIBS" + + AS_IF([test "$with_urcu" = "no"],[ + AC_MSG_ERROR([liburcu is required]) + ]) + ]) +]) + +]) + +static_modules="" +shared_modules="" +static_modules_declars="" +static_modules_init="" +doc_modules="" + +KNOT_MODULE([cookies], "yes") +KNOT_MODULE([dnsproxy], "yes", "non-shareable") +KNOT_MODULE([dnstap], "no") +KNOT_MODULE([geoip], "yes") +KNOT_MODULE([noudp], "yes") +KNOT_MODULE([onlinesign], "yes", "non-shareable") +KNOT_MODULE([queryacl], "yes") +KNOT_MODULE([rrl], "yes") +KNOT_MODULE([stats], "yes") +KNOT_MODULE([synthrecord], "yes") +KNOT_MODULE([whoami], "yes") + +AC_SUBST([STATIC_MODULES_DECLARS], [$(printf "$static_modules_declars")]) +AM_SUBST_NOTMAKE([STATIC_MODULES_DECLARS]) +AC_SUBST([STATIC_MODULES_INIT], [$(printf "$static_modules_init")]) +AM_SUBST_NOTMAKE([STATIC_MODULES_INIT]) +AC_SUBST([DOC_MODULES], [$(printf "$doc_modules")]) +AM_SUBST_NOTMAKE([DOC_MODULES]) + +# Check for Dnstap +AC_ARG_ENABLE([dnstap], + AS_HELP_STRING([--enable-dnstap], [Enable dnstap support for kdig (requires fstrm, protobuf-c)]), + [], [enable_dnstap=no]) + +AS_IF([test "$enable_dnstap" != "no" -o "$STATIC_MODULE_dnstap" != "no" -o "$SHARED_MODULE_dnstap" != "no"],[ + AC_PATH_PROG([PROTOC_C], [protoc-c]) + AS_IF([test -z "$PROTOC_C"],[ + AC_MSG_ERROR([The protoc-c program was not found. Please install protobuf-c!]) + ]) + PKG_CHECK_MODULES([libfstrm], [libfstrm]) + PKG_CHECK_MODULES([libprotobuf_c], [libprotobuf-c >= 1.0.0]) + AC_SUBST([DNSTAP_CFLAGS], ["$libfstrm_CFLAGS $libprotobuf_c_CFLAGS"]) + AC_SUBST([DNSTAP_LIBS], ["$libfstrm_LIBS $libprotobuf_c_LIBS"]) +]) + +AS_IF([test "$enable_dnstap" != "no"],[ + AC_DEFINE([USE_DNSTAP], [1], [Define to 1 to enable dnstap support for kdig]) +]) +AM_CONDITIONAL([HAVE_DNSTAP], test "$enable_dnstap" != "no") + +AM_CONDITIONAL([HAVE_LIBDNSTAP], test "$enable_dnstap" != "no" -o \ + "$STATIC_MODULE_dnstap" != "no" -o \ + "$SHARED_MODULE_dnstap" != "no") +# MaxMind DB for the GeoIP module +AC_ARG_ENABLE([maxminddb], + AS_HELP_STRING([--enable-maxminddb=auto|yes|no], [enable MaxMind DB [default=auto]]), + [enable_maxminddb="$enableval"], [enable_maxminddb=auto]) + +AS_IF([test "$enable_daemon" = "no"],[enable_maxminddb=no]) +AS_CASE([$enable_maxminddb], + [no],[], + [auto],[PKG_CHECK_MODULES([libmaxminddb], [libmaxminddb], [enable_maxminddb=yes], [enable_maxminddb=no])], + [yes], [PKG_CHECK_MODULES([libmaxminddb], [libmaxminddb])], + [*],[ + save_CFLAGS="$CFLAGS" + save_LIBS="$LIBS" + AS_IF([test "$enable_maxminddb" != ""],[ + LIBS="$LIBS -L$enable_maxminddb" + CFLAGS="$CFLAGS -I$enable_maxminddb/include" + ]) + AC_SEARCH_LIBS([MMDB_open], [maxminddb], [ + AS_IF([test "$enable_maxminddb" != ""], [ + libmaxminddb_CFLAGS="-I$enable_maxminddb/include" + libmaxminddb_LIBS="-L$enable_maxminddb -lmaxminddb" + ],[ + libmaxminddb_CFLAGS="" + libmaxminddb_LIBS="$ac_cv_search_MMDB_open" + ]) + ],[AC_MSG_ERROR("not found in `$enable_maxminddb'")]) + CFLAGS="$save_CFLAGS" + LIBS="$save_LIBS" + AC_SUBST([libmaxminddb_CFLAGS]) + AC_SUBST([libmaxminddb_LIBS]) + enable_maxminddb=yes + ]) + +AS_IF([test "$enable_maxminddb" = yes], [AC_DEFINE([HAVE_MAXMINDDB], [1], [Define to 1 to enable MaxMind DB.])]) +AM_CONDITIONAL([HAVE_MAXMINDDB], [test "$enable_maxminddb" = yes]) + +dnl Check for LMDB +lmdb_MIN_VERSION_MAJOR=0 +lmdb_MIN_VERSION_MINOR=9 +lmdb_MIN_VERSION_PATCH=15 +lmdb_MIN_VERSION_STRING="$lmdb_MIN_VERSION_MAJOR.$lmdb_MIN_VERSION_MINOR.$lmdb_MIN_VERSION_PATCH" +lmdb_MIN_VERSION_FULL="$((($lmdb_MIN_VERSION_MAJOR << 24) | ($lmdb_MIN_VERSION_MINOR << 16) | $lmdb_MIN_VERSION_PATCH))" +AC_ARG_WITH([lmdb], + AC_HELP_STRING([--with-lmdb=[DIR]], [Link with external LMDB (>= $lmdb_MIN_VERSION_STRING)]),[ + with_lmdb=$withval + ],[ + with_lmdb=auto + ]) + +have_lmdb=no + +AS_IF([test "$with_lmdb" != "no"],[ + save_CPPFLAGS=$CPPFLAGS + save_LIBS=$LIBS + + # Look for lmdb in given path and common locations + for try_lmdb in "$with_lmdb" "" "/usr/local"; do + + AS_IF([test -d "$try_lmdb"], [ + lmdb_CFLAGS="-I$try_lmdb/include" + lmdb_LIBS="-L$try_lmdb/lib" + ],[ + lmdb_CFLAGS="" + lmdb_LIBS="" + ]) + + CPPFLAGS="$save_CPPFLAGS $lmdb_CFLAGS" + LIBS="$save_LIBS $lmdb_LIBS" + + AC_SEARCH_LIBS([mdb_env_open], [lmdb], [ + AC_CHECK_HEADERS([lmdb.h], [], [ + AC_MSG_ERROR([lmdb headers not found in `$try_lmdb', is your installation complete?])]) + AC_COMPUTE_INT(lmdb_VERSION_FULL, MDB_VERSION_FULL, [#include <lmdb.h>], + AC_MSG_ERROR([Unable to determine lmdb version from MDB_VERSION_FULL])) + AS_IF([test "$lmdb_VERSION_FULL" -ge "$lmdb_MIN_VERSION_FULL"],[ + lmdb_LIBS="$lmdb_LIBS -llmdb" + have_lmdb=yes],[ + unset lmdb_CFLAGS + unset lmdb_LIBS + AC_MSG_WARN([lmdb version 0.9.15 and higher not found, using embedded version]) + ]) + break + ]) + + unset lmdb_CFLAGS + unset lmdb_LIBS + # do not cache result of AC_SEARCH_LIBS test + unset ac_cv_search_mdb_env_open + done + + CPPFLAGS="$save_CPPFLAGS" + LIBS="$save_LIBS" + + # fail the configure if we haven't found lmdb library in the system + AS_IF([test "$with_lmdb" != "auto" -a "$have_lmdb" = "no"],[ + AC_MSG_ERROR([shared lmdb library not found]) + ]) + ]) + +AS_IF([test "$have_lmdb" != "no"],[ + AC_SUBST([lmdb_LIBS]) + enable_lmdb=shared + external_lmdb_LIBS=$lmdb_LIBS + ],[ + enable_lmdb=embedded + lmdb_CFLAGS="-I\$(top_srcdir)/src/contrib/lmdb" + ]) +AM_CONDITIONAL([HAVE_LMDB], test "$enable_lmdb" = "shared") +AC_SUBST([lmdb_CFLAGS]) +AC_SUBST([external_lmdb_LIBS]) + +# LMDB mapping sizes +conf_mapsize_default=500 +AC_ARG_WITH([conf_mapsize], + AC_HELP_STRING([--with-conf-mapsize=NUM], [Configuration DB mapsize in MiB [default=$conf_mapsize_default]]), + [conf_mapsize=$withval],[conf_mapsize=$conf_mapsize_default]) + +AS_CASE([$conf_mapsize], + [yes],[conf_mapsize=$conf_mapsize_default], + [no], [AC_MSG_ERROR([conf_mapsize must be a number])], + [*], [AS_IF([test $conf_mapsize != $(( $conf_mapsize + 0 ))], + [AC_ERROR([conf_mapsize must be an integer number])])]) +AC_DEFINE_UNQUOTED([CONF_MAPSIZE], [$conf_mapsize], [Configuration DB mapsize.]) +AC_SUBST(conf_mapsize) + +# libedit +AS_IF([test "$enable_daemon" = "yes" -o "$enable_utilities" = "yes"], [ + PKG_CHECK_MODULES([libedit], [libedit], [with_libedit=yes], [ + with_libedit=no + AC_CHECK_HEADER([histedit.h], [ + # workaround for OpenBSD + AS_CASE([$host_os], + [openbsd*], [libedit_deps=-lcurses], + [libedit_deps=] + ) + AC_CHECK_LIB([edit], [el_init], [ + with_libedit=yes + libedit_CFLAGS= + libedit_LIBS="-ledit $libedit_deps" + ], [], [$libedit_deps] + ) + ]) + ]) + AS_IF([test "$with_libedit" != "yes"], [ + AC_MSG_ERROR([libedit not found]) + ]) +], [ + with_libedit=no + libedit_CFLAGS= + libedit_LIBS= +]) + +############################################ +# Dependencies needed for Knot DNS utilities +############################################ + +dnl Check for libidn. +AC_ARG_WITH(libidn, + AC_HELP_STRING([--with-libidn=[DIR]], [Support IDN (needs GNU libidn2 or libidn)]), + with_libidn=$withval, + with_libidn=yes +) + +AS_IF([test "$enable_utilities" = "yes"], [ + AS_IF([test "$with_libidn" != "no"], [ + PKG_CHECK_MODULES([libidn2], [libidn2 >= 2.0.0], [ + with_libidn=libidn2 + AC_DEFINE([LIBIDN], [1], [Define to 1 to enable IDN support]) + AC_DEFINE([LIBIDN_HEADER], [<idn2.h>], [Define to proper libidn header]) + ], [ + PKG_CHECK_MODULES([libidn], [libidn >= 0.0.0], [ + with_libidn=libidn + AC_DEFINE([LIBIDN], [1], [Define to 1 to enable IDN support]) + AC_DEFINE([LIBIDN_HEADER], [<idna.h>], [Define to proper libidn header]) + ], [ + with_libidn=no + AC_MSG_WARN([libidn2 or libidn not found]) + ]) + ]) + ]) +]) # Knot DNS utilities dependencies + +AS_IF([test "$enable_daemon" = "yes"], [ + PKG_CHECK_MODULES([cap_ng], [cap-ng], [enable_cap_ng=yes], [ + enable_cap_ng=no + AC_CHECK_HEADER([cap-ng.h], [ + save_LIBS="$LIBS" + AC_SEARCH_LIBS([capng_apply], [cap-ng], [ + enable_cap_ng=yes + cap_ng_LIBS="$ac_cv_search_capng_apply" + AC_SUBST([cap_ng_LIBS]) + ]) + LIBS="$save_LIBS" + ]) + ]) +], [ + enable_cap_ng=no + cap_ng_LIBS= +]) + +AS_IF([test "$enable_cap_ng" = yes], + [AC_DEFINE([ENABLE_CAP_NG], [1], [POSIX capabilities available])] +) + +save_LIBS="$LIBS" +AC_SEARCH_LIBS([pthread_create], [pthread], [ + pthread_LIBS="$ac_cv_search_pthread_create" + AC_SUBST([pthread_LIBS]) +],[ + AC_MSG_ERROR([pthreads not found]) +]) +LIBS="$save_LIBS" + +save_LIBS="$LIBS" +AC_SEARCH_LIBS([dlopen], [dl], [ + dlopen_LIBS="$ac_cv_search_dlopen" + AC_SUBST([dlopen_LIBS]) +],[ + AC_MSG_ERROR([dlopen not found]) +]) +LIBS="$save_LIBS" + +save_LIBS="$LIBS" +AC_SEARCH_LIBS([pow], [m], [ + math_LIBS="$ac_cv_search_pow" + AC_SUBST([math_LIBS]) +],[ + AC_MSG_ERROR([math not found]) +]) +LIBS="$save_LIBS" + +AC_SEARCH_LIBS([clock_gettime], [rt]) + +# Checks for header files. +AC_HEADER_RESOLV +AC_CHECK_HEADERS_ONCE([pthread_np.h sys/uio.h]) + +# Checks for optional library functions. +AC_CHECK_FUNCS([accept4 clock_gettime fgetln getline initgroups malloc_trim \ + pthread_setaffinity_np setgroups strlcat strlcpy sysctlbyname]) + +# Check for mandatory library functions. +AC_CHECK_FUNC([vasprintf], [], [ + AC_MSG_ERROR([vasprintf support in the libc is required])]) + +# Check for cpu_set_t/cpuset_t compatibility +AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]], [[cpu_set_t set; CPU_ZERO(&set);]])], +[AC_DEFINE(HAVE_CPUSET_LINUX, 1, [Define if Linux-like cpu_set_t exists.])]) +AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread_np.h>]], [[cpuset_t set; CPU_ZERO(&set);]])], +[AC_DEFINE(HAVE_CPUSET_BSD, 1, [Define if FreeBSD-like cpuset_t exists.])]) +AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sched.h>]], [[cpuset_t* set = cpuset_create(); cpuset_destroy(set);]])], +[AC_DEFINE(HAVE_CPUSET_NETBSD, 1, [Define if cpuset_t and cpuset(3) exists.])]) + +AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[#include <stdint.h>]], + [[uint64_t val = 0; __atomic_add_fetch(&val, 1, __ATOMIC_RELAXED);]])], + [AC_DEFINE(HAVE_ATOMIC, 1, [Define to 1 if you have '__atomic' functions.])] +) + +# Prepare CFLAG_VISIBILITY to be used where needed +gl_VISIBILITY() + +# Add code coverage macro +AX_CODE_COVERAGE + +AX_SANITIZER +AS_IF([test -n "$sanitizer_CFLAGS"], [CFLAGS="$CFLAGS $sanitizer_CFLAGS"]) +AM_CONDITIONAL([FUZZER], [test "$with_fuzzer" != "no"]) +AM_CONDITIONAL([OSS_FUZZ], [test "$with_oss_fuzz" != "no"]) + +AS_IF([test "$enable_documentation" = "yes"],[ + +AC_PATH_PROGS([SPHINXBUILD], [sphinx-build sphinx-build-3], [false]) +AS_IF([test "$SPHINXBUILD" = "false"], + [AC_MSG_WARN([Could not find the 'sphinx-build' executable, you will be unable to regenerate documentation.])], + [AC_PATH_PROG([PDFLATEX], [pdflatex], [false]) + AS_IF([test "$PDFLATEX" = ""], + [AC_MSG_WARN([Could not find the 'pdflatex' executable, you will be unable to generate PDF documentation.])]) + AC_PATH_PROG([MAKEINFO], [makeinfo], [false]) + AS_IF([test "$MAKEINFO" = "false"], + [AC_MSG_WARN([Could not find the 'makeinfo' executable, you will be unable to generate info documentation.])]) + ]) + +]) + +AM_CONDITIONAL([HAVE_SPHINXBUILD], test "$SPHINXBUILD" != "false") +AM_CONDITIONAL([HAVE_PDFLATEX], test "$PDFLATEX" != "false") +AM_CONDITIONAL([HAVE_MAKEINFO], test "$MAKEINFO" != "false") + +result_msg_base=" Knot DNS $VERSION + + Target: $host_os $host_cpu + Compiler: ${CC} + CFLAGS: ${CFLAGS} ${CPPFLAGS} + LIBS: ${LIBS} ${LDFLAGS} + LibURCU: ${liburcu_LIBS} ${liburcu_CFLAGS} + GnuTLS: ${gnutls_LIBS} ${gnutls_CFLAGS} + Libedit: ${libedit_LIBS} ${libedit_CFLAGS} + LMDB: ${enable_lmdb} ${lmdb_LIBS} ${lmdb_CFLAGS} + Config: ${conf_mapsize} MiB default mapsize + + Prefix: ${knot_prefix} + Run dir: ${run_dir} + Storage dir: ${storage_dir} + Config dir: ${config_dir} + Module dir: ${module_dir} + + Static modules: ${static_modules} + Shared modules: ${shared_modules} + + Knot DNS libraries: yes + Knot DNS daemon: ${enable_daemon} + Knot DNS utilities: ${enable_utilities} + Knot DNS documentation: ${enable_documentation} + + Use recvmmsg: ${enable_recvmmsg} + Use SO_REUSEPORT: ${enable_reuseport} + Memory allocator: ${with_memory_allocator} + Fast zone parser: ${enable_fastparser} + Utilities with IDN: ${with_libidn} + Utilities with Dnstap: ${enable_dnstap} + MaxMind DB support: ${enable_maxminddb} + Systemd integration: ${enable_systemd} + POSIX capabilities ${enable_cap_ng} + PKCS #11 support: ${enable_pkcs11} + Ed25519 support: ${enable_ed25519} + Code coverage: ${enable_code_coverage} + Sanitizer: ${with_sanitizer} + LibFuzzer: ${with_fuzzer} + OSS-Fuzz: ${with_oss_fuzz}" + +result_msg_esc=$(echo -n "$result_msg_base" | sed '$!s/$/\\n/' | tr -d '\n') + +AC_DEFINE_UNQUOTED([CONFIGURE_SUMMARY],["$result_msg_esc"],[Configure summary]) + +AC_CONFIG_FILES([Makefile + Doxyfile + doc/Makefile + tests/Makefile + tests-fuzz/Makefile + samples/Makefile + distro/Makefile + python/Makefile + python/setup.py + python/libknot/__init__.py + src/Makefile + src/knot/modules/static_modules.h + ]) + +AC_CONFIG_FILES([doc/modules.rst], + [cp doc/modules.rst ${srcdir}/doc/modules.rst 2>/dev/null; + ln -s -f $(readlink -f ${srcdir})/src/knot/modules ${srcdir}/doc 2>/dev/null]) + +AC_OUTPUT +AC_MSG_RESULT([ +$result_msg_base +]) |