1b7579f77SDag-Erling Smørgrav# -*- Autoconf -*- 2b7579f77SDag-Erling Smørgrav# Process this file with autoconf to produce a configure script. 3b7579f77SDag-Erling SmørgravAC_PREREQ(2.56) 4b7579f77SDag-Erling Smørgravsinclude(acx_nlnetlabs.m4) 517d15b25SDag-Erling Smørgravsinclude(ax_pthread.m4) 6b7579f77SDag-Erling Smørgravsinclude(acx_python.m4) 7b7579f77SDag-Erling Smørgravsinclude(ac_pkg_swig.m4) 8ff825849SDag-Erling Smørgravsinclude(dnstap/dnstap.m4) 9b7579f77SDag-Erling Smørgrav 1017d15b25SDag-Erling Smørgrav# must be numbers. ac_defun because of later processing 1117d15b25SDag-Erling Smørgravm4_define([VERSION_MAJOR],[1]) 12ff825849SDag-Erling Smørgravm4_define([VERSION_MINOR],[5]) 13*b5663de9SDag-Erling Smørgravm4_define([VERSION_MICRO],[10]) 1417d15b25SDag-Erling SmørgravAC_INIT(unbound, m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]), unbound-bugs@nlnetlabs.nl, unbound) 1517d15b25SDag-Erling SmørgravAC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR]) 1617d15b25SDag-Erling SmørgravAC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR]) 1717d15b25SDag-Erling SmørgravAC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO]) 18b7579f77SDag-Erling Smørgrav 19f61ef7f6SDag-Erling SmørgravLIBUNBOUND_CURRENT=6 20*b5663de9SDag-Erling SmørgravLIBUNBOUND_REVISION=2 21f61ef7f6SDag-Erling SmørgravLIBUNBOUND_AGE=4 22b7579f77SDag-Erling Smørgrav# 1.0.0 had 0:12:0 23b7579f77SDag-Erling Smørgrav# 1.0.1 had 0:13:0 24b7579f77SDag-Erling Smørgrav# 1.0.2 had 0:14:0 25b7579f77SDag-Erling Smørgrav# 1.1.0 had 0:15:0 26b7579f77SDag-Erling Smørgrav# 1.1.1 had 0:16:0 27b7579f77SDag-Erling Smørgrav# 1.2.0 had 0:17:0 28b7579f77SDag-Erling Smørgrav# 1.2.1 had 0:18:0 29b7579f77SDag-Erling Smørgrav# 1.3.0 had 1:0:0 # ub_cancel and -export-symbols. 30b7579f77SDag-Erling Smørgrav# 1.3.1 had 1:1:0 31b7579f77SDag-Erling Smørgrav# 1.3.2 had 1:2:0 32b7579f77SDag-Erling Smørgrav# 1.3.3 had 1:3:0 33b7579f77SDag-Erling Smørgrav# 1.3.4 had 1:4:0 34b7579f77SDag-Erling Smørgrav# 1.4.0-snapshots had 1:5:0 35b7579f77SDag-Erling Smørgrav# 1.4.0 had 1:5:0 (not 2:0:0) # ub_result.why_bogus 36b7579f77SDag-Erling Smørgrav# 1.4.1 had 2:1:0 37b7579f77SDag-Erling Smørgrav# 1.4.2 had 2:2:0 38b7579f77SDag-Erling Smørgrav# 1.4.3 had 2:3:0 39b7579f77SDag-Erling Smørgrav# 1.4.4 had 2:4:0 40b7579f77SDag-Erling Smørgrav# 1.4.5 had 2:5:0 41b7579f77SDag-Erling Smørgrav# 1.4.6 had 2:6:0 42b7579f77SDag-Erling Smørgrav# 1.4.7 had 2:7:0 43b7579f77SDag-Erling Smørgrav# 1.4.8 had 2:8:0 44b7579f77SDag-Erling Smørgrav# 1.4.9 had 2:9:0 45b7579f77SDag-Erling Smørgrav# 1.4.10 had 2:10:0 46b7579f77SDag-Erling Smørgrav# 1.4.11 had 2:11:0 47b7579f77SDag-Erling Smørgrav# 1.4.12 had 2:12:0 48b7579f77SDag-Erling Smørgrav# 1.4.13 had 2:13:0 49b7579f77SDag-Erling Smørgrav# and 1.4.13p1 and 1.4.13.p2 50b7579f77SDag-Erling Smørgrav# 1.4.14 had 2:14:0 51b7579f77SDag-Erling Smørgrav# 1.4.15 had 3:0:1 # adds ub_version() 52b7579f77SDag-Erling Smørgrav# 1.4.16 had 3:1:1 53b7579f77SDag-Erling Smørgrav# 1.4.17 had 3:2:1 548ed2b524SDag-Erling Smørgrav# 1.4.18 had 3:3:1 558ed2b524SDag-Erling Smørgrav# 1.4.19 had 3:4:1 5617d15b25SDag-Erling Smørgrav# 1.4.20 had 4:0:2 # adds libunbound.ttl # but shipped 3:5:1 5717d15b25SDag-Erling Smørgrav# 1.4.21 had 4:1:2 58ff825849SDag-Erling Smørgrav# 1.4.22 had 4:1:2 59ff825849SDag-Erling Smørgrav# 1.5.0 had 5:3:3 # adds ub_ctx_add_ta_autr 606480faa8SDag-Erling Smørgrav# 1.5.1 had 5:3:3 616480faa8SDag-Erling Smørgrav# 1.5.2 had 5:5:3 626480faa8SDag-Erling Smørgrav# 1.5.3 had 5:6:3 6309a3aaf3SDag-Erling Smørgrav# 1.5.4 had 5:7:3 64b75612f8SDag-Erling Smørgrav# 1.5.5 had 5:8:3 6505ab2901SDag-Erling Smørgrav# 1.5.6 had 5:9:3 6605ab2901SDag-Erling Smørgrav# 1.5.7 had 5:10:3 67f61ef7f6SDag-Erling Smørgrav# 1.5.8 had 6:0:4 # adds ub_ctx_set_stub 68e2d15004SDag-Erling Smørgrav# 1.5.9 had 6:1:4 69*b5663de9SDag-Erling Smørgrav# 1.5.10 had 6:2:4 70b7579f77SDag-Erling Smørgrav 71b7579f77SDag-Erling Smørgrav# Current -- the number of the binary API that we're implementing 72b7579f77SDag-Erling Smørgrav# Revision -- which iteration of the implementation of the binary 73b7579f77SDag-Erling Smørgrav# API are we supplying? 74b7579f77SDag-Erling Smørgrav# Age -- How many previous binary API versions do we also 75b7579f77SDag-Erling Smørgrav# support? 76b7579f77SDag-Erling Smørgrav# 77b7579f77SDag-Erling Smørgrav# If we release a new version that does not change the binary API, 78b7579f77SDag-Erling Smørgrav# increment Revision. 79b7579f77SDag-Erling Smørgrav# 80b7579f77SDag-Erling Smørgrav# If we release a new version that changes the binary API, but does 81b7579f77SDag-Erling Smørgrav# not break programs compiled against the old binary API, increment 82b7579f77SDag-Erling Smørgrav# Current and Age. Set Revision to 0, since this is the first 83b7579f77SDag-Erling Smørgrav# implementation of the new API. 84b7579f77SDag-Erling Smørgrav# 85b7579f77SDag-Erling Smørgrav# Otherwise, we're changing the binary API and breaking bakward 86b7579f77SDag-Erling Smørgrav# compatibility with old binaries. Increment Current. Set Age to 0, 87b7579f77SDag-Erling Smørgrav# since we're backward compatible with no previous APIs. Set Revision 88b7579f77SDag-Erling Smørgrav# to 0 too. 89b7579f77SDag-Erling SmørgravAC_SUBST(LIBUNBOUND_CURRENT) 90b7579f77SDag-Erling SmørgravAC_SUBST(LIBUNBOUND_REVISION) 91b7579f77SDag-Erling SmørgravAC_SUBST(LIBUNBOUND_AGE) 92b7579f77SDag-Erling Smørgrav 93b7579f77SDag-Erling SmørgravCFLAGS="$CFLAGS" 94b7579f77SDag-Erling SmørgravAC_AIX 9517d15b25SDag-Erling Smørgravif test "$ac_cv_header_minix_config_h" = "yes"; then 9617d15b25SDag-Erling Smørgrav AC_DEFINE(_NETBSD_SOURCE,1, [Enable for compile on Minix]) 9717d15b25SDag-Erling Smørgravfi 98b7579f77SDag-Erling Smørgrav 99b7579f77SDag-Erling Smørgravdnl 100b7579f77SDag-Erling Smørgravdnl By default set prefix to /usr/local 101b7579f77SDag-Erling Smørgravdnl 102b7579f77SDag-Erling Smørgravcase "$prefix" in 103b7579f77SDag-Erling Smørgrav NONE) 104b7579f77SDag-Erling Smørgrav prefix="/usr/local" 105b7579f77SDag-Erling Smørgrav ;; 106b7579f77SDag-Erling Smørgravesac 107b7579f77SDag-Erling Smørgrav 108b7579f77SDag-Erling Smørgrav# are we on MinGW? 109b7579f77SDag-Erling Smørgravif uname -s 2>&1 | grep MINGW32 >/dev/null; then on_mingw="yes" 110b7579f77SDag-Erling Smørgravelse 111*b5663de9SDag-Erling Smørgrav if echo $host $target | grep mingw32 >/dev/null; then on_mingw="yes" 112b7579f77SDag-Erling Smørgrav else on_mingw="no"; fi 113b7579f77SDag-Erling Smørgravfi 114b7579f77SDag-Erling Smørgrav 115b7579f77SDag-Erling Smørgrav# 116b7579f77SDag-Erling Smørgrav# Determine configuration file 117b7579f77SDag-Erling Smørgrav# the eval is to evaluate shell expansion twice 118b7579f77SDag-Erling Smørgravif test $on_mingw = "no"; then 119b7579f77SDag-Erling Smørgrav ub_conf_file=`eval echo "${sysconfdir}/unbound/unbound.conf"` 120b7579f77SDag-Erling Smørgravelse 121*b5663de9SDag-Erling Smørgrav ub_conf_file="C:\\Program Files (x86)\\Unbound\\service.conf" 122b7579f77SDag-Erling Smørgravfi 123b7579f77SDag-Erling SmørgravAC_ARG_WITH([conf_file], 124b7579f77SDag-Erling Smørgrav AC_HELP_STRING([--with-conf-file=path], 125b7579f77SDag-Erling Smørgrav [Pathname to the Unbound configuration file]), 126b7579f77SDag-Erling Smørgrav [ub_conf_file="$withval"]) 127b7579f77SDag-Erling SmørgravAC_SUBST(ub_conf_file) 128b7579f77SDag-Erling SmørgravACX_ESCAPE_BACKSLASH($ub_conf_file, hdr_config) 129b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(CONFIGFILE, ["$hdr_config"], [Pathname to the Unbound configuration file]) 1306480faa8SDag-Erling Smørgravub_conf_dir=`AS_DIRNAME(["$ub_conf_file"])` 1316480faa8SDag-Erling SmørgravAC_SUBST(ub_conf_dir) 132b7579f77SDag-Erling Smørgrav 133b7579f77SDag-Erling Smørgrav# Determine run, chroot directory and pidfile locations 134b7579f77SDag-Erling SmørgravAC_ARG_WITH(run-dir, 135b7579f77SDag-Erling Smørgrav AC_HELP_STRING([--with-run-dir=path], 136b7579f77SDag-Erling Smørgrav [set default directory to chdir to (by default dir part of cfg file)]), 137b7579f77SDag-Erling Smørgrav UNBOUND_RUN_DIR="$withval", 138b7579f77SDag-Erling Smørgravif test $on_mingw = no; then 139b7579f77SDag-Erling Smørgrav UNBOUND_RUN_DIR=`dirname "$ub_conf_file"` 140b7579f77SDag-Erling Smørgravelse 141b7579f77SDag-Erling Smørgrav UNBOUND_RUN_DIR="" 142b7579f77SDag-Erling Smørgravfi 143b7579f77SDag-Erling Smørgrav) 144b7579f77SDag-Erling SmørgravAC_SUBST(UNBOUND_RUN_DIR) 145b7579f77SDag-Erling SmørgravACX_ESCAPE_BACKSLASH($UNBOUND_RUN_DIR, hdr_run) 146b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(RUN_DIR, ["$hdr_run"], [Directory to chdir to]) 147b7579f77SDag-Erling Smørgrav 148b7579f77SDag-Erling SmørgravAC_ARG_WITH(chroot-dir, 149b7579f77SDag-Erling Smørgrav AC_HELP_STRING([--with-chroot-dir=path], 150b7579f77SDag-Erling Smørgrav [set default directory to chroot to (by default same as run-dir)]), 151b7579f77SDag-Erling Smørgrav UNBOUND_CHROOT_DIR="$withval", 152b7579f77SDag-Erling Smørgravif test $on_mingw = no; then 153b7579f77SDag-Erling Smørgrav UNBOUND_CHROOT_DIR="$UNBOUND_RUN_DIR" 154b7579f77SDag-Erling Smørgravelse 155b7579f77SDag-Erling Smørgrav UNBOUND_CHROOT_DIR="" 156b7579f77SDag-Erling Smørgravfi 157b7579f77SDag-Erling Smørgrav) 158b7579f77SDag-Erling SmørgravAC_SUBST(UNBOUND_CHROOT_DIR) 159b7579f77SDag-Erling SmørgravACX_ESCAPE_BACKSLASH($UNBOUND_CHROOT_DIR, hdr_chroot) 160b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(CHROOT_DIR, ["$hdr_chroot"], [Directory to chroot to]) 161b7579f77SDag-Erling Smørgrav 162b7579f77SDag-Erling SmørgravAC_ARG_WITH(share-dir, 163b7579f77SDag-Erling Smørgrav AC_HELP_STRING([--with-share-dir=path], 164b7579f77SDag-Erling Smørgrav [set default directory with shared data (by default same as share/unbound)]), 165b7579f77SDag-Erling Smørgrav UNBOUND_SHARE_DIR="$withval", 166b7579f77SDag-Erling Smørgrav UNBOUND_SHARE_DIR="$UNBOUND_RUN_DIR") 167b7579f77SDag-Erling SmørgravAC_SUBST(UNBOUND_SHARE_DIR) 168b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(SHARE_DIR, ["$UNBOUND_SHARE_DIR"], [Shared data]) 169b7579f77SDag-Erling Smørgrav 170b7579f77SDag-Erling SmørgravAC_ARG_WITH(pidfile, 171b7579f77SDag-Erling Smørgrav AC_HELP_STRING([--with-pidfile=filename], 172b7579f77SDag-Erling Smørgrav [set default pathname to unbound pidfile (default run-dir/unbound.pid)]), 173b7579f77SDag-Erling Smørgrav UNBOUND_PIDFILE="$withval", 174b7579f77SDag-Erling Smørgravif test $on_mingw = no; then 175b7579f77SDag-Erling Smørgrav UNBOUND_PIDFILE="$UNBOUND_RUN_DIR/unbound.pid" 176b7579f77SDag-Erling Smørgravelse 177b7579f77SDag-Erling Smørgrav UNBOUND_PIDFILE="" 178b7579f77SDag-Erling Smørgravfi 179b7579f77SDag-Erling Smørgrav) 180b7579f77SDag-Erling SmørgravAC_SUBST(UNBOUND_PIDFILE) 181b7579f77SDag-Erling SmørgravACX_ESCAPE_BACKSLASH($UNBOUND_PIDFILE, hdr_pid) 182b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(PIDFILE, ["$hdr_pid"], [default pidfile location]) 183b7579f77SDag-Erling Smørgrav 184b7579f77SDag-Erling SmørgravAC_ARG_WITH(rootkey-file, 185b7579f77SDag-Erling Smørgrav AC_HELP_STRING([--with-rootkey-file=filename], 186b7579f77SDag-Erling Smørgrav [set default pathname to root key file (default run-dir/root.key). This file is read and written.]), 187b7579f77SDag-Erling Smørgrav UNBOUND_ROOTKEY_FILE="$withval", 188b7579f77SDag-Erling Smørgravif test $on_mingw = no; then 189b7579f77SDag-Erling Smørgrav UNBOUND_ROOTKEY_FILE="$UNBOUND_RUN_DIR/root.key" 190b7579f77SDag-Erling Smørgravelse 191*b5663de9SDag-Erling Smørgrav UNBOUND_ROOTKEY_FILE="C:\\Program Files (x86)\\Unbound\\root.key" 192b7579f77SDag-Erling Smørgravfi 193b7579f77SDag-Erling Smørgrav) 194b7579f77SDag-Erling SmørgravAC_SUBST(UNBOUND_ROOTKEY_FILE) 195b7579f77SDag-Erling SmørgravACX_ESCAPE_BACKSLASH($UNBOUND_ROOTKEY_FILE, hdr_rkey) 196b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(ROOT_ANCHOR_FILE, ["$hdr_rkey"], [default rootkey location]) 197b7579f77SDag-Erling Smørgrav 198b7579f77SDag-Erling SmørgravAC_ARG_WITH(rootcert-file, 199b7579f77SDag-Erling Smørgrav AC_HELP_STRING([--with-rootcert-file=filename], 200b7579f77SDag-Erling Smørgrav [set default pathname to root update certificate file (default run-dir/icannbundle.pem). This file need not exist if you are content with the builtin.]), 201b7579f77SDag-Erling Smørgrav UNBOUND_ROOTCERT_FILE="$withval", 202b7579f77SDag-Erling Smørgravif test $on_mingw = no; then 203b7579f77SDag-Erling Smørgrav UNBOUND_ROOTCERT_FILE="$UNBOUND_RUN_DIR/icannbundle.pem" 204b7579f77SDag-Erling Smørgravelse 205*b5663de9SDag-Erling Smørgrav UNBOUND_ROOTCERT_FILE="C:\\Program Files (x86)\\Unbound\\icannbundle.pem" 206b7579f77SDag-Erling Smørgravfi 207b7579f77SDag-Erling Smørgrav) 208b7579f77SDag-Erling SmørgravAC_SUBST(UNBOUND_ROOTCERT_FILE) 209b7579f77SDag-Erling SmørgravACX_ESCAPE_BACKSLASH($UNBOUND_ROOTCERT_FILE, hdr_rpem) 210b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(ROOT_CERT_FILE, ["$hdr_rpem"], [default rootcert location]) 211b7579f77SDag-Erling Smørgrav 212b7579f77SDag-Erling SmørgravAC_ARG_WITH(username, 213b7579f77SDag-Erling Smørgrav AC_HELP_STRING([--with-username=user], 214b7579f77SDag-Erling Smørgrav [set default user that unbound changes to (default user is unbound)]), 215b7579f77SDag-Erling Smørgrav UNBOUND_USERNAME="$withval", 216b7579f77SDag-Erling Smørgrav UNBOUND_USERNAME="unbound") 217b7579f77SDag-Erling SmørgravAC_SUBST(UNBOUND_USERNAME) 218b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(UB_USERNAME, ["$UNBOUND_USERNAME"], [default username]) 219b7579f77SDag-Erling Smørgrav 220b7579f77SDag-Erling SmørgravAC_DEFINE(WINVER, 0x0502, [the version of the windows API enabled]) 221b7579f77SDag-Erling SmørgravACX_RSRC_VERSION(wnvs) 222b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(RSRC_PACKAGE_VERSION, [$wnvs], [version number for resource files]) 223b7579f77SDag-Erling Smørgrav 224b7579f77SDag-Erling Smørgrav# Checks for typedefs, structures, and compiler characteristics. 225b7579f77SDag-Erling SmørgravAC_C_CONST 226b7579f77SDag-Erling SmørgravAC_LANG_C 2278ed2b524SDag-Erling Smørgrav# allow user to override the -g -O2 flags. 2288ed2b524SDag-Erling Smørgravif test "x$CFLAGS" = "x" ; then 229b7579f77SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG(g, [CFLAGS="$CFLAGS -g"]) 230b7579f77SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG(O2, [CFLAGS="$CFLAGS -O2"]) 2318ed2b524SDag-Erling Smørgravfi 232b7579f77SDag-Erling SmørgravAC_PROG_CC 233b7579f77SDag-Erling SmørgravACX_DEPFLAG 234b7579f77SDag-Erling SmørgravACX_DETERMINE_EXT_FLAGS_UNBOUND 235b7579f77SDag-Erling Smørgrav 236b7579f77SDag-Erling Smørgrav# debug mode flags warnings 237b7579f77SDag-Erling SmørgravAC_ARG_ENABLE(checking, AC_HELP_STRING([--enable-checking], [Enable warnings, asserts, makefile-dependencies])) 238b7579f77SDag-Erling SmørgravAC_ARG_ENABLE(debug, AC_HELP_STRING([--enable-debug], [same as enable-checking])) 239b7579f77SDag-Erling Smørgravif test "$enable_debug" = "yes"; then debug_enabled="$enable_debug"; 240b7579f77SDag-Erling Smørgravelse debug_enabled="$enable_checking"; fi 241b7579f77SDag-Erling SmørgravAC_SUBST(debug_enabled) 242b7579f77SDag-Erling Smørgravcase "$debug_enabled" in 243b7579f77SDag-Erling Smørgrav yes) 244b7579f77SDag-Erling Smørgrav ACX_CHECK_COMPILER_FLAG(W, [CFLAGS="$CFLAGS -W"]) 245b7579f77SDag-Erling Smørgrav ACX_CHECK_COMPILER_FLAG(Wall, [CFLAGS="$CFLAGS -Wall"]) 246b7579f77SDag-Erling Smørgrav ACX_CHECK_COMPILER_FLAG(Wextra, [CFLAGS="$CFLAGS -Wextra"]) 247b7579f77SDag-Erling Smørgrav ACX_CHECK_COMPILER_FLAG(Wdeclaration-after-statement, [CFLAGS="$CFLAGS -Wdeclaration-after-statement"]) 248b7579f77SDag-Erling Smørgrav AC_DEFINE([UNBOUND_DEBUG], [], [define this to enable debug checks.]) 249b7579f77SDag-Erling Smørgrav ;; 250b7579f77SDag-Erling Smørgrav no|*) 251b7579f77SDag-Erling Smørgrav # nothing to do. 252b7579f77SDag-Erling Smørgrav ;; 253b7579f77SDag-Erling Smørgravesac 254b7579f77SDag-Erling SmørgravACX_CHECK_FLTO 255b75612f8SDag-Erling SmørgravACX_CHECK_PIE 256b75612f8SDag-Erling SmørgravACX_CHECK_RELRO_NOW 257b7579f77SDag-Erling Smørgrav 258b7579f77SDag-Erling SmørgravAC_C_INLINE 259b7579f77SDag-Erling SmørgravACX_CHECK_FORMAT_ATTRIBUTE 260b7579f77SDag-Erling SmørgravACX_CHECK_UNUSED_ATTRIBUTE 261b7579f77SDag-Erling Smørgrav 262e2d15004SDag-Erling SmørgravAC_DEFUN([CHECK_WEAK_ATTRIBUTE], 263e2d15004SDag-Erling Smørgrav[AC_REQUIRE([AC_PROG_CC]) 264e2d15004SDag-Erling SmørgravAC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "weak" attribute) 265e2d15004SDag-Erling SmørgravAC_CACHE_VAL(ac_cv_c_weak_attribute, 266e2d15004SDag-Erling Smørgrav[ac_cv_c_weak_attribute=no 267e2d15004SDag-Erling SmørgravAC_TRY_COMPILE( 268e2d15004SDag-Erling Smørgrav[ #include <stdio.h> 269e2d15004SDag-Erling Smørgrav__attribute__((weak)) void f(int x) { printf("%d", x); } 270e2d15004SDag-Erling Smørgrav], [ 271e2d15004SDag-Erling Smørgrav f(1); 272e2d15004SDag-Erling Smørgrav], 273e2d15004SDag-Erling Smørgrav[ac_cv_c_weak_attribute="yes"], 274e2d15004SDag-Erling Smørgrav[ac_cv_c_weak_attribute="no"]) 275e2d15004SDag-Erling Smørgrav]) 276e2d15004SDag-Erling Smørgrav 277e2d15004SDag-Erling SmørgravAC_MSG_RESULT($ac_cv_c_weak_attribute) 278e2d15004SDag-Erling Smørgravif test $ac_cv_c_weak_attribute = yes; then 279e2d15004SDag-Erling Smørgrav AC_DEFINE(HAVE_ATTR_WEAK, 1, [Whether the C compiler accepts the "weak" attribute]) 280e2d15004SDag-Erling Smørgravfi 281e2d15004SDag-Erling Smørgrav])dnl End of CHECK_WEAK_ATTRIBUTE 282e2d15004SDag-Erling Smørgrav 283e2d15004SDag-Erling SmørgravCHECK_WEAK_ATTRIBUTE 284e2d15004SDag-Erling Smørgrav 285b7579f77SDag-Erling Smørgravif test "$srcdir" != "."; then 286b7579f77SDag-Erling Smørgrav CPPFLAGS="$CPPFLAGS -I$srcdir" 287b7579f77SDag-Erling Smørgravfi 288b7579f77SDag-Erling Smørgrav 289b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_YYLEX_DESTROY], [ 290b7579f77SDag-Erling Smørgrav AC_MSG_CHECKING([for yylex_destroy]) 291b7579f77SDag-Erling Smørgrav if echo %% | $LEX -t 2>&1 | grep yylex_destroy >/dev/null 2>&1; then 292b7579f77SDag-Erling Smørgrav AC_DEFINE(LEX_HAS_YYLEX_DESTROY, 1, [if lex has yylex_destroy]) 293b7579f77SDag-Erling Smørgrav AC_MSG_RESULT(yes) 294b7579f77SDag-Erling Smørgrav else AC_MSG_RESULT(no); fi 295b7579f77SDag-Erling Smørgrav]) 296b7579f77SDag-Erling Smørgrav 297b7579f77SDag-Erling SmørgravAC_PROG_LEX 298b7579f77SDag-Erling SmørgravACX_YYLEX_DESTROY 299b7579f77SDag-Erling SmørgravAC_PROG_YACC 300b7579f77SDag-Erling SmørgravAC_CHECK_PROG(doxygen, doxygen, doxygen) 301b7579f77SDag-Erling SmørgravAC_CHECK_TOOL(STRIP, strip) 302b7579f77SDag-Erling SmørgravACX_LIBTOOL_C_ONLY 303b7579f77SDag-Erling Smørgrav 304b7579f77SDag-Erling Smørgrav# Checks for header files. 305f61ef7f6SDag-Erling SmørgravAC_CHECK_HEADERS([stdarg.h stdbool.h netinet/in.h netinet/tcp.h sys/param.h sys/socket.h sys/un.h sys/uio.h sys/resource.h arpa/inet.h syslog.h netdb.h sys/wait.h pwd.h glob.h grp.h login_cap.h winsock2.h ws2tcpip.h endian.h],,, [AC_INCLUDES_DEFAULT]) 306b7579f77SDag-Erling Smørgrav 307b7579f77SDag-Erling Smørgrav# check for types. 308b7579f77SDag-Erling Smørgrav# Using own tests for int64* because autoconf builtin only give 32bit. 309b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(int8_t, signed char) 310b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(int16_t, short) 311b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(int32_t, int) 312b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(int64_t, long long) 313b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(uint8_t, unsigned char) 314b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(uint16_t, unsigned short) 315b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(uint32_t, unsigned int) 316b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(uint64_t, unsigned long long) 317b7579f77SDag-Erling SmørgravAC_TYPE_SIZE_T 318b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(ssize_t, int) 319b7579f77SDag-Erling SmørgravAC_TYPE_UID_T 320b7579f77SDag-Erling SmørgravAC_TYPE_PID_T 321b7579f77SDag-Erling SmørgravAC_TYPE_OFF_T 322b7579f77SDag-Erling SmørgravACX_TYPE_U_CHAR 323b7579f77SDag-Erling SmørgravACX_TYPE_RLIM_T 324b7579f77SDag-Erling SmørgravACX_TYPE_SOCKLEN_T 325b7579f77SDag-Erling SmørgravACX_TYPE_IN_ADDR_T 326b7579f77SDag-Erling SmørgravACX_TYPE_IN_PORT_T 327b7579f77SDag-Erling SmørgravACX_CHECK_MEMCMP_SIGNED 328b7579f77SDag-Erling Smørgrav 32917d15b25SDag-Erling SmørgravAC_CHECK_SIZEOF(time_t,,[ 33017d15b25SDag-Erling SmørgravAC_INCLUDES_DEFAULT 33117d15b25SDag-Erling Smørgrav#ifdef TIME_WITH_SYS_TIME 33217d15b25SDag-Erling Smørgrav# include <sys/time.h> 33317d15b25SDag-Erling Smørgrav# include <time.h> 33417d15b25SDag-Erling Smørgrav#else 33517d15b25SDag-Erling Smørgrav# ifdef HAVE_SYS_TIME_H 33617d15b25SDag-Erling Smørgrav# include <sys/time.h> 33717d15b25SDag-Erling Smørgrav# else 33817d15b25SDag-Erling Smørgrav# include <time.h> 33917d15b25SDag-Erling Smørgrav# endif 34017d15b25SDag-Erling Smørgrav#endif 34117d15b25SDag-Erling Smørgrav]) 34217d15b25SDag-Erling Smørgrav 343b7579f77SDag-Erling Smørgrav# add option to disable the evil rpath 344b7579f77SDag-Erling SmørgravACX_ARG_RPATH 345b7579f77SDag-Erling SmørgravAC_SUBST(RUNTIME_PATH) 346b7579f77SDag-Erling Smørgrav 347b7579f77SDag-Erling Smørgrav# check to see if libraries are needed for these functions. 348b7579f77SDag-Erling SmørgravAC_SEARCH_LIBS([inet_pton], [nsl]) 349b7579f77SDag-Erling SmørgravAC_SEARCH_LIBS([socket], [socket]) 350b7579f77SDag-Erling Smørgrav 351b7579f77SDag-Erling Smørgrav# check wether strptime also works 352b7579f77SDag-Erling SmørgravAC_DEFUN([AC_CHECK_STRPTIME_WORKS], 353b7579f77SDag-Erling Smørgrav[AC_REQUIRE([AC_PROG_CC]) 354b7579f77SDag-Erling SmørgravAC_MSG_CHECKING(whether strptime works) 355b7579f77SDag-Erling Smørgravif test c${cross_compiling} = cno; then 356b7579f77SDag-Erling SmørgravAC_RUN_IFELSE([AC_LANG_SOURCE([[ 357ff825849SDag-Erling Smørgrav#define _XOPEN_SOURCE 600 358b7579f77SDag-Erling Smørgrav#include <time.h> 359b7579f77SDag-Erling Smørgravint main(void) { struct tm tm; char *res; 360b7579f77SDag-Erling Smørgravres = strptime("2010-07-15T00:00:00+00:00", "%t%Y%t-%t%m%t-%t%d%tT%t%H%t:%t%M%t:%t%S%t", &tm); 361b7579f77SDag-Erling Smørgravif (!res) return 2; 362b7579f77SDag-Erling Smørgravres = strptime("20070207111842", "%Y%m%d%H%M%S", &tm); 363b7579f77SDag-Erling Smørgravif (!res) return 1; return 0; } 364b7579f77SDag-Erling Smørgrav]])] , [eval "ac_cv_c_strptime_works=yes"], [eval "ac_cv_c_strptime_works=no"]) 365b7579f77SDag-Erling Smørgravelse 366b7579f77SDag-Erling Smørgraveval "ac_cv_c_strptime_works=maybe" 367b7579f77SDag-Erling Smørgravfi 368b7579f77SDag-Erling SmørgravAC_MSG_RESULT($ac_cv_c_strptime_works) 369b7579f77SDag-Erling Smørgravif test $ac_cv_c_strptime_works = no; then 370b7579f77SDag-Erling SmørgravAC_LIBOBJ(strptime) 371b7579f77SDag-Erling Smørgravelse 372b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED([STRPTIME_WORKS], 1, [use default strptime.]) 373b7579f77SDag-Erling Smørgravfi 374b7579f77SDag-Erling Smørgrav])dnl 375b7579f77SDag-Erling Smørgrav 376b7579f77SDag-Erling Smørgrav# check some functions of the OS before linking libs (while still runnable). 377b7579f77SDag-Erling SmørgravAC_FUNC_CHOWN 378b7579f77SDag-Erling SmørgravAC_FUNC_FORK 379b7579f77SDag-Erling SmørgravAC_TYPE_SIGNAL 380b7579f77SDag-Erling SmørgravAC_FUNC_FSEEKO 381b7579f77SDag-Erling SmørgravACX_SYS_LARGEFILE 382b7579f77SDag-Erling SmørgravACX_CHECK_NONBLOCKING_BROKEN 383b7579f77SDag-Erling SmørgravACX_MKDIR_ONE_ARG 384b7579f77SDag-Erling SmørgravAC_CHECK_FUNCS([strptime],[AC_CHECK_STRPTIME_WORKS],[AC_LIBOBJ([strptime])]) 385b7579f77SDag-Erling Smørgrav 386b7579f77SDag-Erling Smørgrav# set memory allocation checking if requested 387b7579f77SDag-Erling SmørgravAC_ARG_ENABLE(alloc-checks, AC_HELP_STRING([--enable-alloc-checks], 388b7579f77SDag-Erling Smørgrav [ enable to memory allocation statistics, for debug purposes ]), 389b7579f77SDag-Erling Smørgrav , ) 390b7579f77SDag-Erling SmørgravAC_ARG_ENABLE(alloc-lite, AC_HELP_STRING([--enable-alloc-lite], 391b7579f77SDag-Erling Smørgrav [ enable for lightweight alloc assertions, for debug purposes ]), 392b7579f77SDag-Erling Smørgrav , ) 393b7579f77SDag-Erling SmørgravAC_ARG_ENABLE(alloc-nonregional, AC_HELP_STRING([--enable-alloc-nonregional], 394b7579f77SDag-Erling Smørgrav [ enable nonregional allocs, slow but exposes regional allocations to other memory purifiers, for debug purposes ]), 395b7579f77SDag-Erling Smørgrav , ) 396b7579f77SDag-Erling Smørgravif test x_$enable_alloc_nonregional = x_yes; then 397b7579f77SDag-Erling Smørgrav AC_DEFINE(UNBOUND_ALLOC_NONREGIONAL, 1, [use malloc not regions, for debug use]) 398b7579f77SDag-Erling Smørgravfi 399b7579f77SDag-Erling Smørgravif test x_$enable_alloc_checks = x_yes; then 400b7579f77SDag-Erling Smørgrav AC_DEFINE(UNBOUND_ALLOC_STATS, 1, [use statistics for allocs and frees, for debug use]) 401b7579f77SDag-Erling Smørgravelse 402b7579f77SDag-Erling Smørgrav if test x_$enable_alloc_lite = x_yes; then 403b7579f77SDag-Erling Smørgrav AC_DEFINE(UNBOUND_ALLOC_LITE, 1, [use to enable lightweight alloc assertions, for debug use]) 404b7579f77SDag-Erling Smørgrav else 405b7579f77SDag-Erling Smørgrav ACX_FUNC_MALLOC([unbound]) 406b7579f77SDag-Erling Smørgrav fi 407b7579f77SDag-Erling Smørgravfi 408b7579f77SDag-Erling Smørgrav 409b7579f77SDag-Erling Smørgrav# check windows threads (we use them, not pthreads, on windows). 410b7579f77SDag-Erling Smørgravif test "$on_mingw" = "yes"; then 411b7579f77SDag-Erling Smørgrav# check windows threads 412b7579f77SDag-Erling Smørgrav AC_CHECK_HEADERS([windows.h],,, [AC_INCLUDES_DEFAULT]) 413b7579f77SDag-Erling Smørgrav AC_MSG_CHECKING([for CreateThread]) 414b7579f77SDag-Erling Smørgrav AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ 415b7579f77SDag-Erling Smørgrav#ifdef HAVE_WINDOWS_H 416b7579f77SDag-Erling Smørgrav#include <windows.h> 417b7579f77SDag-Erling Smørgrav#endif 418b7579f77SDag-Erling Smørgrav], [ 419b7579f77SDag-Erling Smørgrav HANDLE t = CreateThread(NULL, 0, NULL, NULL, 0, NULL); 420b7579f77SDag-Erling Smørgrav])], 421b7579f77SDag-Erling Smørgrav AC_MSG_RESULT(yes) 422b7579f77SDag-Erling Smørgrav AC_DEFINE(HAVE_WINDOWS_THREADS, 1, [Using Windows threads]) 423b7579f77SDag-Erling Smørgrav, 424b7579f77SDag-Erling Smørgrav AC_MSG_RESULT(no) 425b7579f77SDag-Erling Smørgrav) 426b7579f77SDag-Erling Smørgrav 427b7579f77SDag-Erling Smørgravelse 428b7579f77SDag-Erling Smørgrav# not on mingw, check thread libraries. 429b7579f77SDag-Erling Smørgrav 430b7579f77SDag-Erling Smørgrav# check for thread library. 431b7579f77SDag-Erling Smørgrav# check this first, so that the pthread lib does not get linked in via 432b7579f77SDag-Erling Smørgrav# libssl or libpython, and thus distorts the tests, and we end up using 433b7579f77SDag-Erling Smørgrav# the non-threadsafe C libraries. 434b7579f77SDag-Erling SmørgravAC_ARG_WITH(pthreads, AC_HELP_STRING([--with-pthreads], 435b7579f77SDag-Erling Smørgrav [use pthreads library, or --without-pthreads to disable threading support.]), 436b7579f77SDag-Erling Smørgrav [ ],[ withval="yes" ]) 437b7579f77SDag-Erling Smørgravub_have_pthreads=no 438b7579f77SDag-Erling Smørgravif test x_$withval != x_no; then 43917d15b25SDag-Erling Smørgrav AX_PTHREAD([ 440b7579f77SDag-Erling Smørgrav AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]) 441b7579f77SDag-Erling Smørgrav LIBS="$PTHREAD_LIBS $LIBS" 442b7579f77SDag-Erling Smørgrav CFLAGS="$CFLAGS $PTHREAD_CFLAGS" 443b7579f77SDag-Erling Smørgrav CC="$PTHREAD_CC" 444b7579f77SDag-Erling Smørgrav ub_have_pthreads=yes 445b7579f77SDag-Erling Smørgrav AC_CHECK_TYPES([pthread_spinlock_t, pthread_rwlock_t],,,[#include <pthread.h>]) 446f61ef7f6SDag-Erling Smørgrav 447f61ef7f6SDag-Erling Smørgrav if echo "$CFLAGS" | $GREP -e "-pthread" >/dev/null; then 448f61ef7f6SDag-Erling Smørgrav AC_MSG_CHECKING([if -pthread unused during linking]) 449f61ef7f6SDag-Erling Smørgrav # catch clang warning 'argument unused during compilation' 450f61ef7f6SDag-Erling Smørgrav AC_LANG_CONFTEST([AC_LANG_SOURCE(AC_INCLUDES_DEFAULT 451f61ef7f6SDag-Erling Smørgrav[[ 452f61ef7f6SDag-Erling Smørgravint main(void) {return 0;} 453f61ef7f6SDag-Erling Smørgrav]])]) 454f61ef7f6SDag-Erling Smørgrav pthread_unused="yes" 455f61ef7f6SDag-Erling Smørgrav # first compile 456f61ef7f6SDag-Erling Smørgrav echo "$CC $CFLAGS -c conftest.c -o conftest.o" >&AS_MESSAGE_LOG_FD 457f61ef7f6SDag-Erling Smørgrav $CC $CFLAGS -c conftest.c -o conftest.o 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD 458f61ef7f6SDag-Erling Smørgrav if test $? = 0; then 459f61ef7f6SDag-Erling Smørgrav # then link 460f61ef7f6SDag-Erling Smørgrav echo "$CC $CFLAGS -Werror $LDFLAGS $LIBS -o conftest contest.o" >&AS_MESSAGE_LOG_FD 461f61ef7f6SDag-Erling Smørgrav $CC $CFLAGS -Werror $LDFLAGS $LIBS -o conftest conftest.o 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD 462f61ef7f6SDag-Erling Smørgrav if test $? -ne 0; then 463f61ef7f6SDag-Erling Smørgrav AC_MSG_RESULT(yes) 464f61ef7f6SDag-Erling Smørgrav CFLAGS=`echo "$CFLAGS" | sed -e 's/-pthread//'` 465f61ef7f6SDag-Erling Smørgrav PTHREAD_CFLAGS_ONLY="-pthread" 466f61ef7f6SDag-Erling Smørgrav AC_SUBST(PTHREAD_CFLAGS_ONLY) 467f61ef7f6SDag-Erling Smørgrav else 468f61ef7f6SDag-Erling Smørgrav AC_MSG_RESULT(no) 469f61ef7f6SDag-Erling Smørgrav fi 470f61ef7f6SDag-Erling Smørgrav else 471f61ef7f6SDag-Erling Smørgrav AC_MSG_RESULT(no) 472f61ef7f6SDag-Erling Smørgrav fi # endif cc successful 473f61ef7f6SDag-Erling Smørgrav rm -f conftest conftest.c conftest.o 474f61ef7f6SDag-Erling Smørgrav fi # endif -pthread in CFLAGS 475f61ef7f6SDag-Erling Smørgrav 476b7579f77SDag-Erling Smørgrav ]) 477b7579f77SDag-Erling Smørgravfi 478b7579f77SDag-Erling Smørgrav 479b7579f77SDag-Erling Smørgrav# check solaris thread library 480b7579f77SDag-Erling SmørgravAC_ARG_WITH(solaris-threads, AC_HELP_STRING([--with-solaris-threads], 481b7579f77SDag-Erling Smørgrav [use solaris native thread library.]), [ ],[ withval="no" ]) 482b7579f77SDag-Erling Smørgravub_have_sol_threads=no 483b7579f77SDag-Erling Smørgravif test x_$withval != x_no; then 484b7579f77SDag-Erling Smørgrav if test x_$ub_have_pthreads != x_no; then 485b7579f77SDag-Erling Smørgrav AC_WARN([Have pthreads already, ignoring --with-solaris-threads]) 486b7579f77SDag-Erling Smørgrav else 487b7579f77SDag-Erling Smørgrav AC_SEARCH_LIBS(thr_create, [thread], 488b7579f77SDag-Erling Smørgrav [ 489b7579f77SDag-Erling Smørgrav AC_DEFINE(HAVE_SOLARIS_THREADS, 1, [Using Solaris threads]) 490b7579f77SDag-Erling Smørgrav 491b7579f77SDag-Erling Smørgrav ACX_CHECK_COMPILER_FLAG(mt, [CFLAGS="$CFLAGS -mt"], 492b7579f77SDag-Erling Smørgrav [CFLAGS="$CFLAGS -D_REENTRANT"]) 493b7579f77SDag-Erling Smørgrav ub_have_sol_threads=yes 494b7579f77SDag-Erling Smørgrav ] , [ 495b7579f77SDag-Erling Smørgrav AC_ERROR([no solaris threads found.]) 496b7579f77SDag-Erling Smørgrav ]) 497b7579f77SDag-Erling Smørgrav fi 498b7579f77SDag-Erling Smørgravfi 499b7579f77SDag-Erling Smørgrav 500b7579f77SDag-Erling Smørgravfi # end of non-mingw check of thread libraries 501b7579f77SDag-Erling Smørgrav 502b7579f77SDag-Erling Smørgrav# Check for PyUnbound 503b7579f77SDag-Erling SmørgravAC_ARG_WITH(pyunbound, 504b7579f77SDag-Erling Smørgrav AC_HELP_STRING([--with-pyunbound], 505b7579f77SDag-Erling Smørgrav [build PyUnbound, or --without-pyunbound to skip it. (default=no)]), 506b7579f77SDag-Erling Smørgrav [], [ withval="no" ]) 507b7579f77SDag-Erling Smørgrav 508b7579f77SDag-Erling Smørgravub_test_python=no 509b7579f77SDag-Erling Smørgravub_with_pyunbound=no 510b7579f77SDag-Erling Smørgravif test x_$withval != x_no; then 511b7579f77SDag-Erling Smørgrav ub_with_pyunbound=yes 512b7579f77SDag-Erling Smørgrav ub_test_python=yes 513b7579f77SDag-Erling Smørgravfi 514b7579f77SDag-Erling Smørgrav 515b7579f77SDag-Erling Smørgrav# Check for Python module 516b7579f77SDag-Erling SmørgravAC_ARG_WITH(pythonmodule, 517b7579f77SDag-Erling Smørgrav AC_HELP_STRING([--with-pythonmodule], 518b7579f77SDag-Erling Smørgrav [build Python module, or --without-pythonmodule to disable script engine. (default=no)]), 519b7579f77SDag-Erling Smørgrav [], [ withval="no" ]) 520b7579f77SDag-Erling Smørgrav 521b7579f77SDag-Erling Smørgravub_with_pythonmod=no 522b7579f77SDag-Erling Smørgravif test x_$withval != x_no; then 523b7579f77SDag-Erling Smørgrav ub_with_pythonmod=yes 524b7579f77SDag-Erling Smørgrav ub_test_python=yes 525b7579f77SDag-Erling Smørgravfi 526b7579f77SDag-Erling Smørgrav 527b7579f77SDag-Erling Smørgrav# Check for Python & SWIG only on PyUnbound or PyModule 528b7579f77SDag-Erling Smørgravif test x_$ub_test_python != x_no; then 529b7579f77SDag-Erling Smørgrav 530b7579f77SDag-Erling Smørgrav # Check for Python 531b7579f77SDag-Erling Smørgrav ub_have_python=no 532b7579f77SDag-Erling Smørgrav ac_save_LIBS="$LIBS" dnl otherwise AC_PYTHON_DEVEL thrashes $LIBS 533b7579f77SDag-Erling Smørgrav AC_PYTHON_DEVEL 534b7579f77SDag-Erling Smørgrav if test ! -z "$PYTHON_VERSION"; then 535ff825849SDag-Erling Smørgrav if test `$PYTHON -c "print('$PYTHON_VERSION' >= '2.4.0')"` = "False"; then 536b7579f77SDag-Erling Smørgrav AC_ERROR([Python version >= 2.4.0 is required]) 537b7579f77SDag-Erling Smørgrav fi 538b7579f77SDag-Erling Smørgrav 539b75612f8SDag-Erling Smørgrav [PY_MAJOR_VERSION="`$PYTHON -c \"import sys; print(sys.version_info[0])\"`"] 54009a3aaf3SDag-Erling Smørgrav AC_SUBST(PY_MAJOR_VERSION) 541b7579f77SDag-Erling Smørgrav # Have Python 542b7579f77SDag-Erling Smørgrav AC_DEFINE(HAVE_PYTHON,1,[Define if you have Python libraries and header files.]) 543b7579f77SDag-Erling Smørgrav LIBS="$PYTHON_LDFLAGS $LIBS" 544b7579f77SDag-Erling Smørgrav CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS" 545b7579f77SDag-Erling Smørgrav ub_have_python=yes 546b7579f77SDag-Erling Smørgrav 547b7579f77SDag-Erling Smørgrav # Check for SWIG 548b7579f77SDag-Erling Smørgrav ub_have_swig=no 549b7579f77SDag-Erling Smørgrav AC_PROG_SWIG 550b7579f77SDag-Erling Smørgrav AC_MSG_CHECKING(SWIG) 551b7579f77SDag-Erling Smørgrav if test ! -x "$SWIG"; then 552b7579f77SDag-Erling Smørgrav AC_ERROR([failed to find swig tool, install it, or do not build Python module and PyUnbound]) 553b7579f77SDag-Erling Smørgrav else 554b7579f77SDag-Erling Smørgrav AC_DEFINE(HAVE_SWIG, 1, [Define if you have Swig libraries and header files.]) 555b7579f77SDag-Erling Smørgrav AC_SUBST(swig, "$SWIG") 556b7579f77SDag-Erling Smørgrav AC_MSG_RESULT(present) 557b7579f77SDag-Erling Smørgrav 558b7579f77SDag-Erling Smørgrav # If have Python & SWIG 559b7579f77SDag-Erling Smørgrav # Declare PythonMod 560b7579f77SDag-Erling Smørgrav if test x_$ub_with_pythonmod != x_no; then 561b7579f77SDag-Erling Smørgrav AC_DEFINE(WITH_PYTHONMODULE, 1, [Define if you want Python module.]) 562b7579f77SDag-Erling Smørgrav WITH_PYTHONMODULE=yes 563b7579f77SDag-Erling Smørgrav AC_SUBST(WITH_PYTHONMODULE) 564b7579f77SDag-Erling Smørgrav PYTHONMOD_OBJ="pythonmod.lo pythonmod_utils.lo" 565b7579f77SDag-Erling Smørgrav AC_SUBST(PYTHONMOD_OBJ) 566b7579f77SDag-Erling Smørgrav PYTHONMOD_HEADER='$(srcdir)/pythonmod/pythonmod.h' 567b7579f77SDag-Erling Smørgrav AC_SUBST(PYTHONMOD_HEADER) 568b7579f77SDag-Erling Smørgrav PYTHONMOD_INSTALL=pythonmod-install 569b7579f77SDag-Erling Smørgrav AC_SUBST(PYTHONMOD_INSTALL) 570b7579f77SDag-Erling Smørgrav PYTHONMOD_UNINSTALL=pythonmod-uninstall 571b7579f77SDag-Erling Smørgrav AC_SUBST(PYTHONMOD_UNINSTALL) 572b7579f77SDag-Erling Smørgrav fi 573b7579f77SDag-Erling Smørgrav 574b7579f77SDag-Erling Smørgrav # Declare PyUnbound 575b7579f77SDag-Erling Smørgrav if test x_$ub_with_pyunbound != x_no; then 576b7579f77SDag-Erling Smørgrav AC_DEFINE(WITH_PYUNBOUND, 1, [Define if you want PyUnbound.]) 577b7579f77SDag-Erling Smørgrav WITH_PYUNBOUND=yes 578b7579f77SDag-Erling Smørgrav AC_SUBST(WITH_PYUNBOUND) 579b7579f77SDag-Erling Smørgrav PYUNBOUND_OBJ="libunbound_wrap.lo" 580b7579f77SDag-Erling Smørgrav AC_SUBST(PYUNBOUND_OBJ) 581b7579f77SDag-Erling Smørgrav PYUNBOUND_TARGET="_unbound.la" 582b7579f77SDag-Erling Smørgrav AC_SUBST(PYUNBOUND_TARGET) 583b7579f77SDag-Erling Smørgrav PYUNBOUND_INSTALL=pyunbound-install 584b7579f77SDag-Erling Smørgrav AC_SUBST(PYUNBOUND_INSTALL) 585b7579f77SDag-Erling Smørgrav PYUNBOUND_UNINSTALL=pyunbound-uninstall 586b7579f77SDag-Erling Smørgrav AC_SUBST(PYUNBOUND_UNINSTALL) 587b7579f77SDag-Erling Smørgrav fi 588b7579f77SDag-Erling Smørgrav fi 589b7579f77SDag-Erling Smørgrav else 590b7579f77SDag-Erling Smørgrav AC_MSG_RESULT([*** Python libraries not found, won't build PythonMod or PyUnbound ***]) 591b7579f77SDag-Erling Smørgrav ub_with_pyunbound=no 592b7579f77SDag-Erling Smørgrav ub_with_pythonmod=no 593b7579f77SDag-Erling Smørgrav fi 594b7579f77SDag-Erling Smørgravfi 595b7579f77SDag-Erling Smørgrav 596b7579f77SDag-Erling Smørgravif test "`uname`" = "NetBSD"; then 597b7579f77SDag-Erling Smørgrav NETBSD_LINTFLAGS='"-D__RENAME(x)=" -D_NETINET_IN_H_' 598b7579f77SDag-Erling Smørgrav AC_SUBST(NETBSD_LINTFLAGS) 599b7579f77SDag-Erling Smørgravfi 600b7579f77SDag-Erling SmørgravCONFIG_DATE=`date +%Y%m%d` 601b7579f77SDag-Erling SmørgravAC_SUBST(CONFIG_DATE) 602b7579f77SDag-Erling Smørgrav 603b7579f77SDag-Erling Smørgrav# Checks for libraries. 6048ed2b524SDag-Erling Smørgrav 6058ed2b524SDag-Erling Smørgrav# libnss 6068ed2b524SDag-Erling SmørgravUSE_NSS="no" 6078ed2b524SDag-Erling SmørgravAC_ARG_WITH([nss], AC_HELP_STRING([--with-nss=path], 6088ed2b524SDag-Erling Smørgrav [use libnss instead of openssl, installed at path.]), 6098ed2b524SDag-Erling Smørgrav [ 6108ed2b524SDag-Erling Smørgrav USE_NSS="yes" 6118ed2b524SDag-Erling Smørgrav AC_DEFINE(HAVE_NSS, 1, [Use libnss for crypto]) 6128ed2b524SDag-Erling Smørgrav if test "$withval" != "" -a "$withval" != "yes"; then 6138ed2b524SDag-Erling Smørgrav CPPFLAGS="$CPPFLAGS -I$withval/include/nss3" 6148ed2b524SDag-Erling Smørgrav LDFLAGS="$LDFLAGS -L$withval/lib" 6158ed2b524SDag-Erling Smørgrav ACX_RUNTIME_PATH_ADD([$withval/lib]) 6168ed2b524SDag-Erling Smørgrav CPPFLAGS="-I$withval/include/nspr4 $CPPFLAGS" 6178ed2b524SDag-Erling Smørgrav else 6188ed2b524SDag-Erling Smørgrav CPPFLAGS="$CPPFLAGS -I/usr/include/nss3" 6198ed2b524SDag-Erling Smørgrav CPPFLAGS="-I/usr/include/nspr4 $CPPFLAGS" 6208ed2b524SDag-Erling Smørgrav fi 6218ed2b524SDag-Erling Smørgrav LIBS="$LIBS -lnss3 -lnspr4" 62205ab2901SDag-Erling Smørgrav SSLLIB="" 62305ab2901SDag-Erling Smørgrav ] 62405ab2901SDag-Erling Smørgrav) 62505ab2901SDag-Erling Smørgrav 62605ab2901SDag-Erling Smørgrav# libnettle 62705ab2901SDag-Erling SmørgravUSE_NETTLE="no" 62805ab2901SDag-Erling SmørgravAC_ARG_WITH([nettle], AC_HELP_STRING([--with-nettle=path], 62905ab2901SDag-Erling Smørgrav [use libnettle as crypto library, installed at path.]), 63005ab2901SDag-Erling Smørgrav [ 63105ab2901SDag-Erling Smørgrav USE_NETTLE="yes" 63205ab2901SDag-Erling Smørgrav AC_DEFINE(HAVE_NETTLE, 1, [Use libnettle for crypto]) 633*b5663de9SDag-Erling Smørgrav AC_CHECK_HEADERS([nettle/dsa-compat.h],,, [AC_INCLUDES_DEFAULT]) 63405ab2901SDag-Erling Smørgrav if test "$withval" != "" -a "$withval" != "yes"; then 63505ab2901SDag-Erling Smørgrav CPPFLAGS="$CPPFLAGS -I$withval/include/nettle" 63605ab2901SDag-Erling Smørgrav LDFLAGS="$LDFLAGS -L$withval/lib" 63705ab2901SDag-Erling Smørgrav ACX_RUNTIME_PATH_ADD([$withval/lib]) 63805ab2901SDag-Erling Smørgrav else 63905ab2901SDag-Erling Smørgrav CPPFLAGS="$CPPFLAGS -I/usr/include/nettle" 64005ab2901SDag-Erling Smørgrav fi 64105ab2901SDag-Erling Smørgrav LIBS="$LIBS -lhogweed -lnettle -lgmp" 64205ab2901SDag-Erling Smørgrav SSLLIB="" 6438ed2b524SDag-Erling Smørgrav ] 6448ed2b524SDag-Erling Smørgrav) 6458ed2b524SDag-Erling Smørgrav 6468ed2b524SDag-Erling Smørgrav# openssl 64705ab2901SDag-Erling Smørgravif test $USE_NSS = "no" -a $USE_NETTLE = "no"; then 648b7579f77SDag-Erling SmørgravACX_WITH_SSL 649b7579f77SDag-Erling SmørgravACX_LIB_SSL 65005ab2901SDag-Erling SmørgravSSLLIB="-lssl" 651*b5663de9SDag-Erling Smørgrav 652*b5663de9SDag-Erling Smørgrav# check if -lcrypt32 is needed because CAPIENG needs that. (on windows) 653*b5663de9SDag-Erling SmørgravBAKLIBS="$LIBS" 654*b5663de9SDag-Erling SmørgravLIBS="-lssl $LIBS" 655*b5663de9SDag-Erling SmørgravAC_MSG_CHECKING([if libssl needs -lcrypt32]) 656*b5663de9SDag-Erling SmørgravAC_TRY_LINK_FUNC([HMAC_Update], [ 657*b5663de9SDag-Erling Smørgrav AC_MSG_RESULT([no]) 658*b5663de9SDag-Erling Smørgrav LIBS="$BAKLIBS" 659*b5663de9SDag-Erling Smørgrav], [ 660*b5663de9SDag-Erling Smørgrav AC_MSG_RESULT([yes]) 661*b5663de9SDag-Erling Smørgrav LIBS="$BAKLIBS" 662*b5663de9SDag-Erling Smørgrav LIBS="$LIBS -lcrypt32" 663*b5663de9SDag-Erling Smørgrav]) 664*b5663de9SDag-Erling Smørgrav 665ff825849SDag-Erling SmørgravAC_MSG_CHECKING([for LibreSSL]) 666b75612f8SDag-Erling Smørgravif grep VERSION_TEXT $ssldir/include/openssl/opensslv.h | grep "LibreSSL" >/dev/null; then 667ff825849SDag-Erling Smørgrav AC_MSG_RESULT([yes]) 668ff825849SDag-Erling Smørgrav AC_DEFINE([HAVE_LIBRESSL], [1], [Define if we have LibreSSL]) 669ff825849SDag-Erling Smørgrav # libressl provides these compat functions, but they may also be 670ff825849SDag-Erling Smørgrav # declared by the OS in libc. See if they have been declared. 67109a3aaf3SDag-Erling Smørgrav AC_CHECK_DECLS([strlcpy,strlcat,arc4random,arc4random_uniform,reallocarray]) 672ff825849SDag-Erling Smørgravelse 673ff825849SDag-Erling Smørgrav AC_MSG_RESULT([no]) 674ff825849SDag-Erling Smørgravfi 675*b5663de9SDag-Erling SmørgravAC_CHECK_HEADERS([openssl/conf.h openssl/engine.h openssl/bn.h openssl/dh.h openssl/dsa.h openssl/rsa.h],,, [AC_INCLUDES_DEFAULT]) 676*b5663de9SDag-Erling SmørgravAC_CHECK_FUNCS([OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup]) 677*b5663de9SDag-Erling Smørgrav 678*b5663de9SDag-Erling Smørgrav# these check_funcs need -lssl 679*b5663de9SDag-Erling SmørgravBAKLIBS="$LIBS" 680*b5663de9SDag-Erling SmørgravLIBS="-lssl $LIBS" 681*b5663de9SDag-Erling SmørgravAC_CHECK_FUNCS([OPENSSL_init_ssl]) 682*b5663de9SDag-Erling SmørgravLIBS="$BAKLIBS" 683*b5663de9SDag-Erling Smørgrav 684b75612f8SDag-Erling SmørgravAC_CHECK_DECLS([SSL_COMP_get_compression_methods,sk_SSL_COMP_pop_free,SSL_CTX_set_ecdh_auto], [], [], [ 685b7579f77SDag-Erling SmørgravAC_INCLUDES_DEFAULT 686b7579f77SDag-Erling Smørgrav#ifdef HAVE_OPENSSL_ERR_H 687b7579f77SDag-Erling Smørgrav#include <openssl/err.h> 688b7579f77SDag-Erling Smørgrav#endif 689b7579f77SDag-Erling Smørgrav 690b7579f77SDag-Erling Smørgrav#ifdef HAVE_OPENSSL_RAND_H 691b7579f77SDag-Erling Smørgrav#include <openssl/rand.h> 692b7579f77SDag-Erling Smørgrav#endif 693b7579f77SDag-Erling Smørgrav 694b7579f77SDag-Erling Smørgrav#ifdef HAVE_OPENSSL_CONF_H 695b7579f77SDag-Erling Smørgrav#include <openssl/conf.h> 696b7579f77SDag-Erling Smørgrav#endif 697b7579f77SDag-Erling Smørgrav 698b7579f77SDag-Erling Smørgrav#ifdef HAVE_OPENSSL_ENGINE_H 699b7579f77SDag-Erling Smørgrav#include <openssl/engine.h> 700b7579f77SDag-Erling Smørgrav#endif 701b7579f77SDag-Erling Smørgrav#include <openssl/ssl.h> 702b7579f77SDag-Erling Smørgrav#include <openssl/evp.h> 703b7579f77SDag-Erling Smørgrav]) 7048ed2b524SDag-Erling Smørgravfi 70505ab2901SDag-Erling SmørgravAC_SUBST(SSLLIB) 7068ed2b524SDag-Erling Smørgrav 707b7579f77SDag-Erling Smørgrav 708b7579f77SDag-Erling SmørgravAC_ARG_ENABLE(sha2, AC_HELP_STRING([--disable-sha2], [Disable SHA256 and SHA512 RRSIG support])) 709b7579f77SDag-Erling Smørgravcase "$enable_sha2" in 710b7579f77SDag-Erling Smørgrav no) 711b7579f77SDag-Erling Smørgrav ;; 712b7579f77SDag-Erling Smørgrav yes|*) 713b7579f77SDag-Erling Smørgrav AC_DEFINE([USE_SHA2], [1], [Define this to enable SHA256 and SHA512 support.]) 714b7579f77SDag-Erling Smørgrav ;; 715b7579f77SDag-Erling Smørgravesac 716b7579f77SDag-Erling Smørgrav 717b7579f77SDag-Erling Smørgrav# check wether gost also works 718b7579f77SDag-Erling SmørgravAC_DEFUN([AC_CHECK_GOST_WORKS], 719b7579f77SDag-Erling Smørgrav[AC_REQUIRE([AC_PROG_CC]) 720b7579f77SDag-Erling SmørgravAC_MSG_CHECKING([if GOST works]) 721b7579f77SDag-Erling Smørgravif test c${cross_compiling} = cno; then 722b7579f77SDag-Erling SmørgravBAKCFLAGS="$CFLAGS" 723b7579f77SDag-Erling Smørgravif test -n "$ssldir"; then 724b7579f77SDag-Erling Smørgrav CFLAGS="$CFLAGS -Wl,-rpath,$ssldir/lib" 725b7579f77SDag-Erling Smørgravfi 726b7579f77SDag-Erling SmørgravAC_RUN_IFELSE([AC_LANG_SOURCE([[ 727b7579f77SDag-Erling Smørgrav#include <string.h> 728b7579f77SDag-Erling Smørgrav#include <openssl/ssl.h> 729b7579f77SDag-Erling Smørgrav#include <openssl/evp.h> 730b7579f77SDag-Erling Smørgrav#include <openssl/engine.h> 731b7579f77SDag-Erling Smørgrav#include <openssl/conf.h> 73217d15b25SDag-Erling Smørgrav/* routine to load gost (from sldns) */ 733b7579f77SDag-Erling Smørgravint load_gost_id(void) 734b7579f77SDag-Erling Smørgrav{ 735b7579f77SDag-Erling Smørgrav static int gost_id = 0; 736b7579f77SDag-Erling Smørgrav const EVP_PKEY_ASN1_METHOD* meth; 737b7579f77SDag-Erling Smørgrav ENGINE* e; 738b7579f77SDag-Erling Smørgrav 739b7579f77SDag-Erling Smørgrav if(gost_id) return gost_id; 740b7579f77SDag-Erling Smørgrav 741b7579f77SDag-Erling Smørgrav /* see if configuration loaded gost implementation from other engine*/ 742b7579f77SDag-Erling Smørgrav meth = EVP_PKEY_asn1_find_str(NULL, "gost2001", -1); 743b7579f77SDag-Erling Smørgrav if(meth) { 744b7579f77SDag-Erling Smørgrav EVP_PKEY_asn1_get0_info(&gost_id, NULL, NULL, NULL, NULL, meth); 745b7579f77SDag-Erling Smørgrav return gost_id; 746b7579f77SDag-Erling Smørgrav } 747b7579f77SDag-Erling Smørgrav 748b7579f77SDag-Erling Smørgrav /* see if engine can be loaded already */ 749b7579f77SDag-Erling Smørgrav e = ENGINE_by_id("gost"); 750b7579f77SDag-Erling Smørgrav if(!e) { 751b7579f77SDag-Erling Smørgrav /* load it ourself, in case statically linked */ 752b7579f77SDag-Erling Smørgrav ENGINE_load_builtin_engines(); 753b7579f77SDag-Erling Smørgrav ENGINE_load_dynamic(); 754b7579f77SDag-Erling Smørgrav e = ENGINE_by_id("gost"); 755b7579f77SDag-Erling Smørgrav } 756b7579f77SDag-Erling Smørgrav if(!e) { 757b7579f77SDag-Erling Smørgrav /* no gost engine in openssl */ 758b7579f77SDag-Erling Smørgrav return 0; 759b7579f77SDag-Erling Smørgrav } 760b7579f77SDag-Erling Smørgrav if(!ENGINE_set_default(e, ENGINE_METHOD_ALL)) { 761b7579f77SDag-Erling Smørgrav ENGINE_finish(e); 762b7579f77SDag-Erling Smørgrav ENGINE_free(e); 763b7579f77SDag-Erling Smørgrav return 0; 764b7579f77SDag-Erling Smørgrav } 765b7579f77SDag-Erling Smørgrav 766b7579f77SDag-Erling Smørgrav meth = EVP_PKEY_asn1_find_str(&e, "gost2001", -1); 767b7579f77SDag-Erling Smørgrav if(!meth) { 768b7579f77SDag-Erling Smørgrav /* algo not found */ 769b7579f77SDag-Erling Smørgrav ENGINE_finish(e); 770b7579f77SDag-Erling Smørgrav ENGINE_free(e); 771b7579f77SDag-Erling Smørgrav return 0; 772b7579f77SDag-Erling Smørgrav } 773b7579f77SDag-Erling Smørgrav EVP_PKEY_asn1_get0_info(&gost_id, NULL, NULL, NULL, NULL, meth); 774b7579f77SDag-Erling Smørgrav return gost_id; 775b7579f77SDag-Erling Smørgrav} 776b7579f77SDag-Erling Smørgravint main(void) { 777b7579f77SDag-Erling Smørgrav EVP_MD_CTX* ctx; 778b7579f77SDag-Erling Smørgrav const EVP_MD* md; 779b7579f77SDag-Erling Smørgrav unsigned char digest[64]; /* its a 256-bit digest, so uses 32 bytes */ 780b7579f77SDag-Erling Smørgrav const char* str = "Hello world"; 781b7579f77SDag-Erling Smørgrav const unsigned char check[] = { 782b7579f77SDag-Erling Smørgrav 0x40 , 0xed , 0xf8 , 0x56 , 0x5a , 0xc5 , 0x36 , 0xe1 , 783b7579f77SDag-Erling Smørgrav 0x33 , 0x7c , 0x7e , 0x87 , 0x62 , 0x1c , 0x42 , 0xe0 , 784b7579f77SDag-Erling Smørgrav 0x17 , 0x1b , 0x5e , 0xce , 0xa8 , 0x46 , 0x65 , 0x4d , 785b7579f77SDag-Erling Smørgrav 0x8d , 0x3e , 0x22 , 0x9b , 0xe1 , 0x30 , 0x19 , 0x9d 786b7579f77SDag-Erling Smørgrav }; 787b7579f77SDag-Erling Smørgrav OPENSSL_config(NULL); 788b7579f77SDag-Erling Smørgrav (void)load_gost_id(); 789b7579f77SDag-Erling Smørgrav md = EVP_get_digestbyname("md_gost94"); 790b7579f77SDag-Erling Smørgrav if(!md) return 1; 791b7579f77SDag-Erling Smørgrav memset(digest, 0, sizeof(digest)); 792b7579f77SDag-Erling Smørgrav ctx = EVP_MD_CTX_create(); 793b7579f77SDag-Erling Smørgrav if(!ctx) return 2; 794b7579f77SDag-Erling Smørgrav if(!EVP_DigestInit_ex(ctx, md, NULL)) return 3; 795b7579f77SDag-Erling Smørgrav if(!EVP_DigestUpdate(ctx, str, 10)) return 4; 796b7579f77SDag-Erling Smørgrav if(!EVP_DigestFinal_ex(ctx, digest, NULL)) return 5; 797b7579f77SDag-Erling Smørgrav /* uncomment to see the hash calculated. 798b7579f77SDag-Erling Smørgrav {int i; 799b7579f77SDag-Erling Smørgrav for(i=0; i<32; i++) 800b7579f77SDag-Erling Smørgrav printf(" %2.2x", (int)digest[i]); 801b7579f77SDag-Erling Smørgrav printf("\n");} 802b7579f77SDag-Erling Smørgrav */ 803b7579f77SDag-Erling Smørgrav if(memcmp(digest, check, sizeof(check)) != 0) 804b7579f77SDag-Erling Smørgrav return 6; 805b7579f77SDag-Erling Smørgrav return 0; 806b7579f77SDag-Erling Smørgrav} 807b7579f77SDag-Erling Smørgrav]])] , [eval "ac_cv_c_gost_works=yes"], [eval "ac_cv_c_gost_works=no"]) 808b7579f77SDag-Erling SmørgravCFLAGS="$BAKCFLAGS" 809b7579f77SDag-Erling Smørgravelse 810b7579f77SDag-Erling Smørgraveval "ac_cv_c_gost_works=maybe" 811b7579f77SDag-Erling Smørgravfi 812b7579f77SDag-Erling SmørgravAC_MSG_RESULT($ac_cv_c_gost_works) 813b7579f77SDag-Erling Smørgrav])dnl 814b7579f77SDag-Erling Smørgrav 815b7579f77SDag-Erling SmørgravAC_ARG_ENABLE(gost, AC_HELP_STRING([--disable-gost], [Disable GOST support])) 816b7579f77SDag-Erling Smørgravuse_gost="no" 81705ab2901SDag-Erling Smørgravif test $USE_NSS = "no" -a $USE_NETTLE = "no"; then 818b7579f77SDag-Erling Smørgravcase "$enable_gost" in 819b7579f77SDag-Erling Smørgrav no) 820b7579f77SDag-Erling Smørgrav ;; 821b7579f77SDag-Erling Smørgrav *) 822b7579f77SDag-Erling Smørgrav AC_CHECK_FUNC(EVP_PKEY_set_type_str, [:],[AC_MSG_ERROR([OpenSSL 1.0.0 is needed for GOST support])]) 823b7579f77SDag-Erling Smørgrav AC_CHECK_FUNC(EC_KEY_new, [], [AC_MSG_ERROR([OpenSSL does not support ECC, needed for GOST support])]) 824b7579f77SDag-Erling Smørgrav AC_CHECK_GOST_WORKS 8258ed2b524SDag-Erling Smørgrav if test "$ac_cv_c_gost_works" != no; then 826b7579f77SDag-Erling Smørgrav use_gost="yes" 827b7579f77SDag-Erling Smørgrav AC_DEFINE([USE_GOST], [1], [Define this to enable GOST support.]) 828b7579f77SDag-Erling Smørgrav fi 829b7579f77SDag-Erling Smørgrav ;; 830b7579f77SDag-Erling Smørgravesac 83105ab2901SDag-Erling Smørgravfi dnl !USE_NSS && !USE_NETTLE 832b7579f77SDag-Erling Smørgrav 833b7579f77SDag-Erling SmørgravAC_ARG_ENABLE(ecdsa, AC_HELP_STRING([--disable-ecdsa], [Disable ECDSA support])) 834b7579f77SDag-Erling Smørgravuse_ecdsa="no" 835b7579f77SDag-Erling Smørgravcase "$enable_ecdsa" in 836b7579f77SDag-Erling Smørgrav no) 837b7579f77SDag-Erling Smørgrav ;; 838b7579f77SDag-Erling Smørgrav *) 83905ab2901SDag-Erling Smørgrav if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then 840b7579f77SDag-Erling Smørgrav AC_CHECK_FUNC(ECDSA_sign, [], [AC_MSG_ERROR([OpenSSL does not support ECDSA: please upgrade or rerun with --disable-ecdsa])]) 841b7579f77SDag-Erling Smørgrav AC_CHECK_FUNC(SHA384_Init, [], [AC_MSG_ERROR([OpenSSL does not support SHA384: please upgrade or rerun with --disable-ecdsa])]) 842b7579f77SDag-Erling Smørgrav AC_CHECK_DECLS([NID_X9_62_prime256v1, NID_secp384r1], [], [AC_MSG_ERROR([OpenSSL does not support the ECDSA curves: please upgrade or rerun with --disable-ecdsa])], [AC_INCLUDES_DEFAULT 843b7579f77SDag-Erling Smørgrav#include <openssl/evp.h> 844b7579f77SDag-Erling Smørgrav ]) 845b7579f77SDag-Erling Smørgrav # see if OPENSSL 1.0.0 or later (has EVP MD and Verify independency) 846b7579f77SDag-Erling Smørgrav AC_MSG_CHECKING([if openssl supports SHA2 and ECDSA with EVP]) 847ff825849SDag-Erling Smørgrav if grep OPENSSL_VERSION_TEXT $ssldir/include/openssl/opensslv.h | grep "OpenSSL" >/dev/null; then 848b7579f77SDag-Erling Smørgrav if grep OPENSSL_VERSION_NUMBER $ssldir/include/openssl/opensslv.h | grep 0x0 >/dev/null; then 849b7579f77SDag-Erling Smørgrav AC_MSG_RESULT([no]) 850b7579f77SDag-Erling Smørgrav AC_DEFINE_UNQUOTED([USE_ECDSA_EVP_WORKAROUND], [1], [Define this to enable an EVP workaround for older openssl]) 851b7579f77SDag-Erling Smørgrav else 852b7579f77SDag-Erling Smørgrav AC_MSG_RESULT([yes]) 853b7579f77SDag-Erling Smørgrav fi 854ff825849SDag-Erling Smørgrav else 855ff825849SDag-Erling Smørgrav # not OpenSSL, thus likely LibreSSL, which supports it 856ff825849SDag-Erling Smørgrav AC_MSG_RESULT([yes]) 857ff825849SDag-Erling Smørgrav fi 8588ed2b524SDag-Erling Smørgrav fi 859b7579f77SDag-Erling Smørgrav # we now know we have ECDSA and the required curves. 860b7579f77SDag-Erling Smørgrav AC_DEFINE_UNQUOTED([USE_ECDSA], [1], [Define this to enable ECDSA support.]) 861b7579f77SDag-Erling Smørgrav use_ecdsa="yes" 862b7579f77SDag-Erling Smørgrav ;; 863b7579f77SDag-Erling Smørgravesac 864b7579f77SDag-Erling Smørgrav 865e2d15004SDag-Erling SmørgravAC_ARG_ENABLE(dsa, AC_HELP_STRING([--disable-dsa], [Disable DSA support])) 866e2d15004SDag-Erling Smørgravuse_dsa="no" 867e2d15004SDag-Erling Smørgravcase "$enable_ecdsa" in 868e2d15004SDag-Erling Smørgrav no) 869e2d15004SDag-Erling Smørgrav ;; 870e2d15004SDag-Erling Smørgrav *) 871e2d15004SDag-Erling Smørgrav # detect if DSA is supported, and turn it off if not. 872e2d15004SDag-Erling Smørgrav AC_CHECK_FUNC(EVP_dss1, [ 873e2d15004SDag-Erling Smørgrav AC_DEFINE_UNQUOTED([USE_DSA], [1], [Define this to enable DSA support.]) 874e2d15004SDag-Erling Smørgrav ], [if test "x$enable_dsa" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support DSA and you used --enable-dsa.]) 875e2d15004SDag-Erling Smørgrav fi ]) 876e2d15004SDag-Erling Smørgrav ;; 877e2d15004SDag-Erling Smørgravesac 878e2d15004SDag-Erling Smørgrav 879e2d15004SDag-Erling Smørgrav 880e2d15004SDag-Erling SmørgravAC_ARG_ENABLE(event-api, AC_HELP_STRING([--enable-event-api], [Enable (experimental) pluggable event base libunbound API installed to unbound-event.h])) 88117d15b25SDag-Erling Smørgravcase "$enable_event_api" in 88217d15b25SDag-Erling Smørgrav yes) 883e2d15004SDag-Erling Smørgrav AC_SUBST(UNBOUND_EVENT_INSTALL, [unbound-event-install]) 884e2d15004SDag-Erling Smørgrav AC_SUBST(UNBOUND_EVENT_UNINSTALL, [unbound-event-uninstall]) 88517d15b25SDag-Erling Smørgrav ;; 88617d15b25SDag-Erling Smørgrav *) 88717d15b25SDag-Erling Smørgrav ;; 88817d15b25SDag-Erling Smørgravesac 88917d15b25SDag-Erling Smørgrav 890*b5663de9SDag-Erling SmørgravAC_ARG_ENABLE(tfo-client, AC_HELP_STRING([--enable-tfo-client], [Enable TCP Fast Open for client mode])) 891*b5663de9SDag-Erling Smørgravcase "$enable_tfo_client" in 892*b5663de9SDag-Erling Smørgrav yes) 893*b5663de9SDag-Erling Smørgrav case `uname` in 894*b5663de9SDag-Erling Smørgrav Linux) AC_CHECK_DECL([MSG_FASTOPEN], [AC_MSG_WARN([Check the platform specific TFO kernel parameters are correctly configured to support client mode TFO])], 895*b5663de9SDag-Erling Smørgrav [AC_MSG_ERROR([TCP Fast Open is not available for client mode: please rerun without --enable-tfo-client])], 896*b5663de9SDag-Erling Smørgrav [AC_INCLUDES_DEFAULT 897*b5663de9SDag-Erling Smørgrav#include <netinet/tcp.h> 898*b5663de9SDag-Erling Smørgrav]) 899*b5663de9SDag-Erling Smørgrav AC_DEFINE_UNQUOTED([USE_MSG_FASTOPEN], [1], [Define this to enable client TCP Fast Open.]) 900*b5663de9SDag-Erling Smørgrav ;; 901*b5663de9SDag-Erling Smørgrav Darwin) AC_CHECK_DECL([CONNECT_RESUME_ON_READ_WRITE], [AC_MSG_WARN([Check the platform specific TFO kernel parameters are correctly configured to support client mode TFO])], 902*b5663de9SDag-Erling Smørgrav [AC_MSG_ERROR([TCP Fast Open is not available for client mode: please rerun without --enable-tfo-client])], 903*b5663de9SDag-Erling Smørgrav [AC_INCLUDES_DEFAULT 904*b5663de9SDag-Erling Smørgrav#include <sys/socket.h> 905*b5663de9SDag-Erling Smørgrav]) 906*b5663de9SDag-Erling Smørgrav AC_DEFINE_UNQUOTED([USE_OSX_MSG_FASTOPEN], [1], [Define this to enable client TCP Fast Open.]) 907*b5663de9SDag-Erling Smørgrav ;; 908*b5663de9SDag-Erling Smørgrav esac 909*b5663de9SDag-Erling Smørgrav ;; 910*b5663de9SDag-Erling Smørgrav no|*) 911*b5663de9SDag-Erling Smørgrav ;; 912*b5663de9SDag-Erling Smørgravesac 913*b5663de9SDag-Erling Smørgrav 914*b5663de9SDag-Erling SmørgravAC_ARG_ENABLE(tfo-server, AC_HELP_STRING([--enable-tfo-server], [Enable TCP Fast Open for server mode])) 915*b5663de9SDag-Erling Smørgravcase "$enable_tfo_server" in 916*b5663de9SDag-Erling Smørgrav yes) 917*b5663de9SDag-Erling Smørgrav AC_CHECK_DECL([TCP_FASTOPEN], [AC_MSG_WARN([Check the platform specific TFO kernel parameters are correctly configured to support server mode TFO])], [AC_MSG_ERROR([TCP Fast Open is not available for server mode: please rerun without --enable-tfo-server])], [AC_INCLUDES_DEFAULT 918*b5663de9SDag-Erling Smørgrav#include <netinet/tcp.h> 919*b5663de9SDag-Erling Smørgrav ]) 920*b5663de9SDag-Erling Smørgrav AC_DEFINE_UNQUOTED([USE_TCP_FASTOPEN], [1], [Define this to enable server TCP Fast Open.]) 921*b5663de9SDag-Erling Smørgrav ;; 922*b5663de9SDag-Erling Smørgrav no|*) 923*b5663de9SDag-Erling Smørgrav ;; 924*b5663de9SDag-Erling Smørgravesac 925*b5663de9SDag-Erling Smørgrav 926b7579f77SDag-Erling Smørgrav# check for libevent 927b7579f77SDag-Erling SmørgravAC_ARG_WITH(libevent, AC_HELP_STRING([--with-libevent=pathname], 928b7579f77SDag-Erling Smørgrav [use libevent (will check /usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr or you can specify an explicit path). Slower, but allows use of large outgoing port ranges.]), 929b7579f77SDag-Erling Smørgrav [ ],[ withval="no" ]) 930b7579f77SDag-Erling Smørgravif test x_$withval = x_yes -o x_$withval != x_no; then 931b7579f77SDag-Erling Smørgrav AC_MSG_CHECKING(for libevent) 932b7579f77SDag-Erling Smørgrav if test x_$withval = x_ -o x_$withval = x_yes; then 933b7579f77SDag-Erling Smørgrav withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" 934b7579f77SDag-Erling Smørgrav fi 935b7579f77SDag-Erling Smørgrav for dir in $withval; do 936b7579f77SDag-Erling Smørgrav thedir="$dir" 93717d15b25SDag-Erling Smørgrav if test -f "$dir/include/event.h" -o -f "$dir/include/event2/event.h"; then 938b7579f77SDag-Erling Smørgrav found_libevent="yes" 939b7579f77SDag-Erling Smørgrav dnl assume /usr is in default path. 940b7579f77SDag-Erling Smørgrav if test "$thedir" != "/usr"; then 941b7579f77SDag-Erling Smørgrav CPPFLAGS="$CPPFLAGS -I$thedir/include" 942b7579f77SDag-Erling Smørgrav fi 943b7579f77SDag-Erling Smørgrav break; 944b7579f77SDag-Erling Smørgrav fi 945b7579f77SDag-Erling Smørgrav done 946b7579f77SDag-Erling Smørgrav if test x_$found_libevent != x_yes; then 947b7579f77SDag-Erling Smørgrav if test -f "$dir/event.h" -a \( -f "$dir/libevent.la" -o -f "$dir/libev.la" \) ; then 948b7579f77SDag-Erling Smørgrav # libevent source directory 949b7579f77SDag-Erling Smørgrav AC_MSG_RESULT(found in $thedir) 950b7579f77SDag-Erling Smørgrav CPPFLAGS="$CPPFLAGS -I$thedir -I$thedir/include" 951b7579f77SDag-Erling Smørgrav BAK_LDFLAGS_SET="1" 952b7579f77SDag-Erling Smørgrav BAK_LDFLAGS="$LDFLAGS" 953b7579f77SDag-Erling Smørgrav # remove evdns from linking 954b7579f77SDag-Erling Smørgrav mkdir build >/dev/null 2>&1 955b7579f77SDag-Erling Smørgrav mkdir build/libevent >/dev/null 2>&1 956b7579f77SDag-Erling Smørgrav mkdir build/libevent/.libs >/dev/null 2>&1 957b7579f77SDag-Erling Smørgrav ev_files_o=`ls $thedir/*.o | grep -v evdns\.o | grep -v bufferevent_openssl\.o` 958b7579f77SDag-Erling Smørgrav ev_files_lo=`ls $thedir/*.lo | grep -v evdns\.lo | grep -v bufferevent_openssl\.lo` 959b7579f77SDag-Erling Smørgrav ev_files_libso=`ls $thedir/.libs/*.o | grep -v evdns\.o | grep -v bufferevent_openssl\.o` 960b7579f77SDag-Erling Smørgrav cp $ev_files_o build/libevent 961b7579f77SDag-Erling Smørgrav cp $ev_files_lo build/libevent 962b7579f77SDag-Erling Smørgrav cp $ev_files_libso build/libevent/.libs 963b7579f77SDag-Erling Smørgrav LATE_LDFLAGS="build/libevent/*.lo -lm" 964b7579f77SDag-Erling Smørgrav LDFLAGS="build/libevent/*.o $LDFLAGS -lm" 965b7579f77SDag-Erling Smørgrav else 966b7579f77SDag-Erling Smørgrav AC_MSG_ERROR([Cannot find the libevent library in $withval 967b7579f77SDag-Erling SmørgravYou can restart ./configure --with-libevent=no to use a builtin alternative. 968b7579f77SDag-Erling SmørgravPlease note that this alternative is not as capable as libevent when using 969b7579f77SDag-Erling Smørgravlarge outgoing port ranges. ]) 970b7579f77SDag-Erling Smørgrav fi 971b7579f77SDag-Erling Smørgrav else 972b7579f77SDag-Erling Smørgrav AC_MSG_RESULT(found in $thedir) 97317d15b25SDag-Erling Smørgrav dnl if event2 exists and no event lib in dir itself, use subdir 97417d15b25SDag-Erling Smørgrav if test ! -f $thedir/lib/libevent.a -a ! -f $thedir/lib/libevent.so -a -d "$thedir/lib/event2"; then 97517d15b25SDag-Erling Smørgrav LDFLAGS="$LDFLAGS -L$thedir/lib/event2" 97617d15b25SDag-Erling Smørgrav ACX_RUNTIME_PATH_ADD([$thedir/lib/event2]) 97717d15b25SDag-Erling Smørgrav else 978b7579f77SDag-Erling Smørgrav dnl assume /usr is in default path, do not add "". 979b7579f77SDag-Erling Smørgrav if test "$thedir" != "/usr" -a "$thedir" != ""; then 980b7579f77SDag-Erling Smørgrav LDFLAGS="$LDFLAGS -L$thedir/lib" 981b7579f77SDag-Erling Smørgrav ACX_RUNTIME_PATH_ADD([$thedir/lib]) 982b7579f77SDag-Erling Smørgrav fi 983b7579f77SDag-Erling Smørgrav fi 98417d15b25SDag-Erling Smørgrav fi 985b7579f77SDag-Erling Smørgrav # check for library used by libevent after 1.3c 986b7579f77SDag-Erling Smørgrav AC_SEARCH_LIBS([clock_gettime], [rt]) 987b7579f77SDag-Erling Smørgrav 988b7579f77SDag-Erling Smørgrav # is the event.h header libev or libevent? 989b7579f77SDag-Erling Smørgrav AC_CHECK_HEADERS([event.h],,, [AC_INCLUDES_DEFAULT]) 990b7579f77SDag-Erling Smørgrav AC_CHECK_DECL(EV_VERSION_MAJOR, [ 991b7579f77SDag-Erling Smørgrav AC_SEARCH_LIBS(event_set, [ev]) 992b7579f77SDag-Erling Smørgrav ],[ 993b7579f77SDag-Erling Smørgrav AC_SEARCH_LIBS(event_set, [event]) 994b7579f77SDag-Erling Smørgrav ],[AC_INCLUDES_DEFAULT 995b7579f77SDag-Erling Smørgrav#include <event.h> 996b7579f77SDag-Erling Smørgrav ]) 997b7579f77SDag-Erling Smørgrav AC_CHECK_FUNCS([event_base_free]) # only in libevent 1.2 and later 998b7579f77SDag-Erling Smørgrav AC_CHECK_FUNCS([event_base_once]) # only in libevent 1.4.1 and later 999b7579f77SDag-Erling Smørgrav AC_CHECK_FUNCS([event_base_new]) # only in libevent 1.4.1 and later 1000b7579f77SDag-Erling Smørgrav AC_CHECK_FUNCS([event_base_get_method]) # only in libevent 1.4.3 and later 1001b7579f77SDag-Erling Smørgrav AC_CHECK_FUNCS([ev_loop]) # only in libev. (tested on 3.51) 1002b7579f77SDag-Erling Smørgrav AC_CHECK_FUNCS([ev_default_loop]) # only in libev. (tested on 4.00) 1003b7579f77SDag-Erling Smørgrav if test -n "$BAK_LDFLAGS_SET"; then 1004b7579f77SDag-Erling Smørgrav LDFLAGS="$BAK_LDFLAGS" 1005b7579f77SDag-Erling Smørgrav fi 1006b7579f77SDag-Erling Smørgravelse 1007b7579f77SDag-Erling Smørgrav AC_DEFINE(USE_MINI_EVENT, 1, [Define if you want to use internal select based events]) 1008b7579f77SDag-Erling Smørgravfi 1009b7579f77SDag-Erling Smørgrav 1010b7579f77SDag-Erling Smørgrav# check for libexpat 1011b7579f77SDag-Erling SmørgravAC_ARG_WITH(libexpat, AC_HELP_STRING([--with-libexpat=path], 1012b7579f77SDag-Erling Smørgrav [specify explicit path for libexpat.]), 1013b7579f77SDag-Erling Smørgrav [ ],[ withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" ]) 1014b7579f77SDag-Erling SmørgravAC_MSG_CHECKING(for libexpat) 1015b7579f77SDag-Erling Smørgravfound_libexpat="no" 1016b7579f77SDag-Erling Smørgravfor dir in $withval ; do 1017b7579f77SDag-Erling Smørgrav if test -f "$dir/include/expat.h"; then 1018b7579f77SDag-Erling Smørgrav found_libexpat="yes" 1019b7579f77SDag-Erling Smørgrav dnl assume /usr is in default path. 1020b7579f77SDag-Erling Smørgrav if test "$dir" != "/usr"; then 1021b7579f77SDag-Erling Smørgrav CPPFLAGS="$CPPFLAGS -I$dir/include" 1022b7579f77SDag-Erling Smørgrav LDFLAGS="$LDFLAGS -L$dir/lib" 1023b7579f77SDag-Erling Smørgrav fi 1024b7579f77SDag-Erling Smørgrav AC_MSG_RESULT(found in $dir) 1025b7579f77SDag-Erling Smørgrav break; 1026b7579f77SDag-Erling Smørgrav fi 1027b7579f77SDag-Erling Smørgravdone 1028b7579f77SDag-Erling Smørgravif test x_$found_libexpat != x_yes; then 1029b7579f77SDag-Erling Smørgrav AC_ERROR([Could not find libexpat, expat.h]) 1030b7579f77SDag-Erling Smørgravfi 1031b7579f77SDag-Erling SmørgravAC_CHECK_HEADERS([expat.h],,, [AC_INCLUDES_DEFAULT]) 103205ab2901SDag-Erling SmørgravAC_CHECK_DECLS([XML_StopParser], [], [], [AC_INCLUDES_DEFAULT 103305ab2901SDag-Erling Smørgrav#include <expat.h> 103405ab2901SDag-Erling Smørgrav]) 1035b7579f77SDag-Erling Smørgrav 1036b7579f77SDag-Erling Smørgrav# set static linking if requested 1037b7579f77SDag-Erling SmørgravAC_SUBST(staticexe) 1038b7579f77SDag-Erling Smørgravstaticexe="" 1039b7579f77SDag-Erling SmørgravAC_ARG_ENABLE(static-exe, AC_HELP_STRING([--enable-static-exe], 104017d15b25SDag-Erling Smørgrav [ enable to compile executables statically against (event) libs, for debug purposes ]), 1041b7579f77SDag-Erling Smørgrav , ) 1042b7579f77SDag-Erling Smørgravif test x_$enable_static_exe = x_yes; then 1043b7579f77SDag-Erling Smørgrav staticexe="-static" 1044b7579f77SDag-Erling Smørgrav if test "$on_mingw" = yes; then 1045b7579f77SDag-Erling Smørgrav staticexe="-all-static" 1046*b5663de9SDag-Erling Smørgrav # for static compile, include gdi32 and zlib here. 1047b7579f77SDag-Erling Smørgrav LIBS="$LIBS -lgdi32 -lz" 1048b7579f77SDag-Erling Smørgrav fi 1049b7579f77SDag-Erling Smørgravfi 1050b7579f77SDag-Erling Smørgrav 1051b7579f77SDag-Erling Smørgrav# set lock checking if requested 1052b7579f77SDag-Erling SmørgravAC_ARG_ENABLE(lock_checks, AC_HELP_STRING([--enable-lock-checks], 1053b7579f77SDag-Erling Smørgrav [ enable to check lock and unlock calls, for debug purposes ]), 1054b7579f77SDag-Erling Smørgrav , ) 1055b7579f77SDag-Erling Smørgravif test x_$enable_lock_checks = x_yes; then 1056b7579f77SDag-Erling Smørgrav AC_DEFINE(ENABLE_LOCK_CHECKS, 1, [Define if you want to use debug lock checking (slow).]) 1057b7579f77SDag-Erling Smørgrav CHECKLOCK_OBJ="checklocks.lo" 1058b7579f77SDag-Erling Smørgrav AC_SUBST(CHECKLOCK_OBJ) 1059b7579f77SDag-Erling Smørgravfi 1060b7579f77SDag-Erling Smørgrav 1061b7579f77SDag-Erling SmørgravACX_CHECK_GETADDRINFO_WITH_INCLUDES 1062b7579f77SDag-Erling Smørgravif test "$USE_WINSOCK" = 1; then 1063b7579f77SDag-Erling Smørgrav AC_DEFINE(UB_ON_WINDOWS, 1, [Use win32 resources and API]) 1064b7579f77SDag-Erling Smørgrav AC_CHECK_HEADERS([iphlpapi.h],,, [AC_INCLUDES_DEFAULT 1065b7579f77SDag-Erling Smørgrav#include <windows.h> 1066b7579f77SDag-Erling Smørgrav ]) 1067b7579f77SDag-Erling Smørgrav AC_CHECK_TOOL(WINDRES, windres) 1068b7579f77SDag-Erling Smørgrav LIBS="$LIBS -liphlpapi" 1069b7579f77SDag-Erling Smørgrav WINAPPS="unbound-service-install.exe unbound-service-remove.exe anchor-update.exe" 1070b7579f77SDag-Erling Smørgrav AC_SUBST(WINAPPS) 1071b7579f77SDag-Erling Smørgrav WIN_DAEMON_SRC="winrc/win_svc.c winrc/w_inst.c" 1072b7579f77SDag-Erling Smørgrav AC_SUBST(WIN_DAEMON_SRC) 1073b7579f77SDag-Erling Smørgrav WIN_DAEMON_OBJ="win_svc.lo w_inst.lo" 1074b7579f77SDag-Erling Smørgrav AC_SUBST(WIN_DAEMON_OBJ) 1075b7579f77SDag-Erling Smørgrav WIN_DAEMON_OBJ_LINK="rsrc_unbound.o" 1076b7579f77SDag-Erling Smørgrav AC_SUBST(WIN_DAEMON_OBJ_LINK) 1077b7579f77SDag-Erling Smørgrav WIN_HOST_OBJ_LINK="rsrc_unbound_host.o" 1078b7579f77SDag-Erling Smørgrav AC_SUBST(WIN_HOST_OBJ_LINK) 1079b7579f77SDag-Erling Smørgrav WIN_UBANCHOR_OBJ_LINK="rsrc_unbound_anchor.o log.lo locks.lo" 1080b7579f77SDag-Erling Smørgrav AC_SUBST(WIN_UBANCHOR_OBJ_LINK) 1081b7579f77SDag-Erling Smørgrav WIN_CONTROL_OBJ_LINK="rsrc_unbound_control.o" 1082b7579f77SDag-Erling Smørgrav AC_SUBST(WIN_CONTROL_OBJ_LINK) 1083b7579f77SDag-Erling Smørgrav WIN_CHECKCONF_OBJ_LINK="rsrc_unbound_checkconf.o" 1084b7579f77SDag-Erling Smørgrav AC_SUBST(WIN_CHECKCONF_OBJ_LINK) 1085b7579f77SDag-Erling Smørgravfi 1086b7579f77SDag-Erling Smørgravif test $ac_cv_func_getaddrinfo = no; then 1087b7579f77SDag-Erling Smørgrav AC_LIBOBJ([fake-rfc2553]) 1088b7579f77SDag-Erling Smørgravfi 1089b7579f77SDag-Erling Smørgrav# check after getaddrinfo for its libraries 1090b7579f77SDag-Erling SmørgravACX_FUNC_IOCTLSOCKET 1091b7579f77SDag-Erling Smørgrav 1092b7579f77SDag-Erling Smørgrav# see if daemon(3) exists, and if it is deprecated. 1093b7579f77SDag-Erling SmørgravAC_CHECK_FUNCS([daemon]) 1094b7579f77SDag-Erling Smørgravif test $ac_cv_func_daemon = yes; then 1095b7579f77SDag-Erling Smørgrav ACX_FUNC_DEPRECATED([daemon], [(void)daemon(0, 0);], [ 1096b7579f77SDag-Erling Smørgrav#include <stdlib.h> 1097b7579f77SDag-Erling Smørgrav]) 1098b7579f77SDag-Erling Smørgravfi 1099b7579f77SDag-Erling Smørgrav 1100748bd829SDag-Erling SmørgravAC_CHECK_MEMBERS([struct sockaddr_un.sun_len],,,[ 1101748bd829SDag-Erling SmørgravAC_INCLUDES_DEFAULT 1102748bd829SDag-Erling Smørgrav#ifdef HAVE_SYS_UN_H 1103748bd829SDag-Erling Smørgrav#include <sys/un.h> 1104748bd829SDag-Erling Smørgrav#endif 1105748bd829SDag-Erling Smørgrav]) 1106b7579f77SDag-Erling SmørgravAC_CHECK_MEMBERS([struct in_pktinfo.ipi_spec_dst],,,[ 1107b7579f77SDag-Erling SmørgravAC_INCLUDES_DEFAULT 1108b7579f77SDag-Erling Smørgrav#if HAVE_SYS_PARAM_H 1109b7579f77SDag-Erling Smørgrav#include <sys/param.h> 1110b7579f77SDag-Erling Smørgrav#endif 1111b7579f77SDag-Erling Smørgrav 1112b7579f77SDag-Erling Smørgrav#ifdef HAVE_SYS_SOCKET_H 1113b7579f77SDag-Erling Smørgrav#include <sys/socket.h> 1114b7579f77SDag-Erling Smørgrav#endif 1115b7579f77SDag-Erling Smørgrav 1116b7579f77SDag-Erling Smørgrav#ifdef HAVE_SYS_UIO_H 1117b7579f77SDag-Erling Smørgrav#include <sys/uio.h> 1118b7579f77SDag-Erling Smørgrav#endif 1119b7579f77SDag-Erling Smørgrav 1120b7579f77SDag-Erling Smørgrav#ifdef HAVE_NETINET_IN_H 1121b7579f77SDag-Erling Smørgrav#include <netinet/in.h> 1122b7579f77SDag-Erling Smørgrav#endif 1123b7579f77SDag-Erling Smørgrav 1124f61ef7f6SDag-Erling Smørgrav#ifdef HAVE_NETINET_TCP_H 1125f61ef7f6SDag-Erling Smørgrav#include <netinet/tcp.h> 1126f61ef7f6SDag-Erling Smørgrav#endif 1127f61ef7f6SDag-Erling Smørgrav 1128b7579f77SDag-Erling Smørgrav#ifdef HAVE_ARPA_INET_H 1129b7579f77SDag-Erling Smørgrav#include <arpa/inet.h> 1130b7579f77SDag-Erling Smørgrav#endif 1131b7579f77SDag-Erling Smørgrav 1132b7579f77SDag-Erling Smørgrav#ifdef HAVE_WINSOCK2_H 1133b7579f77SDag-Erling Smørgrav#include <winsock2.h> 1134b7579f77SDag-Erling Smørgrav#endif 1135b7579f77SDag-Erling Smørgrav 1136b7579f77SDag-Erling Smørgrav#ifdef HAVE_WS2TCPIP_H 1137b7579f77SDag-Erling Smørgrav#include <ws2tcpip.h> 1138b7579f77SDag-Erling Smørgrav#endif 1139b7579f77SDag-Erling Smørgrav]) 1140b7579f77SDag-Erling SmørgravAC_SEARCH_LIBS([setusercontext], [util]) 1141*b5663de9SDag-Erling SmørgravAC_CHECK_FUNCS([tzset sigprocmask fcntl getpwnam endpwent getrlimit setrlimit setsid chroot kill chown sleep usleep random srandom recvmsg sendmsg writev socketpair glob initgroups strftime localtime_r setusercontext _beginthreadex endservent endprotoent fsync]) 1142b7579f77SDag-Erling SmørgravAC_CHECK_FUNCS([setresuid],,[AC_CHECK_FUNCS([setreuid])]) 1143b7579f77SDag-Erling SmørgravAC_CHECK_FUNCS([setresgid],,[AC_CHECK_FUNCS([setregid])]) 1144b7579f77SDag-Erling Smørgrav 1145f61ef7f6SDag-Erling SmørgravAC_MSG_CHECKING([for sbrk]) 1146f61ef7f6SDag-Erling Smørgrav# catch the warning of deprecated sbrk 1147f61ef7f6SDag-Erling Smørgravold_cflags="$CFLAGS" 1148f61ef7f6SDag-Erling SmørgravCFLAGS="$CFLAGS -Werror" 1149f61ef7f6SDag-Erling SmørgravAC_COMPILE_IFELSE([AC_LANG_SOURCE(AC_INCLUDES_DEFAULT 1150f61ef7f6SDag-Erling Smørgrav[[ 1151f61ef7f6SDag-Erling Smørgravint main(void) { void* cur = sbrk(0); printf("%u\n", (unsigned)(size_t)((char*)cur - (char*)sbrk(0))); return 0; } 1152f61ef7f6SDag-Erling Smørgrav]])], [ 1153f61ef7f6SDag-Erling Smørgrav AC_MSG_RESULT(yes) 1154f61ef7f6SDag-Erling Smørgrav AC_DEFINE(HAVE_SBRK, 1, [define if you have the sbrk() call]) 1155f61ef7f6SDag-Erling Smørgrav ], [AC_MSG_RESULT(no)]) 1156f61ef7f6SDag-Erling SmørgravCFLAGS="$old_cflags" 1157f61ef7f6SDag-Erling Smørgrav 1158b7579f77SDag-Erling Smørgrav# check if setreuid en setregid fail, on MacOSX10.4(darwin8). 1159b7579f77SDag-Erling Smørgravif echo $build_os | grep darwin8 > /dev/null; then 1160b7579f77SDag-Erling Smørgrav AC_DEFINE(DARWIN_BROKEN_SETREUID, 1, [Define this if on macOSX10.4-darwin8 and setreuid and setregid do not work]) 1161b7579f77SDag-Erling Smørgravfi 1162b7579f77SDag-Erling SmørgravAC_REPLACE_FUNCS(inet_aton) 1163b7579f77SDag-Erling SmørgravAC_REPLACE_FUNCS(inet_pton) 1164b7579f77SDag-Erling SmørgravAC_REPLACE_FUNCS(inet_ntop) 1165b7579f77SDag-Erling SmørgravAC_REPLACE_FUNCS(snprintf) 116605ab2901SDag-Erling Smørgrav# test if snprintf return the proper length 116705ab2901SDag-Erling Smørgravif test "x$ac_cv_func_snprintf" = xyes; then 116805ab2901SDag-Erling Smørgrav if test c${cross_compiling} = cno; then 116905ab2901SDag-Erling Smørgrav AC_MSG_CHECKING([for correct snprintf return value]) 117005ab2901SDag-Erling Smørgrav AC_RUN_IFELSE([AC_LANG_SOURCE(AC_INCLUDES_DEFAULT 117105ab2901SDag-Erling Smørgrav[[ 117205ab2901SDag-Erling Smørgravint main(void) { return !(snprintf(NULL, 0, "test") == 4); } 117305ab2901SDag-Erling Smørgrav]])], [AC_MSG_RESULT(yes)], [ 117405ab2901SDag-Erling Smørgrav AC_MSG_RESULT(no) 117505ab2901SDag-Erling Smørgrav AC_DEFINE([SNPRINTF_RET_BROKEN], [], [define if (v)snprintf does not return length needed, (but length used)]) 117605ab2901SDag-Erling Smørgrav AC_LIBOBJ(snprintf) 117705ab2901SDag-Erling Smørgrav ]) 117805ab2901SDag-Erling Smørgrav fi 117905ab2901SDag-Erling Smørgravfi 118017d15b25SDag-Erling SmørgravAC_REPLACE_FUNCS(strlcat) 1181b7579f77SDag-Erling SmørgravAC_REPLACE_FUNCS(strlcpy) 1182b7579f77SDag-Erling SmørgravAC_REPLACE_FUNCS(memmove) 1183b7579f77SDag-Erling SmørgravAC_REPLACE_FUNCS(gmtime_r) 118405ab2901SDag-Erling SmørgravAC_REPLACE_FUNCS(isblank) 118509a3aaf3SDag-Erling Smørgravdnl without CTIME, ARC4-functions and without reallocarray. 1186ff825849SDag-Erling SmørgravLIBOBJ_WITHOUT_CTIMEARC4="$LIBOBJS" 1187ff825849SDag-Erling SmørgravAC_SUBST(LIBOBJ_WITHOUT_CTIMEARC4) 118809a3aaf3SDag-Erling SmørgravAC_REPLACE_FUNCS(reallocarray) 1189ff825849SDag-Erling Smørgravif test "$USE_NSS" = "no"; then 1190ff825849SDag-Erling Smørgrav AC_REPLACE_FUNCS(arc4random) 1191ff825849SDag-Erling Smørgrav AC_REPLACE_FUNCS(arc4random_uniform) 1192ff825849SDag-Erling Smørgrav if test "$ac_cv_func_arc4random" = "no"; then 1193ff825849SDag-Erling Smørgrav AC_LIBOBJ(explicit_bzero) 1194ff825849SDag-Erling Smørgrav AC_LIBOBJ(arc4_lock) 1195ff825849SDag-Erling Smørgrav AC_CHECK_FUNCS([getentropy],,[ 1196ff825849SDag-Erling Smørgrav if test "$USE_WINSOCK" = 1; then 1197ff825849SDag-Erling Smørgrav AC_LIBOBJ(getentropy_win) 1198ff825849SDag-Erling Smørgrav else 1199ff825849SDag-Erling Smørgrav case `uname` in 1200ff825849SDag-Erling Smørgrav Darwin) 1201ff825849SDag-Erling Smørgrav AC_LIBOBJ(getentropy_osx) 1202ff825849SDag-Erling Smørgrav ;; 1203ff825849SDag-Erling Smørgrav SunOS) 1204ff825849SDag-Erling Smørgrav AC_LIBOBJ(getentropy_solaris) 1205ff825849SDag-Erling Smørgrav AC_CHECK_HEADERS([sys/sha2.h],, [ 1206ff825849SDag-Erling Smørgrav AC_CHECK_FUNCS([SHA512_Update],,[ 1207ff825849SDag-Erling Smørgrav AC_LIBOBJ(sha512) 1208ff825849SDag-Erling Smørgrav ]) 1209ff825849SDag-Erling Smørgrav ], [AC_INCLUDES_DEFAULT]) 1210ff825849SDag-Erling Smørgrav if test "$ac_cv_header_sys_sha2_h" = "yes"; then 1211ff825849SDag-Erling Smørgrav # this lib needed for sha2 on solaris 1212ff825849SDag-Erling Smørgrav LIBS="$LIBS -lmd" 1213ff825849SDag-Erling Smørgrav fi 12146480faa8SDag-Erling Smørgrav AC_SEARCH_LIBS([clock_gettime], [rt]) 1215ff825849SDag-Erling Smørgrav ;; 1216ff825849SDag-Erling Smørgrav Linux|*) 1217ff825849SDag-Erling Smørgrav AC_LIBOBJ(getentropy_linux) 1218ff825849SDag-Erling Smørgrav AC_CHECK_FUNCS([SHA512_Update],,[ 1219ff825849SDag-Erling Smørgrav AC_DEFINE([COMPAT_SHA512], [1], [Do sha512 definitions in config.h]) 1220ff825849SDag-Erling Smørgrav AC_LIBOBJ(sha512) 1221ff825849SDag-Erling Smørgrav ]) 1222ff825849SDag-Erling Smørgrav AC_CHECK_HEADERS([sys/sysctl.h],,, [AC_INCLUDES_DEFAULT]) 12236480faa8SDag-Erling Smørgrav AC_CHECK_FUNCS([getauxval]) 1224ff825849SDag-Erling Smørgrav AC_SEARCH_LIBS([clock_gettime], [rt]) 1225ff825849SDag-Erling Smørgrav ;; 1226ff825849SDag-Erling Smørgrav esac 1227ff825849SDag-Erling Smørgrav fi 1228ff825849SDag-Erling Smørgrav ]) 1229ff825849SDag-Erling Smørgrav fi 1230ff825849SDag-Erling Smørgravfi 1231b7579f77SDag-Erling SmørgravLIBOBJ_WITHOUT_CTIME="$LIBOBJS" 1232b7579f77SDag-Erling SmørgravAC_SUBST(LIBOBJ_WITHOUT_CTIME) 1233b7579f77SDag-Erling SmørgravAC_REPLACE_FUNCS(ctime_r) 1234e2d15004SDag-Erling SmørgravAC_REPLACE_FUNCS(strsep) 1235b7579f77SDag-Erling Smørgrav 1236b7579f77SDag-Erling SmørgravAC_ARG_ENABLE(allsymbols, AC_HELP_STRING([--enable-allsymbols], [export all symbols from libunbound and link binaries to it, smaller install size but libunbound export table is polluted by internal symbols])) 1237b7579f77SDag-Erling Smørgravcase "$enable_allsymbols" in 1238b7579f77SDag-Erling Smørgrav yes) 1239b7579f77SDag-Erling Smørgrav COMMON_OBJ_ALL_SYMBOLS="" 1240b7579f77SDag-Erling Smørgrav UBSYMS="" 1241b7579f77SDag-Erling Smørgrav EXTRALINK="-L. -L.libs -lunbound" 1242b7579f77SDag-Erling Smørgrav AC_DEFINE(EXPORT_ALL_SYMBOLS, 1, [Define this if you enabled-allsymbols from libunbound to link binaries to it for smaller install size, but the libunbound export table is polluted by internal symbols]) 1243b7579f77SDag-Erling Smørgrav ;; 1244b7579f77SDag-Erling Smørgrav no|*) 1245b7579f77SDag-Erling Smørgrav COMMON_OBJ_ALL_SYMBOLS='$(COMMON_OBJ)' 1246b7579f77SDag-Erling Smørgrav UBSYMS='-export-symbols $(srcdir)/libunbound/ubsyms.def' 1247b7579f77SDag-Erling Smørgrav EXTRALINK="" 1248b7579f77SDag-Erling Smørgrav ;; 1249b7579f77SDag-Erling Smørgravesac 1250b7579f77SDag-Erling SmørgravAC_SUBST(COMMON_OBJ_ALL_SYMBOLS) 1251b7579f77SDag-Erling SmørgravAC_SUBST(EXTRALINK) 1252b7579f77SDag-Erling SmørgravAC_SUBST(UBSYMS) 1253b7579f77SDag-Erling Smørgravif test x_$enable_lock_checks = x_yes; then 1254b7579f77SDag-Erling Smørgrav UBSYMS="-export-symbols clubsyms.def" 1255b7579f77SDag-Erling Smørgrav cp ${srcdir}/libunbound/ubsyms.def clubsyms.def 1256b7579f77SDag-Erling Smørgrav echo lock_protect >> clubsyms.def 1257b7579f77SDag-Erling Smørgrav echo lock_unprotect >> clubsyms.def 1258b7579f77SDag-Erling Smørgrav echo lock_get_mem >> clubsyms.def 1259b7579f77SDag-Erling Smørgrav echo checklock_start >> clubsyms.def 1260b7579f77SDag-Erling Smørgrav echo checklock_stop >> clubsyms.def 1261b7579f77SDag-Erling Smørgrav echo checklock_lock >> clubsyms.def 1262b7579f77SDag-Erling Smørgrav echo checklock_unlock >> clubsyms.def 1263b7579f77SDag-Erling Smørgrav echo checklock_init >> clubsyms.def 1264b7579f77SDag-Erling Smørgrav echo checklock_thrcreate >> clubsyms.def 1265b7579f77SDag-Erling Smørgrav echo checklock_thrjoin >> clubsyms.def 1266b7579f77SDag-Erling Smørgravfi 1267b7579f77SDag-Erling Smørgrav 1268ff825849SDag-Erling Smørgrav# check for dnstap if requested 1269ff825849SDag-Erling Smørgravdt_DNSTAP([$UNBOUND_RUN_DIR/dnstap.sock], 1270ff825849SDag-Erling Smørgrav [ 1271ff825849SDag-Erling Smørgrav AC_DEFINE([USE_DNSTAP], [1], [Define to 1 to enable dnstap support]) 1272ff825849SDag-Erling Smørgrav AC_SUBST([ENABLE_DNSTAP], [1]) 1273ff825849SDag-Erling Smørgrav 1274ff825849SDag-Erling Smørgrav AC_SUBST([opt_dnstap_socket_path]) 1275ff825849SDag-Erling Smørgrav ACX_ESCAPE_BACKSLASH($opt_dnstap_socket_path, hdr_dnstap_socket_path) 1276ff825849SDag-Erling Smørgrav AC_DEFINE_UNQUOTED(DNSTAP_SOCKET_PATH, 1277ff825849SDag-Erling Smørgrav ["$hdr_dnstap_socket_path"], [default dnstap socket path]) 1278ff825849SDag-Erling Smørgrav 1279ff825849SDag-Erling Smørgrav AC_SUBST([DNSTAP_SRC], ["dnstap/dnstap.c dnstap/dnstap.pb-c.c"]) 1280ff825849SDag-Erling Smørgrav AC_SUBST([DNSTAP_OBJ], ["dnstap.lo dnstap.pb-c.lo"]) 1281ff825849SDag-Erling Smørgrav ], 1282ff825849SDag-Erling Smørgrav [ 1283ff825849SDag-Erling Smørgrav AC_SUBST([ENABLE_DNSTAP], [0]) 1284ff825849SDag-Erling Smørgrav ] 1285ff825849SDag-Erling Smørgrav) 1286ff825849SDag-Erling Smørgrav 1287e2d15004SDag-Erling Smørgrav# check for cachedb if requested 1288e2d15004SDag-Erling SmørgravAC_ARG_ENABLE(cachedb, AC_HELP_STRING([--enable-cachedb], [enable cachedb module that can use external cache storage])) 1289e2d15004SDag-Erling Smørgravcase "$enable_cachedb" in 1290e2d15004SDag-Erling Smørgrav yes) 1291e2d15004SDag-Erling Smørgrav AC_DEFINE([USE_CACHEDB], [1], [Define to 1 to use cachedb support]) 1292e2d15004SDag-Erling Smørgrav ;; 1293e2d15004SDag-Erling Smørgrav no|*) 1294e2d15004SDag-Erling Smørgrav # nothing 1295e2d15004SDag-Erling Smørgrav ;; 1296e2d15004SDag-Erling Smørgravesac 1297e2d15004SDag-Erling Smørgrav 1298b7579f77SDag-Erling SmørgravAC_MSG_CHECKING([if ${MAKE:-make} supports $< with implicit rule in scope]) 1299b7579f77SDag-Erling Smørgrav# on openBSD, the implicit rule make $< work. 1300b7579f77SDag-Erling Smørgrav# on Solaris, it does not work ($? is changed sources, $^ lists dependencies). 1301b7579f77SDag-Erling Smørgrav# gmake works. 1302b7579f77SDag-Erling Smørgravcat >conftest.make <<EOF 1303b7579f77SDag-Erling Smørgravall: conftest.lo 1304b7579f77SDag-Erling Smørgrav 1305b7579f77SDag-Erling Smørgravconftest.lo foo.lo bla.lo: 1306b7579f77SDag-Erling Smørgrav if test -f "\$<"; then touch \$@; fi 1307b7579f77SDag-Erling Smørgrav 1308b7579f77SDag-Erling Smørgrav.SUFFIXES: .lo 1309b7579f77SDag-Erling Smørgrav.c.lo: 1310b7579f77SDag-Erling Smørgrav if test -f "\$<"; then touch \$@; fi 1311b7579f77SDag-Erling Smørgrav 1312b7579f77SDag-Erling Smørgravconftest.lo: conftest.dir/conftest.c 1313b7579f77SDag-Erling SmørgravEOF 1314b7579f77SDag-Erling Smørgravmkdir conftest.dir 1315b7579f77SDag-Erling Smørgravtouch conftest.dir/conftest.c 1316b7579f77SDag-Erling Smørgravrm -f conftest.lo conftest.c 1317b7579f77SDag-Erling Smørgrav${MAKE:-make} -f conftest.make >/dev/null 1318b7579f77SDag-Erling Smørgravrm -f conftest.make conftest.c conftest.dir/conftest.c 1319b7579f77SDag-Erling Smørgravrm -rf conftest.dir 1320b7579f77SDag-Erling Smørgravif test ! -f conftest.lo; then 1321b7579f77SDag-Erling Smørgrav AC_MSG_RESULT(no) 1322b7579f77SDag-Erling Smørgrav SOURCEDETERMINE='echo "$^" | awk "-F " "{print \$$1;}" > .source' 1323b7579f77SDag-Erling Smørgrav SOURCEFILE='`cat .source`' 1324b7579f77SDag-Erling Smørgravelse 1325b7579f77SDag-Erling Smørgrav AC_MSG_RESULT(yes) 1326b7579f77SDag-Erling Smørgrav SOURCEDETERMINE=':' 1327b7579f77SDag-Erling Smørgrav SOURCEFILE='$<' 1328b7579f77SDag-Erling Smørgravfi 1329b7579f77SDag-Erling Smørgravrm -f conftest.lo 1330b7579f77SDag-Erling SmørgravAC_SUBST(SOURCEDETERMINE) 1331b7579f77SDag-Erling SmørgravAC_SUBST(SOURCEFILE) 1332b7579f77SDag-Erling Smørgrav 13338ed2b524SDag-Erling Smørgrav# see if we want to build the library or everything 13348ed2b524SDag-Erling SmørgravALLTARGET="alltargets" 133517d15b25SDag-Erling SmørgravINSTALLTARGET="install-all" 13368ed2b524SDag-Erling SmørgravAC_ARG_WITH(libunbound-only, AC_HELP_STRING([--with-libunbound-only], 13378ed2b524SDag-Erling Smørgrav [do not build daemon and tool programs]), 13388ed2b524SDag-Erling Smørgrav [ 13398ed2b524SDag-Erling Smørgrav if test "$withval" = "yes"; then 13408ed2b524SDag-Erling Smørgrav ALLTARGET="lib" 134117d15b25SDag-Erling Smørgrav INSTALLTARGET="install-lib" 13428ed2b524SDag-Erling Smørgrav fi 13438ed2b524SDag-Erling Smørgrav]) 13448ed2b524SDag-Erling SmørgravAC_SUBST(ALLTARGET) 134517d15b25SDag-Erling SmørgravAC_SUBST(INSTALLTARGET) 1346b7579f77SDag-Erling Smørgrav 1347b7579f77SDag-Erling SmørgravACX_STRIP_EXT_FLAGS 1348b7579f77SDag-Erling SmørgravLDFLAGS="$LATE_LDFLAGS $LDFLAGS" 1349b7579f77SDag-Erling Smørgrav 1350b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED([MAXSYSLOGMSGLEN], [10240], [Define to the maximum message length to pass to syslog.]) 1351b7579f77SDag-Erling Smørgrav 1352b7579f77SDag-Erling SmørgravAH_BOTTOM( 1353b7579f77SDag-Erling Smørgravdnl this must be first AH_CONFIG, to define the flags before any includes. 1354b7579f77SDag-Erling SmørgravAHX_CONFIG_EXT_FLAGS 1355b7579f77SDag-Erling Smørgrav 1356b7579f77SDag-Erling Smørgravdnl includes 1357b7579f77SDag-Erling Smørgrav[ 1358b7579f77SDag-Erling Smørgrav#ifndef UNBOUND_DEBUG 1359b7579f77SDag-Erling Smørgrav# define NDEBUG 1360b7579f77SDag-Erling Smørgrav#endif 1361b7579f77SDag-Erling Smørgrav 136217d15b25SDag-Erling Smørgrav/** Use small-ldns codebase */ 136317d15b25SDag-Erling Smørgrav#define USE_SLDNS 1 136417d15b25SDag-Erling Smørgrav#ifdef HAVE_SSL 136517d15b25SDag-Erling Smørgrav# define LDNS_BUILD_CONFIG_HAVE_SSL 1 136617d15b25SDag-Erling Smørgrav#endif 136717d15b25SDag-Erling Smørgrav 1368b7579f77SDag-Erling Smørgrav#include <stdio.h> 1369b7579f77SDag-Erling Smørgrav#include <string.h> 1370b7579f77SDag-Erling Smørgrav#include <unistd.h> 1371b7579f77SDag-Erling Smørgrav#include <assert.h> 1372b7579f77SDag-Erling Smørgrav 1373b7579f77SDag-Erling Smørgrav#if STDC_HEADERS 1374b7579f77SDag-Erling Smørgrav#include <stdlib.h> 1375b7579f77SDag-Erling Smørgrav#include <stddef.h> 1376b7579f77SDag-Erling Smørgrav#endif 1377b7579f77SDag-Erling Smørgrav 137817d15b25SDag-Erling Smørgrav#ifdef HAVE_STDARG_H 137917d15b25SDag-Erling Smørgrav#include <stdarg.h> 138017d15b25SDag-Erling Smørgrav#endif 138117d15b25SDag-Erling Smørgrav 1382b7579f77SDag-Erling Smørgrav#ifdef HAVE_STDINT_H 1383b7579f77SDag-Erling Smørgrav#include <stdint.h> 1384b7579f77SDag-Erling Smørgrav#endif 1385b7579f77SDag-Erling Smørgrav 1386b7579f77SDag-Erling Smørgrav#include <errno.h> 1387b7579f77SDag-Erling Smørgrav 1388b7579f77SDag-Erling Smørgrav#if HAVE_SYS_PARAM_H 1389b7579f77SDag-Erling Smørgrav#include <sys/param.h> 1390b7579f77SDag-Erling Smørgrav#endif 1391b7579f77SDag-Erling Smørgrav 1392b7579f77SDag-Erling Smørgrav#ifdef HAVE_SYS_SOCKET_H 1393b7579f77SDag-Erling Smørgrav#include <sys/socket.h> 1394b7579f77SDag-Erling Smørgrav#endif 1395b7579f77SDag-Erling Smørgrav 1396b7579f77SDag-Erling Smørgrav#ifdef HAVE_SYS_UIO_H 1397b7579f77SDag-Erling Smørgrav#include <sys/uio.h> 1398b7579f77SDag-Erling Smørgrav#endif 1399b7579f77SDag-Erling Smørgrav 1400b7579f77SDag-Erling Smørgrav#ifdef HAVE_NETINET_IN_H 1401b7579f77SDag-Erling Smørgrav#include <netinet/in.h> 1402b7579f77SDag-Erling Smørgrav#endif 1403b7579f77SDag-Erling Smørgrav 1404f61ef7f6SDag-Erling Smørgrav#ifdef HAVE_NETINET_TCP_H 1405f61ef7f6SDag-Erling Smørgrav#include <netinet/tcp.h> 1406f61ef7f6SDag-Erling Smørgrav#endif 1407f61ef7f6SDag-Erling Smørgrav 1408b7579f77SDag-Erling Smørgrav#ifdef HAVE_ARPA_INET_H 1409b7579f77SDag-Erling Smørgrav#include <arpa/inet.h> 1410b7579f77SDag-Erling Smørgrav#endif 1411b7579f77SDag-Erling Smørgrav 1412b7579f77SDag-Erling Smørgrav#ifdef HAVE_WINSOCK2_H 1413b7579f77SDag-Erling Smørgrav#include <winsock2.h> 1414b7579f77SDag-Erling Smørgrav#endif 1415b7579f77SDag-Erling Smørgrav 1416b7579f77SDag-Erling Smørgrav#ifdef HAVE_WS2TCPIP_H 1417b7579f77SDag-Erling Smørgrav#include <ws2tcpip.h> 1418b7579f77SDag-Erling Smørgrav#endif 141917d15b25SDag-Erling Smørgrav 142017d15b25SDag-Erling Smørgrav#ifndef USE_WINSOCK 142117d15b25SDag-Erling Smørgrav#define ARG_LL "%ll" 142217d15b25SDag-Erling Smørgrav#else 142317d15b25SDag-Erling Smørgrav#define ARG_LL "%I64" 142417d15b25SDag-Erling Smørgrav#endif 14256480faa8SDag-Erling Smørgrav 14266480faa8SDag-Erling Smørgrav#ifndef AF_LOCAL 14276480faa8SDag-Erling Smørgrav#define AF_LOCAL AF_UNIX 14286480faa8SDag-Erling Smørgrav#endif 1429b7579f77SDag-Erling Smørgrav] 1430b7579f77SDag-Erling Smørgrav 1431b7579f77SDag-Erling SmørgravAHX_CONFIG_FORMAT_ATTRIBUTE 1432b7579f77SDag-Erling SmørgravAHX_CONFIG_UNUSED_ATTRIBUTE 1433b7579f77SDag-Erling SmørgravAHX_CONFIG_FSEEKO 1434b7579f77SDag-Erling SmørgravAHX_CONFIG_MAXHOSTNAMELEN 143505ab2901SDag-Erling Smørgrav#if !defined(HAVE_SNPRINTF) || defined(SNPRINTF_RET_BROKEN) 143605ab2901SDag-Erling Smørgrav#define snprintf snprintf_unbound 143705ab2901SDag-Erling Smørgrav#define vsnprintf vsnprintf_unbound 143805ab2901SDag-Erling Smørgrav#include <stdarg.h> 143905ab2901SDag-Erling Smørgravint snprintf (char *str, size_t count, const char *fmt, ...); 144005ab2901SDag-Erling Smørgravint vsnprintf (char *str, size_t count, const char *fmt, va_list arg); 144105ab2901SDag-Erling Smørgrav#endif /* HAVE_SNPRINTF or SNPRINTF_RET_BROKEN */ 1442b7579f77SDag-Erling SmørgravAHX_CONFIG_INET_PTON(unbound) 1443b7579f77SDag-Erling SmørgravAHX_CONFIG_INET_NTOP(unbound) 1444b7579f77SDag-Erling SmørgravAHX_CONFIG_INET_ATON(unbound) 1445b7579f77SDag-Erling SmørgravAHX_CONFIG_MEMMOVE(unbound) 144617d15b25SDag-Erling SmørgravAHX_CONFIG_STRLCAT(unbound) 1447b7579f77SDag-Erling SmørgravAHX_CONFIG_STRLCPY(unbound) 1448b7579f77SDag-Erling SmørgravAHX_CONFIG_GMTIME_R(unbound) 144909a3aaf3SDag-Erling SmørgravAHX_CONFIG_REALLOCARRAY(unbound) 1450b7579f77SDag-Erling SmørgravAHX_CONFIG_W32_SLEEP 1451b7579f77SDag-Erling SmørgravAHX_CONFIG_W32_USLEEP 1452b7579f77SDag-Erling SmørgravAHX_CONFIG_W32_RANDOM 1453b7579f77SDag-Erling SmørgravAHX_CONFIG_W32_SRANDOM 1454b7579f77SDag-Erling SmørgravAHX_CONFIG_W32_FD_SET_T 1455b7579f77SDag-Erling SmørgravAHX_CONFIG_IPV6_MIN_MTU 1456b7579f77SDag-Erling SmørgravAHX_MEMCMP_BROKEN(unbound) 1457b7579f77SDag-Erling Smørgrav 1458b7579f77SDag-Erling Smørgrav[ 1459b7579f77SDag-Erling Smørgrav#ifndef HAVE_CTIME_R 1460b7579f77SDag-Erling Smørgrav#define ctime_r unbound_ctime_r 1461b7579f77SDag-Erling Smørgravchar *ctime_r(const time_t *timep, char *buf); 1462b7579f77SDag-Erling Smørgrav#endif 1463b7579f77SDag-Erling Smørgrav 1464e2d15004SDag-Erling Smørgrav#ifndef HAVE_STRSEP 1465e2d15004SDag-Erling Smørgrav#define strsep unbound_strsep 1466e2d15004SDag-Erling Smørgravchar *strsep(char **stringp, const char *delim); 1467e2d15004SDag-Erling Smørgrav#endif 1468e2d15004SDag-Erling Smørgrav 146905ab2901SDag-Erling Smørgrav#ifndef HAVE_ISBLANK 147005ab2901SDag-Erling Smørgrav#define isblank unbound_isblank 147105ab2901SDag-Erling Smørgravint isblank(int c); 147205ab2901SDag-Erling Smørgrav#endif 147305ab2901SDag-Erling Smørgrav 1474b7579f77SDag-Erling Smørgrav#if !defined(HAVE_STRPTIME) || !defined(STRPTIME_WORKS) 1475b7579f77SDag-Erling Smørgrav#define strptime unbound_strptime 1476b7579f77SDag-Erling Smørgravstruct tm; 1477b7579f77SDag-Erling Smørgravchar *strptime(const char *s, const char *format, struct tm *tm); 1478b7579f77SDag-Erling Smørgrav#endif 1479b7579f77SDag-Erling Smørgrav 1480ff825849SDag-Erling Smørgrav#ifdef HAVE_LIBRESSL 1481ff825849SDag-Erling Smørgrav# if !HAVE_DECL_STRLCPY 1482ff825849SDag-Erling Smørgravsize_t strlcpy(char *dst, const char *src, size_t siz); 1483ff825849SDag-Erling Smørgrav# endif 1484ff825849SDag-Erling Smørgrav# if !HAVE_DECL_STRLCAT 1485ff825849SDag-Erling Smørgravsize_t strlcat(char *dst, const char *src, size_t siz); 1486ff825849SDag-Erling Smørgrav# endif 1487ff825849SDag-Erling Smørgrav# if !HAVE_DECL_ARC4RANDOM && defined(HAVE_ARC4RANDOM) 1488ff825849SDag-Erling Smørgravuint32_t arc4random(void); 1489ff825849SDag-Erling Smørgrav# endif 1490ff825849SDag-Erling Smørgrav# if !HAVE_DECL_ARC4RANDOM_UNIFORM && defined(HAVE_ARC4RANDOM_UNIFORM) 1491ff825849SDag-Erling Smørgravuint32_t arc4random_uniform(uint32_t upper_bound); 1492ff825849SDag-Erling Smørgrav# endif 149309a3aaf3SDag-Erling Smørgrav# if !HAVE_DECL_REALLOCARRAY 149409a3aaf3SDag-Erling Smørgravvoid *reallocarray(void *ptr, size_t nmemb, size_t size); 149509a3aaf3SDag-Erling Smørgrav# endif 1496ff825849SDag-Erling Smørgrav#endif /* HAVE_LIBRESSL */ 1497ff825849SDag-Erling Smørgrav#ifndef HAVE_ARC4RANDOM 1498ff825849SDag-Erling Smørgravvoid explicit_bzero(void* buf, size_t len); 1499ff825849SDag-Erling Smørgravint getentropy(void* buf, size_t len); 1500ff825849SDag-Erling Smørgravuint32_t arc4random(void); 1501ff825849SDag-Erling Smørgravvoid arc4random_buf(void* buf, size_t n); 1502ff825849SDag-Erling Smørgravvoid _ARC4_LOCK(void); 1503ff825849SDag-Erling Smørgravvoid _ARC4_UNLOCK(void); 1504ff825849SDag-Erling Smørgrav#endif 1505ff825849SDag-Erling Smørgrav#ifndef HAVE_ARC4RANDOM_UNIFORM 1506ff825849SDag-Erling Smørgravuint32_t arc4random_uniform(uint32_t upper_bound); 1507ff825849SDag-Erling Smørgrav#endif 1508ff825849SDag-Erling Smørgrav#ifdef COMPAT_SHA512 1509ff825849SDag-Erling Smørgrav#ifndef SHA512_DIGEST_LENGTH 1510ff825849SDag-Erling Smørgrav#define SHA512_BLOCK_LENGTH 128 1511ff825849SDag-Erling Smørgrav#define SHA512_DIGEST_LENGTH 64 1512ff825849SDag-Erling Smørgrav#define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1) 1513ff825849SDag-Erling Smørgravtypedef struct _SHA512_CTX { 1514ff825849SDag-Erling Smørgrav uint64_t state[8]; 1515ff825849SDag-Erling Smørgrav uint64_t bitcount[2]; 1516ff825849SDag-Erling Smørgrav uint8_t buffer[SHA512_BLOCK_LENGTH]; 1517ff825849SDag-Erling Smørgrav} SHA512_CTX; 1518ff825849SDag-Erling Smørgrav#endif /* SHA512_DIGEST_LENGTH */ 1519ff825849SDag-Erling Smørgravvoid SHA512_Init(SHA512_CTX*); 1520ff825849SDag-Erling Smørgravvoid SHA512_Update(SHA512_CTX*, void*, size_t); 1521ff825849SDag-Erling Smørgravvoid SHA512_Final(uint8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*); 1522ff825849SDag-Erling Smørgravunsigned char *SHA512(void* data, unsigned int data_len, unsigned char *digest); 1523ff825849SDag-Erling Smørgrav#endif /* COMPAT_SHA512 */ 1524ff825849SDag-Erling Smørgrav 1525ff825849SDag-Erling Smørgrav 1526ff825849SDag-Erling Smørgrav 1527b7579f77SDag-Erling Smørgrav#if defined(HAVE_EVENT_H) && !defined(HAVE_EVENT_BASE_ONCE) && !(defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)) && (defined(HAVE_PTHREAD) || defined(HAVE_SOLARIS_THREADS)) 1528b7579f77SDag-Erling Smørgrav /* using version of libevent that is not threadsafe. */ 1529b7579f77SDag-Erling Smørgrav# define LIBEVENT_SIGNAL_PROBLEM 1 1530b7579f77SDag-Erling Smørgrav#endif 1531b7579f77SDag-Erling Smørgrav 1532b7579f77SDag-Erling Smørgrav#ifndef CHECKED_INET6 1533b7579f77SDag-Erling Smørgrav# define CHECKED_INET6 1534b7579f77SDag-Erling Smørgrav# ifdef AF_INET6 1535b7579f77SDag-Erling Smørgrav# define INET6 1536b7579f77SDag-Erling Smørgrav# else 1537b7579f77SDag-Erling Smørgrav# define AF_INET6 28 1538b7579f77SDag-Erling Smørgrav# endif 1539b7579f77SDag-Erling Smørgrav#endif /* CHECKED_INET6 */ 1540b7579f77SDag-Erling Smørgrav 1541b7579f77SDag-Erling Smørgrav#ifndef HAVE_GETADDRINFO 1542b7579f77SDag-Erling Smørgravstruct sockaddr_storage; 1543b7579f77SDag-Erling Smørgrav#include "compat/fake-rfc2553.h" 1544b7579f77SDag-Erling Smørgrav#endif 1545b7579f77SDag-Erling Smørgrav 1546b7579f77SDag-Erling Smørgrav#ifdef UNBOUND_ALLOC_STATS 1547b7579f77SDag-Erling Smørgrav# define malloc(s) unbound_stat_malloc_log(s, __FILE__, __LINE__, __func__) 1548b7579f77SDag-Erling Smørgrav# define calloc(n,s) unbound_stat_calloc_log(n, s, __FILE__, __LINE__, __func__) 1549b7579f77SDag-Erling Smørgrav# define free(p) unbound_stat_free_log(p, __FILE__, __LINE__, __func__) 1550b7579f77SDag-Erling Smørgrav# define realloc(p,s) unbound_stat_realloc_log(p, s, __FILE__, __LINE__, __func__) 1551b7579f77SDag-Erling Smørgravvoid *unbound_stat_malloc(size_t size); 1552b7579f77SDag-Erling Smørgravvoid *unbound_stat_calloc(size_t nmemb, size_t size); 1553b7579f77SDag-Erling Smørgravvoid unbound_stat_free(void *ptr); 1554b7579f77SDag-Erling Smørgravvoid *unbound_stat_realloc(void *ptr, size_t size); 1555b7579f77SDag-Erling Smørgravvoid *unbound_stat_malloc_log(size_t size, const char* file, int line, 1556b7579f77SDag-Erling Smørgrav const char* func); 1557b7579f77SDag-Erling Smørgravvoid *unbound_stat_calloc_log(size_t nmemb, size_t size, const char* file, 1558b7579f77SDag-Erling Smørgrav int line, const char* func); 1559b7579f77SDag-Erling Smørgravvoid unbound_stat_free_log(void *ptr, const char* file, int line, 1560b7579f77SDag-Erling Smørgrav const char* func); 1561b7579f77SDag-Erling Smørgravvoid *unbound_stat_realloc_log(void *ptr, size_t size, const char* file, 1562b7579f77SDag-Erling Smørgrav int line, const char* func); 1563b7579f77SDag-Erling Smørgrav#elif defined(UNBOUND_ALLOC_LITE) 1564b7579f77SDag-Erling Smørgrav# include "util/alloc.h" 1565b7579f77SDag-Erling Smørgrav#endif /* UNBOUND_ALLOC_LITE and UNBOUND_ALLOC_STATS */ 1566b7579f77SDag-Erling Smørgrav 1567b7579f77SDag-Erling Smørgrav/** default port for DNS traffic. */ 1568b7579f77SDag-Erling Smørgrav#define UNBOUND_DNS_PORT 53 1569b7579f77SDag-Erling Smørgrav/** default port for unbound control traffic, registered port with IANA, 1570b7579f77SDag-Erling Smørgrav ub-dns-control 8953/tcp unbound dns nameserver control */ 1571b7579f77SDag-Erling Smørgrav#define UNBOUND_CONTROL_PORT 8953 1572b7579f77SDag-Erling Smørgrav/** the version of unbound-control that this software implements */ 1573b7579f77SDag-Erling Smørgrav#define UNBOUND_CONTROL_VERSION 1 1574b7579f77SDag-Erling Smørgrav 1575b7579f77SDag-Erling Smørgrav]) 1576b7579f77SDag-Erling Smørgrav 1577ff825849SDag-Erling Smørgravdnl if we build from source tree, the man pages need @date@ and @version@ 1578ff825849SDag-Erling Smørgravdnl if this is a distro tarball, that was already done by makedist.sh 1579ff825849SDag-Erling SmørgravAC_SUBST(version, [VERSION_MAJOR.VERSION_MINOR.VERSION_MICRO]) 1580ff825849SDag-Erling SmørgravAC_SUBST(date, [`date +'%b %e, %Y'`]) 1581ff825849SDag-Erling Smørgrav 1582*b5663de9SDag-Erling SmørgravAC_CONFIG_FILES([Makefile doc/example.conf doc/libunbound.3 doc/unbound.8 doc/unbound-anchor.8 doc/unbound-checkconf.8 doc/unbound.conf.5 doc/unbound-control.8 doc/unbound-host.1 smallapp/unbound-control-setup.sh dnstap/dnstap_config.h contrib/libunbound.pc]) 1583b7579f77SDag-Erling SmørgravAC_CONFIG_HEADER([config.h]) 1584b7579f77SDag-Erling SmørgravAC_OUTPUT 1585