1b7579f77SDag-Erling Smørgrav# -*- Autoconf -*- 2b7579f77SDag-Erling Smørgrav# Process this file with autoconf to produce a configure script. 3f44e67d1SCy SchubertAC_PREREQ([2.56]) 4b7579f77SDag-Erling Smørgravsinclude(acx_nlnetlabs.m4) 517d15b25SDag-Erling Smørgravsinclude(ax_pthread.m4) 6b7579f77SDag-Erling Smørgravsinclude(acx_python.m4) 7335c7cdaSCy Schubertsinclude(ax_pkg_swig.m4) 8ff825849SDag-Erling Smørgravsinclude(dnstap/dnstap.m4) 965b390aaSDag-Erling Smørgravsinclude(dnscrypt/dnscrypt.m4) 10b7579f77SDag-Erling Smørgrav 1117d15b25SDag-Erling Smørgrav# must be numbers. ac_defun because of later processing 1217d15b25SDag-Erling Smørgravm4_define([VERSION_MAJOR],[1]) 13*46d2f618SCy Schubertm4_define([VERSION_MINOR],[22]) 14*46d2f618SCy Schubertm4_define([VERSION_MICRO],[0]) 15f44e67d1SCy SchubertAC_INIT([unbound],m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]),[unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues],[unbound]) 1617d15b25SDag-Erling SmørgravAC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR]) 1717d15b25SDag-Erling SmørgravAC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR]) 1817d15b25SDag-Erling SmørgravAC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO]) 19b7579f77SDag-Erling Smørgrav 20e86b9096SDag-Erling SmørgravLIBUNBOUND_CURRENT=9 21*46d2f618SCy SchubertLIBUNBOUND_REVISION=30 22e86b9096SDag-Erling SmørgravLIBUNBOUND_AGE=1 23b7579f77SDag-Erling Smørgrav# 1.0.0 had 0:12:0 24b7579f77SDag-Erling Smørgrav# 1.0.1 had 0:13:0 25b7579f77SDag-Erling Smørgrav# 1.0.2 had 0:14:0 26b7579f77SDag-Erling Smørgrav# 1.1.0 had 0:15:0 27b7579f77SDag-Erling Smørgrav# 1.1.1 had 0:16:0 28b7579f77SDag-Erling Smørgrav# 1.2.0 had 0:17:0 29b7579f77SDag-Erling Smørgrav# 1.2.1 had 0:18:0 30b7579f77SDag-Erling Smørgrav# 1.3.0 had 1:0:0 # ub_cancel and -export-symbols. 31b7579f77SDag-Erling Smørgrav# 1.3.1 had 1:1:0 32b7579f77SDag-Erling Smørgrav# 1.3.2 had 1:2:0 33b7579f77SDag-Erling Smørgrav# 1.3.3 had 1:3:0 34b7579f77SDag-Erling Smørgrav# 1.3.4 had 1:4:0 35b7579f77SDag-Erling Smørgrav# 1.4.0-snapshots had 1:5:0 36b7579f77SDag-Erling Smørgrav# 1.4.0 had 1:5:0 (not 2:0:0) # ub_result.why_bogus 37b7579f77SDag-Erling Smørgrav# 1.4.1 had 2:1:0 38b7579f77SDag-Erling Smørgrav# 1.4.2 had 2:2:0 39b7579f77SDag-Erling Smørgrav# 1.4.3 had 2:3:0 40b7579f77SDag-Erling Smørgrav# 1.4.4 had 2:4:0 41b7579f77SDag-Erling Smørgrav# 1.4.5 had 2:5:0 42b7579f77SDag-Erling Smørgrav# 1.4.6 had 2:6:0 43b7579f77SDag-Erling Smørgrav# 1.4.7 had 2:7:0 44b7579f77SDag-Erling Smørgrav# 1.4.8 had 2:8:0 45b7579f77SDag-Erling Smørgrav# 1.4.9 had 2:9:0 46b7579f77SDag-Erling Smørgrav# 1.4.10 had 2:10:0 47b7579f77SDag-Erling Smørgrav# 1.4.11 had 2:11:0 48b7579f77SDag-Erling Smørgrav# 1.4.12 had 2:12:0 49b7579f77SDag-Erling Smørgrav# 1.4.13 had 2:13:0 50b7579f77SDag-Erling Smørgrav# and 1.4.13p1 and 1.4.13.p2 51b7579f77SDag-Erling Smørgrav# 1.4.14 had 2:14:0 52b7579f77SDag-Erling Smørgrav# 1.4.15 had 3:0:1 # adds ub_version() 53b7579f77SDag-Erling Smørgrav# 1.4.16 had 3:1:1 54b7579f77SDag-Erling Smørgrav# 1.4.17 had 3:2:1 558ed2b524SDag-Erling Smørgrav# 1.4.18 had 3:3:1 568ed2b524SDag-Erling Smørgrav# 1.4.19 had 3:4:1 5717d15b25SDag-Erling Smørgrav# 1.4.20 had 4:0:2 # adds libunbound.ttl # but shipped 3:5:1 5817d15b25SDag-Erling Smørgrav# 1.4.21 had 4:1:2 59ff825849SDag-Erling Smørgrav# 1.4.22 had 4:1:2 60ff825849SDag-Erling Smørgrav# 1.5.0 had 5:3:3 # adds ub_ctx_add_ta_autr 616480faa8SDag-Erling Smørgrav# 1.5.1 had 5:3:3 626480faa8SDag-Erling Smørgrav# 1.5.2 had 5:5:3 636480faa8SDag-Erling Smørgrav# 1.5.3 had 5:6:3 6409a3aaf3SDag-Erling Smørgrav# 1.5.4 had 5:7:3 65b75612f8SDag-Erling Smørgrav# 1.5.5 had 5:8:3 6605ab2901SDag-Erling Smørgrav# 1.5.6 had 5:9:3 6705ab2901SDag-Erling Smørgrav# 1.5.7 had 5:10:3 68f61ef7f6SDag-Erling Smørgrav# 1.5.8 had 6:0:4 # adds ub_ctx_set_stub 69e2d15004SDag-Erling Smørgrav# 1.5.9 had 6:1:4 70b5663de9SDag-Erling Smørgrav# 1.5.10 had 6:2:4 71bc892140SDag-Erling Smørgrav# 1.6.0 had 6:3:4 723005e0a3SDag-Erling Smørgrav# 1.6.1 had 7:0:5 # ub_callback_t typedef renamed to ub_callback_type 7365b390aaSDag-Erling Smørgrav# 1.6.2 had 7:1:5 7492bb4ebdSDag-Erling Smørgrav# 1.6.3 had 7:2:5 75c7f4d7adSDag-Erling Smørgrav# 1.6.4 had 7:3:5 768157cbabSDag-Erling Smørgrav# 1.6.5 had 7:4:5 77971980c3SDag-Erling Smørgrav# 1.6.6 had 7:5:5 788a384985SDag-Erling Smørgrav# 1.6.7 had 7:6:5 79838e13ceSDag-Erling Smørgrav# 1.6.8 had 7:7:5 8057bddd21SDag-Erling Smørgrav# 1.7.0 had 7:8:5 810fb34990SDag-Erling Smørgrav# 1.7.1 had 7:9:5 823bd4df0aSDag-Erling Smørgrav# 1.7.2 had 7:10:5 837da0adf7SDag-Erling Smørgrav# 1.7.3 had 7:11:5 84a755b6f6SDag-Erling Smørgrav# 1.8.0 had 8:0:0 # changes the event callback function signature 85a755b6f6SDag-Erling Smørgrav# 1.8.1 had 8:1:0 86e86b9096SDag-Erling Smørgrav# 1.8.2 had 8:2:0 87e86b9096SDag-Erling Smørgrav# 1.8.3 had 8:3:0 88e86b9096SDag-Erling Smørgrav# 1.9.0 had 9:0:1 # add ub_ctx_set_tls 89e86b9096SDag-Erling Smørgrav# 1.9.1 had 9:1:1 90e86b9096SDag-Erling Smørgrav# 1.9.2 had 9:2:1 910eefd307SCy Schubert# 1.9.3 had 9:3:1 920eefd307SCy Schubert# 1.9.4 had 9:4:1 930eefd307SCy Schubert# 1.9.5 had 9:5:1 940eefd307SCy Schubert# 1.9.6 had 9:6:1 95091e9e46SCy Schubert# 1.10.0 had 9:7:1 96091e9e46SCy Schubert# 1.10.1 had 9:8:1 9725039b37SCy Schubert# 1.11.0 had 9:9:1 98c0caa2e2SCy Schubert# 1.12.0 had 9:10:1 99369c6923SCy Schubert# 1.13.0 had 9:11:1 100f44e67d1SCy Schubert# 1.13.1 had 9:12:1 1015469a995SCy Schubert# 1.13.2 had 9:13:1 10224e36522SCy Schubert# 1.14.0 had 9:14:1 1039cf5bc93SCy Schubert# 1.15.0 had 9:15:1 104a39a5a69SCy Schubert# 1.16.0 had 9:16:1 1050a92a9fcSCy Schubert# 1.16.1 had 9:17:1 106790c6b24SCy Schubert# 1.16.2 had 9:18:1 1074f5c8956SCy Schubert# 1.16.3 had 9:19:1 108865f46b2SCy Schubert# 1.17.0 had 9:20:1 1091838dec3SCy Schubert# 1.17.1 had 9:21:1 1108f76bb7dSCy Schubert# 1.18.0 had 9:22:1 111103ba509SCy Schubert# 1.19.0 had 9:23:1 112b76ef9a7SCy Schubert# 1.19.1 had 9:24:1 113b7c0c8c1SCy Schubert# 1.19.2 had 9:25:1 114b7c0c8c1SCy Schubert# 1.19.3 had 9:26:1 115335c7cdaSCy Schubert# 1.20.0 had 9:27:1 11656850988SCy Schubert# 1.21.0 had 9:28:1 1175a5c2279SCy Schubert# 1.21.1 had 9:29:1 118*46d2f618SCy Schubert# 1.22.0 had 9:30:1 119b7579f77SDag-Erling Smørgrav 120b7579f77SDag-Erling Smørgrav# Current -- the number of the binary API that we're implementing 121b7579f77SDag-Erling Smørgrav# Revision -- which iteration of the implementation of the binary 122b7579f77SDag-Erling Smørgrav# API are we supplying? 123b7579f77SDag-Erling Smørgrav# Age -- How many previous binary API versions do we also 124b7579f77SDag-Erling Smørgrav# support? 125b7579f77SDag-Erling Smørgrav# 126b7579f77SDag-Erling Smørgrav# If we release a new version that does not change the binary API, 127b7579f77SDag-Erling Smørgrav# increment Revision. 128b7579f77SDag-Erling Smørgrav# 129b7579f77SDag-Erling Smørgrav# If we release a new version that changes the binary API, but does 130b7579f77SDag-Erling Smørgrav# not break programs compiled against the old binary API, increment 131b7579f77SDag-Erling Smørgrav# Current and Age. Set Revision to 0, since this is the first 132b7579f77SDag-Erling Smørgrav# implementation of the new API. 133b7579f77SDag-Erling Smørgrav# 1348a384985SDag-Erling Smørgrav# Otherwise, we're changing the binary API and breaking backward 135b7579f77SDag-Erling Smørgrav# compatibility with old binaries. Increment Current. Set Age to 0, 136b7579f77SDag-Erling Smørgrav# since we're backward compatible with no previous APIs. Set Revision 137b7579f77SDag-Erling Smørgrav# to 0 too. 138b7579f77SDag-Erling SmørgravAC_SUBST(LIBUNBOUND_CURRENT) 139b7579f77SDag-Erling SmørgravAC_SUBST(LIBUNBOUND_REVISION) 140b7579f77SDag-Erling SmørgravAC_SUBST(LIBUNBOUND_AGE) 141b7579f77SDag-Erling Smørgrav 1420eefd307SCy Schubert 1430eefd307SCy Schubertcmdln="`echo $@ | sed -e 's/\\\\/\\\\\\\\/g' | sed -e 's/"/\\\\"/'g`" 1440eefd307SCy SchubertAC_DEFINE_UNQUOTED(CONFCMDLINE, ["$cmdln"], [Command line arguments used with configure]) 1450eefd307SCy Schubert 146b7579f77SDag-Erling SmørgravCFLAGS="$CFLAGS" 147f44e67d1SCy SchubertAC_USE_SYSTEM_EXTENSIONS 14817d15b25SDag-Erling Smørgravif test "$ac_cv_header_minix_config_h" = "yes"; then 14917d15b25SDag-Erling Smørgrav AC_DEFINE(_NETBSD_SOURCE,1, [Enable for compile on Minix]) 15017d15b25SDag-Erling Smørgravfi 151b7579f77SDag-Erling Smørgrav 152b7579f77SDag-Erling Smørgravdnl 153b7579f77SDag-Erling Smørgravdnl By default set prefix to /usr/local 154b7579f77SDag-Erling Smørgravdnl 155b7579f77SDag-Erling Smørgravcase "$prefix" in 156b7579f77SDag-Erling Smørgrav NONE) 157b7579f77SDag-Erling Smørgrav prefix="/usr/local" 158b7579f77SDag-Erling Smørgrav ;; 159b7579f77SDag-Erling Smørgravesac 160c7f4d7adSDag-Erling Smørgravcase "$exec_prefix" in 161c7f4d7adSDag-Erling Smørgrav NONE) 162c7f4d7adSDag-Erling Smørgrav exec_prefix="$prefix" 163c7f4d7adSDag-Erling Smørgrav ;; 164c7f4d7adSDag-Erling Smørgravesac 165b7579f77SDag-Erling Smørgrav 166b7579f77SDag-Erling Smørgrav# are we on MinGW? 1675469a995SCy Schubertif uname -s 2>&1 | grep MINGW >/dev/null; then on_mingw="yes" 168b7579f77SDag-Erling Smørgravelse 1695469a995SCy Schubert if echo $host | grep mingw >/dev/null; then on_mingw="yes" 170b7579f77SDag-Erling Smørgrav else on_mingw="no"; fi 171b7579f77SDag-Erling Smørgravfi 172b7579f77SDag-Erling Smørgrav 173b7579f77SDag-Erling Smørgrav# 174b7579f77SDag-Erling Smørgrav# Determine configuration file 175b7579f77SDag-Erling Smørgrav# the eval is to evaluate shell expansion twice 176c7f4d7adSDag-Erling SmørgravUNBOUND_SBIN_DIR=`eval echo "${sbindir}"` 177c7f4d7adSDag-Erling SmørgravAC_SUBST(UNBOUND_SBIN_DIR) 178c7f4d7adSDag-Erling SmørgravUNBOUND_SYSCONF_DIR=`eval echo "${sysconfdir}"` 179c7f4d7adSDag-Erling SmørgravAC_SUBST(UNBOUND_SYSCONF_DIR) 180c7f4d7adSDag-Erling SmørgravUNBOUND_LOCALSTATE_DIR=`eval echo "${localstatedir}"` 181c7f4d7adSDag-Erling SmørgravAC_SUBST(UNBOUND_LOCALSTATE_DIR) 182b7579f77SDag-Erling Smørgravif test $on_mingw = "no"; then 183b7579f77SDag-Erling Smørgrav ub_conf_file=`eval echo "${sysconfdir}/unbound/unbound.conf"` 184b7579f77SDag-Erling Smørgravelse 18565b390aaSDag-Erling Smørgrav ub_conf_file="C:\\Program Files\\Unbound\\service.conf" 186b7579f77SDag-Erling Smørgravfi 187b7579f77SDag-Erling SmørgravAC_ARG_WITH([conf_file], 188f44e67d1SCy Schubert AS_HELP_STRING([--with-conf-file=path],[Pathname to the Unbound configuration file]), 189b7579f77SDag-Erling Smørgrav [ub_conf_file="$withval"]) 190b7579f77SDag-Erling SmørgravAC_SUBST(ub_conf_file) 191b7579f77SDag-Erling SmørgravACX_ESCAPE_BACKSLASH($ub_conf_file, hdr_config) 192b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(CONFIGFILE, ["$hdr_config"], [Pathname to the Unbound configuration file]) 1936480faa8SDag-Erling Smørgravub_conf_dir=`AS_DIRNAME(["$ub_conf_file"])` 1946480faa8SDag-Erling SmørgravAC_SUBST(ub_conf_dir) 195b7579f77SDag-Erling Smørgrav 196b7579f77SDag-Erling Smørgrav# Determine run, chroot directory and pidfile locations 197b7579f77SDag-Erling SmørgravAC_ARG_WITH(run-dir, 198f44e67d1SCy Schubert AS_HELP_STRING([--with-run-dir=path],[set default directory to chdir to (by default dir part of cfg file)]), 199b7579f77SDag-Erling Smørgrav UNBOUND_RUN_DIR="$withval", 200b7579f77SDag-Erling Smørgravif test $on_mingw = no; then 201b7579f77SDag-Erling Smørgrav UNBOUND_RUN_DIR=`dirname "$ub_conf_file"` 202b7579f77SDag-Erling Smørgravelse 203b7579f77SDag-Erling Smørgrav UNBOUND_RUN_DIR="" 204b7579f77SDag-Erling Smørgravfi 205b7579f77SDag-Erling Smørgrav) 206b7579f77SDag-Erling SmørgravAC_SUBST(UNBOUND_RUN_DIR) 207b7579f77SDag-Erling SmørgravACX_ESCAPE_BACKSLASH($UNBOUND_RUN_DIR, hdr_run) 208b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(RUN_DIR, ["$hdr_run"], [Directory to chdir to]) 209b7579f77SDag-Erling Smørgrav 210b7579f77SDag-Erling SmørgravAC_ARG_WITH(chroot-dir, 211f44e67d1SCy Schubert AS_HELP_STRING([--with-chroot-dir=path],[set default directory to chroot to (by default same as run-dir)]), 212b7579f77SDag-Erling Smørgrav UNBOUND_CHROOT_DIR="$withval", 213b7579f77SDag-Erling Smørgravif test $on_mingw = no; then 214b7579f77SDag-Erling Smørgrav UNBOUND_CHROOT_DIR="$UNBOUND_RUN_DIR" 215b7579f77SDag-Erling Smørgravelse 216b7579f77SDag-Erling Smørgrav UNBOUND_CHROOT_DIR="" 217b7579f77SDag-Erling Smørgravfi 218b7579f77SDag-Erling Smørgrav) 219b7579f77SDag-Erling SmørgravAC_SUBST(UNBOUND_CHROOT_DIR) 220b7579f77SDag-Erling SmørgravACX_ESCAPE_BACKSLASH($UNBOUND_CHROOT_DIR, hdr_chroot) 221b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(CHROOT_DIR, ["$hdr_chroot"], [Directory to chroot to]) 222b7579f77SDag-Erling Smørgrav 223b7579f77SDag-Erling SmørgravAC_ARG_WITH(share-dir, 224f44e67d1SCy Schubert AS_HELP_STRING([--with-share-dir=path],[set default directory with shared data (by default same as share/unbound)]), 225b7579f77SDag-Erling Smørgrav UNBOUND_SHARE_DIR="$withval", 226b7579f77SDag-Erling Smørgrav UNBOUND_SHARE_DIR="$UNBOUND_RUN_DIR") 227b7579f77SDag-Erling SmørgravAC_SUBST(UNBOUND_SHARE_DIR) 228b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(SHARE_DIR, ["$UNBOUND_SHARE_DIR"], [Shared data]) 229b7579f77SDag-Erling Smørgrav 230b7579f77SDag-Erling SmørgravAC_ARG_WITH(pidfile, 231f44e67d1SCy Schubert AS_HELP_STRING([--with-pidfile=filename],[set default pathname to unbound pidfile (default run-dir/unbound.pid)]), 232b7579f77SDag-Erling Smørgrav UNBOUND_PIDFILE="$withval", 233b7579f77SDag-Erling Smørgravif test $on_mingw = no; then 234b7579f77SDag-Erling Smørgrav UNBOUND_PIDFILE="$UNBOUND_RUN_DIR/unbound.pid" 235b7579f77SDag-Erling Smørgravelse 236b7579f77SDag-Erling Smørgrav UNBOUND_PIDFILE="" 237b7579f77SDag-Erling Smørgravfi 238b7579f77SDag-Erling Smørgrav) 239b7579f77SDag-Erling SmørgravAC_SUBST(UNBOUND_PIDFILE) 240b7579f77SDag-Erling SmørgravACX_ESCAPE_BACKSLASH($UNBOUND_PIDFILE, hdr_pid) 241b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(PIDFILE, ["$hdr_pid"], [default pidfile location]) 242b7579f77SDag-Erling Smørgrav 243b7579f77SDag-Erling SmørgravAC_ARG_WITH(rootkey-file, 244f44e67d1SCy Schubert AS_HELP_STRING([--with-rootkey-file=filename],[set default pathname to root key file (default run-dir/root.key). This file is read and written.]), 245b7579f77SDag-Erling Smørgrav UNBOUND_ROOTKEY_FILE="$withval", 246b7579f77SDag-Erling Smørgravif test $on_mingw = no; then 247b7579f77SDag-Erling Smørgrav UNBOUND_ROOTKEY_FILE="$UNBOUND_RUN_DIR/root.key" 248b7579f77SDag-Erling Smørgravelse 24965b390aaSDag-Erling Smørgrav UNBOUND_ROOTKEY_FILE="C:\\Program Files\\Unbound\\root.key" 250b7579f77SDag-Erling Smørgravfi 251b7579f77SDag-Erling Smørgrav) 252b7579f77SDag-Erling SmørgravAC_SUBST(UNBOUND_ROOTKEY_FILE) 253b7579f77SDag-Erling SmørgravACX_ESCAPE_BACKSLASH($UNBOUND_ROOTKEY_FILE, hdr_rkey) 254b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(ROOT_ANCHOR_FILE, ["$hdr_rkey"], [default rootkey location]) 255b7579f77SDag-Erling Smørgrav 256b7579f77SDag-Erling SmørgravAC_ARG_WITH(rootcert-file, 257f44e67d1SCy Schubert AS_HELP_STRING([--with-rootcert-file=filename],[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.]), 258b7579f77SDag-Erling Smørgrav UNBOUND_ROOTCERT_FILE="$withval", 259b7579f77SDag-Erling Smørgravif test $on_mingw = no; then 260b7579f77SDag-Erling Smørgrav UNBOUND_ROOTCERT_FILE="$UNBOUND_RUN_DIR/icannbundle.pem" 261b7579f77SDag-Erling Smørgravelse 26265b390aaSDag-Erling Smørgrav UNBOUND_ROOTCERT_FILE="C:\\Program Files\\Unbound\\icannbundle.pem" 263b7579f77SDag-Erling Smørgravfi 264b7579f77SDag-Erling Smørgrav) 265b7579f77SDag-Erling SmørgravAC_SUBST(UNBOUND_ROOTCERT_FILE) 266b7579f77SDag-Erling SmørgravACX_ESCAPE_BACKSLASH($UNBOUND_ROOTCERT_FILE, hdr_rpem) 267b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(ROOT_CERT_FILE, ["$hdr_rpem"], [default rootcert location]) 268b7579f77SDag-Erling Smørgrav 269b7579f77SDag-Erling SmørgravAC_ARG_WITH(username, 270f44e67d1SCy Schubert AS_HELP_STRING([--with-username=user],[set default user that unbound changes to (default user is unbound)]), 271b7579f77SDag-Erling Smørgrav UNBOUND_USERNAME="$withval", 272b7579f77SDag-Erling Smørgrav UNBOUND_USERNAME="unbound") 273b7579f77SDag-Erling SmørgravAC_SUBST(UNBOUND_USERNAME) 274b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(UB_USERNAME, ["$UNBOUND_USERNAME"], [default username]) 275b7579f77SDag-Erling Smørgrav 276b7579f77SDag-Erling SmørgravAC_DEFINE(WINVER, 0x0502, [the version of the windows API enabled]) 277b7579f77SDag-Erling SmørgravACX_RSRC_VERSION(wnvs) 278b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(RSRC_PACKAGE_VERSION, [$wnvs], [version number for resource files]) 279b7579f77SDag-Erling Smørgrav 280335c7cdaSCy Schubert# Check for 'grep -e' program, here, since ACX_CHECK_FLTO needs that. 281335c7cdaSCy SchubertAC_PROG_GREP 282335c7cdaSCy Schubert 283b7579f77SDag-Erling Smørgrav# Checks for typedefs, structures, and compiler characteristics. 284b7579f77SDag-Erling SmørgravAC_C_CONST 285f44e67d1SCy SchubertAC_LANG([C]) 2868ed2b524SDag-Erling Smørgrav# allow user to override the -g -O2 flags. 28757bddd21SDag-Erling Smørgravdefault_cflags=no 2888ed2b524SDag-Erling Smørgravif test "x$CFLAGS" = "x" ; then 289b7579f77SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG(g, [CFLAGS="$CFLAGS -g"]) 290b7579f77SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG(O2, [CFLAGS="$CFLAGS -O2"]) 29157bddd21SDag-Erling Smørgravdefault_cflags=yes 2928ed2b524SDag-Erling Smørgravfi 293103ba509SCy Schubertm4_version_prereq([2.70], [AC_PROG_CC], [AC_PROG_CC_STDC]) 294b7579f77SDag-Erling SmørgravACX_DEPFLAG 295b7579f77SDag-Erling SmørgravACX_DETERMINE_EXT_FLAGS_UNBOUND 296b7579f77SDag-Erling Smørgrav 297b7579f77SDag-Erling Smørgrav# debug mode flags warnings 298f44e67d1SCy SchubertAC_ARG_ENABLE(checking, AS_HELP_STRING([--enable-checking],[Enable warnings, asserts, makefile-dependencies])) 299f44e67d1SCy SchubertAC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug],[same as enable-checking])) 300b7579f77SDag-Erling Smørgravif test "$enable_debug" = "yes"; then debug_enabled="$enable_debug"; 301b7579f77SDag-Erling Smørgravelse debug_enabled="$enable_checking"; fi 302b7579f77SDag-Erling SmørgravAC_SUBST(debug_enabled) 303b7579f77SDag-Erling Smørgravcase "$debug_enabled" in 304b7579f77SDag-Erling Smørgrav yes) 305b7579f77SDag-Erling Smørgrav ACX_CHECK_COMPILER_FLAG(W, [CFLAGS="$CFLAGS -W"]) 306b7579f77SDag-Erling Smørgrav ACX_CHECK_COMPILER_FLAG(Wall, [CFLAGS="$CFLAGS -Wall"]) 307b7579f77SDag-Erling Smørgrav ACX_CHECK_COMPILER_FLAG(Wextra, [CFLAGS="$CFLAGS -Wextra"]) 308b7579f77SDag-Erling Smørgrav ACX_CHECK_COMPILER_FLAG(Wdeclaration-after-statement, [CFLAGS="$CFLAGS -Wdeclaration-after-statement"]) 309b7579f77SDag-Erling Smørgrav AC_DEFINE([UNBOUND_DEBUG], [], [define this to enable debug checks.]) 310b7579f77SDag-Erling Smørgrav ;; 311b7579f77SDag-Erling Smørgrav no|*) 312b7579f77SDag-Erling Smørgrav # nothing to do. 313b7579f77SDag-Erling Smørgrav ;; 314b7579f77SDag-Erling Smørgravesac 31557bddd21SDag-Erling Smørgravif test "$default_cflags" = "yes"; then 31657bddd21SDag-Erling Smørgrav # only when CFLAGS was "" at the start, if the users wants to 31757bddd21SDag-Erling Smørgrav # override we shouldn't add default cflags, because they wouldn't 31857bddd21SDag-Erling Smørgrav # be able to turn off these options and set the CFLAGS wanted. 319b7579f77SDag-Erling Smørgrav ACX_CHECK_FLTO 320b75612f8SDag-Erling Smørgrav ACX_CHECK_PIE 321b75612f8SDag-Erling Smørgrav ACX_CHECK_RELRO_NOW 32257bddd21SDag-Erling Smørgravfi 323b7579f77SDag-Erling Smørgrav 324b7579f77SDag-Erling SmørgravAC_C_INLINE 325b7579f77SDag-Erling SmørgravACX_CHECK_FORMAT_ATTRIBUTE 326b7579f77SDag-Erling SmørgravACX_CHECK_UNUSED_ATTRIBUTE 327b7579f77SDag-Erling Smørgrav 328e2d15004SDag-Erling SmørgravAC_DEFUN([CHECK_WEAK_ATTRIBUTE], 329e2d15004SDag-Erling Smørgrav[AC_REQUIRE([AC_PROG_CC]) 330e2d15004SDag-Erling SmørgravAC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "weak" attribute) 331e2d15004SDag-Erling SmørgravAC_CACHE_VAL(ac_cv_c_weak_attribute, 332e2d15004SDag-Erling Smørgrav[ac_cv_c_weak_attribute=no 333f44e67d1SCy SchubertAC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h> 334e2d15004SDag-Erling Smørgrav__attribute__((weak)) void f(int x) { printf("%d", x); } 335f44e67d1SCy Schubert]], [[ 336e2d15004SDag-Erling Smørgrav f(1); 337f44e67d1SCy Schubert]])],[ac_cv_c_weak_attribute="yes"],[ac_cv_c_weak_attribute="no"]) 338e2d15004SDag-Erling Smørgrav]) 339e2d15004SDag-Erling Smørgrav 340e2d15004SDag-Erling SmørgravAC_MSG_RESULT($ac_cv_c_weak_attribute) 341e2d15004SDag-Erling Smørgravif test $ac_cv_c_weak_attribute = yes; then 342e2d15004SDag-Erling Smørgrav AC_DEFINE(HAVE_ATTR_WEAK, 1, [Whether the C compiler accepts the "weak" attribute]) 343a755b6f6SDag-Erling Smørgrav AC_DEFINE(ATTR_WEAK, [__attribute__((weak))], [apply the weak attribute to a symbol]) 34456850988SCy Schubertelse 34556850988SCy Schubert AC_DEFINE(ATTR_WEAK,[], [apply the weak attribute to a symbol]) 346e2d15004SDag-Erling Smørgravfi 347e2d15004SDag-Erling Smørgrav])dnl End of CHECK_WEAK_ATTRIBUTE 348e2d15004SDag-Erling Smørgrav 349e2d15004SDag-Erling SmørgravCHECK_WEAK_ATTRIBUTE 350e2d15004SDag-Erling Smørgrav 351a755b6f6SDag-Erling SmørgravAC_DEFUN([CHECK_NORETURN_ATTRIBUTE], 352a755b6f6SDag-Erling Smørgrav[AC_REQUIRE([AC_PROG_CC]) 353a755b6f6SDag-Erling SmørgravAC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "noreturn" attribute) 354a755b6f6SDag-Erling SmørgravAC_CACHE_VAL(ac_cv_c_noreturn_attribute, 355a755b6f6SDag-Erling Smørgrav[ac_cv_c_noreturn_attribute=no 356f44e67d1SCy SchubertAC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h> 357a755b6f6SDag-Erling Smørgrav__attribute__((noreturn)) void f(int x) { printf("%d", x); } 358f44e67d1SCy Schubert]], [[ 359a755b6f6SDag-Erling Smørgrav f(1); 360f44e67d1SCy Schubert]])],[ac_cv_c_noreturn_attribute="yes"],[ac_cv_c_noreturn_attribute="no"]) 361a755b6f6SDag-Erling Smørgrav]) 362a755b6f6SDag-Erling Smørgrav 363a755b6f6SDag-Erling SmørgravAC_MSG_RESULT($ac_cv_c_noreturn_attribute) 364a755b6f6SDag-Erling Smørgravif test $ac_cv_c_noreturn_attribute = yes; then 365a755b6f6SDag-Erling Smørgrav AC_DEFINE(HAVE_ATTR_NORETURN, 1, [Whether the C compiler accepts the "noreturn" attribute]) 366a755b6f6SDag-Erling Smørgrav AC_DEFINE(ATTR_NORETURN, [__attribute__((__noreturn__))], [apply the noreturn attribute to a function that exits the program]) 36756850988SCy Schubertelse 36856850988SCy Schubert AC_DEFINE(ATTR_NORETURN,[], [apply the noreturn attribute to a function that exits the program]) 369a755b6f6SDag-Erling Smørgravfi 370a755b6f6SDag-Erling Smørgrav])dnl End of CHECK_NORETURN_ATTRIBUTE 371a755b6f6SDag-Erling Smørgrav 372a755b6f6SDag-Erling SmørgravCHECK_NORETURN_ATTRIBUTE 373a755b6f6SDag-Erling Smørgrav 37456850988SCy SchubertAC_DEFUN([CHECK_FALLTHROUGH_ATTRIBUTE], 37556850988SCy Schubert[AC_REQUIRE([AC_PROG_CC]) 37656850988SCy SchubertAC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "fallthrough" attribute) 37756850988SCy SchubertBAKCFLAGS="$CFLAGS" 37856850988SCy SchubertCFLAGS="$CFLAGS -Werror" 37956850988SCy SchubertAC_CACHE_VAL(ac_cv_c_fallthrough_attribute, 38056850988SCy Schubert[ac_cv_c_fallthrough_attribute=no 38156850988SCy SchubertAC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h> 38256850988SCy Schubertvoid f(int x) { 38356850988SCy Schubert int y = 0; 38456850988SCy Schubert switch(x) { 38556850988SCy Schubert case 1: 38656850988SCy Schubert y = 1; 38756850988SCy Schubert __attribute__((fallthrough)); 38856850988SCy Schubert /* fallthrough */ 38956850988SCy Schubert case 2: 39056850988SCy Schubert y++; 39156850988SCy Schubert break; 39256850988SCy Schubert case 3: 39356850988SCy Schubert y = 3; 39456850988SCy Schubert break; 39556850988SCy Schubert } 39656850988SCy Schubert printf("%d", y); 39756850988SCy Schubert} 39856850988SCy Schubert]], [[ 39956850988SCy Schubert f(1); 40056850988SCy Schubert]])],[ac_cv_c_fallthrough_attribute="yes"],[ac_cv_c_fallthrough_attribute="no"]) 40156850988SCy Schubert]) 40256850988SCy SchubertCFLAGS="$BAKCFLAGS" 40356850988SCy Schubert 40456850988SCy SchubertAC_MSG_RESULT($ac_cv_c_fallthrough_attribute) 40556850988SCy Schubertif test $ac_cv_c_fallthrough_attribute = yes; then 40656850988SCy Schubert AC_DEFINE(HAVE_ATTR_FALLTHROUGH, 1, [Whether the C compiler accepts the "fallthrough" attribute]) 40756850988SCy Schubert AC_DEFINE(ATTR_FALLTHROUGH, [__attribute__((fallthrough));], [apply the fallthrough attribute.]) 40856850988SCy Schubertelse 40956850988SCy Schubert AC_DEFINE(ATTR_FALLTHROUGH,[], [apply the fallthrough attribute.]) 41056850988SCy Schubertfi 41156850988SCy Schubert])dnl End of CHECK_FALLTHROUGH_ATTRIBUTE 41256850988SCy Schubert 41356850988SCy SchubertCHECK_FALLTHROUGH_ATTRIBUTE 41456850988SCy Schubert 415b7579f77SDag-Erling Smørgravif test "$srcdir" != "."; then 416b7579f77SDag-Erling Smørgrav CPPFLAGS="$CPPFLAGS -I$srcdir" 417b7579f77SDag-Erling Smørgravfi 418b7579f77SDag-Erling Smørgrav 419b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_YYLEX_DESTROY], [ 420b7579f77SDag-Erling Smørgrav AC_MSG_CHECKING([for yylex_destroy]) 421b7579f77SDag-Erling Smørgrav if echo %% | $LEX -t 2>&1 | grep yylex_destroy >/dev/null 2>&1; then 422b7579f77SDag-Erling Smørgrav AC_DEFINE(LEX_HAS_YYLEX_DESTROY, 1, [if lex has yylex_destroy]) 423b7579f77SDag-Erling Smørgrav AC_MSG_RESULT(yes) 4244c75e3aaSDag-Erling Smørgrav else AC_MSG_RESULT(no); 4254c75e3aaSDag-Erling Smørgrav LEX=":" 4264c75e3aaSDag-Erling Smørgrav fi 4274c75e3aaSDag-Erling Smørgrav]) 4284c75e3aaSDag-Erling Smørgrav 4294c75e3aaSDag-Erling SmørgravAC_DEFUN([ACX_YYLEX_OPTION], [ 4304c75e3aaSDag-Erling Smørgrav AC_MSG_CHECKING([for lex %option]) 4314c75e3aaSDag-Erling Smørgrav if cat <<EOF | $LEX -t 2>&1 | grep yy_delete_buffer >/dev/null 2>&1; then 4324c75e3aaSDag-Erling Smørgrav%option nounput 4334c75e3aaSDag-Erling Smørgrav%% 4344c75e3aaSDag-Erling SmørgravEOF 4354c75e3aaSDag-Erling Smørgrav AC_MSG_RESULT(yes) 4364c75e3aaSDag-Erling Smørgrav else AC_MSG_RESULT(no); 4374c75e3aaSDag-Erling Smørgrav LEX=":" 4384c75e3aaSDag-Erling Smørgrav fi 439b7579f77SDag-Erling Smørgrav]) 440b7579f77SDag-Erling Smørgrav 441f44e67d1SCy SchubertAC_PROG_LEX([noyywrap]) 4424c75e3aaSDag-Erling Smørgravif test "$LEX" != "" -a "$LEX" != ":"; then 443b7579f77SDag-Erling SmørgravACX_YYLEX_DESTROY 4444c75e3aaSDag-Erling Smørgravfi 4454c75e3aaSDag-Erling Smørgravif test "$LEX" != "" -a "$LEX" != ":"; then 4464c75e3aaSDag-Erling SmørgravACX_YYLEX_OPTION 4474c75e3aaSDag-Erling Smørgravfi 4488f76bb7dSCy Schubertif test "$LEX" = "" -o "$LEX" = ":"; then 4498f76bb7dSCy Schubert if test ! -f util/configlexer.c; then 4508f76bb7dSCy Schubert AC_MSG_ERROR([no lex and no util/configlexer.c: need flex and bison to compile from source repository.]) 4518f76bb7dSCy Schubert fi 4528f76bb7dSCy Schubertfi 453b7579f77SDag-Erling SmørgravAC_PROG_YACC 4548f76bb7dSCy Schubertif test "$YACC" = "" -o "$YACC" = ":"; then 4558f76bb7dSCy Schubert if test ! -f util/configparser.c; then 4568f76bb7dSCy Schubert AC_MSG_ERROR([no yacc and no util/configparser.c: need flex and bison to compile from source repository.]) 4578f76bb7dSCy Schubert fi 4588f76bb7dSCy Schubertfi 459b7579f77SDag-Erling SmørgravAC_CHECK_PROG(doxygen, doxygen, doxygen) 460b7579f77SDag-Erling SmørgravAC_CHECK_TOOL(STRIP, strip) 461b7579f77SDag-Erling SmørgravACX_LIBTOOL_C_ONLY 462b7579f77SDag-Erling Smørgrav 4635469a995SCy Schubert# pkg-config is only needed for these options, do not require it otherwise 464b7c0c8c1SCy Schubertif test "$enable_systemd" = "yes" -o "$enable_dnstap" = "yes" -o "$with_pyunbound" = "yes" -o "$with_pythonmod" = "yes"; then 465e86b9096SDag-Erling SmørgravPKG_PROG_PKG_CONFIG 4665469a995SCy Schubertfi 467e86b9096SDag-Erling Smørgrav 468b7579f77SDag-Erling Smørgrav# Checks for header files. 469865f46b2SCy SchubertAC_CHECK_HEADERS([stdarg.h stdbool.h netinet/in.h netinet/tcp.h sys/param.h sys/select.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 sys/endian.h libkern/OSByteOrder.h sys/ipc.h sys/shm.h ifaddrs.h poll.h],,, [AC_INCLUDES_DEFAULT]) 470369c6923SCy Schubert# net/if.h portability for Darwin see: 471369c6923SCy Schubert# https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Header-Portability.html 472369c6923SCy SchubertAC_CHECK_HEADERS([net/if.h],,, [ 473369c6923SCy Schubert#include <stdio.h> 474369c6923SCy Schubert#ifdef STDC_HEADERS 475369c6923SCy Schubert# include <stdlib.h> 476369c6923SCy Schubert# include <stddef.h> 477369c6923SCy Schubert#else 478369c6923SCy Schubert# ifdef HAVE_STDLIB_H 479369c6923SCy Schubert# include <stdlib.h> 480369c6923SCy Schubert# endif 481369c6923SCy Schubert#endif 482369c6923SCy Schubert#ifdef HAVE_SYS_SOCKET_H 483369c6923SCy Schubert# include <sys/socket.h> 484369c6923SCy Schubert#endif 485369c6923SCy Schubert]) 486b7579f77SDag-Erling Smørgrav 48725039b37SCy Schubert# Check for Apple header. This uncovers TARGET_OS_IPHONE, TARGET_OS_TV or TARGET_OS_WATCH 4885469a995SCy SchubertAC_CHECK_HEADERS([TargetConditionals.h],,, [AC_INCLUDES_DEFAULT]) 4899cf5bc93SCy SchubertAC_CHECK_HEADERS([netioapi.h],,, [AC_INCLUDES_DEFAULT 4909cf5bc93SCy Schubert#if HAVE_SYS_PARAM_H 4919cf5bc93SCy Schubert#include <sys/param.h> 4929cf5bc93SCy Schubert#endif 4939cf5bc93SCy Schubert 4949cf5bc93SCy Schubert#ifdef HAVE_SYS_SOCKET_H 4959cf5bc93SCy Schubert#include <sys/socket.h> 4969cf5bc93SCy Schubert#endif 4979cf5bc93SCy Schubert 4989cf5bc93SCy Schubert#ifdef HAVE_SYS_UIO_H 4999cf5bc93SCy Schubert#include <sys/uio.h> 5009cf5bc93SCy Schubert#endif 5019cf5bc93SCy Schubert 5029cf5bc93SCy Schubert#ifdef HAVE_NETINET_IN_H 5039cf5bc93SCy Schubert#include <netinet/in.h> 5049cf5bc93SCy Schubert#endif 5059cf5bc93SCy Schubert 5069cf5bc93SCy Schubert#ifdef HAVE_NETINET_TCP_H 5079cf5bc93SCy Schubert#include <netinet/tcp.h> 5089cf5bc93SCy Schubert#endif 5099cf5bc93SCy Schubert 5109cf5bc93SCy Schubert#ifdef HAVE_ARPA_INET_H 5119cf5bc93SCy Schubert#include <arpa/inet.h> 5129cf5bc93SCy Schubert#endif 5139cf5bc93SCy Schubert 5149cf5bc93SCy Schubert#ifdef HAVE_WINSOCK2_H 5159cf5bc93SCy Schubert#include <winsock2.h> 5169cf5bc93SCy Schubert#endif 5179cf5bc93SCy Schubert 5189cf5bc93SCy Schubert#ifdef HAVE_WS2TCPIP_H 5199cf5bc93SCy Schubert#include <ws2tcpip.h> 5209cf5bc93SCy Schubert#endif 5219cf5bc93SCy Schubert]) 52225039b37SCy Schubert 5238f76bb7dSCy Schubert# Check for Linux timestamping headers 5248f76bb7dSCy SchubertAC_CHECK_HEADERS([linux/net_tstamp.h],,, [AC_INCLUDES_DEFAULT]) 5258f76bb7dSCy Schubert 526b7579f77SDag-Erling Smørgrav# check for types. 527b7579f77SDag-Erling Smørgrav# Using own tests for int64* because autoconf builtin only give 32bit. 528b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(int8_t, signed char) 529b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(int16_t, short) 530b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(int32_t, int) 531b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(int64_t, long long) 532b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(uint8_t, unsigned char) 533b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(uint16_t, unsigned short) 534b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(uint32_t, unsigned int) 535b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(uint64_t, unsigned long long) 536b7579f77SDag-Erling SmørgravAC_TYPE_SIZE_T 537b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(ssize_t, int) 538b7579f77SDag-Erling SmørgravAC_TYPE_UID_T 539b7579f77SDag-Erling SmørgravAC_TYPE_PID_T 540b7579f77SDag-Erling SmørgravAC_TYPE_OFF_T 541b7579f77SDag-Erling SmørgravACX_TYPE_U_CHAR 542b7579f77SDag-Erling SmørgravACX_TYPE_RLIM_T 543b7579f77SDag-Erling SmørgravACX_TYPE_SOCKLEN_T 544b7579f77SDag-Erling SmørgravACX_TYPE_IN_ADDR_T 545b7579f77SDag-Erling SmørgravACX_TYPE_IN_PORT_T 546b7579f77SDag-Erling SmørgravACX_CHECK_MEMCMP_SIGNED 547b7579f77SDag-Erling Smørgrav 54817d15b25SDag-Erling SmørgravAC_CHECK_SIZEOF(time_t,,[ 54917d15b25SDag-Erling SmørgravAC_INCLUDES_DEFAULT 55017d15b25SDag-Erling Smørgrav#ifdef TIME_WITH_SYS_TIME 55117d15b25SDag-Erling Smørgrav# include <sys/time.h> 55217d15b25SDag-Erling Smørgrav# include <time.h> 55317d15b25SDag-Erling Smørgrav#else 55417d15b25SDag-Erling Smørgrav# ifdef HAVE_SYS_TIME_H 55517d15b25SDag-Erling Smørgrav# include <sys/time.h> 55617d15b25SDag-Erling Smørgrav# else 55717d15b25SDag-Erling Smørgrav# include <time.h> 55817d15b25SDag-Erling Smørgrav# endif 55917d15b25SDag-Erling Smørgrav#endif 56017d15b25SDag-Erling Smørgrav]) 5610eefd307SCy SchubertAC_CHECK_SIZEOF(size_t) 56217d15b25SDag-Erling Smørgrav 563b7579f77SDag-Erling Smørgrav# add option to disable the evil rpath 564b7579f77SDag-Erling SmørgravACX_ARG_RPATH 565b7579f77SDag-Erling SmørgravAC_SUBST(RUNTIME_PATH) 566b7579f77SDag-Erling Smørgrav 567b7579f77SDag-Erling Smørgrav# check to see if libraries are needed for these functions. 568b7579f77SDag-Erling SmørgravAC_SEARCH_LIBS([inet_pton], [nsl]) 569b7579f77SDag-Erling SmørgravAC_SEARCH_LIBS([socket], [socket]) 570b7579f77SDag-Erling Smørgrav 57124e36522SCy Schubert# check whether strptime also works 572b7579f77SDag-Erling SmørgravAC_DEFUN([AC_CHECK_STRPTIME_WORKS], 573b7579f77SDag-Erling Smørgrav[AC_REQUIRE([AC_PROG_CC]) 574b7579f77SDag-Erling SmørgravAC_MSG_CHECKING(whether strptime works) 575b7579f77SDag-Erling Smørgravif test c${cross_compiling} = cno; then 576b7579f77SDag-Erling SmørgravAC_RUN_IFELSE([AC_LANG_SOURCE([[ 577ff825849SDag-Erling Smørgrav#define _XOPEN_SOURCE 600 578b7579f77SDag-Erling Smørgrav#include <time.h> 579b7579f77SDag-Erling Smørgravint main(void) { struct tm tm; char *res; 580b7579f77SDag-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); 581b7579f77SDag-Erling Smørgravif (!res) return 2; 582b7579f77SDag-Erling Smørgravres = strptime("20070207111842", "%Y%m%d%H%M%S", &tm); 583b7579f77SDag-Erling Smørgravif (!res) return 1; return 0; } 584103ba509SCy Schubert]])] , [eval "ac_cv_c_strptime_works=yes"], [eval "ac_cv_c_strptime_works=no"], 585103ba509SCy Schubert[eval "ac_cv_c_strptime_works=maybe"]) 586b7579f77SDag-Erling Smørgravelse 587b7579f77SDag-Erling Smørgraveval "ac_cv_c_strptime_works=maybe" 588b7579f77SDag-Erling Smørgravfi 589b7579f77SDag-Erling SmørgravAC_MSG_RESULT($ac_cv_c_strptime_works) 590b7579f77SDag-Erling Smørgravif test $ac_cv_c_strptime_works = no; then 591b7579f77SDag-Erling SmørgravAC_LIBOBJ(strptime) 592b7579f77SDag-Erling Smørgravelse 593b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED([STRPTIME_WORKS], 1, [use default strptime.]) 594b7579f77SDag-Erling Smørgravfi 595b7579f77SDag-Erling Smørgrav])dnl 596b7579f77SDag-Erling Smørgrav 597b7579f77SDag-Erling Smørgrav# check some functions of the OS before linking libs (while still runnable). 598b7579f77SDag-Erling SmørgravAC_FUNC_CHOWN 599b7579f77SDag-Erling SmørgravAC_FUNC_FORK 600f44e67d1SCy SchubertAC_DEFINE(RETSIGTYPE,void,[Return type of signal handlers, but autoconf 2.70 says 'your code may safely assume C89 semantics that RETSIGTYPE is void.']) 601b7579f77SDag-Erling SmørgravAC_FUNC_FSEEKO 602b7579f77SDag-Erling SmørgravACX_SYS_LARGEFILE 603b7579f77SDag-Erling SmørgravACX_CHECK_NONBLOCKING_BROKEN 604b7579f77SDag-Erling SmørgravACX_MKDIR_ONE_ARG 605b7579f77SDag-Erling SmørgravAC_CHECK_FUNCS([strptime],[AC_CHECK_STRPTIME_WORKS],[AC_LIBOBJ([strptime])]) 606b7579f77SDag-Erling Smørgrav 607209fcf8eSDag-Erling Smørgrav# check if we can use SO_REUSEPORT 6085469a995SCy Schubertreuseport_default=0 6095469a995SCy Schubertif echo "$host" | $GREP -i -e linux >/dev/null; then reuseport_default=1; fi 6105469a995SCy Schubertif echo "$host" | $GREP -i -e dragonfly >/dev/null; then reuseport_default=1; fi 6115469a995SCy Schubertif test "$reuseport_default" = 1; then 612209fcf8eSDag-Erling Smørgrav AC_DEFINE(REUSEPORT_DEFAULT, 1, [if REUSEPORT is enabled by default]) 613209fcf8eSDag-Erling Smørgravelse 614209fcf8eSDag-Erling Smørgrav AC_DEFINE(REUSEPORT_DEFAULT, 0, [if REUSEPORT is enabled by default]) 615209fcf8eSDag-Erling Smørgravfi 616209fcf8eSDag-Erling Smørgrav 6170eefd307SCy Schubert# Include systemd.m4 - begin 6180eefd307SCy Schubertsinclude(systemd.m4) 6190eefd307SCy Schubert# Include systemd.m4 - end 6200eefd307SCy Schubert 621b7579f77SDag-Erling Smørgrav# set memory allocation checking if requested 622f44e67d1SCy SchubertAC_ARG_ENABLE(alloc-checks, AS_HELP_STRING([--enable-alloc-checks],[ enable to memory allocation statistics, for debug purposes ]), 623b7579f77SDag-Erling Smørgrav , ) 624f44e67d1SCy SchubertAC_ARG_ENABLE(alloc-lite, AS_HELP_STRING([--enable-alloc-lite],[ enable for lightweight alloc assertions, for debug purposes ]), 625b7579f77SDag-Erling Smørgrav , ) 626f44e67d1SCy SchubertAC_ARG_ENABLE(alloc-nonregional, AS_HELP_STRING([--enable-alloc-nonregional],[ enable nonregional allocs, slow but exposes regional allocations to other memory purifiers, for debug purposes ]), 627b7579f77SDag-Erling Smørgrav , ) 628b7579f77SDag-Erling Smørgravif test x_$enable_alloc_nonregional = x_yes; then 629b7579f77SDag-Erling Smørgrav AC_DEFINE(UNBOUND_ALLOC_NONREGIONAL, 1, [use malloc not regions, for debug use]) 630b7579f77SDag-Erling Smørgravfi 631b7579f77SDag-Erling Smørgravif test x_$enable_alloc_checks = x_yes; then 632b7579f77SDag-Erling Smørgrav AC_DEFINE(UNBOUND_ALLOC_STATS, 1, [use statistics for allocs and frees, for debug use]) 6330eefd307SCy Schubert SLDNS_ALLOCCHECK_EXTRA_OBJ="alloc.lo log.lo" 6340eefd307SCy Schubert AC_SUBST(SLDNS_ALLOCCHECK_EXTRA_OBJ) 6350eefd307SCy Schubert ASYNCLOOK_ALLOCCHECK_EXTRA_OBJ="alloc.lo" 6360eefd307SCy Schubert AC_SUBST(ASYNCLOOK_ALLOCCHECK_EXTRA_OBJ) 637b7579f77SDag-Erling Smørgravelse 638b7579f77SDag-Erling Smørgrav if test x_$enable_alloc_lite = x_yes; then 639b7579f77SDag-Erling Smørgrav AC_DEFINE(UNBOUND_ALLOC_LITE, 1, [use to enable lightweight alloc assertions, for debug use]) 640b7579f77SDag-Erling Smørgrav else 641b7579f77SDag-Erling Smørgrav ACX_FUNC_MALLOC([unbound]) 642b7579f77SDag-Erling Smørgrav fi 643b7579f77SDag-Erling Smørgravfi 644b7579f77SDag-Erling Smørgrav 645b7579f77SDag-Erling Smørgrav# check windows threads (we use them, not pthreads, on windows). 646b7579f77SDag-Erling Smørgravif test "$on_mingw" = "yes"; then 647b7579f77SDag-Erling Smørgrav# check windows threads 648b7579f77SDag-Erling Smørgrav AC_CHECK_HEADERS([windows.h],,, [AC_INCLUDES_DEFAULT]) 649b7579f77SDag-Erling Smørgrav AC_MSG_CHECKING([for CreateThread]) 650b7579f77SDag-Erling Smørgrav AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ 651b7579f77SDag-Erling Smørgrav#ifdef HAVE_WINDOWS_H 652b7579f77SDag-Erling Smørgrav#include <windows.h> 653b7579f77SDag-Erling Smørgrav#endif 654b7579f77SDag-Erling Smørgrav], [ 655b7579f77SDag-Erling Smørgrav HANDLE t = CreateThread(NULL, 0, NULL, NULL, 0, NULL); 656b7579f77SDag-Erling Smørgrav])], 657b7579f77SDag-Erling Smørgrav AC_MSG_RESULT(yes) 658b7579f77SDag-Erling Smørgrav AC_DEFINE(HAVE_WINDOWS_THREADS, 1, [Using Windows threads]) 659b7579f77SDag-Erling Smørgrav, 660b7579f77SDag-Erling Smørgrav AC_MSG_RESULT(no) 661b7579f77SDag-Erling Smørgrav) 662b7579f77SDag-Erling Smørgrav 663b7579f77SDag-Erling Smørgravelse 664b7579f77SDag-Erling Smørgrav# not on mingw, check thread libraries. 665b7579f77SDag-Erling Smørgrav 666b7579f77SDag-Erling Smørgrav# check for thread library. 667b7579f77SDag-Erling Smørgrav# check this first, so that the pthread lib does not get linked in via 668b7579f77SDag-Erling Smørgrav# libssl or libpython, and thus distorts the tests, and we end up using 669b7579f77SDag-Erling Smørgrav# the non-threadsafe C libraries. 670f44e67d1SCy SchubertAC_ARG_WITH(pthreads, AS_HELP_STRING([--with-pthreads],[use pthreads library, or --without-pthreads to disable threading support.]), 671b7579f77SDag-Erling Smørgrav [ ],[ withval="yes" ]) 672b7579f77SDag-Erling Smørgravub_have_pthreads=no 673b7579f77SDag-Erling Smørgravif test x_$withval != x_no; then 67417d15b25SDag-Erling Smørgrav AX_PTHREAD([ 675b7579f77SDag-Erling Smørgrav AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]) 676971980c3SDag-Erling Smørgrav if test -n "$PTHREAD_LIBS"; then 677b7579f77SDag-Erling Smørgrav LIBS="$PTHREAD_LIBS $LIBS" 678971980c3SDag-Erling Smørgrav fi 679b7579f77SDag-Erling Smørgrav CFLAGS="$CFLAGS $PTHREAD_CFLAGS" 680b7579f77SDag-Erling Smørgrav CC="$PTHREAD_CC" 681b7579f77SDag-Erling Smørgrav ub_have_pthreads=yes 682b7579f77SDag-Erling Smørgrav AC_CHECK_TYPES([pthread_spinlock_t, pthread_rwlock_t],,,[#include <pthread.h>]) 683865f46b2SCy Schubert AC_CHECK_SIZEOF([unsigned long]) 684865f46b2SCy Schubert AC_CHECK_SIZEOF(pthread_t) 685f61ef7f6SDag-Erling Smørgrav 686f61ef7f6SDag-Erling Smørgrav if echo "$CFLAGS" | $GREP -e "-pthread" >/dev/null; then 687f61ef7f6SDag-Erling Smørgrav AC_MSG_CHECKING([if -pthread unused during linking]) 688f61ef7f6SDag-Erling Smørgrav # catch clang warning 'argument unused during compilation' 689f61ef7f6SDag-Erling Smørgrav AC_LANG_CONFTEST([AC_LANG_SOURCE(AC_INCLUDES_DEFAULT 690f61ef7f6SDag-Erling Smørgrav[[ 691f61ef7f6SDag-Erling Smørgravint main(void) {return 0;} 692f61ef7f6SDag-Erling Smørgrav]])]) 693f61ef7f6SDag-Erling Smørgrav pthread_unused="yes" 694f61ef7f6SDag-Erling Smørgrav # first compile 695f61ef7f6SDag-Erling Smørgrav echo "$CC $CFLAGS -c conftest.c -o conftest.o" >&AS_MESSAGE_LOG_FD 696f61ef7f6SDag-Erling Smørgrav $CC $CFLAGS -c conftest.c -o conftest.o 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD 697f61ef7f6SDag-Erling Smørgrav if test $? = 0; then 698f61ef7f6SDag-Erling Smørgrav # then link 699f61ef7f6SDag-Erling Smørgrav echo "$CC $CFLAGS -Werror $LDFLAGS $LIBS -o conftest contest.o" >&AS_MESSAGE_LOG_FD 700f61ef7f6SDag-Erling Smørgrav $CC $CFLAGS -Werror $LDFLAGS $LIBS -o conftest conftest.o 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD 701f61ef7f6SDag-Erling Smørgrav if test $? -ne 0; then 702f61ef7f6SDag-Erling Smørgrav AC_MSG_RESULT(yes) 703f61ef7f6SDag-Erling Smørgrav CFLAGS=`echo "$CFLAGS" | sed -e 's/-pthread//'` 704f61ef7f6SDag-Erling Smørgrav PTHREAD_CFLAGS_ONLY="-pthread" 705f61ef7f6SDag-Erling Smørgrav AC_SUBST(PTHREAD_CFLAGS_ONLY) 706f61ef7f6SDag-Erling Smørgrav else 707f61ef7f6SDag-Erling Smørgrav AC_MSG_RESULT(no) 708f61ef7f6SDag-Erling Smørgrav fi 709f61ef7f6SDag-Erling Smørgrav else 710f61ef7f6SDag-Erling Smørgrav AC_MSG_RESULT(no) 711f61ef7f6SDag-Erling Smørgrav fi # endif cc successful 712f61ef7f6SDag-Erling Smørgrav rm -f conftest conftest.c conftest.o 713f61ef7f6SDag-Erling Smørgrav fi # endif -pthread in CFLAGS 714f61ef7f6SDag-Erling Smørgrav 715b7579f77SDag-Erling Smørgrav ]) 716b7579f77SDag-Erling Smørgravfi 717b7579f77SDag-Erling Smørgrav 718b7579f77SDag-Erling Smørgrav# check solaris thread library 719f44e67d1SCy SchubertAC_ARG_WITH(solaris-threads, AS_HELP_STRING([--with-solaris-threads],[use solaris native thread library.]), [ ],[ withval="no" ]) 720b7579f77SDag-Erling Smørgravub_have_sol_threads=no 721b7579f77SDag-Erling Smørgravif test x_$withval != x_no; then 722b7579f77SDag-Erling Smørgrav if test x_$ub_have_pthreads != x_no; then 723f44e67d1SCy Schubert AC_MSG_WARN([Have pthreads already, ignoring --with-solaris-threads]) 724b7579f77SDag-Erling Smørgrav else 725b7579f77SDag-Erling Smørgrav AC_SEARCH_LIBS(thr_create, [thread], 726b7579f77SDag-Erling Smørgrav [ 727b7579f77SDag-Erling Smørgrav AC_DEFINE(HAVE_SOLARIS_THREADS, 1, [Using Solaris threads]) 728b7579f77SDag-Erling Smørgrav 729b7579f77SDag-Erling Smørgrav ACX_CHECK_COMPILER_FLAG(mt, [CFLAGS="$CFLAGS -mt"], 730b7579f77SDag-Erling Smørgrav [CFLAGS="$CFLAGS -D_REENTRANT"]) 731b7579f77SDag-Erling Smørgrav ub_have_sol_threads=yes 732b7579f77SDag-Erling Smørgrav ] , [ 733f44e67d1SCy Schubert AC_MSG_ERROR([no solaris threads found.]) 734b7579f77SDag-Erling Smørgrav ]) 735b7579f77SDag-Erling Smørgrav fi 736b7579f77SDag-Erling Smørgravfi 737b7579f77SDag-Erling Smørgrav 738b7579f77SDag-Erling Smørgravfi # end of non-mingw check of thread libraries 739b7579f77SDag-Erling Smørgrav 7400eefd307SCy Schubert# Check for SYSLOG_FACILITY 741f44e67d1SCy SchubertAC_ARG_WITH(syslog-facility, AS_HELP_STRING([--with-syslog-facility=LOCAL0 - LOCAL7],[ set SYSLOG_FACILITY, default DAEMON ]), 7420eefd307SCy Schubert [ UNBOUND_SYSLOG_FACILITY="$withval" ], []) 7430eefd307SCy Schubertcase "${UNBOUND_SYSLOG_FACILITY}" in 7440eefd307SCy Schubert 7450eefd307SCy Schubert LOCAL[[0-7]]) UNBOUND_SYSLOG_FACILITY="LOG_${UNBOUND_SYSLOG_FACILITY}" ;; 7460eefd307SCy Schubert 7470eefd307SCy Schubert *) UNBOUND_SYSLOG_FACILITY="LOG_DAEMON" ;; 7480eefd307SCy Schubert 7490eefd307SCy Schubertesac 7500eefd307SCy SchubertAC_DEFINE_UNQUOTED(UB_SYSLOG_FACILITY,${UNBOUND_SYSLOG_FACILITY},[the SYSLOG_FACILITY to use, default LOG_DAEMON]) 7510eefd307SCy Schubert 75225039b37SCy Schubert# Check for dynamic library module 75325039b37SCy SchubertAC_ARG_WITH(dynlibmodule, 754f44e67d1SCy Schubert AS_HELP_STRING([--with-dynlibmodule],[build dynamic library module, or --without-dynlibmodule to disable it. (default=no)]), 75525039b37SCy Schubert [], [ withval="no" ]) 75625039b37SCy Schubert 75725039b37SCy Schubertif test x_$withval != x_no; then 75825039b37SCy Schubert AC_DEFINE(WITH_DYNLIBMODULE, 1, [Define if you want dynlib module.]) 75925039b37SCy Schubert WITH_DYNLIBMODULE=yes 76025039b37SCy Schubert AC_SUBST(WITH_DYNLIBMODULE) 76125039b37SCy Schubert DYNLIBMOD_OBJ="dynlibmod.lo" 76225039b37SCy Schubert AC_SUBST(DYNLIBMOD_OBJ) 76325039b37SCy Schubert DYNLIBMOD_HEADER='$(srcdir)/dynlibmod/dynlibmod.h' 76425039b37SCy Schubert AC_SUBST(DYNLIBMOD_HEADER) 76525039b37SCy Schubert if test $on_mingw = "no"; then 766f44e67d1SCy Schubert # link with -ldl if not already there, for all executables because 767f44e67d1SCy Schubert # dlopen call is in the dynlib module. For unbound executable, also 768f44e67d1SCy Schubert # export symbols. 769f44e67d1SCy Schubert AC_SEARCH_LIBS([dlopen], [dl]) 770f44e67d1SCy Schubert DYNLIBMOD_EXTRALIBS="-export-dynamic" 77125039b37SCy Schubert else 772f44e67d1SCy Schubert DYNLIBMOD_EXTRALIBS="-Wl,--export-all-symbols,--out-implib,libunbound.dll.a" 77325039b37SCy Schubert fi 77425039b37SCy Schubert AC_SUBST(DYNLIBMOD_EXTRALIBS) 77525039b37SCy Schubertfi 77625039b37SCy Schubert 777b7579f77SDag-Erling Smørgrav# Check for PyUnbound 778b7579f77SDag-Erling SmørgravAC_ARG_WITH(pyunbound, 779f44e67d1SCy Schubert AS_HELP_STRING([--with-pyunbound],[build PyUnbound, or --without-pyunbound to skip it. (default=no)]), 780b7579f77SDag-Erling Smørgrav [], [ withval="no" ]) 781b7579f77SDag-Erling Smørgrav 782b7579f77SDag-Erling Smørgravub_test_python=no 783b7579f77SDag-Erling Smørgravub_with_pyunbound=no 784b7579f77SDag-Erling Smørgravif test x_$withval != x_no; then 785b7579f77SDag-Erling Smørgrav ub_with_pyunbound=yes 786b7579f77SDag-Erling Smørgrav ub_test_python=yes 787b7579f77SDag-Erling Smørgravfi 788b7579f77SDag-Erling Smørgrav 789b7579f77SDag-Erling Smørgrav# Check for Python module 790b7579f77SDag-Erling SmørgravAC_ARG_WITH(pythonmodule, 791f44e67d1SCy Schubert AS_HELP_STRING([--with-pythonmodule],[build Python module, or --without-pythonmodule to disable script engine. (default=no)]), 792b7579f77SDag-Erling Smørgrav [], [ withval="no" ]) 793b7579f77SDag-Erling Smørgrav 794b7579f77SDag-Erling Smørgravub_with_pythonmod=no 795b7579f77SDag-Erling Smørgravif test x_$withval != x_no; then 796b7579f77SDag-Erling Smørgrav ub_with_pythonmod=yes 797b7579f77SDag-Erling Smørgrav ub_test_python=yes 798b7579f77SDag-Erling Smørgravfi 799b7579f77SDag-Erling Smørgrav 800b7579f77SDag-Erling Smørgrav# Check for Python & SWIG only on PyUnbound or PyModule 801b7579f77SDag-Erling Smørgravif test x_$ub_test_python != x_no; then 802b7579f77SDag-Erling Smørgrav 803b7579f77SDag-Erling Smørgrav # Check for Python 804b7579f77SDag-Erling Smørgrav ub_have_python=no 805b7579f77SDag-Erling Smørgrav ac_save_LIBS="$LIBS" dnl otherwise AC_PYTHON_DEVEL thrashes $LIBS 806b7579f77SDag-Erling Smørgrav AC_PYTHON_DEVEL 807b7579f77SDag-Erling Smørgrav if test ! -z "$PYTHON_VERSION"; then 8088f76bb7dSCy Schubert badversion="no" 8098f76bb7dSCy Schubert if test "$PYTHON_VERSION_MAJOR" -lt 2; then 8108f76bb7dSCy Schubert badversion="yes" 8118f76bb7dSCy Schubert fi 8128f76bb7dSCy Schubert if test "$PYTHON_VERSION_MAJOR" -eq 2 -a "$PYTHON_VERSION_MINOR" -lt 4; then 8138f76bb7dSCy Schubert badversion="yes" 8148f76bb7dSCy Schubert fi 8158f76bb7dSCy Schubert if test "$badversion" = "yes"; then 816f44e67d1SCy Schubert AC_MSG_ERROR([Python version >= 2.4.0 is required]) 817b7579f77SDag-Erling Smørgrav fi 818b7579f77SDag-Erling Smørgrav 819b75612f8SDag-Erling Smørgrav [PY_MAJOR_VERSION="`$PYTHON -c \"import sys; print(sys.version_info[0])\"`"] 82009a3aaf3SDag-Erling Smørgrav AC_SUBST(PY_MAJOR_VERSION) 821b7579f77SDag-Erling Smørgrav # Have Python 822b7579f77SDag-Erling Smørgrav AC_DEFINE(HAVE_PYTHON,1,[Define if you have Python libraries and header files.]) 82324e36522SCy Schubert if test x_$ub_with_pythonmod != x_no; then 824971980c3SDag-Erling Smørgrav if test -n "$LIBS"; then 825b7579f77SDag-Erling Smørgrav LIBS="$PYTHON_LDFLAGS $LIBS" 826971980c3SDag-Erling Smørgrav else 827971980c3SDag-Erling Smørgrav LIBS="$PYTHON_LDFLAGS" 828971980c3SDag-Erling Smørgrav fi 82924e36522SCy Schubert fi 83024e36522SCy Schubert PYTHON_LIBS="$PYTHON_LDFLAGS" 83124e36522SCy Schubert AC_SUBST(PYTHON_LIBS) 832971980c3SDag-Erling Smørgrav if test -n "$CPPFLAGS"; then 833b7579f77SDag-Erling Smørgrav CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS" 834971980c3SDag-Erling Smørgrav else 835971980c3SDag-Erling Smørgrav CPPFLAGS="$PYTHON_CPPFLAGS" 836971980c3SDag-Erling Smørgrav fi 83725039b37SCy Schubert if test "$PYTHON_LIBDIR" != "/usr/lib" -a "$PYTHON_LIBDIR" != "" -a "$PYTHON_LIBDIR" != "/usr/lib64"; then 83825039b37SCy Schubert ACX_RUNTIME_PATH_ADD([$PYTHON_LIBDIR]) 83925039b37SCy Schubert fi 840b7579f77SDag-Erling Smørgrav ub_have_python=yes 8414c75e3aaSDag-Erling Smørgrav PKG_CHECK_EXISTS(["python${PY_MAJOR_VERSION}"], 8424c75e3aaSDag-Erling Smørgrav [PC_PY_DEPENDENCY="python${PY_MAJOR_VERSION}"], 8434c75e3aaSDag-Erling Smørgrav [PC_PY_DEPENDENCY="python"]) 844bc892140SDag-Erling Smørgrav AC_SUBST(PC_PY_DEPENDENCY) 845b7579f77SDag-Erling Smørgrav 846b7579f77SDag-Erling Smørgrav # Check for SWIG 847b7579f77SDag-Erling Smørgrav ub_have_swig=no 848f44e67d1SCy Schubert AC_ARG_ENABLE(swig-version-check, AS_HELP_STRING([--disable-swig-version-check],[Disable swig version check to build python modules with older swig even though that is unreliable])) 84957bddd21SDag-Erling Smørgrav if test "$enable_swig_version_check" = "yes"; then 850335c7cdaSCy Schubert AX_PKG_SWIG(2.0.1) 85157bddd21SDag-Erling Smørgrav else 852335c7cdaSCy Schubert AX_PKG_SWIG 85357bddd21SDag-Erling Smørgrav fi 854b7579f77SDag-Erling Smørgrav AC_MSG_CHECKING(SWIG) 855b7579f77SDag-Erling Smørgrav if test ! -x "$SWIG"; then 856f44e67d1SCy Schubert AC_MSG_ERROR([failed to find swig tool, install it, or do not build Python module and PyUnbound]) 857b7579f77SDag-Erling Smørgrav else 858b7579f77SDag-Erling Smørgrav AC_DEFINE(HAVE_SWIG, 1, [Define if you have Swig libraries and header files.]) 859b7579f77SDag-Erling Smørgrav AC_SUBST(swig, "$SWIG") 860b7579f77SDag-Erling Smørgrav AC_MSG_RESULT(present) 861b7579f77SDag-Erling Smørgrav 862b7579f77SDag-Erling Smørgrav # If have Python & SWIG 863b7579f77SDag-Erling Smørgrav # Declare PythonMod 864b7579f77SDag-Erling Smørgrav if test x_$ub_with_pythonmod != x_no; then 865b7579f77SDag-Erling Smørgrav AC_DEFINE(WITH_PYTHONMODULE, 1, [Define if you want Python module.]) 866b7579f77SDag-Erling Smørgrav WITH_PYTHONMODULE=yes 867b7579f77SDag-Erling Smørgrav AC_SUBST(WITH_PYTHONMODULE) 868b7579f77SDag-Erling Smørgrav PYTHONMOD_OBJ="pythonmod.lo pythonmod_utils.lo" 869b7579f77SDag-Erling Smørgrav AC_SUBST(PYTHONMOD_OBJ) 870b7579f77SDag-Erling Smørgrav PYTHONMOD_HEADER='$(srcdir)/pythonmod/pythonmod.h' 871b7579f77SDag-Erling Smørgrav AC_SUBST(PYTHONMOD_HEADER) 872b7579f77SDag-Erling Smørgrav PYTHONMOD_INSTALL=pythonmod-install 873b7579f77SDag-Erling Smørgrav AC_SUBST(PYTHONMOD_INSTALL) 874b7579f77SDag-Erling Smørgrav PYTHONMOD_UNINSTALL=pythonmod-uninstall 875b7579f77SDag-Erling Smørgrav AC_SUBST(PYTHONMOD_UNINSTALL) 876b7579f77SDag-Erling Smørgrav fi 877b7579f77SDag-Erling Smørgrav 878b7579f77SDag-Erling Smørgrav # Declare PyUnbound 879b7579f77SDag-Erling Smørgrav if test x_$ub_with_pyunbound != x_no; then 880b7579f77SDag-Erling Smørgrav AC_DEFINE(WITH_PYUNBOUND, 1, [Define if you want PyUnbound.]) 881b7579f77SDag-Erling Smørgrav WITH_PYUNBOUND=yes 882b7579f77SDag-Erling Smørgrav AC_SUBST(WITH_PYUNBOUND) 883b7579f77SDag-Erling Smørgrav PYUNBOUND_OBJ="libunbound_wrap.lo" 884b7579f77SDag-Erling Smørgrav AC_SUBST(PYUNBOUND_OBJ) 885b7579f77SDag-Erling Smørgrav PYUNBOUND_TARGET="_unbound.la" 886b7579f77SDag-Erling Smørgrav AC_SUBST(PYUNBOUND_TARGET) 887b7579f77SDag-Erling Smørgrav PYUNBOUND_INSTALL=pyunbound-install 888b7579f77SDag-Erling Smørgrav AC_SUBST(PYUNBOUND_INSTALL) 889b7579f77SDag-Erling Smørgrav PYUNBOUND_UNINSTALL=pyunbound-uninstall 890b7579f77SDag-Erling Smørgrav AC_SUBST(PYUNBOUND_UNINSTALL) 891b7579f77SDag-Erling Smørgrav fi 892b7579f77SDag-Erling Smørgrav fi 893b7579f77SDag-Erling Smørgrav else 894b7579f77SDag-Erling Smørgrav AC_MSG_RESULT([*** Python libraries not found, won't build PythonMod or PyUnbound ***]) 895b7579f77SDag-Erling Smørgrav ub_with_pyunbound=no 896b7579f77SDag-Erling Smørgrav ub_with_pythonmod=no 897b7579f77SDag-Erling Smørgrav fi 898b7579f77SDag-Erling Smørgravfi 899b7579f77SDag-Erling Smørgrav 900b7579f77SDag-Erling Smørgravif test "`uname`" = "NetBSD"; then 901b7579f77SDag-Erling Smørgrav NETBSD_LINTFLAGS='"-D__RENAME(x)=" -D_NETINET_IN_H_' 902b7579f77SDag-Erling Smørgrav AC_SUBST(NETBSD_LINTFLAGS) 903b7579f77SDag-Erling Smørgravfi 90424e36522SCy Schubert 9059cf5bc93SCy Schubertif test "`uname`" = "Linux"; then 90624e36522SCy Schubert # splint cannot parse modern c99 header files 90724e36522SCy Schubert GCC_DOCKER_LINTFLAGS='-syntax' 90824e36522SCy Schubert AC_SUBST(GCC_DOCKER_LINTFLAGS) 90924e36522SCy Schubertfi 910b7579f77SDag-Erling SmørgravCONFIG_DATE=`date +%Y%m%d` 911b7579f77SDag-Erling SmørgravAC_SUBST(CONFIG_DATE) 912b7579f77SDag-Erling Smørgrav 913b7579f77SDag-Erling Smørgrav# Checks for libraries. 9148ed2b524SDag-Erling Smørgrav 9158ed2b524SDag-Erling Smørgrav# libnss 9168ed2b524SDag-Erling SmørgravUSE_NSS="no" 917f44e67d1SCy SchubertAC_ARG_WITH([nss], AS_HELP_STRING([--with-nss=path],[use libnss instead of openssl, installed at path.]), 9188ed2b524SDag-Erling Smørgrav [ 9198ed2b524SDag-Erling Smørgrav USE_NSS="yes" 9208ed2b524SDag-Erling Smørgrav AC_DEFINE(HAVE_NSS, 1, [Use libnss for crypto]) 9218ed2b524SDag-Erling Smørgrav if test "$withval" != "" -a "$withval" != "yes"; then 9228ed2b524SDag-Erling Smørgrav CPPFLAGS="$CPPFLAGS -I$withval/include/nss3" 9238ed2b524SDag-Erling Smørgrav LDFLAGS="$LDFLAGS -L$withval/lib" 9248ed2b524SDag-Erling Smørgrav ACX_RUNTIME_PATH_ADD([$withval/lib]) 9258ed2b524SDag-Erling Smørgrav CPPFLAGS="-I$withval/include/nspr4 $CPPFLAGS" 9268ed2b524SDag-Erling Smørgrav else 9278ed2b524SDag-Erling Smørgrav CPPFLAGS="$CPPFLAGS -I/usr/include/nss3" 9288ed2b524SDag-Erling Smørgrav CPPFLAGS="-I/usr/include/nspr4 $CPPFLAGS" 9298ed2b524SDag-Erling Smørgrav fi 9308ed2b524SDag-Erling Smørgrav LIBS="$LIBS -lnss3 -lnspr4" 93105ab2901SDag-Erling Smørgrav SSLLIB="" 932091e9e46SCy Schubert PC_CRYPTO_DEPENDENCY="nss nspr" 933091e9e46SCy Schubert AC_SUBST(PC_CRYPTO_DEPENDENCY) 93405ab2901SDag-Erling Smørgrav ] 93505ab2901SDag-Erling Smørgrav) 93605ab2901SDag-Erling Smørgrav 93705ab2901SDag-Erling Smørgrav# libnettle 93805ab2901SDag-Erling SmørgravUSE_NETTLE="no" 939f44e67d1SCy SchubertAC_ARG_WITH([nettle], AS_HELP_STRING([--with-nettle=path],[use libnettle as crypto library, installed at path.]), 94005ab2901SDag-Erling Smørgrav [ 94105ab2901SDag-Erling Smørgrav USE_NETTLE="yes" 94205ab2901SDag-Erling Smørgrav AC_DEFINE(HAVE_NETTLE, 1, [Use libnettle for crypto]) 943b5663de9SDag-Erling Smørgrav AC_CHECK_HEADERS([nettle/dsa-compat.h],,, [AC_INCLUDES_DEFAULT]) 94405ab2901SDag-Erling Smørgrav if test "$withval" != "" -a "$withval" != "yes"; then 94505ab2901SDag-Erling Smørgrav CPPFLAGS="$CPPFLAGS -I$withval/include/nettle" 94605ab2901SDag-Erling Smørgrav LDFLAGS="$LDFLAGS -L$withval/lib" 94705ab2901SDag-Erling Smørgrav ACX_RUNTIME_PATH_ADD([$withval/lib]) 94805ab2901SDag-Erling Smørgrav else 94905ab2901SDag-Erling Smørgrav CPPFLAGS="$CPPFLAGS -I/usr/include/nettle" 95005ab2901SDag-Erling Smørgrav fi 95105ab2901SDag-Erling Smørgrav LIBS="$LIBS -lhogweed -lnettle -lgmp" 95205ab2901SDag-Erling Smørgrav SSLLIB="" 953091e9e46SCy Schubert PC_CRYPTO_DEPENDENCY="hogweed nettle" 954091e9e46SCy Schubert AC_SUBST(PC_CRYPTO_DEPENDENCY) 9558ed2b524SDag-Erling Smørgrav ] 9568ed2b524SDag-Erling Smørgrav) 9578ed2b524SDag-Erling Smørgrav 9588ed2b524SDag-Erling Smørgrav# openssl 95905ab2901SDag-Erling Smørgravif test $USE_NSS = "no" -a $USE_NETTLE = "no"; then 960b7579f77SDag-Erling SmørgravACX_WITH_SSL 961b7579f77SDag-Erling SmørgravACX_LIB_SSL 96205ab2901SDag-Erling SmørgravSSLLIB="-lssl" 963b5663de9SDag-Erling Smørgrav 96424e36522SCy SchubertPC_CRYPTO_DEPENDENCY="" 965091e9e46SCy SchubertAC_SUBST(PC_CRYPTO_DEPENDENCY) 966091e9e46SCy Schubert 967b5663de9SDag-Erling Smørgrav# check if -lcrypt32 is needed because CAPIENG needs that. (on windows) 968b5663de9SDag-Erling SmørgravBAKLIBS="$LIBS" 969b5663de9SDag-Erling SmørgravLIBS="-lssl $LIBS" 970b5663de9SDag-Erling SmørgravAC_MSG_CHECKING([if libssl needs -lcrypt32]) 971f44e67d1SCy SchubertAC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ 972f44e67d1SCy Schubert int EVP_sha256(void); 973f44e67d1SCy Schubert (void)EVP_sha256(); 974f44e67d1SCy Schubert]])], [ 975b5663de9SDag-Erling Smørgrav AC_MSG_RESULT([no]) 976b5663de9SDag-Erling Smørgrav LIBS="$BAKLIBS" 977b5663de9SDag-Erling Smørgrav], [ 978b5663de9SDag-Erling Smørgrav AC_MSG_RESULT([yes]) 979b5663de9SDag-Erling Smørgrav LIBS="$BAKLIBS" 980b5663de9SDag-Erling Smørgrav LIBS="$LIBS -lcrypt32" 981b5663de9SDag-Erling Smørgrav]) 982b5663de9SDag-Erling Smørgrav 983ff825849SDag-Erling SmørgravAC_MSG_CHECKING([for LibreSSL]) 98424e36522SCy Schubertif grep VERSION_TEXT $ssldir_include/openssl/opensslv.h | grep "LibreSSL" >/dev/null; then 985ff825849SDag-Erling Smørgrav AC_MSG_RESULT([yes]) 986ff825849SDag-Erling Smørgrav AC_DEFINE([HAVE_LIBRESSL], [1], [Define if we have LibreSSL]) 987ff825849SDag-Erling Smørgrav # libressl provides these compat functions, but they may also be 988ff825849SDag-Erling Smørgrav # declared by the OS in libc. See if they have been declared. 9890eefd307SCy Schubert AC_CHECK_DECLS([strlcpy,strlcat,arc4random,arc4random_uniform]) 990ff825849SDag-Erling Smørgravelse 991ff825849SDag-Erling Smørgrav AC_MSG_RESULT([no]) 992ff825849SDag-Erling Smørgravfi 9935469a995SCy SchubertAC_CHECK_HEADERS([openssl/conf.h openssl/engine.h openssl/bn.h openssl/dh.h openssl/dsa.h openssl/rsa.h openssl/core_names.h openssl/param_build.h],,, [AC_INCLUDES_DEFAULT]) 99456850988SCy SchubertAC_CHECK_FUNCS([OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_default_properties_is_fips_enabled EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ENGINE_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback EVP_MAC_CTX_set_params OSSL_PARAM_BLD_new BIO_set_callback_ex SSL_CTX_set_tmp_ecdh]) 995b5663de9SDag-Erling Smørgrav 996b5663de9SDag-Erling Smørgrav# these check_funcs need -lssl 997b5663de9SDag-Erling SmørgravBAKLIBS="$LIBS" 998b5663de9SDag-Erling SmørgravLIBS="-lssl $LIBS" 9995469a995SCy SchubertAC_CHECK_FUNCS([OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername X509_VERIFY_PARAM_set1_host SSL_CTX_set_ciphersuites SSL_CTX_set_tlsext_ticket_key_evp_cb SSL_CTX_set_alpn_select_cb SSL_get0_alpn_selected SSL_CTX_set_alpn_protos SSL_get1_peer_certificate]) 1000b5663de9SDag-Erling SmørgravLIBS="$BAKLIBS" 1001b5663de9SDag-Erling Smørgrav 1002b75612f8SDag-Erling SmørgravAC_CHECK_DECLS([SSL_COMP_get_compression_methods,sk_SSL_COMP_pop_free,SSL_CTX_set_ecdh_auto], [], [], [ 1003b7579f77SDag-Erling SmørgravAC_INCLUDES_DEFAULT 1004b7579f77SDag-Erling Smørgrav#ifdef HAVE_OPENSSL_ERR_H 1005b7579f77SDag-Erling Smørgrav#include <openssl/err.h> 1006b7579f77SDag-Erling Smørgrav#endif 1007b7579f77SDag-Erling Smørgrav 1008b7579f77SDag-Erling Smørgrav#ifdef HAVE_OPENSSL_RAND_H 1009b7579f77SDag-Erling Smørgrav#include <openssl/rand.h> 1010b7579f77SDag-Erling Smørgrav#endif 1011b7579f77SDag-Erling Smørgrav 1012b7579f77SDag-Erling Smørgrav#ifdef HAVE_OPENSSL_CONF_H 1013b7579f77SDag-Erling Smørgrav#include <openssl/conf.h> 1014b7579f77SDag-Erling Smørgrav#endif 1015b7579f77SDag-Erling Smørgrav 1016b7579f77SDag-Erling Smørgrav#ifdef HAVE_OPENSSL_ENGINE_H 1017b7579f77SDag-Erling Smørgrav#include <openssl/engine.h> 1018b7579f77SDag-Erling Smørgrav#endif 1019b7579f77SDag-Erling Smørgrav#include <openssl/ssl.h> 1020b7579f77SDag-Erling Smørgrav#include <openssl/evp.h> 1021b7579f77SDag-Erling Smørgrav]) 10220eefd307SCy Schubert 10230eefd307SCy Schubertif test "$ac_cv_func_HMAC_Init_ex" = "yes"; then 10240eefd307SCy Schubert# check function return type. 10250eefd307SCy SchubertAC_MSG_CHECKING(the return type of HMAC_Init_ex) 10260eefd307SCy SchubertAC_COMPILE_IFELSE([AC_LANG_PROGRAM([ 10270eefd307SCy Schubert#ifdef HAVE_OPENSSL_ERR_H 10280eefd307SCy Schubert#include <openssl/err.h> 10290eefd307SCy Schubert#endif 10300eefd307SCy Schubert 10310eefd307SCy Schubert#ifdef HAVE_OPENSSL_RAND_H 10320eefd307SCy Schubert#include <openssl/rand.h> 10330eefd307SCy Schubert#endif 10340eefd307SCy Schubert 10350eefd307SCy Schubert#ifdef HAVE_OPENSSL_CONF_H 10360eefd307SCy Schubert#include <openssl/conf.h> 10370eefd307SCy Schubert#endif 10380eefd307SCy Schubert 10390eefd307SCy Schubert#ifdef HAVE_OPENSSL_ENGINE_H 10400eefd307SCy Schubert#include <openssl/engine.h> 10410eefd307SCy Schubert#endif 10420eefd307SCy Schubert#include <openssl/ssl.h> 10430eefd307SCy Schubert#include <openssl/evp.h> 10440eefd307SCy Schubert], [ 10450eefd307SCy Schubert HMAC_CTX* hmac_ctx = NULL; 10460eefd307SCy Schubert void* hmac_key = NULL; 10470eefd307SCy Schubert const EVP_MD* digest = NULL; 10480eefd307SCy Schubert int x = HMAC_Init_ex(hmac_ctx, hmac_key, 32, digest, NULL); 10490eefd307SCy Schubert (void)x; 10500eefd307SCy Schubert])], [ 10510eefd307SCy Schubert AC_MSG_RESULT(int) 10520eefd307SCy Schubert], [ 10530eefd307SCy Schubert AC_MSG_RESULT(void) 10540eefd307SCy Schubert AC_DEFINE([HMAC_INIT_EX_RETURNS_VOID], 1, [If HMAC_Init_ex() returns void]) 10550eefd307SCy Schubert]) 10560eefd307SCy Schubertfi 10570eefd307SCy Schubert 10588ed2b524SDag-Erling Smørgravfi 105905ab2901SDag-Erling SmørgravAC_SUBST(SSLLIB) 10608ed2b524SDag-Erling Smørgrav 1061091e9e46SCy Schubert# libbsd 1062f44e67d1SCy SchubertAC_ARG_WITH([libbsd], AS_HELP_STRING([--with-libbsd],[Use portable libbsd functions]), [ 1063091e9e46SCy Schubert AC_CHECK_HEADERS([bsd/string.h bsd/stdlib.h],,, [AC_INCLUDES_DEFAULT]) 1064091e9e46SCy Schubert if test "x$ac_cv_header_bsd_string_h" = xyes -a "x$ac_cv_header_bsd_stdlib_h" = xyes; then 1065091e9e46SCy Schubert for func in strlcpy strlcat arc4random arc4random_uniform reallocarray; do 1066091e9e46SCy Schubert AC_SEARCH_LIBS([$func], [bsd], [ 1067091e9e46SCy Schubert AC_DEFINE(HAVE_LIBBSD, 1, [Use portable libbsd functions]) 1068091e9e46SCy Schubert PC_LIBBSD_DEPENDENCY=libbsd 1069091e9e46SCy Schubert AC_SUBST(PC_LIBBSD_DEPENDENCY) 1070091e9e46SCy Schubert ]) 1071091e9e46SCy Schubert done 1072091e9e46SCy Schubert fi 1073091e9e46SCy Schubert]) 1074b7579f77SDag-Erling Smørgrav 1075f44e67d1SCy SchubertAC_ARG_ENABLE(sha1, AS_HELP_STRING([--disable-sha1],[Disable SHA1 RRSIG support, does not disable nsec3 support])) 107665b390aaSDag-Erling Smørgravcase "$enable_sha1" in 107765b390aaSDag-Erling Smørgrav no) 107865b390aaSDag-Erling Smørgrav ;; 107965b390aaSDag-Erling Smørgrav yes|*) 108065b390aaSDag-Erling Smørgrav AC_DEFINE([USE_SHA1], [1], [Define this to enable SHA1 support.]) 108165b390aaSDag-Erling Smørgrav ;; 108265b390aaSDag-Erling Smørgravesac 108365b390aaSDag-Erling Smørgrav 108465b390aaSDag-Erling Smørgrav 1085f44e67d1SCy SchubertAC_ARG_ENABLE(sha2, AS_HELP_STRING([--disable-sha2],[Disable SHA256 and SHA512 RRSIG support])) 1086b7579f77SDag-Erling Smørgravcase "$enable_sha2" in 1087b7579f77SDag-Erling Smørgrav no) 1088b7579f77SDag-Erling Smørgrav ;; 1089b7579f77SDag-Erling Smørgrav yes|*) 1090b7579f77SDag-Erling Smørgrav AC_DEFINE([USE_SHA2], [1], [Define this to enable SHA256 and SHA512 support.]) 1091b7579f77SDag-Erling Smørgrav ;; 1092b7579f77SDag-Erling Smørgravesac 1093b7579f77SDag-Erling Smørgrav 1094f44e67d1SCy SchubertAC_ARG_ENABLE(subnet, AS_HELP_STRING([--enable-subnet],[Enable client subnet])) 109565b390aaSDag-Erling Smørgravcase "$enable_subnet" in 109665b390aaSDag-Erling Smørgrav yes) 109765b390aaSDag-Erling Smørgrav AC_DEFINE([CLIENT_SUBNET], [1], [Define this to enable client subnet option.]) 109865b390aaSDag-Erling Smørgrav SUBNET_OBJ="edns-subnet.lo subnetmod.lo addrtree.lo subnet-whitelist.lo" 109965b390aaSDag-Erling Smørgrav AC_SUBST(SUBNET_OBJ) 110065b390aaSDag-Erling Smørgrav SUBNET_HEADER='$(srcdir)/edns-subnet/subnetmod.h $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/edns-subnet/subnet-whitelist.h $(srcdir)/edns-subnet/addrtree.h' 110165b390aaSDag-Erling Smørgrav AC_SUBST(SUBNET_HEADER) 110265b390aaSDag-Erling Smørgrav ;; 110365b390aaSDag-Erling Smørgrav no|*) 110465b390aaSDag-Erling Smørgrav ;; 110565b390aaSDag-Erling Smørgravesac 110665b390aaSDag-Erling Smørgrav 110724e36522SCy Schubert# check whether gost also works 1108b7579f77SDag-Erling SmørgravAC_DEFUN([AC_CHECK_GOST_WORKS], 1109b7579f77SDag-Erling Smørgrav[AC_REQUIRE([AC_PROG_CC]) 1110b7579f77SDag-Erling SmørgravAC_MSG_CHECKING([if GOST works]) 1111b7579f77SDag-Erling Smørgravif test c${cross_compiling} = cno; then 1112b7579f77SDag-Erling SmørgravBAKCFLAGS="$CFLAGS" 1113b7579f77SDag-Erling Smørgravif test -n "$ssldir"; then 111424e36522SCy Schubert CFLAGS="$CFLAGS -Wl,-rpath,$ssldir_lib" 1115b7579f77SDag-Erling Smørgravfi 1116b7579f77SDag-Erling SmørgravAC_RUN_IFELSE([AC_LANG_SOURCE([[ 1117b7579f77SDag-Erling Smørgrav#include <string.h> 1118b7579f77SDag-Erling Smørgrav#include <openssl/ssl.h> 1119b7579f77SDag-Erling Smørgrav#include <openssl/evp.h> 1120b7579f77SDag-Erling Smørgrav#include <openssl/engine.h> 1121b7579f77SDag-Erling Smørgrav#include <openssl/conf.h> 112217d15b25SDag-Erling Smørgrav/* routine to load gost (from sldns) */ 1123b7579f77SDag-Erling Smørgravint load_gost_id(void) 1124b7579f77SDag-Erling Smørgrav{ 1125b7579f77SDag-Erling Smørgrav static int gost_id = 0; 1126b7579f77SDag-Erling Smørgrav const EVP_PKEY_ASN1_METHOD* meth; 1127b7579f77SDag-Erling Smørgrav ENGINE* e; 1128b7579f77SDag-Erling Smørgrav 1129b7579f77SDag-Erling Smørgrav if(gost_id) return gost_id; 1130b7579f77SDag-Erling Smørgrav 1131b7579f77SDag-Erling Smørgrav /* see if configuration loaded gost implementation from other engine*/ 1132b7579f77SDag-Erling Smørgrav meth = EVP_PKEY_asn1_find_str(NULL, "gost2001", -1); 1133b7579f77SDag-Erling Smørgrav if(meth) { 1134b7579f77SDag-Erling Smørgrav EVP_PKEY_asn1_get0_info(&gost_id, NULL, NULL, NULL, NULL, meth); 1135b7579f77SDag-Erling Smørgrav return gost_id; 1136b7579f77SDag-Erling Smørgrav } 1137b7579f77SDag-Erling Smørgrav 1138b7579f77SDag-Erling Smørgrav /* see if engine can be loaded already */ 1139b7579f77SDag-Erling Smørgrav e = ENGINE_by_id("gost"); 1140b7579f77SDag-Erling Smørgrav if(!e) { 1141b7579f77SDag-Erling Smørgrav /* load it ourself, in case statically linked */ 1142b7579f77SDag-Erling Smørgrav ENGINE_load_builtin_engines(); 1143b7579f77SDag-Erling Smørgrav ENGINE_load_dynamic(); 1144b7579f77SDag-Erling Smørgrav e = ENGINE_by_id("gost"); 1145b7579f77SDag-Erling Smørgrav } 1146b7579f77SDag-Erling Smørgrav if(!e) { 1147b7579f77SDag-Erling Smørgrav /* no gost engine in openssl */ 1148b7579f77SDag-Erling Smørgrav return 0; 1149b7579f77SDag-Erling Smørgrav } 1150b7579f77SDag-Erling Smørgrav if(!ENGINE_set_default(e, ENGINE_METHOD_ALL)) { 1151b7579f77SDag-Erling Smørgrav ENGINE_finish(e); 1152b7579f77SDag-Erling Smørgrav ENGINE_free(e); 1153b7579f77SDag-Erling Smørgrav return 0; 1154b7579f77SDag-Erling Smørgrav } 1155b7579f77SDag-Erling Smørgrav 1156b7579f77SDag-Erling Smørgrav meth = EVP_PKEY_asn1_find_str(&e, "gost2001", -1); 1157b7579f77SDag-Erling Smørgrav if(!meth) { 1158b7579f77SDag-Erling Smørgrav /* algo not found */ 1159b7579f77SDag-Erling Smørgrav ENGINE_finish(e); 1160b7579f77SDag-Erling Smørgrav ENGINE_free(e); 1161b7579f77SDag-Erling Smørgrav return 0; 1162b7579f77SDag-Erling Smørgrav } 1163b7579f77SDag-Erling Smørgrav EVP_PKEY_asn1_get0_info(&gost_id, NULL, NULL, NULL, NULL, meth); 1164b7579f77SDag-Erling Smørgrav return gost_id; 1165b7579f77SDag-Erling Smørgrav} 1166b7579f77SDag-Erling Smørgravint main(void) { 1167b7579f77SDag-Erling Smørgrav EVP_MD_CTX* ctx; 1168b7579f77SDag-Erling Smørgrav const EVP_MD* md; 1169b7579f77SDag-Erling Smørgrav unsigned char digest[64]; /* its a 256-bit digest, so uses 32 bytes */ 1170b7579f77SDag-Erling Smørgrav const char* str = "Hello world"; 1171b7579f77SDag-Erling Smørgrav const unsigned char check[] = { 1172b7579f77SDag-Erling Smørgrav 0x40 , 0xed , 0xf8 , 0x56 , 0x5a , 0xc5 , 0x36 , 0xe1 , 1173b7579f77SDag-Erling Smørgrav 0x33 , 0x7c , 0x7e , 0x87 , 0x62 , 0x1c , 0x42 , 0xe0 , 1174b7579f77SDag-Erling Smørgrav 0x17 , 0x1b , 0x5e , 0xce , 0xa8 , 0x46 , 0x65 , 0x4d , 1175b7579f77SDag-Erling Smørgrav 0x8d , 0x3e , 0x22 , 0x9b , 0xe1 , 0x30 , 0x19 , 0x9d 1176b7579f77SDag-Erling Smørgrav }; 1177b7579f77SDag-Erling Smørgrav OPENSSL_config(NULL); 1178b7579f77SDag-Erling Smørgrav (void)load_gost_id(); 1179b7579f77SDag-Erling Smørgrav md = EVP_get_digestbyname("md_gost94"); 1180b7579f77SDag-Erling Smørgrav if(!md) return 1; 1181b7579f77SDag-Erling Smørgrav memset(digest, 0, sizeof(digest)); 1182b7579f77SDag-Erling Smørgrav ctx = EVP_MD_CTX_create(); 1183b7579f77SDag-Erling Smørgrav if(!ctx) return 2; 1184b7579f77SDag-Erling Smørgrav if(!EVP_DigestInit_ex(ctx, md, NULL)) return 3; 1185b7579f77SDag-Erling Smørgrav if(!EVP_DigestUpdate(ctx, str, 10)) return 4; 1186b7579f77SDag-Erling Smørgrav if(!EVP_DigestFinal_ex(ctx, digest, NULL)) return 5; 1187b7579f77SDag-Erling Smørgrav /* uncomment to see the hash calculated. 1188b7579f77SDag-Erling Smørgrav {int i; 1189b7579f77SDag-Erling Smørgrav for(i=0; i<32; i++) 1190b7579f77SDag-Erling Smørgrav printf(" %2.2x", (int)digest[i]); 1191b7579f77SDag-Erling Smørgrav printf("\n");} 1192b7579f77SDag-Erling Smørgrav */ 1193b7579f77SDag-Erling Smørgrav if(memcmp(digest, check, sizeof(check)) != 0) 1194b7579f77SDag-Erling Smørgrav return 6; 1195b7579f77SDag-Erling Smørgrav return 0; 1196b7579f77SDag-Erling Smørgrav} 1197103ba509SCy Schubert]])] , [eval "ac_cv_c_gost_works=yes"], [eval "ac_cv_c_gost_works=no"], 1198103ba509SCy Schubert[eval "ac_cv_c_gost_works=maybe"]) 1199b7579f77SDag-Erling SmørgravCFLAGS="$BAKCFLAGS" 1200b7579f77SDag-Erling Smørgravelse 1201b7579f77SDag-Erling Smørgraveval "ac_cv_c_gost_works=maybe" 1202b7579f77SDag-Erling Smørgravfi 1203b7579f77SDag-Erling SmørgravAC_MSG_RESULT($ac_cv_c_gost_works) 1204b7579f77SDag-Erling Smørgrav])dnl 1205b7579f77SDag-Erling Smørgrav 1206f44e67d1SCy SchubertAC_ARG_ENABLE(gost, AS_HELP_STRING([--disable-gost],[Disable GOST support])) 1207b7579f77SDag-Erling Smørgravuse_gost="no" 120805ab2901SDag-Erling Smørgravif test $USE_NSS = "no" -a $USE_NETTLE = "no"; then 1209b7579f77SDag-Erling Smørgravcase "$enable_gost" in 1210b7579f77SDag-Erling Smørgrav no) 1211b7579f77SDag-Erling Smørgrav ;; 1212b7579f77SDag-Erling Smørgrav *) 1213b7579f77SDag-Erling Smørgrav AC_CHECK_FUNC(EVP_PKEY_set_type_str, [:],[AC_MSG_ERROR([OpenSSL 1.0.0 is needed for GOST support])]) 1214b7579f77SDag-Erling Smørgrav AC_CHECK_FUNC(EC_KEY_new, [], [AC_MSG_ERROR([OpenSSL does not support ECC, needed for GOST support])]) 1215b7579f77SDag-Erling Smørgrav AC_CHECK_GOST_WORKS 12168ed2b524SDag-Erling Smørgrav if test "$ac_cv_c_gost_works" != no; then 1217b7579f77SDag-Erling Smørgrav use_gost="yes" 1218b7579f77SDag-Erling Smørgrav AC_DEFINE([USE_GOST], [1], [Define this to enable GOST support.]) 1219b7579f77SDag-Erling Smørgrav fi 1220b7579f77SDag-Erling Smørgrav ;; 1221b7579f77SDag-Erling Smørgravesac 122205ab2901SDag-Erling Smørgravfi dnl !USE_NSS && !USE_NETTLE 1223b7579f77SDag-Erling Smørgrav 1224f44e67d1SCy SchubertAC_ARG_ENABLE(ecdsa, AS_HELP_STRING([--disable-ecdsa],[Disable ECDSA support])) 1225b7579f77SDag-Erling Smørgravuse_ecdsa="no" 1226b7579f77SDag-Erling Smørgravcase "$enable_ecdsa" in 1227b7579f77SDag-Erling Smørgrav no) 1228b7579f77SDag-Erling Smørgrav ;; 1229b7579f77SDag-Erling Smørgrav *) 123005ab2901SDag-Erling Smørgrav if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then 123156850988SCy Schubert AC_CHECK_FUNC(EVP_PKEY_fromdata, [ 123256850988SCy Schubert # with EVP_PKEY_fromdata, check if EC is not disabled 123356850988SCy Schubert AC_CHECK_DECL([OPENSSL_NO_EC], [AC_MSG_ERROR([OpenSSL does not support ECDSA: please upgrade or rerun with --disable-ecdsa]) 123456850988SCy Schubert ], [], [AC_INCLUDES_DEFAULT 123556850988SCy Schubert#include <openssl/evp.h> 123656850988SCy Schubert ]) 123756850988SCy Schubert ], [ 123856850988SCy Schubert # without EVP_PKEY_fromdata, older openssl, check for support 1239b7579f77SDag-Erling Smørgrav AC_CHECK_FUNC(ECDSA_sign, [], [AC_MSG_ERROR([OpenSSL does not support ECDSA: please upgrade or rerun with --disable-ecdsa])]) 1240b7579f77SDag-Erling Smørgrav AC_CHECK_FUNC(SHA384_Init, [], [AC_MSG_ERROR([OpenSSL does not support SHA384: please upgrade or rerun with --disable-ecdsa])]) 124156850988SCy Schubert ]) 1242b7579f77SDag-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 1243b7579f77SDag-Erling Smørgrav#include <openssl/evp.h> 1244b7579f77SDag-Erling Smørgrav ]) 1245b7579f77SDag-Erling Smørgrav # see if OPENSSL 1.0.0 or later (has EVP MD and Verify independency) 1246b7579f77SDag-Erling Smørgrav AC_MSG_CHECKING([if openssl supports SHA2 and ECDSA with EVP]) 124724e36522SCy Schubert if grep OPENSSL_VERSION_TEXT $ssldir_include/openssl/opensslv.h | grep "OpenSSL" >/dev/null; then 124824e36522SCy Schubert if grep OPENSSL_VERSION_NUMBER $ssldir_include/openssl/opensslv.h | grep 0x0 >/dev/null; then 1249b7579f77SDag-Erling Smørgrav AC_MSG_RESULT([no]) 1250b7579f77SDag-Erling Smørgrav AC_DEFINE_UNQUOTED([USE_ECDSA_EVP_WORKAROUND], [1], [Define this to enable an EVP workaround for older openssl]) 1251b7579f77SDag-Erling Smørgrav else 1252b7579f77SDag-Erling Smørgrav AC_MSG_RESULT([yes]) 1253b7579f77SDag-Erling Smørgrav fi 1254ff825849SDag-Erling Smørgrav else 1255ff825849SDag-Erling Smørgrav # not OpenSSL, thus likely LibreSSL, which supports it 1256ff825849SDag-Erling Smørgrav AC_MSG_RESULT([yes]) 1257ff825849SDag-Erling Smørgrav fi 12588ed2b524SDag-Erling Smørgrav fi 1259b7579f77SDag-Erling Smørgrav # we now know we have ECDSA and the required curves. 1260b7579f77SDag-Erling Smørgrav AC_DEFINE_UNQUOTED([USE_ECDSA], [1], [Define this to enable ECDSA support.]) 1261b7579f77SDag-Erling Smørgrav use_ecdsa="yes" 1262b7579f77SDag-Erling Smørgrav ;; 1263b7579f77SDag-Erling Smørgravesac 1264b7579f77SDag-Erling Smørgrav 1265f44e67d1SCy SchubertAC_ARG_ENABLE(dsa, AS_HELP_STRING([--disable-dsa],[Disable DSA support])) 1266e2d15004SDag-Erling Smørgravuse_dsa="no" 1267bc892140SDag-Erling Smørgravcase "$enable_dsa" in 1268091e9e46SCy Schubert yes) 1269e2d15004SDag-Erling Smørgrav # detect if DSA is supported, and turn it off if not. 1270971980c3SDag-Erling Smørgrav if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then 1271bc892140SDag-Erling Smørgrav AC_CHECK_FUNC(DSA_SIG_new, [ 127257bddd21SDag-Erling Smørgrav AC_CHECK_TYPE(DSA_SIG*, [ 1273e2d15004SDag-Erling Smørgrav AC_DEFINE_UNQUOTED([USE_DSA], [1], [Define this to enable DSA support.]) 1274e2d15004SDag-Erling Smørgrav ], [if test "x$enable_dsa" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support DSA and you used --enable-dsa.]) 127557bddd21SDag-Erling Smørgrav fi ], [ 127657bddd21SDag-Erling SmørgravAC_INCLUDES_DEFAULT 127757bddd21SDag-Erling Smørgrav#ifdef HAVE_OPENSSL_ERR_H 127857bddd21SDag-Erling Smørgrav#include <openssl/err.h> 127957bddd21SDag-Erling Smørgrav#endif 128057bddd21SDag-Erling Smørgrav 128157bddd21SDag-Erling Smørgrav#ifdef HAVE_OPENSSL_RAND_H 128257bddd21SDag-Erling Smørgrav#include <openssl/rand.h> 128357bddd21SDag-Erling Smørgrav#endif 128457bddd21SDag-Erling Smørgrav 128557bddd21SDag-Erling Smørgrav#ifdef HAVE_OPENSSL_CONF_H 128657bddd21SDag-Erling Smørgrav#include <openssl/conf.h> 128757bddd21SDag-Erling Smørgrav#endif 128857bddd21SDag-Erling Smørgrav 128957bddd21SDag-Erling Smørgrav#ifdef HAVE_OPENSSL_ENGINE_H 129057bddd21SDag-Erling Smørgrav#include <openssl/engine.h> 129157bddd21SDag-Erling Smørgrav#endif 129257bddd21SDag-Erling Smørgrav ]) 129357bddd21SDag-Erling Smørgrav ], [if test "x$enable_dsa" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support DSA and you used --enable-dsa.]) 1294e2d15004SDag-Erling Smørgrav fi ]) 1295971980c3SDag-Erling Smørgrav else 1296971980c3SDag-Erling Smørgrav AC_DEFINE_UNQUOTED([USE_DSA], [1], [Define this to enable DSA support.]) 1297971980c3SDag-Erling Smørgrav fi 1298e2d15004SDag-Erling Smørgrav ;; 1299091e9e46SCy Schubert *) 1300091e9e46SCy Schubert # disable dsa by default, RFC 8624 section 3.1, validators MUST NOT 1301091e9e46SCy Schubert # support DSA for DNSSEC Validation. 1302091e9e46SCy Schubert ;; 1303e2d15004SDag-Erling Smørgravesac 1304e2d15004SDag-Erling Smørgrav 13055469a995SCy SchubertAC_ARG_WITH(deprecate-rsa-1024, AS_HELP_STRING([--with-deprecate-rsa-1024],[Deprecate RSA 1024 bit length, makes that an unsupported key, for use when OpenSSL FIPS refuses 1024 bit verification])) 13065469a995SCy Schubertif test "$with_deprecate_rsa_1024" = "yes"; then 13075469a995SCy Schubert AC_DEFINE([DEPRECATE_RSA_1024], [1], [Deprecate RSA 1024 bit length, makes that an unsupported key]) 13085469a995SCy Schubertfi 13095469a995SCy Schubert 1310f44e67d1SCy SchubertAC_ARG_ENABLE(ed25519, AS_HELP_STRING([--disable-ed25519],[Disable ED25519 support])) 1311c7f4d7adSDag-Erling Smørgravuse_ed25519="no" 1312c7f4d7adSDag-Erling Smørgravcase "$enable_ed25519" in 1313c7f4d7adSDag-Erling Smørgrav no) 1314c7f4d7adSDag-Erling Smørgrav ;; 1315c7f4d7adSDag-Erling Smørgrav *) 1316c7f4d7adSDag-Erling Smørgrav if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then 1317c7f4d7adSDag-Erling Smørgrav AC_CHECK_DECLS([NID_ED25519], [ 1318c7f4d7adSDag-Erling Smørgrav use_ed25519="yes" 1319c7f4d7adSDag-Erling Smørgrav ], [ if test "x$enable_ed25519" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support ED25519 and you used --enable-ed25519.]) 1320c7f4d7adSDag-Erling Smørgrav fi ], [AC_INCLUDES_DEFAULT 1321c7f4d7adSDag-Erling Smørgrav#include <openssl/evp.h> 1322c7f4d7adSDag-Erling Smørgrav ]) 1323c7f4d7adSDag-Erling Smørgrav fi 1324971980c3SDag-Erling Smørgrav if test $USE_NETTLE = "yes"; then 1325971980c3SDag-Erling Smørgrav AC_CHECK_HEADERS([nettle/eddsa.h], use_ed25519="yes",, [AC_INCLUDES_DEFAULT]) 1326971980c3SDag-Erling Smørgrav fi 1327971980c3SDag-Erling Smørgrav if test $use_ed25519 = "yes"; then 1328971980c3SDag-Erling Smørgrav AC_DEFINE_UNQUOTED([USE_ED25519], [1], [Define this to enable ED25519 support.]) 1329971980c3SDag-Erling Smørgrav fi 1330c7f4d7adSDag-Erling Smørgrav ;; 1331c7f4d7adSDag-Erling Smørgravesac 1332e2d15004SDag-Erling Smørgrav 1333f44e67d1SCy SchubertAC_ARG_ENABLE(ed448, AS_HELP_STRING([--disable-ed448],[Disable ED448 support])) 13340fb34990SDag-Erling Smørgravuse_ed448="no" 13350fb34990SDag-Erling Smørgravcase "$enable_ed448" in 13360fb34990SDag-Erling Smørgrav no) 13370fb34990SDag-Erling Smørgrav ;; 13380fb34990SDag-Erling Smørgrav *) 13390fb34990SDag-Erling Smørgrav if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then 13400fb34990SDag-Erling Smørgrav AC_CHECK_DECLS([NID_ED448], [ 13410fb34990SDag-Erling Smørgrav use_ed448="yes" 13420fb34990SDag-Erling Smørgrav ], [ if test "x$enable_ed448" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support ED448 and you used --enable-ed448.]) 13430fb34990SDag-Erling Smørgrav fi ], [AC_INCLUDES_DEFAULT 13440fb34990SDag-Erling Smørgrav#include <openssl/evp.h> 13450fb34990SDag-Erling Smørgrav ]) 13460fb34990SDag-Erling Smørgrav fi 13470fb34990SDag-Erling Smørgrav if test $use_ed448 = "yes"; then 13480fb34990SDag-Erling Smørgrav AC_DEFINE_UNQUOTED([USE_ED448], [1], [Define this to enable ED448 support.]) 13490fb34990SDag-Erling Smørgrav fi 13500fb34990SDag-Erling Smørgrav ;; 13510fb34990SDag-Erling Smørgravesac 13520fb34990SDag-Erling Smørgrav 1353f44e67d1SCy SchubertAC_ARG_ENABLE(event-api, AS_HELP_STRING([--enable-event-api],[Enable (experimental) pluggable event base libunbound API installed to unbound-event.h])) 135417d15b25SDag-Erling Smørgravcase "$enable_event_api" in 135517d15b25SDag-Erling Smørgrav yes) 1356e2d15004SDag-Erling Smørgrav AC_SUBST(UNBOUND_EVENT_INSTALL, [unbound-event-install]) 1357e2d15004SDag-Erling Smørgrav AC_SUBST(UNBOUND_EVENT_UNINSTALL, [unbound-event-uninstall]) 135817d15b25SDag-Erling Smørgrav ;; 135917d15b25SDag-Erling Smørgrav *) 136017d15b25SDag-Erling Smørgrav ;; 136117d15b25SDag-Erling Smørgravesac 136217d15b25SDag-Erling Smørgrav 1363f44e67d1SCy SchubertAC_ARG_ENABLE(tfo-client, AS_HELP_STRING([--enable-tfo-client],[Enable TCP Fast Open for client mode])) 1364b5663de9SDag-Erling Smørgravcase "$enable_tfo_client" in 1365b5663de9SDag-Erling Smørgrav yes) 13665469a995SCy Schubert case "$host_os" in 13675469a995SCy Schubert linux*) AC_CHECK_DECL([MSG_FASTOPEN], [AC_MSG_WARN([Check the platform specific TFO kernel parameters are correctly configured to support client mode TFO])], 1368b5663de9SDag-Erling Smørgrav [AC_MSG_ERROR([TCP Fast Open is not available for client mode: please rerun without --enable-tfo-client])], 1369b5663de9SDag-Erling Smørgrav [AC_INCLUDES_DEFAULT 1370b5663de9SDag-Erling Smørgrav#include <netinet/tcp.h> 1371b5663de9SDag-Erling Smørgrav]) 1372b5663de9SDag-Erling Smørgrav AC_DEFINE_UNQUOTED([USE_MSG_FASTOPEN], [1], [Define this to enable client TCP Fast Open.]) 1373b5663de9SDag-Erling Smørgrav ;; 13745469a995SCy Schubert 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])], 1375b5663de9SDag-Erling Smørgrav [AC_MSG_ERROR([TCP Fast Open is not available for client mode: please rerun without --enable-tfo-client])], 1376b5663de9SDag-Erling Smørgrav [AC_INCLUDES_DEFAULT 1377b5663de9SDag-Erling Smørgrav#include <sys/socket.h> 1378b5663de9SDag-Erling Smørgrav]) 1379b5663de9SDag-Erling Smørgrav AC_DEFINE_UNQUOTED([USE_OSX_MSG_FASTOPEN], [1], [Define this to enable client TCP Fast Open.]) 1380b5663de9SDag-Erling Smørgrav ;; 1381b5663de9SDag-Erling Smørgrav esac 1382b5663de9SDag-Erling Smørgrav ;; 1383b5663de9SDag-Erling Smørgrav no|*) 1384b5663de9SDag-Erling Smørgrav ;; 1385b5663de9SDag-Erling Smørgravesac 1386b5663de9SDag-Erling Smørgrav 1387f44e67d1SCy SchubertAC_ARG_ENABLE(tfo-server, AS_HELP_STRING([--enable-tfo-server],[Enable TCP Fast Open for server mode])) 1388b5663de9SDag-Erling Smørgravcase "$enable_tfo_server" in 1389b5663de9SDag-Erling Smørgrav yes) 1390b5663de9SDag-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 1391b5663de9SDag-Erling Smørgrav#include <netinet/tcp.h> 1392b5663de9SDag-Erling Smørgrav ]) 1393b5663de9SDag-Erling Smørgrav AC_DEFINE_UNQUOTED([USE_TCP_FASTOPEN], [1], [Define this to enable server TCP Fast Open.]) 1394b5663de9SDag-Erling Smørgrav ;; 1395b5663de9SDag-Erling Smørgrav no|*) 1396b5663de9SDag-Erling Smørgrav ;; 1397b5663de9SDag-Erling Smørgravesac 1398b5663de9SDag-Erling Smørgrav 1399b7579f77SDag-Erling Smørgrav# check for libevent 1400f44e67d1SCy SchubertAC_ARG_WITH(libevent, AS_HELP_STRING([--with-libevent=pathname],[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.]), 140125039b37SCy Schubert [ ],[ with_libevent="no" ]) 140225039b37SCy Schubertif test "x_$with_libevent" != x_no; then 140325039b37SCy Schubert AC_DEFINE([USE_LIBEVENT], [1], [Define if you enable libevent]) 1404b7579f77SDag-Erling Smørgrav AC_MSG_CHECKING(for libevent) 140525039b37SCy Schubert if test "x_$with_libevent" = x_ -o "x_$with_libevent" = x_yes; then 140625039b37SCy Schubert with_libevent="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" 1407b7579f77SDag-Erling Smørgrav fi 140825039b37SCy Schubert for dir in $with_libevent; do 1409b7579f77SDag-Erling Smørgrav thedir="$dir" 141017d15b25SDag-Erling Smørgrav if test -f "$dir/include/event.h" -o -f "$dir/include/event2/event.h"; then 1411b7579f77SDag-Erling Smørgrav found_libevent="yes" 1412b7579f77SDag-Erling Smørgrav dnl assume /usr is in default path. 1413b7579f77SDag-Erling Smørgrav if test "$thedir" != "/usr"; then 1414b7579f77SDag-Erling Smørgrav CPPFLAGS="$CPPFLAGS -I$thedir/include" 1415b7579f77SDag-Erling Smørgrav fi 1416b7579f77SDag-Erling Smørgrav break; 1417b7579f77SDag-Erling Smørgrav fi 1418b7579f77SDag-Erling Smørgrav done 1419b7579f77SDag-Erling Smørgrav if test x_$found_libevent != x_yes; then 1420b7579f77SDag-Erling Smørgrav if test -f "$dir/event.h" -a \( -f "$dir/libevent.la" -o -f "$dir/libev.la" \) ; then 1421b7579f77SDag-Erling Smørgrav # libevent source directory 1422b7579f77SDag-Erling Smørgrav AC_MSG_RESULT(found in $thedir) 1423b7579f77SDag-Erling Smørgrav CPPFLAGS="$CPPFLAGS -I$thedir -I$thedir/include" 1424b7579f77SDag-Erling Smørgrav BAK_LDFLAGS_SET="1" 1425b7579f77SDag-Erling Smørgrav BAK_LDFLAGS="$LDFLAGS" 1426b7579f77SDag-Erling Smørgrav # remove evdns from linking 1427b7579f77SDag-Erling Smørgrav mkdir build >/dev/null 2>&1 1428b7579f77SDag-Erling Smørgrav mkdir build/libevent >/dev/null 2>&1 1429b7579f77SDag-Erling Smørgrav mkdir build/libevent/.libs >/dev/null 2>&1 1430b7579f77SDag-Erling Smørgrav ev_files_o=`ls $thedir/*.o | grep -v evdns\.o | grep -v bufferevent_openssl\.o` 1431b7579f77SDag-Erling Smørgrav ev_files_lo=`ls $thedir/*.lo | grep -v evdns\.lo | grep -v bufferevent_openssl\.lo` 1432b7579f77SDag-Erling Smørgrav ev_files_libso=`ls $thedir/.libs/*.o | grep -v evdns\.o | grep -v bufferevent_openssl\.o` 1433b7579f77SDag-Erling Smørgrav cp $ev_files_o build/libevent 1434b7579f77SDag-Erling Smørgrav cp $ev_files_lo build/libevent 1435b7579f77SDag-Erling Smørgrav cp $ev_files_libso build/libevent/.libs 1436b7579f77SDag-Erling Smørgrav LATE_LDFLAGS="build/libevent/*.lo -lm" 1437b7579f77SDag-Erling Smørgrav LDFLAGS="build/libevent/*.o $LDFLAGS -lm" 1438b7579f77SDag-Erling Smørgrav else 143925039b37SCy Schubert AC_MSG_ERROR([Cannot find the libevent library in $with_libevent 1440b7579f77SDag-Erling SmørgravYou can restart ./configure --with-libevent=no to use a builtin alternative. 1441b7579f77SDag-Erling SmørgravPlease note that this alternative is not as capable as libevent when using 1442b7579f77SDag-Erling Smørgravlarge outgoing port ranges. ]) 1443b7579f77SDag-Erling Smørgrav fi 1444b7579f77SDag-Erling Smørgrav else 1445b7579f77SDag-Erling Smørgrav AC_MSG_RESULT(found in $thedir) 144617d15b25SDag-Erling Smørgrav dnl if event2 exists and no event lib in dir itself, use subdir 144717d15b25SDag-Erling Smørgrav if test ! -f $thedir/lib/libevent.a -a ! -f $thedir/lib/libevent.so -a -d "$thedir/lib/event2"; then 144817d15b25SDag-Erling Smørgrav LDFLAGS="$LDFLAGS -L$thedir/lib/event2" 144917d15b25SDag-Erling Smørgrav ACX_RUNTIME_PATH_ADD([$thedir/lib/event2]) 145017d15b25SDag-Erling Smørgrav else 1451b7579f77SDag-Erling Smørgrav dnl assume /usr is in default path, do not add "". 1452b7579f77SDag-Erling Smørgrav if test "$thedir" != "/usr" -a "$thedir" != ""; then 1453b7579f77SDag-Erling Smørgrav LDFLAGS="$LDFLAGS -L$thedir/lib" 1454b7579f77SDag-Erling Smørgrav ACX_RUNTIME_PATH_ADD([$thedir/lib]) 1455b7579f77SDag-Erling Smørgrav fi 1456b7579f77SDag-Erling Smørgrav fi 145717d15b25SDag-Erling Smørgrav fi 1458b7579f77SDag-Erling Smørgrav # check for library used by libevent after 1.3c 1459b7579f77SDag-Erling Smørgrav AC_SEARCH_LIBS([clock_gettime], [rt]) 1460b7579f77SDag-Erling Smørgrav 1461b7579f77SDag-Erling Smørgrav # is the event.h header libev or libevent? 1462b7579f77SDag-Erling Smørgrav AC_CHECK_HEADERS([event.h],,, [AC_INCLUDES_DEFAULT]) 1463b7579f77SDag-Erling Smørgrav AC_CHECK_DECL(EV_VERSION_MAJOR, [ 1464b7579f77SDag-Erling Smørgrav AC_SEARCH_LIBS(event_set, [ev]) 1465b7579f77SDag-Erling Smørgrav ],[ 1466b7579f77SDag-Erling Smørgrav AC_SEARCH_LIBS(event_set, [event]) 1467b7579f77SDag-Erling Smørgrav ],[AC_INCLUDES_DEFAULT 1468b7579f77SDag-Erling Smørgrav#include <event.h> 1469b7579f77SDag-Erling Smørgrav ]) 1470b7579f77SDag-Erling Smørgrav AC_CHECK_FUNCS([event_base_free]) # only in libevent 1.2 and later 1471b7579f77SDag-Erling Smørgrav AC_CHECK_FUNCS([event_base_once]) # only in libevent 1.4.1 and later 1472b7579f77SDag-Erling Smørgrav AC_CHECK_FUNCS([event_base_new]) # only in libevent 1.4.1 and later 1473b7579f77SDag-Erling Smørgrav AC_CHECK_FUNCS([event_base_get_method]) # only in libevent 1.4.3 and later 1474b7579f77SDag-Erling Smørgrav AC_CHECK_FUNCS([ev_loop]) # only in libev. (tested on 3.51) 1475b7579f77SDag-Erling Smørgrav AC_CHECK_FUNCS([ev_default_loop]) # only in libev. (tested on 4.00) 1476e86b9096SDag-Erling Smørgrav AC_CHECK_FUNCS([event_assign]) # in libevent, for thread-safety 1477e86b9096SDag-Erling Smørgrav AC_CHECK_DECLS([evsignal_assign], [], [], [AC_INCLUDES_DEFAULT 1478e86b9096SDag-Erling Smørgrav#ifdef HAVE_EVENT_H 1479e86b9096SDag-Erling Smørgrav# include <event.h> 1480e86b9096SDag-Erling Smørgrav#else 1481e86b9096SDag-Erling Smørgrav# include "event2/event.h" 1482e86b9096SDag-Erling Smørgrav#endif 1483e86b9096SDag-Erling Smørgrav ]) 1484bc892140SDag-Erling Smørgrav PC_LIBEVENT_DEPENDENCY="libevent" 1485bc892140SDag-Erling Smørgrav AC_SUBST(PC_LIBEVENT_DEPENDENCY) 1486b7579f77SDag-Erling Smørgrav if test -n "$BAK_LDFLAGS_SET"; then 1487b7579f77SDag-Erling Smørgrav LDFLAGS="$BAK_LDFLAGS" 1488b7579f77SDag-Erling Smørgrav fi 1489b7579f77SDag-Erling Smørgravelse 1490b7579f77SDag-Erling Smørgrav AC_DEFINE(USE_MINI_EVENT, 1, [Define if you want to use internal select based events]) 1491b7579f77SDag-Erling Smørgravfi 1492b7579f77SDag-Erling Smørgrav 1493b7579f77SDag-Erling Smørgrav# check for libexpat 1494f44e67d1SCy SchubertAC_ARG_WITH(libexpat, AS_HELP_STRING([--with-libexpat=path],[specify explicit path for libexpat.]), 1495b7579f77SDag-Erling Smørgrav [ ],[ withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" ]) 1496b7579f77SDag-Erling SmørgravAC_MSG_CHECKING(for libexpat) 1497b7579f77SDag-Erling Smørgravfound_libexpat="no" 1498b7579f77SDag-Erling Smørgravfor dir in $withval ; do 1499b7579f77SDag-Erling Smørgrav if test -f "$dir/include/expat.h"; then 1500b7579f77SDag-Erling Smørgrav found_libexpat="yes" 1501b7579f77SDag-Erling Smørgrav dnl assume /usr is in default path. 1502b7579f77SDag-Erling Smørgrav if test "$dir" != "/usr"; then 1503b7579f77SDag-Erling Smørgrav CPPFLAGS="$CPPFLAGS -I$dir/include" 1504b7579f77SDag-Erling Smørgrav LDFLAGS="$LDFLAGS -L$dir/lib" 1505b7579f77SDag-Erling Smørgrav fi 1506b7579f77SDag-Erling Smørgrav AC_MSG_RESULT(found in $dir) 1507b7579f77SDag-Erling Smørgrav break; 1508b7579f77SDag-Erling Smørgrav fi 1509b7579f77SDag-Erling Smørgravdone 1510b7579f77SDag-Erling Smørgravif test x_$found_libexpat != x_yes; then 1511f44e67d1SCy Schubert AC_MSG_ERROR([Could not find libexpat, expat.h]) 1512b7579f77SDag-Erling Smørgravfi 1513b7579f77SDag-Erling SmørgravAC_CHECK_HEADERS([expat.h],,, [AC_INCLUDES_DEFAULT]) 151405ab2901SDag-Erling SmørgravAC_CHECK_DECLS([XML_StopParser], [], [], [AC_INCLUDES_DEFAULT 151505ab2901SDag-Erling Smørgrav#include <expat.h> 151605ab2901SDag-Erling Smørgrav]) 1517b7579f77SDag-Erling Smørgrav 15180fb34990SDag-Erling Smørgrav# hiredis (redis C client for cachedb) 1519f44e67d1SCy SchubertAC_ARG_WITH(libhiredis, AS_HELP_STRING([--with-libhiredis=path],[specify explicit path for libhiredis.]), 15200fb34990SDag-Erling Smørgrav [ ],[ withval="no" ]) 15210fb34990SDag-Erling Smørgravfound_libhiredis="no" 15220fb34990SDag-Erling Smørgravif test x_$withval = x_yes -o x_$withval != x_no; then 15234c75e3aaSDag-Erling Smørgrav AC_MSG_CHECKING(for libhiredis) 15240fb34990SDag-Erling Smørgrav if test x_$withval = x_ -o x_$withval = x_yes; then 15250fb34990SDag-Erling Smørgrav withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" 15260fb34990SDag-Erling Smørgrav fi 15270fb34990SDag-Erling Smørgrav for dir in $withval ; do 15280fb34990SDag-Erling Smørgrav if test -f "$dir/include/hiredis/hiredis.h"; then 15290fb34990SDag-Erling Smørgrav found_libhiredis="yes" 15300fb34990SDag-Erling Smørgrav dnl assume /usr is in default path. 15310fb34990SDag-Erling Smørgrav if test "$dir" != "/usr"; then 15320fb34990SDag-Erling Smørgrav CPPFLAGS="$CPPFLAGS -I$dir/include" 15330fb34990SDag-Erling Smørgrav LDFLAGS="$LDFLAGS -L$dir/lib" 15340fb34990SDag-Erling Smørgrav fi 15350fb34990SDag-Erling Smørgrav AC_MSG_RESULT(found in $dir) 15360fb34990SDag-Erling Smørgrav AC_DEFINE([USE_REDIS], [1], [Define this to use hiredis client.]) 15370fb34990SDag-Erling Smørgrav LIBS="$LIBS -lhiredis" 15380fb34990SDag-Erling Smørgrav break; 15390fb34990SDag-Erling Smørgrav fi 15400fb34990SDag-Erling Smørgrav done 15410fb34990SDag-Erling Smørgrav if test x_$found_libhiredis != x_yes; then 1542f44e67d1SCy Schubert AC_MSG_ERROR([Could not find libhiredis, hiredis.h]) 15430fb34990SDag-Erling Smørgrav fi 15440fb34990SDag-Erling Smørgrav AC_CHECK_HEADERS([hiredis/hiredis.h],,, [AC_INCLUDES_DEFAULT]) 15450fb34990SDag-Erling Smørgrav AC_CHECK_DECLS([redisConnect], [], [], [AC_INCLUDES_DEFAULT 15460fb34990SDag-Erling Smørgrav #include <hiredis/hiredis.h> 15470fb34990SDag-Erling Smørgrav ]) 15480fb34990SDag-Erling Smørgravfi 15490fb34990SDag-Erling Smørgrav 1550c0caa2e2SCy Schubert# nghttp2 1551f44e67d1SCy SchubertAC_ARG_WITH(libnghttp2, AS_HELP_STRING([--with-libnghttp2=path],[specify explicit path for libnghttp2.]), 1552c0caa2e2SCy Schubert [ ],[ withval="no" ]) 1553c0caa2e2SCy Schubertfound_libnghttp2="no" 1554c0caa2e2SCy Schubertif test x_$withval = x_yes -o x_$withval != x_no; then 1555c0caa2e2SCy Schubert AC_MSG_CHECKING(for libnghttp2) 1556c0caa2e2SCy Schubert if test x_$withval = x_ -o x_$withval = x_yes; then 1557c0caa2e2SCy Schubert withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" 1558c0caa2e2SCy Schubert fi 1559c0caa2e2SCy Schubert for dir in $withval ; do 1560c0caa2e2SCy Schubert if test -f "$dir/include/nghttp2/nghttp2.h"; then 1561c0caa2e2SCy Schubert found_libnghttp2="yes" 1562c0caa2e2SCy Schubert dnl assume /usr is in default path. 1563c0caa2e2SCy Schubert if test "$dir" != "/usr"; then 1564c0caa2e2SCy Schubert CPPFLAGS="$CPPFLAGS -I$dir/include" 1565c0caa2e2SCy Schubert LDFLAGS="$LDFLAGS -L$dir/lib" 1566c0caa2e2SCy Schubert fi 1567c0caa2e2SCy Schubert AC_MSG_RESULT(found in $dir) 1568c0caa2e2SCy Schubert AC_DEFINE([HAVE_NGHTTP2], [1], [Define this to use nghttp2 client.]) 1569c0caa2e2SCy Schubert LIBS="$LIBS -lnghttp2" 1570c0caa2e2SCy Schubert break; 1571c0caa2e2SCy Schubert fi 1572c0caa2e2SCy Schubert done 1573c0caa2e2SCy Schubert if test x_$found_libnghttp2 != x_yes; then 1574f44e67d1SCy Schubert AC_MSG_ERROR([Could not find libnghttp2, nghttp2.h]) 1575c0caa2e2SCy Schubert fi 1576c0caa2e2SCy Schubert AC_CHECK_HEADERS([nghttp2/nghttp2.h],,, [AC_INCLUDES_DEFAULT]) 1577c0caa2e2SCy Schubert AC_CHECK_DECLS([nghttp2_session_server_new], [], [], [AC_INCLUDES_DEFAULT 1578c0caa2e2SCy Schubert #include <nghttp2/nghttp2.h> 1579c0caa2e2SCy Schubert ]) 1580c0caa2e2SCy Schubertfi 1581c0caa2e2SCy Schubert 1582*46d2f618SCy Schubert# ngtcp2 1583*46d2f618SCy SchubertAC_ARG_WITH(libngtcp2, AS_HELP_STRING([--with-libngtcp2=path],[specify explicit path for libngtcp2, for QUIC.]), 1584*46d2f618SCy Schubert [ ],[ withval="no" ]) 1585*46d2f618SCy Schubertfound_libngtcp2="no" 1586*46d2f618SCy Schubertif test x_$withval = x_yes -o x_$withval != x_no; then 1587*46d2f618SCy Schubert AC_MSG_CHECKING(for libngtcp2) 1588*46d2f618SCy Schubert if test x_$withval = x_ -o x_$withval = x_yes; then 1589*46d2f618SCy Schubert withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" 1590*46d2f618SCy Schubert fi 1591*46d2f618SCy Schubert for dir in $withval ; do 1592*46d2f618SCy Schubert if test -f "$dir/include/ngtcp2/ngtcp2.h"; then 1593*46d2f618SCy Schubert found_libngtcp2="yes" 1594*46d2f618SCy Schubert dnl assume /usr is in default path. 1595*46d2f618SCy Schubert if test "$dir" != "/usr"; then 1596*46d2f618SCy Schubert CPPFLAGS="$CPPFLAGS -I$dir/include" 1597*46d2f618SCy Schubert LDFLAGS="$LDFLAGS -L$dir/lib" 1598*46d2f618SCy Schubert fi 1599*46d2f618SCy Schubert AC_MSG_RESULT(found in $dir) 1600*46d2f618SCy Schubert AC_DEFINE([HAVE_NGTCP2], [1], [Define this to use ngtcp2.]) 1601*46d2f618SCy Schubert LIBS="$LIBS -lngtcp2" 1602*46d2f618SCy Schubert break; 1603*46d2f618SCy Schubert fi 1604*46d2f618SCy Schubert done 1605*46d2f618SCy Schubert if test x_$found_libngtcp2 != x_yes; then 1606*46d2f618SCy Schubert AC_MSG_ERROR([Could not find libngtcp2, ngtcp2.h]) 1607*46d2f618SCy Schubert fi 1608*46d2f618SCy Schubert AC_CHECK_HEADERS([ngtcp2/ngtcp2.h ngtcp2/ngtcp2_crypto_openssl.h ngtcp2/ngtcp2_crypto_quictls.h],,, [AC_INCLUDES_DEFAULT]) 1609*46d2f618SCy Schubert AC_CHECK_DECLS([ngtcp2_conn_server_new], [], [], [AC_INCLUDES_DEFAULT 1610*46d2f618SCy Schubert #include <ngtcp2/ngtcp2.h> 1611*46d2f618SCy Schubert ]) 1612*46d2f618SCy Schubert AC_CHECK_DECLS([ngtcp2_crypto_encrypt_cb], [], [], [AC_INCLUDES_DEFAULT 1613*46d2f618SCy Schubert #include <ngtcp2/ngtcp2_crypto.h> 1614*46d2f618SCy Schubert ]) 1615*46d2f618SCy Schubert AC_CHECK_LIB([ngtcp2_crypto_openssl], [ngtcp2_crypto_encrypt_cb], [ LIBS="$LIBS -lngtcp2_crypto_openssl" ]) 1616*46d2f618SCy Schubert AC_CHECK_LIB([ngtcp2_crypto_quictls], [ngtcp2_crypto_encrypt_cb], [ LIBS="$LIBS -lngtcp2_crypto_quictls" ]) 1617*46d2f618SCy Schubert AC_CHECK_FUNCS([ngtcp2_crypto_encrypt_cb ngtcp2_ccerr_default ngtcp2_conn_in_closing_period ngtcp2_conn_in_draining_period ngtcp2_conn_get_max_local_streams_uni ngtcp2_crypto_quictls_from_ossl_encryption_level ngtcp2_crypto_quictls_configure_server_context ngtcp2_crypto_quictls_configure_client_context ngtcp2_conn_get_num_scid ngtcp2_conn_tls_early_data_rejected ngtcp2_conn_encode_0rtt_transport_params]) 1618*46d2f618SCy Schubert AC_CHECK_FUNCS([SSL_is_quic], [], [AC_MSG_ERROR([No QUIC support detected in OpenSSL. Need OpenSSL version with QUIC support to enable DNS over QUIC with libngtcp2.])]) 1619*46d2f618SCy Schubert AC_CHECK_TYPES([struct ngtcp2_version_cid, ngtcp2_encryption_level],,,[AC_INCLUDES_DEFAULT 1620*46d2f618SCy Schubert #include <ngtcp2/ngtcp2.h> 1621*46d2f618SCy Schubert ]) 1622*46d2f618SCy Schubert AC_CHECK_MEMBERS([struct ngtcp2_pkt_hd.tokenlen, struct ngtcp2_settings.tokenlen, struct ngtcp2_settings.max_tx_udp_payload_size, struct ngtcp2_transport_params.original_dcid_present],,,[AC_INCLUDES_DEFAULT 1623*46d2f618SCy Schubert #include <ngtcp2/ngtcp2.h> 1624*46d2f618SCy Schubert ]) 1625*46d2f618SCy Schubert 1626*46d2f618SCy Schubert AC_MSG_CHECKING([whether ngtcp2_conn_shutdown_stream has 4 arguments]) 1627*46d2f618SCy Schubert AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT 1628*46d2f618SCy Schubert#include <ngtcp2/ngtcp2.h> 1629*46d2f618SCy Schubert ],[ 1630*46d2f618SCy Schubert (void)ngtcp2_conn_shutdown_stream(NULL, 0, 0, 0); 1631*46d2f618SCy Schubert ])],[ 1632*46d2f618SCy Schubert AC_MSG_RESULT(yes) 1633*46d2f618SCy Schubert AC_DEFINE(HAVE_NGTCP2_CONN_SHUTDOWN_STREAM4, 1, [Define if ngtcp2_conn_shutdown_stream has 4 arguments.]) 1634*46d2f618SCy Schubert ],[ 1635*46d2f618SCy Schubert AC_MSG_RESULT(no) 1636*46d2f618SCy Schubert ]) 1637*46d2f618SCy Schubert 1638*46d2f618SCy Schubertfi 1639*46d2f618SCy Schubert 16400eefd307SCy Schubert# set static linking for uninstalled libraries if requested 1641b7579f77SDag-Erling SmørgravAC_SUBST(staticexe) 1642b7579f77SDag-Erling Smørgravstaticexe="" 1643f44e67d1SCy SchubertAC_ARG_ENABLE(static-exe, AS_HELP_STRING([--enable-static-exe],[ enable to compile executables statically against (event) uninstalled libs, for debug purposes ]), 1644b7579f77SDag-Erling Smørgrav , ) 1645b7579f77SDag-Erling Smørgravif test x_$enable_static_exe = x_yes; then 1646b7579f77SDag-Erling Smørgrav staticexe="-static" 1647b7579f77SDag-Erling Smørgrav if test "$on_mingw" = yes; then 1648b7579f77SDag-Erling Smørgrav staticexe="-all-static" 1649b5663de9SDag-Erling Smørgrav # for static compile, include gdi32 and zlib here. 1650b7c0c8c1SCy Schubert if echo "$LIBS" | grep 'lgdi32' >/dev/null; then 1651971980c3SDag-Erling Smørgrav : 1652971980c3SDag-Erling Smørgrav else 1653971980c3SDag-Erling Smørgrav LIBS="$LIBS -lgdi32" 1654971980c3SDag-Erling Smørgrav fi 16550a92a9fcSCy Schubert AC_CHECK_LIB([z], [compress], [ LIBS="$LIBS -lz" ]) 1656b7c0c8c1SCy Schubert if echo "$LIBS" | grep -e "libssp.a" -e "lssp" >/dev/null; then 1657b7c0c8c1SCy Schubert : 1658b7c0c8c1SCy Schubert else 1659f44e67d1SCy Schubert LIBS="$LIBS -l:libssp.a" 1660b7579f77SDag-Erling Smørgrav fi 1661b7579f77SDag-Erling Smørgrav fi 1662b7c0c8c1SCy Schubertfi 1663b7579f77SDag-Erling Smørgrav 16640eefd307SCy Schubert# set full static linking if requested 1665f44e67d1SCy SchubertAC_ARG_ENABLE(fully-static, AS_HELP_STRING([--enable-fully-static],[ enable to compile fully static ]), 16660eefd307SCy Schubert , ) 16670eefd307SCy Schubertif test x_$enable_fully_static = x_yes; then 16680eefd307SCy Schubert staticexe="-all-static" 16690eefd307SCy Schubert if test "$on_mingw" = yes; then 16700eefd307SCy Schubert # for static compile, include gdi32 and zlib here. 16710eefd307SCy Schubert if echo $LIBS | grep 'lgdi32' >/dev/null; then 16720eefd307SCy Schubert : 16730eefd307SCy Schubert else 16740eefd307SCy Schubert LIBS="$LIBS -lgdi32" 16750eefd307SCy Schubert fi 16760a92a9fcSCy Schubert AC_CHECK_LIB([z], [compress], [ LIBS="$LIBS -lz" ]) 1677b7c0c8c1SCy Schubert if echo "$LIBS" | grep -e "libssp.a" -e "lssp" >/dev/null; then 1678b7c0c8c1SCy Schubert : 1679b7c0c8c1SCy Schubert else 1680f44e67d1SCy Schubert LIBS="$LIBS -l:libssp.a" 16810eefd307SCy Schubert fi 16820eefd307SCy Schubert fi 1683b7c0c8c1SCy Schubertfi 16843005e0a3SDag-Erling Smørgrav 1685b7579f77SDag-Erling Smørgrav# set lock checking if requested 1686f44e67d1SCy SchubertAC_ARG_ENABLE(lock_checks, AS_HELP_STRING([--enable-lock-checks],[ enable to check lock and unlock calls, for debug purposes ]), 1687b7579f77SDag-Erling Smørgrav , ) 1688b7579f77SDag-Erling Smørgravif test x_$enable_lock_checks = x_yes; then 1689b7579f77SDag-Erling Smørgrav AC_DEFINE(ENABLE_LOCK_CHECKS, 1, [Define if you want to use debug lock checking (slow).]) 1690b7579f77SDag-Erling Smørgrav CHECKLOCK_OBJ="checklocks.lo" 1691b7579f77SDag-Erling Smørgrav AC_SUBST(CHECKLOCK_OBJ) 1692b7579f77SDag-Erling Smørgravfi 1693b7579f77SDag-Erling Smørgrav 1694b7579f77SDag-Erling SmørgravACX_CHECK_GETADDRINFO_WITH_INCLUDES 1695b7579f77SDag-Erling Smørgravif test "$USE_WINSOCK" = 1; then 1696b7579f77SDag-Erling Smørgrav AC_DEFINE(UB_ON_WINDOWS, 1, [Use win32 resources and API]) 1697b7579f77SDag-Erling Smørgrav AC_CHECK_HEADERS([iphlpapi.h],,, [AC_INCLUDES_DEFAULT 1698b7579f77SDag-Erling Smørgrav#include <windows.h> 1699b7579f77SDag-Erling Smørgrav ]) 1700b7579f77SDag-Erling Smørgrav AC_CHECK_TOOL(WINDRES, windres) 1701b7c0c8c1SCy Schubert if echo "$LIBS" | grep crypt32 >/dev/null; then 1702b7c0c8c1SCy Schubert LIBS="$LIBS -liphlpapi" 1703b7c0c8c1SCy Schubert else 17043bd4df0aSDag-Erling Smørgrav LIBS="$LIBS -liphlpapi -lcrypt32" 1705b7c0c8c1SCy Schubert fi 1706b7579f77SDag-Erling Smørgrav WINAPPS="unbound-service-install.exe unbound-service-remove.exe anchor-update.exe" 1707b7579f77SDag-Erling Smørgrav AC_SUBST(WINAPPS) 1708b7579f77SDag-Erling Smørgrav WIN_DAEMON_SRC="winrc/win_svc.c winrc/w_inst.c" 1709b7579f77SDag-Erling Smørgrav AC_SUBST(WIN_DAEMON_SRC) 1710b7579f77SDag-Erling Smørgrav WIN_DAEMON_OBJ="win_svc.lo w_inst.lo" 1711b7579f77SDag-Erling Smørgrav AC_SUBST(WIN_DAEMON_OBJ) 1712b7579f77SDag-Erling Smørgrav WIN_DAEMON_OBJ_LINK="rsrc_unbound.o" 1713b7579f77SDag-Erling Smørgrav AC_SUBST(WIN_DAEMON_OBJ_LINK) 1714b7579f77SDag-Erling Smørgrav WIN_HOST_OBJ_LINK="rsrc_unbound_host.o" 1715b7579f77SDag-Erling Smørgrav AC_SUBST(WIN_HOST_OBJ_LINK) 1716b7579f77SDag-Erling Smørgrav WIN_UBANCHOR_OBJ_LINK="rsrc_unbound_anchor.o log.lo locks.lo" 1717b7579f77SDag-Erling Smørgrav AC_SUBST(WIN_UBANCHOR_OBJ_LINK) 1718b7579f77SDag-Erling Smørgrav WIN_CONTROL_OBJ_LINK="rsrc_unbound_control.o" 1719b7579f77SDag-Erling Smørgrav AC_SUBST(WIN_CONTROL_OBJ_LINK) 1720b7579f77SDag-Erling Smørgrav WIN_CHECKCONF_OBJ_LINK="rsrc_unbound_checkconf.o" 1721b7579f77SDag-Erling Smørgrav AC_SUBST(WIN_CHECKCONF_OBJ_LINK) 1722a39a5a69SCy Schubert AC_DEFINE(__USE_MINGW_ANSI_STDIO, 1, [defined to use gcc ansi snprintf and sscanf that understands %lld when compiled for windows.]) 1723b7579f77SDag-Erling Smørgravfi 1724b7579f77SDag-Erling Smørgravif test $ac_cv_func_getaddrinfo = no; then 1725b7579f77SDag-Erling Smørgrav AC_LIBOBJ([fake-rfc2553]) 1726b7579f77SDag-Erling Smørgravfi 1727b7579f77SDag-Erling Smørgrav# check after getaddrinfo for its libraries 1728b7579f77SDag-Erling SmørgravACX_FUNC_IOCTLSOCKET 1729b7579f77SDag-Erling Smørgrav 1730b7579f77SDag-Erling Smørgrav# see if daemon(3) exists, and if it is deprecated. 1731b7579f77SDag-Erling SmørgravAC_CHECK_FUNCS([daemon]) 1732b7579f77SDag-Erling Smørgravif test $ac_cv_func_daemon = yes; then 1733b7579f77SDag-Erling Smørgrav ACX_FUNC_DEPRECATED([daemon], [(void)daemon(0, 0);], [ 1734b7579f77SDag-Erling Smørgrav#include <stdlib.h> 17355469a995SCy Schubert#include <unistd.h> 1736b7579f77SDag-Erling Smørgrav]) 1737b7579f77SDag-Erling Smørgravfi 1738b7579f77SDag-Erling Smørgrav 1739748bd829SDag-Erling SmørgravAC_CHECK_MEMBERS([struct sockaddr_un.sun_len],,,[ 1740748bd829SDag-Erling SmørgravAC_INCLUDES_DEFAULT 1741748bd829SDag-Erling Smørgrav#ifdef HAVE_SYS_UN_H 1742748bd829SDag-Erling Smørgrav#include <sys/un.h> 1743748bd829SDag-Erling Smørgrav#endif 1744748bd829SDag-Erling Smørgrav]) 1745b7579f77SDag-Erling SmørgravAC_CHECK_MEMBERS([struct in_pktinfo.ipi_spec_dst],,,[ 1746b7579f77SDag-Erling SmørgravAC_INCLUDES_DEFAULT 1747b7579f77SDag-Erling Smørgrav#if HAVE_SYS_PARAM_H 1748b7579f77SDag-Erling Smørgrav#include <sys/param.h> 1749b7579f77SDag-Erling Smørgrav#endif 1750b7579f77SDag-Erling Smørgrav 1751b7579f77SDag-Erling Smørgrav#ifdef HAVE_SYS_SOCKET_H 1752b7579f77SDag-Erling Smørgrav#include <sys/socket.h> 1753b7579f77SDag-Erling Smørgrav#endif 1754b7579f77SDag-Erling Smørgrav 1755b7579f77SDag-Erling Smørgrav#ifdef HAVE_SYS_UIO_H 1756b7579f77SDag-Erling Smørgrav#include <sys/uio.h> 1757b7579f77SDag-Erling Smørgrav#endif 1758b7579f77SDag-Erling Smørgrav 1759b7579f77SDag-Erling Smørgrav#ifdef HAVE_NETINET_IN_H 1760b7579f77SDag-Erling Smørgrav#include <netinet/in.h> 1761b7579f77SDag-Erling Smørgrav#endif 1762b7579f77SDag-Erling Smørgrav 1763f61ef7f6SDag-Erling Smørgrav#ifdef HAVE_NETINET_TCP_H 1764f61ef7f6SDag-Erling Smørgrav#include <netinet/tcp.h> 1765f61ef7f6SDag-Erling Smørgrav#endif 1766f61ef7f6SDag-Erling Smørgrav 1767b7579f77SDag-Erling Smørgrav#ifdef HAVE_ARPA_INET_H 1768b7579f77SDag-Erling Smørgrav#include <arpa/inet.h> 1769b7579f77SDag-Erling Smørgrav#endif 1770b7579f77SDag-Erling Smørgrav 1771b7579f77SDag-Erling Smørgrav#ifdef HAVE_WINSOCK2_H 1772b7579f77SDag-Erling Smørgrav#include <winsock2.h> 1773b7579f77SDag-Erling Smørgrav#endif 1774b7579f77SDag-Erling Smørgrav 1775b7579f77SDag-Erling Smørgrav#ifdef HAVE_WS2TCPIP_H 1776b7579f77SDag-Erling Smørgrav#include <ws2tcpip.h> 1777b7579f77SDag-Erling Smørgrav#endif 1778b7579f77SDag-Erling Smørgrav]) 1779091e9e46SCy Schubert 1780091e9e46SCy SchubertAC_MSG_CHECKING([for htobe64]) 1781091e9e46SCy SchubertAC_LINK_IFELSE([AC_LANG_PROGRAM([ 1782091e9e46SCy Schubert#include <stdio.h> 1783091e9e46SCy Schubert#ifdef HAVE_ENDIAN_H 1784091e9e46SCy Schubert# include <endian.h> 1785091e9e46SCy Schubert#endif 1786091e9e46SCy Schubert#ifdef HAVE_SYS_ENDIAN_H 1787091e9e46SCy Schubert# include <sys/endian.h> 1788091e9e46SCy Schubert#endif 1789091e9e46SCy Schubert], [unsigned long long x = htobe64(0); printf("%u", (unsigned)x);])], 1790091e9e46SCy Schubert AC_MSG_RESULT(yes) 1791091e9e46SCy Schubert AC_DEFINE(HAVE_HTOBE64, 1, [If we have htobe64]), 1792091e9e46SCy Schubert AC_MSG_RESULT(no)) 1793091e9e46SCy Schubert 1794091e9e46SCy SchubertAC_MSG_CHECKING([for be64toh]) 1795091e9e46SCy SchubertAC_LINK_IFELSE([AC_LANG_PROGRAM([ 1796091e9e46SCy Schubert#include <stdio.h> 1797091e9e46SCy Schubert#ifdef HAVE_ENDIAN_H 1798091e9e46SCy Schubert# include <endian.h> 1799091e9e46SCy Schubert#endif 1800091e9e46SCy Schubert#ifdef HAVE_SYS_ENDIAN_H 1801091e9e46SCy Schubert# include <sys/endian.h> 1802091e9e46SCy Schubert#endif 1803091e9e46SCy Schubert], [unsigned long long x = be64toh(0); printf("%u", (unsigned)x);])], 1804091e9e46SCy Schubert AC_MSG_RESULT(yes) 1805091e9e46SCy Schubert AC_DEFINE(HAVE_BE64TOH, 1, [If we have be64toh]), 1806091e9e46SCy Schubert AC_MSG_RESULT(no)) 1807091e9e46SCy Schubert 1808b7579f77SDag-Erling SmørgravAC_SEARCH_LIBS([setusercontext], [util]) 1809865f46b2SCy SchubertAC_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 shmget accept4 getifaddrs if_nametoindex poll gettid]) 1810b7579f77SDag-Erling SmørgravAC_CHECK_FUNCS([setresuid],,[AC_CHECK_FUNCS([setreuid])]) 1811b7579f77SDag-Erling SmørgravAC_CHECK_FUNCS([setresgid],,[AC_CHECK_FUNCS([setregid])]) 1812b7579f77SDag-Erling Smørgrav 1813b7579f77SDag-Erling Smørgrav# check if setreuid en setregid fail, on MacOSX10.4(darwin8). 18145469a995SCy Schubertif echo $host_os | grep darwin8 > /dev/null; then 1815b7579f77SDag-Erling Smørgrav AC_DEFINE(DARWIN_BROKEN_SETREUID, 1, [Define this if on macOSX10.4-darwin8 and setreuid and setregid do not work]) 1816b7579f77SDag-Erling Smørgravfi 18173005e0a3SDag-Erling SmørgravAC_CHECK_DECLS([inet_pton,inet_ntop], [], [], [ 18183005e0a3SDag-Erling SmørgravAC_INCLUDES_DEFAULT 18193005e0a3SDag-Erling Smørgrav#ifdef HAVE_NETINET_IN_H 18203005e0a3SDag-Erling Smørgrav#include <netinet/in.h> 18213005e0a3SDag-Erling Smørgrav#endif 18223005e0a3SDag-Erling Smørgrav 18233005e0a3SDag-Erling Smørgrav#ifdef HAVE_NETINET_TCP_H 18243005e0a3SDag-Erling Smørgrav#include <netinet/tcp.h> 18253005e0a3SDag-Erling Smørgrav#endif 18263005e0a3SDag-Erling Smørgrav 18273005e0a3SDag-Erling Smørgrav#ifdef HAVE_ARPA_INET_H 18283005e0a3SDag-Erling Smørgrav#include <arpa/inet.h> 18293005e0a3SDag-Erling Smørgrav#endif 18303005e0a3SDag-Erling Smørgrav 18313005e0a3SDag-Erling Smørgrav#ifdef HAVE_WINSOCK2_H 18323005e0a3SDag-Erling Smørgrav#include <winsock2.h> 18333005e0a3SDag-Erling Smørgrav#endif 18343005e0a3SDag-Erling Smørgrav 18353005e0a3SDag-Erling Smørgrav#ifdef HAVE_WS2TCPIP_H 18363005e0a3SDag-Erling Smørgrav#include <ws2tcpip.h> 18373005e0a3SDag-Erling Smørgrav#endif 18383005e0a3SDag-Erling Smørgrav]) 1839b7579f77SDag-Erling SmørgravAC_REPLACE_FUNCS(inet_aton) 1840b7579f77SDag-Erling SmørgravAC_REPLACE_FUNCS(inet_pton) 1841b7579f77SDag-Erling SmørgravAC_REPLACE_FUNCS(inet_ntop) 1842b7579f77SDag-Erling SmørgravAC_REPLACE_FUNCS(snprintf) 184305ab2901SDag-Erling Smørgrav# test if snprintf return the proper length 184405ab2901SDag-Erling Smørgravif test "x$ac_cv_func_snprintf" = xyes; then 184505ab2901SDag-Erling Smørgrav if test c${cross_compiling} = cno; then 184605ab2901SDag-Erling Smørgrav AC_MSG_CHECKING([for correct snprintf return value]) 184705ab2901SDag-Erling Smørgrav AC_RUN_IFELSE([AC_LANG_SOURCE(AC_INCLUDES_DEFAULT 184805ab2901SDag-Erling Smørgrav[[ 184905ab2901SDag-Erling Smørgravint main(void) { return !(snprintf(NULL, 0, "test") == 4); } 185005ab2901SDag-Erling Smørgrav]])], [AC_MSG_RESULT(yes)], [ 185105ab2901SDag-Erling Smørgrav AC_MSG_RESULT(no) 185205ab2901SDag-Erling Smørgrav AC_DEFINE([SNPRINTF_RET_BROKEN], [], [define if (v)snprintf does not return length needed, (but length used)]) 185305ab2901SDag-Erling Smørgrav AC_LIBOBJ(snprintf) 1854103ba509SCy Schubert ], [AC_MSG_RESULT(maybe)]) 185505ab2901SDag-Erling Smørgrav fi 185605ab2901SDag-Erling Smørgravfi 185717d15b25SDag-Erling SmørgravAC_REPLACE_FUNCS(strlcat) 1858b7579f77SDag-Erling SmørgravAC_REPLACE_FUNCS(strlcpy) 1859b7579f77SDag-Erling SmørgravAC_REPLACE_FUNCS(memmove) 1860b7579f77SDag-Erling SmørgravAC_REPLACE_FUNCS(gmtime_r) 186105ab2901SDag-Erling SmørgravAC_REPLACE_FUNCS(isblank) 1862a755b6f6SDag-Erling SmørgravAC_REPLACE_FUNCS(explicit_bzero) 186309a3aaf3SDag-Erling Smørgravdnl without CTIME, ARC4-functions and without reallocarray. 1864ff825849SDag-Erling SmørgravLIBOBJ_WITHOUT_CTIMEARC4="$LIBOBJS" 1865ff825849SDag-Erling SmørgravAC_SUBST(LIBOBJ_WITHOUT_CTIMEARC4) 1866e86b9096SDag-Erling SmørgravAC_MSG_CHECKING([for reallocarray]) 1867e86b9096SDag-Erling SmørgravAC_LINK_IFELSE([AC_LANG_SOURCE(AC_INCLUDES_DEFAULT 1868e86b9096SDag-Erling Smørgrav[[ 1869e86b9096SDag-Erling Smørgrav#ifndef _OPENBSD_SOURCE 1870e86b9096SDag-Erling Smørgrav#define _OPENBSD_SOURCE 1 1871e86b9096SDag-Erling Smørgrav#endif 1872e86b9096SDag-Erling Smørgrav#include <stdlib.h> 1873e86b9096SDag-Erling Smørgravint main(void) { 1874e86b9096SDag-Erling Smørgrav void* p = reallocarray(NULL, 10, 100); 1875e86b9096SDag-Erling Smørgrav free(p); 1876e86b9096SDag-Erling Smørgrav return 0; 1877e86b9096SDag-Erling Smørgrav} 1878e86b9096SDag-Erling Smørgrav]])], [AC_MSG_RESULT(yes) 1879e86b9096SDag-Erling Smørgrav AC_DEFINE(HAVE_REALLOCARRAY, 1, [If we have reallocarray(3)]) 1880e86b9096SDag-Erling Smørgrav], [ 1881e86b9096SDag-Erling Smørgrav AC_MSG_RESULT(no) 1882e86b9096SDag-Erling Smørgrav AC_LIBOBJ(reallocarray) 1883e86b9096SDag-Erling Smørgrav]) 18840eefd307SCy SchubertAC_CHECK_DECLS([reallocarray]) 1885ff825849SDag-Erling Smørgravif test "$USE_NSS" = "no"; then 1886ff825849SDag-Erling Smørgrav AC_REPLACE_FUNCS(arc4random) 1887ff825849SDag-Erling Smørgrav AC_REPLACE_FUNCS(arc4random_uniform) 1888ff825849SDag-Erling Smørgrav if test "$ac_cv_func_arc4random" = "no"; then 1889ff825849SDag-Erling Smørgrav AC_LIBOBJ(arc4_lock) 1890ff825849SDag-Erling Smørgrav AC_CHECK_FUNCS([getentropy],,[ 1891ff825849SDag-Erling Smørgrav if test "$USE_WINSOCK" = 1; then 1892ff825849SDag-Erling Smørgrav AC_LIBOBJ(getentropy_win) 1893ff825849SDag-Erling Smørgrav else 18943005e0a3SDag-Erling Smørgrav case "$host" in 18953005e0a3SDag-Erling Smørgrav Darwin|*darwin*) 1896ff825849SDag-Erling Smørgrav AC_LIBOBJ(getentropy_osx) 1897ff825849SDag-Erling Smørgrav ;; 18983005e0a3SDag-Erling Smørgrav *solaris*|*sunos*|SunOS) 1899ff825849SDag-Erling Smørgrav AC_LIBOBJ(getentropy_solaris) 1900ff825849SDag-Erling Smørgrav AC_CHECK_HEADERS([sys/sha2.h],, [ 1901ff825849SDag-Erling Smørgrav AC_CHECK_FUNCS([SHA512_Update],,[ 1902ff825849SDag-Erling Smørgrav AC_LIBOBJ(sha512) 1903ff825849SDag-Erling Smørgrav ]) 1904ff825849SDag-Erling Smørgrav ], [AC_INCLUDES_DEFAULT]) 1905ff825849SDag-Erling Smørgrav if test "$ac_cv_header_sys_sha2_h" = "yes"; then 1906ff825849SDag-Erling Smørgrav # this lib needed for sha2 on solaris 1907ff825849SDag-Erling Smørgrav LIBS="$LIBS -lmd" 1908ff825849SDag-Erling Smørgrav fi 19096480faa8SDag-Erling Smørgrav AC_SEARCH_LIBS([clock_gettime], [rt]) 1910ff825849SDag-Erling Smørgrav ;; 19110eefd307SCy Schubert *freebsd*|*FreeBSD) 19120eefd307SCy Schubert AC_LIBOBJ(getentropy_freebsd) 19130eefd307SCy Schubert ;; 19143005e0a3SDag-Erling Smørgrav *linux*|Linux|*) 1915ff825849SDag-Erling Smørgrav AC_LIBOBJ(getentropy_linux) 1916ff825849SDag-Erling Smørgrav AC_CHECK_FUNCS([SHA512_Update],,[ 1917ff825849SDag-Erling Smørgrav AC_DEFINE([COMPAT_SHA512], [1], [Do sha512 definitions in config.h]) 1918ff825849SDag-Erling Smørgrav AC_LIBOBJ(sha512) 1919ff825849SDag-Erling Smørgrav ]) 1920ff825849SDag-Erling Smørgrav AC_CHECK_HEADERS([sys/sysctl.h],,, [AC_INCLUDES_DEFAULT]) 19216480faa8SDag-Erling Smørgrav AC_CHECK_FUNCS([getauxval]) 1922ff825849SDag-Erling Smørgrav AC_SEARCH_LIBS([clock_gettime], [rt]) 1923ff825849SDag-Erling Smørgrav ;; 1924ff825849SDag-Erling Smørgrav esac 1925ff825849SDag-Erling Smørgrav fi 1926ff825849SDag-Erling Smørgrav ]) 1927ff825849SDag-Erling Smørgrav fi 1928ff825849SDag-Erling Smørgravfi 1929b7579f77SDag-Erling SmørgravLIBOBJ_WITHOUT_CTIME="$LIBOBJS" 1930b7579f77SDag-Erling SmørgravAC_SUBST(LIBOBJ_WITHOUT_CTIME) 1931b7579f77SDag-Erling SmørgravAC_REPLACE_FUNCS(ctime_r) 1932e2d15004SDag-Erling SmørgravAC_REPLACE_FUNCS(strsep) 1933b7579f77SDag-Erling Smørgrav 1934f44e67d1SCy SchubertAC_ARG_ENABLE(allsymbols, AS_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])) 1935b7579f77SDag-Erling Smørgravcase "$enable_allsymbols" in 1936b7579f77SDag-Erling Smørgrav yes) 1937b7579f77SDag-Erling Smørgrav COMMON_OBJ_ALL_SYMBOLS="" 1938b7579f77SDag-Erling Smørgrav UBSYMS="" 19395469a995SCy Schubert EXTRALINK="libunbound.la" 1940b7579f77SDag-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]) 1941b7579f77SDag-Erling Smørgrav ;; 1942b7579f77SDag-Erling Smørgrav no|*) 1943b7579f77SDag-Erling Smørgrav COMMON_OBJ_ALL_SYMBOLS='$(COMMON_OBJ)' 1944b7579f77SDag-Erling Smørgrav UBSYMS='-export-symbols $(srcdir)/libunbound/ubsyms.def' 1945b7579f77SDag-Erling Smørgrav EXTRALINK="" 1946b7579f77SDag-Erling Smørgrav ;; 1947b7579f77SDag-Erling Smørgravesac 1948b7579f77SDag-Erling SmørgravAC_SUBST(COMMON_OBJ_ALL_SYMBOLS) 1949b7579f77SDag-Erling SmørgravAC_SUBST(EXTRALINK) 1950b7579f77SDag-Erling SmørgravAC_SUBST(UBSYMS) 1951b7579f77SDag-Erling Smørgravif test x_$enable_lock_checks = x_yes; then 1952b7579f77SDag-Erling Smørgrav UBSYMS="-export-symbols clubsyms.def" 1953b7579f77SDag-Erling Smørgrav cp ${srcdir}/libunbound/ubsyms.def clubsyms.def 1954b7579f77SDag-Erling Smørgrav echo lock_protect >> clubsyms.def 1955*46d2f618SCy Schubert echo lock_protect_place >> clubsyms.def 1956b7579f77SDag-Erling Smørgrav echo lock_unprotect >> clubsyms.def 1957b7579f77SDag-Erling Smørgrav echo lock_get_mem >> clubsyms.def 1958b7579f77SDag-Erling Smørgrav echo checklock_start >> clubsyms.def 1959b7579f77SDag-Erling Smørgrav echo checklock_stop >> clubsyms.def 1960*46d2f618SCy Schubert echo checklock_set_output_name >> clubsyms.def 1961b7579f77SDag-Erling Smørgrav echo checklock_lock >> clubsyms.def 1962b7579f77SDag-Erling Smørgrav echo checklock_unlock >> clubsyms.def 1963b7579f77SDag-Erling Smørgrav echo checklock_init >> clubsyms.def 1964b7579f77SDag-Erling Smørgrav echo checklock_thrcreate >> clubsyms.def 1965b7579f77SDag-Erling Smørgrav echo checklock_thrjoin >> clubsyms.def 1966b7579f77SDag-Erling Smørgravfi 1967b7579f77SDag-Erling Smørgrav 1968ff825849SDag-Erling Smørgrav# check for dnstap if requested 1969ff825849SDag-Erling Smørgravdt_DNSTAP([$UNBOUND_RUN_DIR/dnstap.sock], 1970ff825849SDag-Erling Smørgrav [ 1971ff825849SDag-Erling Smørgrav AC_DEFINE([USE_DNSTAP], [1], [Define to 1 to enable dnstap support]) 1972ff825849SDag-Erling Smørgrav AC_SUBST([ENABLE_DNSTAP], [1]) 1973ff825849SDag-Erling Smørgrav 1974ff825849SDag-Erling Smørgrav AC_SUBST([opt_dnstap_socket_path]) 1975ff825849SDag-Erling Smørgrav ACX_ESCAPE_BACKSLASH($opt_dnstap_socket_path, hdr_dnstap_socket_path) 1976ff825849SDag-Erling Smørgrav AC_DEFINE_UNQUOTED(DNSTAP_SOCKET_PATH, 1977ff825849SDag-Erling Smørgrav ["$hdr_dnstap_socket_path"], [default dnstap socket path]) 197825039b37SCy Schubert AC_SUBST(DNSTAP_SOCKET_PATH,["$hdr_dnstap_socket_path"]) 1979f44e67d1SCy Schubert AC_SUBST(DNSTAP_SOCKET_TESTBIN,['unbound-dnstap-socket$(EXEEXT)']) 198025039b37SCy Schubert AC_SUBST([DNSTAP_SRC], ["dnstap/dnstap.c dnstap/dnstap.pb-c.c dnstap/dnstap_fstrm.c dnstap/dtstream.c"]) 198125039b37SCy Schubert AC_SUBST([DNSTAP_OBJ], ["dnstap.lo dnstap.pb-c.lo dnstap_fstrm.lo dtstream.lo"]) 1982ff825849SDag-Erling Smørgrav ], 1983ff825849SDag-Erling Smørgrav [ 1984ff825849SDag-Erling Smørgrav AC_SUBST([ENABLE_DNSTAP], [0]) 1985ff825849SDag-Erling Smørgrav ] 1986ff825849SDag-Erling Smørgrav) 1987ff825849SDag-Erling Smørgrav 198865b390aaSDag-Erling Smørgrav# check for dnscrypt if requested 198965b390aaSDag-Erling Smørgravdnsc_DNSCRYPT([ 199065b390aaSDag-Erling Smørgrav AC_DEFINE([USE_DNSCRYPT], [1], [Define to 1 to enable dnscrypt support]) 199165b390aaSDag-Erling Smørgrav AC_SUBST([ENABLE_DNSCRYPT], [1]) 199265b390aaSDag-Erling Smørgrav 199365b390aaSDag-Erling Smørgrav AC_SUBST([DNSCRYPT_SRC], ["dnscrypt/dnscrypt.c"]) 199465b390aaSDag-Erling Smørgrav AC_SUBST([DNSCRYPT_OBJ], ["dnscrypt.lo"]) 199565b390aaSDag-Erling Smørgrav ], 199665b390aaSDag-Erling Smørgrav [ 199765b390aaSDag-Erling Smørgrav AC_SUBST([ENABLE_DNSCRYPT], [0]) 199865b390aaSDag-Erling Smørgrav ] 199965b390aaSDag-Erling Smørgrav) 200065b390aaSDag-Erling Smørgrav 2001e2d15004SDag-Erling Smørgrav# check for cachedb if requested 2002f44e67d1SCy SchubertAC_ARG_ENABLE(cachedb, AS_HELP_STRING([--enable-cachedb],[enable cachedb module that can use external cache storage])) 20033bd4df0aSDag-Erling Smørgrav# turn on cachedb when hiredis support is enabled. 20043bd4df0aSDag-Erling Smørgravif test "$found_libhiredis" = "yes"; then enable_cachedb="yes"; fi 2005e2d15004SDag-Erling Smørgravcase "$enable_cachedb" in 2006e2d15004SDag-Erling Smørgrav yes) 2007e2d15004SDag-Erling Smørgrav AC_DEFINE([USE_CACHEDB], [1], [Define to 1 to use cachedb support]) 20085469a995SCy Schubert AC_SUBST([CACHEDB_SRC], ["cachedb/cachedb.c cachedb/redis.c"]) 20095469a995SCy Schubert AC_SUBST([CACHEDB_OBJ], ["cachedb.lo redis.lo"]) 2010e2d15004SDag-Erling Smørgrav ;; 2011e2d15004SDag-Erling Smørgrav no|*) 2012e2d15004SDag-Erling Smørgrav # nothing 2013e2d15004SDag-Erling Smørgrav ;; 2014e2d15004SDag-Erling Smørgravesac 2015e2d15004SDag-Erling Smørgrav 2016c7f4d7adSDag-Erling Smørgrav# check for ipsecmod if requested 2017f44e67d1SCy SchubertAC_ARG_ENABLE(ipsecmod, AS_HELP_STRING([--enable-ipsecmod],[Enable ipsecmod module that facilitates opportunistic IPsec])) 2018c7f4d7adSDag-Erling Smørgravcase "$enable_ipsecmod" in 2019c7f4d7adSDag-Erling Smørgrav yes) 2020c7f4d7adSDag-Erling Smørgrav AC_DEFINE([USE_IPSECMOD], [1], [Define to 1 to use ipsecmod support.]) 2021c7f4d7adSDag-Erling Smørgrav IPSECMOD_OBJ="ipsecmod.lo ipsecmod-whitelist.lo" 2022c7f4d7adSDag-Erling Smørgrav AC_SUBST(IPSECMOD_OBJ) 2023c7f4d7adSDag-Erling Smørgrav IPSECMOD_HEADER='$(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/ipsecmod/ipsecmod-whitelist.h' 2024c7f4d7adSDag-Erling Smørgrav AC_SUBST(IPSECMOD_HEADER) 2025c7f4d7adSDag-Erling Smørgrav ;; 2026c7f4d7adSDag-Erling Smørgrav no|*) 2027c7f4d7adSDag-Erling Smørgrav # nothing 2028c7f4d7adSDag-Erling Smørgrav ;; 2029c7f4d7adSDag-Erling Smørgravesac 2030c7f4d7adSDag-Erling Smørgrav 20310eefd307SCy Schubert# check for ipset if requested 2032f44e67d1SCy SchubertAC_ARG_ENABLE(ipset, AS_HELP_STRING([--enable-ipset],[enable ipset module])) 20330eefd307SCy Schubertcase "$enable_ipset" in 20340eefd307SCy Schubert yes) 20350eefd307SCy Schubert AC_DEFINE([USE_IPSET], [1], [Define to 1 to use ipset support]) 20360eefd307SCy Schubert IPSET_SRC="ipset/ipset.c" 20370eefd307SCy Schubert AC_SUBST(IPSET_SRC) 20380eefd307SCy Schubert IPSET_OBJ="ipset.lo" 20390eefd307SCy Schubert AC_SUBST(IPSET_OBJ) 20400eefd307SCy Schubert 204156850988SCy Schubert # BSD's pf 204256850988SCy Schubert AC_CHECK_HEADERS([net/pfvar.h], [], [ 20430eefd307SCy Schubert # mnl 2044f44e67d1SCy Schubert AC_ARG_WITH(libmnl, AS_HELP_STRING([--with-libmnl=path],[specify explicit path for libmnl.]), 20450eefd307SCy Schubert [ ],[ withval="yes" ]) 20460eefd307SCy Schubert found_libmnl="no" 20470eefd307SCy Schubert AC_MSG_CHECKING(for libmnl) 20480eefd307SCy Schubert if test x_$withval = x_ -o x_$withval = x_yes; then 20490eefd307SCy Schubert withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" 20500eefd307SCy Schubert fi 20510eefd307SCy Schubert for dir in $withval ; do 2052a39a5a69SCy Schubert if test -f "$dir/include/libmnl/libmnl.h" -o -f "$dir/include/libmnl/libmnl/libmnl.h"; then 20530eefd307SCy Schubert found_libmnl="yes" 20540eefd307SCy Schubert dnl assume /usr is in default path. 2055a39a5a69SCy Schubert extralibmnl="" 2056a39a5a69SCy Schubert if test -f "$dir/include/libmnl/libmnl/libmnl.h"; then 2057a39a5a69SCy Schubert extralibmnl="/libmnl" 2058a39a5a69SCy Schubert fi 2059a39a5a69SCy Schubert if test "$dir" != "/usr" -o -n "$extralibmnl"; then 2060a39a5a69SCy Schubert CPPFLAGS="$CPPFLAGS -I$dir/include$extralibmnl" 2061a39a5a69SCy Schubert fi 20620eefd307SCy Schubert if test "$dir" != "/usr"; then 20630eefd307SCy Schubert LDFLAGS="$LDFLAGS -L$dir/lib" 20640eefd307SCy Schubert fi 20650eefd307SCy Schubert AC_MSG_RESULT(found in $dir) 20660eefd307SCy Schubert LIBS="$LIBS -lmnl" 20670eefd307SCy Schubert break; 20680eefd307SCy Schubert fi 20690eefd307SCy Schubert done 20700eefd307SCy Schubert if test x_$found_libmnl != x_yes; then 2071f44e67d1SCy Schubert AC_MSG_ERROR([Could not find libmnl, libmnl.h]) 20720eefd307SCy Schubert fi 207356850988SCy Schubert ], [ 207456850988SCy Schubert #include <netinet/in.h> 207556850988SCy Schubert #include <net/if.h> 207656850988SCy Schubert ]) 20770eefd307SCy Schubert ;; 20780eefd307SCy Schubert no|*) 20790eefd307SCy Schubert # nothing 20800eefd307SCy Schubert ;; 20810eefd307SCy Schubertesac 2082f44e67d1SCy SchubertAC_ARG_ENABLE(explicit-port-randomisation, AS_HELP_STRING([--disable-explicit-port-randomisation],[disable explicit source port randomisation and rely on the kernel to provide random source ports])) 208325039b37SCy Schubertcase "$enable_explicit_port_randomisation" in 208425039b37SCy Schubert no) 208525039b37SCy Schubert AC_DEFINE([DISABLE_EXPLICIT_PORT_RANDOMISATION], [1], [Define this to enable kernel based UDP source port randomization.]) 208625039b37SCy Schubert ;; 208725039b37SCy Schubert yes|*) 208825039b37SCy Schubert ;; 208925039b37SCy Schubertesac 209025039b37SCy Schubert 20915469a995SCy Schubertif echo "$host" | $GREP -i -e linux >/dev/null; then 2092103ba509SCy Schubert AC_ARG_ENABLE(linux-ip-local-port-range, AS_HELP_STRING([--enable-linux-ip-local-port-range], [Define this to enable use of /proc/sys/net/ipv4/ip_local_port_range as a default outgoing port range. This is only for the libunbound on Linux and does not affect unbound resolving daemon itself. This may severely limit the number of available outgoing ports and thus decrease randomness. Define this only when the target system restricts (e.g. some of SELinux enabled distributions) the use of non-ephemeral ports.])) 20935469a995SCy Schubert case "$enable_linux_ip_local_port_range" in 20945469a995SCy Schubert yes) 20955469a995SCy Schubert AC_DEFINE([USE_LINUX_IP_LOCAL_PORT_RANGE], [1], [Define this to enable use of /proc/sys/net/ipv4/ip_local_port_range as a default outgoing port range. This is only for the libunbound on Linux and does not affect unbound resolving daemon itself. This may severely limit the number of available outgoing ports and thus decrease randomness. Define this only when the target system restricts (e.g. some of SELinux enabled distributions) the use of non-ephemeral ports.]) 20965469a995SCy Schubert ;; 20975469a995SCy Schubert no|*) 20985469a995SCy Schubert ;; 20995469a995SCy Schubert esac 21005469a995SCy Schubertfi 21015469a995SCy Schubert 21020eefd307SCy Schubert 2103b7579f77SDag-Erling SmørgravAC_MSG_CHECKING([if ${MAKE:-make} supports $< with implicit rule in scope]) 2104b7579f77SDag-Erling Smørgrav# on openBSD, the implicit rule make $< work. 2105b7579f77SDag-Erling Smørgrav# on Solaris, it does not work ($? is changed sources, $^ lists dependencies). 2106b7579f77SDag-Erling Smørgrav# gmake works. 2107b7579f77SDag-Erling Smørgravcat >conftest.make <<EOF 2108b7579f77SDag-Erling Smørgravall: conftest.lo 2109b7579f77SDag-Erling Smørgrav 2110b7579f77SDag-Erling Smørgravconftest.lo foo.lo bla.lo: 2111b7579f77SDag-Erling Smørgrav if test -f "\$<"; then touch \$@; fi 2112b7579f77SDag-Erling Smørgrav 2113b7579f77SDag-Erling Smørgrav.SUFFIXES: .lo 2114b7579f77SDag-Erling Smørgrav.c.lo: 2115b7579f77SDag-Erling Smørgrav if test -f "\$<"; then touch \$@; fi 2116b7579f77SDag-Erling Smørgrav 2117b7579f77SDag-Erling Smørgravconftest.lo: conftest.dir/conftest.c 2118b7579f77SDag-Erling SmørgravEOF 2119b7579f77SDag-Erling Smørgravmkdir conftest.dir 2120b7579f77SDag-Erling Smørgravtouch conftest.dir/conftest.c 2121b7579f77SDag-Erling Smørgravrm -f conftest.lo conftest.c 2122b7579f77SDag-Erling Smørgrav${MAKE:-make} -f conftest.make >/dev/null 2123b7579f77SDag-Erling Smørgravrm -f conftest.make conftest.c conftest.dir/conftest.c 2124b7579f77SDag-Erling Smørgravrm -rf conftest.dir 2125b7579f77SDag-Erling Smørgravif test ! -f conftest.lo; then 2126b7579f77SDag-Erling Smørgrav AC_MSG_RESULT(no) 2127b7579f77SDag-Erling Smørgrav SOURCEDETERMINE='echo "$^" | awk "-F " "{print \$$1;}" > .source' 2128b7579f77SDag-Erling Smørgrav SOURCEFILE='`cat .source`' 2129b7579f77SDag-Erling Smørgravelse 2130b7579f77SDag-Erling Smørgrav AC_MSG_RESULT(yes) 2131b7579f77SDag-Erling Smørgrav SOURCEDETERMINE=':' 2132b7579f77SDag-Erling Smørgrav SOURCEFILE='$<' 2133b7579f77SDag-Erling Smørgravfi 2134b7579f77SDag-Erling Smørgravrm -f conftest.lo 2135b7579f77SDag-Erling SmørgravAC_SUBST(SOURCEDETERMINE) 2136b7579f77SDag-Erling SmørgravAC_SUBST(SOURCEFILE) 2137b7579f77SDag-Erling Smørgrav 21388ed2b524SDag-Erling Smørgrav# see if we want to build the library or everything 21398ed2b524SDag-Erling SmørgravALLTARGET="alltargets" 214017d15b25SDag-Erling SmørgravINSTALLTARGET="install-all" 2141f44e67d1SCy SchubertAC_ARG_WITH(libunbound-only, AS_HELP_STRING([--with-libunbound-only],[do not build daemon and tool programs]), 21428ed2b524SDag-Erling Smørgrav [ 21438ed2b524SDag-Erling Smørgrav if test "$withval" = "yes"; then 21448ed2b524SDag-Erling Smørgrav ALLTARGET="lib" 214517d15b25SDag-Erling Smørgrav INSTALLTARGET="install-lib" 21468ed2b524SDag-Erling Smørgrav fi 21478ed2b524SDag-Erling Smørgrav]) 214857bddd21SDag-Erling Smørgravif test $ALLTARGET = "alltargets"; then 214957bddd21SDag-Erling Smørgrav if test $USE_NSS = "yes"; then 2150f44e67d1SCy Schubert AC_MSG_ERROR([--with-nss can only be used in combination with --with-libunbound-only.]) 215157bddd21SDag-Erling Smørgrav fi 215257bddd21SDag-Erling Smørgrav if test $USE_NETTLE = "yes"; then 2153f44e67d1SCy Schubert AC_MSG_ERROR([--with-nettle can only be used in combination with --with-libunbound-only.]) 215457bddd21SDag-Erling Smørgrav fi 215557bddd21SDag-Erling Smørgravfi 215657bddd21SDag-Erling Smørgrav 21578ed2b524SDag-Erling SmørgravAC_SUBST(ALLTARGET) 215817d15b25SDag-Erling SmørgravAC_SUBST(INSTALLTARGET) 2159b7579f77SDag-Erling Smørgrav 2160b7579f77SDag-Erling SmørgravACX_STRIP_EXT_FLAGS 2161971980c3SDag-Erling Smørgravif test -n "$LATE_LDFLAGS"; then 2162b7579f77SDag-Erling Smørgrav LDFLAGS="$LATE_LDFLAGS $LDFLAGS" 2163971980c3SDag-Erling Smørgravfi 2164971980c3SDag-Erling Smørgrav# remove start spaces 2165971980c3SDag-Erling SmørgravLDFLAGS=`echo "$LDFLAGS"|sed -e 's/^ *//'` 2166971980c3SDag-Erling SmørgravLIBS=`echo "$LIBS"|sed -e 's/^ *//'` 2167b7579f77SDag-Erling Smørgrav 2168b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED([MAXSYSLOGMSGLEN], [10240], [Define to the maximum message length to pass to syslog.]) 2169b7579f77SDag-Erling Smørgrav 2170b7579f77SDag-Erling SmørgravAH_BOTTOM( 2171b7579f77SDag-Erling Smørgravdnl this must be first AH_CONFIG, to define the flags before any includes. 2172b7579f77SDag-Erling SmørgravAHX_CONFIG_EXT_FLAGS 2173b7579f77SDag-Erling Smørgrav 2174b7579f77SDag-Erling Smørgravdnl includes 2175b7579f77SDag-Erling Smørgrav[ 2176e86b9096SDag-Erling Smørgrav#ifndef _OPENBSD_SOURCE 2177e86b9096SDag-Erling Smørgrav#define _OPENBSD_SOURCE 1 2178e86b9096SDag-Erling Smørgrav#endif 2179e86b9096SDag-Erling Smørgrav 2180b7579f77SDag-Erling Smørgrav#ifndef UNBOUND_DEBUG 2181e86b9096SDag-Erling Smørgrav# ifndef NDEBUG 2182b7579f77SDag-Erling Smørgrav# define NDEBUG 2183b7579f77SDag-Erling Smørgrav# endif 2184e86b9096SDag-Erling Smørgrav#endif 2185b7579f77SDag-Erling Smørgrav 218617d15b25SDag-Erling Smørgrav/** Use small-ldns codebase */ 218717d15b25SDag-Erling Smørgrav#define USE_SLDNS 1 218817d15b25SDag-Erling Smørgrav#ifdef HAVE_SSL 218917d15b25SDag-Erling Smørgrav# define LDNS_BUILD_CONFIG_HAVE_SSL 1 219017d15b25SDag-Erling Smørgrav#endif 219117d15b25SDag-Erling Smørgrav 2192b7579f77SDag-Erling Smørgrav#include <stdio.h> 2193b7579f77SDag-Erling Smørgrav#include <string.h> 2194b7579f77SDag-Erling Smørgrav#include <unistd.h> 2195b7579f77SDag-Erling Smørgrav#include <assert.h> 2196b7579f77SDag-Erling Smørgrav 2197b7579f77SDag-Erling Smørgrav#if STDC_HEADERS 2198b7579f77SDag-Erling Smørgrav#include <stdlib.h> 2199b7579f77SDag-Erling Smørgrav#include <stddef.h> 2200b7579f77SDag-Erling Smørgrav#endif 2201b7579f77SDag-Erling Smørgrav 220217d15b25SDag-Erling Smørgrav#ifdef HAVE_STDARG_H 220317d15b25SDag-Erling Smørgrav#include <stdarg.h> 220417d15b25SDag-Erling Smørgrav#endif 220517d15b25SDag-Erling Smørgrav 2206b7579f77SDag-Erling Smørgrav#ifdef HAVE_STDINT_H 2207b7579f77SDag-Erling Smørgrav#include <stdint.h> 2208b7579f77SDag-Erling Smørgrav#endif 2209b7579f77SDag-Erling Smørgrav 2210b7579f77SDag-Erling Smørgrav#include <errno.h> 2211b7579f77SDag-Erling Smørgrav 2212b7579f77SDag-Erling Smørgrav#if HAVE_SYS_PARAM_H 2213b7579f77SDag-Erling Smørgrav#include <sys/param.h> 2214b7579f77SDag-Erling Smørgrav#endif 2215b7579f77SDag-Erling Smørgrav 2216b7579f77SDag-Erling Smørgrav#ifdef HAVE_SYS_SOCKET_H 2217b7579f77SDag-Erling Smørgrav#include <sys/socket.h> 2218b7579f77SDag-Erling Smørgrav#endif 2219b7579f77SDag-Erling Smørgrav 2220b7579f77SDag-Erling Smørgrav#ifdef HAVE_SYS_UIO_H 2221b7579f77SDag-Erling Smørgrav#include <sys/uio.h> 2222b7579f77SDag-Erling Smørgrav#endif 2223b7579f77SDag-Erling Smørgrav 2224b7579f77SDag-Erling Smørgrav#ifdef HAVE_NETINET_IN_H 2225b7579f77SDag-Erling Smørgrav#include <netinet/in.h> 2226b7579f77SDag-Erling Smørgrav#endif 2227b7579f77SDag-Erling Smørgrav 2228f61ef7f6SDag-Erling Smørgrav#ifdef HAVE_NETINET_TCP_H 2229f61ef7f6SDag-Erling Smørgrav#include <netinet/tcp.h> 2230f61ef7f6SDag-Erling Smørgrav#endif 2231f61ef7f6SDag-Erling Smørgrav 2232b7579f77SDag-Erling Smørgrav#ifdef HAVE_ARPA_INET_H 2233b7579f77SDag-Erling Smørgrav#include <arpa/inet.h> 2234b7579f77SDag-Erling Smørgrav#endif 2235b7579f77SDag-Erling Smørgrav 2236b7579f77SDag-Erling Smørgrav#ifdef HAVE_WINSOCK2_H 2237b7579f77SDag-Erling Smørgrav#include <winsock2.h> 2238b7579f77SDag-Erling Smørgrav#endif 2239b7579f77SDag-Erling Smørgrav 2240b7579f77SDag-Erling Smørgrav#ifdef HAVE_WS2TCPIP_H 2241b7579f77SDag-Erling Smørgrav#include <ws2tcpip.h> 2242b7579f77SDag-Erling Smørgrav#endif 224317d15b25SDag-Erling Smørgrav 2244a39a5a69SCy Schubert#if !defined(USE_WINSOCK) || !defined(HAVE_SNPRINTF) || defined(SNPRINTF_RET_BROKEN) || defined(__USE_MINGW_ANSI_STDIO) 224517d15b25SDag-Erling Smørgrav#define ARG_LL "%ll" 224617d15b25SDag-Erling Smørgrav#else 224717d15b25SDag-Erling Smørgrav#define ARG_LL "%I64" 224817d15b25SDag-Erling Smørgrav#endif 22496480faa8SDag-Erling Smørgrav 22506480faa8SDag-Erling Smørgrav#ifndef AF_LOCAL 22516480faa8SDag-Erling Smørgrav#define AF_LOCAL AF_UNIX 22526480faa8SDag-Erling Smørgrav#endif 2253b7579f77SDag-Erling Smørgrav] 2254b7579f77SDag-Erling Smørgrav 2255b7579f77SDag-Erling SmørgravAHX_CONFIG_FORMAT_ATTRIBUTE 2256b7579f77SDag-Erling SmørgravAHX_CONFIG_UNUSED_ATTRIBUTE 2257b7579f77SDag-Erling SmørgravAHX_CONFIG_FSEEKO 2258b7579f77SDag-Erling SmørgravAHX_CONFIG_MAXHOSTNAMELEN 225905ab2901SDag-Erling Smørgrav#if !defined(HAVE_SNPRINTF) || defined(SNPRINTF_RET_BROKEN) 226005ab2901SDag-Erling Smørgrav#define snprintf snprintf_unbound 226105ab2901SDag-Erling Smørgrav#define vsnprintf vsnprintf_unbound 226205ab2901SDag-Erling Smørgrav#include <stdarg.h> 226305ab2901SDag-Erling Smørgravint snprintf (char *str, size_t count, const char *fmt, ...); 226405ab2901SDag-Erling Smørgravint vsnprintf (char *str, size_t count, const char *fmt, va_list arg); 226505ab2901SDag-Erling Smørgrav#endif /* HAVE_SNPRINTF or SNPRINTF_RET_BROKEN */ 2266b7579f77SDag-Erling SmørgravAHX_CONFIG_INET_PTON(unbound) 2267b7579f77SDag-Erling SmørgravAHX_CONFIG_INET_NTOP(unbound) 2268b7579f77SDag-Erling SmørgravAHX_CONFIG_INET_ATON(unbound) 2269b7579f77SDag-Erling SmørgravAHX_CONFIG_MEMMOVE(unbound) 227017d15b25SDag-Erling SmørgravAHX_CONFIG_STRLCAT(unbound) 2271b7579f77SDag-Erling SmørgravAHX_CONFIG_STRLCPY(unbound) 2272b7579f77SDag-Erling SmørgravAHX_CONFIG_GMTIME_R(unbound) 227309a3aaf3SDag-Erling SmørgravAHX_CONFIG_REALLOCARRAY(unbound) 2274b7579f77SDag-Erling SmørgravAHX_CONFIG_W32_SLEEP 2275b7579f77SDag-Erling SmørgravAHX_CONFIG_W32_USLEEP 2276b7579f77SDag-Erling SmørgravAHX_CONFIG_W32_RANDOM 2277b7579f77SDag-Erling SmørgravAHX_CONFIG_W32_SRANDOM 2278b7579f77SDag-Erling SmørgravAHX_CONFIG_W32_FD_SET_T 2279b7579f77SDag-Erling SmørgravAHX_CONFIG_IPV6_MIN_MTU 2280b7579f77SDag-Erling SmørgravAHX_MEMCMP_BROKEN(unbound) 2281b7579f77SDag-Erling Smørgrav 2282b7579f77SDag-Erling Smørgrav[ 2283b7579f77SDag-Erling Smørgrav#ifndef HAVE_CTIME_R 2284b7579f77SDag-Erling Smørgrav#define ctime_r unbound_ctime_r 2285b7579f77SDag-Erling Smørgravchar *ctime_r(const time_t *timep, char *buf); 2286b7579f77SDag-Erling Smørgrav#endif 2287b7579f77SDag-Erling Smørgrav 2288e2d15004SDag-Erling Smørgrav#ifndef HAVE_STRSEP 2289e2d15004SDag-Erling Smørgrav#define strsep unbound_strsep 2290e2d15004SDag-Erling Smørgravchar *strsep(char **stringp, const char *delim); 2291e2d15004SDag-Erling Smørgrav#endif 2292e2d15004SDag-Erling Smørgrav 229305ab2901SDag-Erling Smørgrav#ifndef HAVE_ISBLANK 229405ab2901SDag-Erling Smørgrav#define isblank unbound_isblank 229505ab2901SDag-Erling Smørgravint isblank(int c); 229605ab2901SDag-Erling Smørgrav#endif 229705ab2901SDag-Erling Smørgrav 2298a755b6f6SDag-Erling Smørgrav#ifndef HAVE_EXPLICIT_BZERO 2299a755b6f6SDag-Erling Smørgrav#define explicit_bzero unbound_explicit_bzero 2300a755b6f6SDag-Erling Smørgravvoid explicit_bzero(void* buf, size_t len); 2301a755b6f6SDag-Erling Smørgrav#endif 2302a755b6f6SDag-Erling Smørgrav 23033005e0a3SDag-Erling Smørgrav#if defined(HAVE_INET_NTOP) && !HAVE_DECL_INET_NTOP 23043005e0a3SDag-Erling Smørgravconst char *inet_ntop(int af, const void *src, char *dst, size_t size); 23053005e0a3SDag-Erling Smørgrav#endif 23063005e0a3SDag-Erling Smørgrav 23073005e0a3SDag-Erling Smørgrav#if defined(HAVE_INET_PTON) && !HAVE_DECL_INET_PTON 23083005e0a3SDag-Erling Smørgravint inet_pton(int af, const char* src, void* dst); 23093005e0a3SDag-Erling Smørgrav#endif 23103005e0a3SDag-Erling Smørgrav 2311b7579f77SDag-Erling Smørgrav#if !defined(HAVE_STRPTIME) || !defined(STRPTIME_WORKS) 2312b7579f77SDag-Erling Smørgrav#define strptime unbound_strptime 2313b7579f77SDag-Erling Smørgravstruct tm; 2314b7579f77SDag-Erling Smørgravchar *strptime(const char *s, const char *format, struct tm *tm); 2315b7579f77SDag-Erling Smørgrav#endif 2316b7579f77SDag-Erling Smørgrav 23170eefd307SCy Schubert#if !HAVE_DECL_REALLOCARRAY 23180eefd307SCy Schubertvoid *reallocarray(void *ptr, size_t nmemb, size_t size); 23190eefd307SCy Schubert#endif 23200eefd307SCy Schubert 2321091e9e46SCy Schubert#ifdef HAVE_LIBBSD 2322091e9e46SCy Schubert#include <bsd/string.h> 2323091e9e46SCy Schubert#include <bsd/stdlib.h> 2324091e9e46SCy Schubert#endif 2325091e9e46SCy Schubert 2326ff825849SDag-Erling Smørgrav#ifdef HAVE_LIBRESSL 2327ff825849SDag-Erling Smørgrav# if !HAVE_DECL_STRLCPY 2328ff825849SDag-Erling Smørgravsize_t strlcpy(char *dst, const char *src, size_t siz); 2329ff825849SDag-Erling Smørgrav# endif 2330ff825849SDag-Erling Smørgrav# if !HAVE_DECL_STRLCAT 2331ff825849SDag-Erling Smørgravsize_t strlcat(char *dst, const char *src, size_t siz); 2332ff825849SDag-Erling Smørgrav# endif 2333ff825849SDag-Erling Smørgrav# if !HAVE_DECL_ARC4RANDOM && defined(HAVE_ARC4RANDOM) 2334ff825849SDag-Erling Smørgravuint32_t arc4random(void); 2335ff825849SDag-Erling Smørgrav# endif 2336ff825849SDag-Erling Smørgrav# if !HAVE_DECL_ARC4RANDOM_UNIFORM && defined(HAVE_ARC4RANDOM_UNIFORM) 2337ff825849SDag-Erling Smørgravuint32_t arc4random_uniform(uint32_t upper_bound); 2338ff825849SDag-Erling Smørgrav# endif 2339ff825849SDag-Erling Smørgrav#endif /* HAVE_LIBRESSL */ 2340ff825849SDag-Erling Smørgrav#ifndef HAVE_ARC4RANDOM 2341ff825849SDag-Erling Smørgravint getentropy(void* buf, size_t len); 2342ff825849SDag-Erling Smørgravuint32_t arc4random(void); 2343ff825849SDag-Erling Smørgravvoid arc4random_buf(void* buf, size_t n); 2344ff825849SDag-Erling Smørgravvoid _ARC4_LOCK(void); 2345ff825849SDag-Erling Smørgravvoid _ARC4_UNLOCK(void); 234657bddd21SDag-Erling Smørgravvoid _ARC4_LOCK_DESTROY(void); 2347ff825849SDag-Erling Smørgrav#endif 2348ff825849SDag-Erling Smørgrav#ifndef HAVE_ARC4RANDOM_UNIFORM 2349ff825849SDag-Erling Smørgravuint32_t arc4random_uniform(uint32_t upper_bound); 2350ff825849SDag-Erling Smørgrav#endif 2351ff825849SDag-Erling Smørgrav#ifdef COMPAT_SHA512 2352ff825849SDag-Erling Smørgrav#ifndef SHA512_DIGEST_LENGTH 2353ff825849SDag-Erling Smørgrav#define SHA512_BLOCK_LENGTH 128 2354ff825849SDag-Erling Smørgrav#define SHA512_DIGEST_LENGTH 64 2355ff825849SDag-Erling Smørgrav#define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1) 2356ff825849SDag-Erling Smørgravtypedef struct _SHA512_CTX { 2357ff825849SDag-Erling Smørgrav uint64_t state[8]; 2358ff825849SDag-Erling Smørgrav uint64_t bitcount[2]; 2359ff825849SDag-Erling Smørgrav uint8_t buffer[SHA512_BLOCK_LENGTH]; 2360ff825849SDag-Erling Smørgrav} SHA512_CTX; 2361ff825849SDag-Erling Smørgrav#endif /* SHA512_DIGEST_LENGTH */ 2362ff825849SDag-Erling Smørgravvoid SHA512_Init(SHA512_CTX*); 2363ff825849SDag-Erling Smørgravvoid SHA512_Update(SHA512_CTX*, void*, size_t); 2364ff825849SDag-Erling Smørgravvoid SHA512_Final(uint8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*); 2365ff825849SDag-Erling Smørgravunsigned char *SHA512(void* data, unsigned int data_len, unsigned char *digest); 2366ff825849SDag-Erling Smørgrav#endif /* COMPAT_SHA512 */ 2367ff825849SDag-Erling Smørgrav 2368ff825849SDag-Erling Smørgrav 2369ff825849SDag-Erling Smørgrav 2370b7579f77SDag-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)) 2371b7579f77SDag-Erling Smørgrav /* using version of libevent that is not threadsafe. */ 2372b7579f77SDag-Erling Smørgrav# define LIBEVENT_SIGNAL_PROBLEM 1 2373b7579f77SDag-Erling Smørgrav#endif 2374b7579f77SDag-Erling Smørgrav 2375b7579f77SDag-Erling Smørgrav#ifndef CHECKED_INET6 2376b7579f77SDag-Erling Smørgrav# define CHECKED_INET6 2377b7579f77SDag-Erling Smørgrav# ifdef AF_INET6 2378b7579f77SDag-Erling Smørgrav# define INET6 2379b7579f77SDag-Erling Smørgrav# else 2380b7579f77SDag-Erling Smørgrav# define AF_INET6 28 2381b7579f77SDag-Erling Smørgrav# endif 2382b7579f77SDag-Erling Smørgrav#endif /* CHECKED_INET6 */ 2383b7579f77SDag-Erling Smørgrav 2384b7579f77SDag-Erling Smørgrav#ifndef HAVE_GETADDRINFO 2385b7579f77SDag-Erling Smørgravstruct sockaddr_storage; 2386b7579f77SDag-Erling Smørgrav#include "compat/fake-rfc2553.h" 2387b7579f77SDag-Erling Smørgrav#endif 2388b7579f77SDag-Erling Smørgrav 2389b7579f77SDag-Erling Smørgrav#ifdef UNBOUND_ALLOC_STATS 2390b7579f77SDag-Erling Smørgrav# define malloc(s) unbound_stat_malloc_log(s, __FILE__, __LINE__, __func__) 2391b7579f77SDag-Erling Smørgrav# define calloc(n,s) unbound_stat_calloc_log(n, s, __FILE__, __LINE__, __func__) 2392b7579f77SDag-Erling Smørgrav# define free(p) unbound_stat_free_log(p, __FILE__, __LINE__, __func__) 2393b7579f77SDag-Erling Smørgrav# define realloc(p,s) unbound_stat_realloc_log(p, s, __FILE__, __LINE__, __func__) 239456850988SCy Schubert# define strdup(s) unbound_stat_strdup_log(s, __FILE__, __LINE__, __func__) 2395*46d2f618SCy Schubert#ifdef HAVE_REALLOCARRAY 2396*46d2f618SCy Schubert# define reallocarray(p,n,s) unbound_stat_reallocarray_log(p, n, s, __FILE__, __LINE__, __func__) 2397*46d2f618SCy Schubert#endif 2398b7579f77SDag-Erling Smørgravvoid *unbound_stat_malloc(size_t size); 2399b7579f77SDag-Erling Smørgravvoid *unbound_stat_calloc(size_t nmemb, size_t size); 2400b7579f77SDag-Erling Smørgravvoid unbound_stat_free(void *ptr); 2401b7579f77SDag-Erling Smørgravvoid *unbound_stat_realloc(void *ptr, size_t size); 2402b7579f77SDag-Erling Smørgravvoid *unbound_stat_malloc_log(size_t size, const char* file, int line, 2403b7579f77SDag-Erling Smørgrav const char* func); 2404b7579f77SDag-Erling Smørgravvoid *unbound_stat_calloc_log(size_t nmemb, size_t size, const char* file, 2405b7579f77SDag-Erling Smørgrav int line, const char* func); 2406b7579f77SDag-Erling Smørgravvoid unbound_stat_free_log(void *ptr, const char* file, int line, 2407b7579f77SDag-Erling Smørgrav const char* func); 2408b7579f77SDag-Erling Smørgravvoid *unbound_stat_realloc_log(void *ptr, size_t size, const char* file, 2409b7579f77SDag-Erling Smørgrav int line, const char* func); 2410*46d2f618SCy Schubertvoid *unbound_stat_reallocarray_log(void *ptr, size_t nmemb, size_t size, 2411*46d2f618SCy Schubert const char* file, int line, const char* func); 241256850988SCy Schubertchar *unbound_stat_strdup_log(const char *s, const char* file, int line, 241356850988SCy Schubert const char* func); 2414b7579f77SDag-Erling Smørgrav#elif defined(UNBOUND_ALLOC_LITE) 2415b7579f77SDag-Erling Smørgrav# include "util/alloc.h" 2416b7579f77SDag-Erling Smørgrav#endif /* UNBOUND_ALLOC_LITE and UNBOUND_ALLOC_STATS */ 2417b7579f77SDag-Erling Smørgrav 2418b7579f77SDag-Erling Smørgrav/** default port for DNS traffic. */ 2419b7579f77SDag-Erling Smørgrav#define UNBOUND_DNS_PORT 53 24200fb34990SDag-Erling Smørgrav/** default port for DNS over TLS traffic. */ 24210fb34990SDag-Erling Smørgrav#define UNBOUND_DNS_OVER_TLS_PORT 853 2422c0caa2e2SCy Schubert/** default port for DNS over HTTPS traffic. */ 2423c0caa2e2SCy Schubert#define UNBOUND_DNS_OVER_HTTPS_PORT 443 2424*46d2f618SCy Schubert/** default port for DNS over QUIC traffic. */ 2425*46d2f618SCy Schubert#define UNBOUND_DNS_OVER_QUIC_PORT 853 2426b7579f77SDag-Erling Smørgrav/** default port for unbound control traffic, registered port with IANA, 2427b7579f77SDag-Erling Smørgrav ub-dns-control 8953/tcp unbound dns nameserver control */ 2428b7579f77SDag-Erling Smørgrav#define UNBOUND_CONTROL_PORT 8953 2429b7579f77SDag-Erling Smørgrav/** the version of unbound-control that this software implements */ 2430b7579f77SDag-Erling Smørgrav#define UNBOUND_CONTROL_VERSION 1 2431b7579f77SDag-Erling Smørgrav 2432b7579f77SDag-Erling Smørgrav]) 2433b7579f77SDag-Erling Smørgrav 2434ff825849SDag-Erling Smørgravdnl if we build from source tree, the man pages need @date@ and @version@ 2435ff825849SDag-Erling Smørgravdnl if this is a distro tarball, that was already done by makedist.sh 2436ff825849SDag-Erling SmørgravAC_SUBST(version, [VERSION_MAJOR.VERSION_MINOR.VERSION_MICRO]) 2437ff825849SDag-Erling SmørgravAC_SUBST(date, [`date +'%b %e, %Y'`]) 2438ff825849SDag-Erling Smørgrav 2439091e9e46SCy SchubertAC_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 dnscrypt/dnscrypt_config.h contrib/libunbound.pc contrib/unbound.socket contrib/unbound.service contrib/unbound_portable.service]) 2440f44e67d1SCy SchubertAC_CONFIG_HEADERS([config.h]) 2441b7579f77SDag-Erling SmørgravAC_OUTPUT 2442