xref: /freebsd/contrib/unbound/configure.ac (revision 8f76bb7dad48538c6832c2fb466a433d2a3f8cd5)
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)
7b7579f77SDag-Erling Smørgravsinclude(ac_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*8f76bb7dSCy Schubertm4_define([VERSION_MINOR],[18])
14*8f76bb7dSCy 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*8f76bb7dSCy SchubertLIBUNBOUND_REVISION=22
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
110*8f76bb7dSCy Schubert# 1.18.0 had 9:22:1
111b7579f77SDag-Erling Smørgrav
112b7579f77SDag-Erling Smørgrav#   Current  -- the number of the binary API that we're implementing
113b7579f77SDag-Erling Smørgrav#   Revision -- which iteration of the implementation of the binary
114b7579f77SDag-Erling Smørgrav#               API are we supplying?
115b7579f77SDag-Erling Smørgrav#   Age      -- How many previous binary API versions do we also
116b7579f77SDag-Erling Smørgrav#               support?
117b7579f77SDag-Erling Smørgrav#
118b7579f77SDag-Erling Smørgrav# If we release a new version that does not change the binary API,
119b7579f77SDag-Erling Smørgrav# increment Revision.
120b7579f77SDag-Erling Smørgrav#
121b7579f77SDag-Erling Smørgrav# If we release a new version that changes the binary API, but does
122b7579f77SDag-Erling Smørgrav# not break programs compiled against the old binary API, increment
123b7579f77SDag-Erling Smørgrav# Current and Age.  Set Revision to 0, since this is the first
124b7579f77SDag-Erling Smørgrav# implementation of the new API.
125b7579f77SDag-Erling Smørgrav#
1268a384985SDag-Erling Smørgrav# Otherwise, we're changing the binary API and breaking backward
127b7579f77SDag-Erling Smørgrav# compatibility with old binaries.  Increment Current.  Set Age to 0,
128b7579f77SDag-Erling Smørgrav# since we're backward compatible with no previous APIs.  Set Revision
129b7579f77SDag-Erling Smørgrav# to 0 too.
130b7579f77SDag-Erling SmørgravAC_SUBST(LIBUNBOUND_CURRENT)
131b7579f77SDag-Erling SmørgravAC_SUBST(LIBUNBOUND_REVISION)
132b7579f77SDag-Erling SmørgravAC_SUBST(LIBUNBOUND_AGE)
133b7579f77SDag-Erling Smørgrav
1340eefd307SCy Schubert
1350eefd307SCy Schubertcmdln="`echo $@ | sed -e 's/\\\\/\\\\\\\\/g' | sed -e 's/"/\\\\"/'g`"
1360eefd307SCy SchubertAC_DEFINE_UNQUOTED(CONFCMDLINE, ["$cmdln"], [Command line arguments used with configure])
1370eefd307SCy Schubert
138b7579f77SDag-Erling SmørgravCFLAGS="$CFLAGS"
139f44e67d1SCy SchubertAC_USE_SYSTEM_EXTENSIONS
14017d15b25SDag-Erling Smørgravif test "$ac_cv_header_minix_config_h" = "yes"; then
14117d15b25SDag-Erling Smørgrav	AC_DEFINE(_NETBSD_SOURCE,1, [Enable for compile on Minix])
14217d15b25SDag-Erling Smørgravfi
143b7579f77SDag-Erling Smørgrav
144b7579f77SDag-Erling Smørgravdnl
145b7579f77SDag-Erling Smørgravdnl By default set prefix to /usr/local
146b7579f77SDag-Erling Smørgravdnl
147b7579f77SDag-Erling Smørgravcase "$prefix" in
148b7579f77SDag-Erling Smørgrav        NONE)
149b7579f77SDag-Erling Smørgrav		prefix="/usr/local"
150b7579f77SDag-Erling Smørgrav        ;;
151b7579f77SDag-Erling Smørgravesac
152c7f4d7adSDag-Erling Smørgravcase "$exec_prefix" in
153c7f4d7adSDag-Erling Smørgrav        NONE)
154c7f4d7adSDag-Erling Smørgrav		exec_prefix="$prefix"
155c7f4d7adSDag-Erling Smørgrav        ;;
156c7f4d7adSDag-Erling Smørgravesac
157b7579f77SDag-Erling Smørgrav
158b7579f77SDag-Erling Smørgrav# are we on MinGW?
1595469a995SCy Schubertif uname -s 2>&1 | grep MINGW >/dev/null; then on_mingw="yes"
160b7579f77SDag-Erling Smørgravelse
1615469a995SCy Schubert	if echo $host | grep mingw >/dev/null; then on_mingw="yes"
162b7579f77SDag-Erling Smørgrav	else on_mingw="no"; fi
163b7579f77SDag-Erling Smørgravfi
164b7579f77SDag-Erling Smørgrav
165b7579f77SDag-Erling Smørgrav#
166b7579f77SDag-Erling Smørgrav# Determine configuration file
167b7579f77SDag-Erling Smørgrav# the eval is to evaluate shell expansion twice
168c7f4d7adSDag-Erling SmørgravUNBOUND_SBIN_DIR=`eval echo "${sbindir}"`
169c7f4d7adSDag-Erling SmørgravAC_SUBST(UNBOUND_SBIN_DIR)
170c7f4d7adSDag-Erling SmørgravUNBOUND_SYSCONF_DIR=`eval echo "${sysconfdir}"`
171c7f4d7adSDag-Erling SmørgravAC_SUBST(UNBOUND_SYSCONF_DIR)
172c7f4d7adSDag-Erling SmørgravUNBOUND_LOCALSTATE_DIR=`eval echo "${localstatedir}"`
173c7f4d7adSDag-Erling SmørgravAC_SUBST(UNBOUND_LOCALSTATE_DIR)
174b7579f77SDag-Erling Smørgravif test $on_mingw = "no"; then
175b7579f77SDag-Erling Smørgrav  ub_conf_file=`eval echo "${sysconfdir}/unbound/unbound.conf"`
176b7579f77SDag-Erling Smørgravelse
17765b390aaSDag-Erling Smørgrav  ub_conf_file="C:\\Program Files\\Unbound\\service.conf"
178b7579f77SDag-Erling Smørgravfi
179b7579f77SDag-Erling SmørgravAC_ARG_WITH([conf_file],
180f44e67d1SCy Schubert        AS_HELP_STRING([--with-conf-file=path],[Pathname to the Unbound configuration file]),
181b7579f77SDag-Erling Smørgrav	[ub_conf_file="$withval"])
182b7579f77SDag-Erling SmørgravAC_SUBST(ub_conf_file)
183b7579f77SDag-Erling SmørgravACX_ESCAPE_BACKSLASH($ub_conf_file, hdr_config)
184b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(CONFIGFILE, ["$hdr_config"], [Pathname to the Unbound configuration file])
1856480faa8SDag-Erling Smørgravub_conf_dir=`AS_DIRNAME(["$ub_conf_file"])`
1866480faa8SDag-Erling SmørgravAC_SUBST(ub_conf_dir)
187b7579f77SDag-Erling Smørgrav
188b7579f77SDag-Erling Smørgrav# Determine run, chroot directory and pidfile locations
189b7579f77SDag-Erling SmørgravAC_ARG_WITH(run-dir,
190f44e67d1SCy Schubert    AS_HELP_STRING([--with-run-dir=path],[set default directory to chdir to (by default dir part of cfg file)]),
191b7579f77SDag-Erling Smørgrav    UNBOUND_RUN_DIR="$withval",
192b7579f77SDag-Erling Smørgravif test $on_mingw = no; then
193b7579f77SDag-Erling Smørgrav    UNBOUND_RUN_DIR=`dirname "$ub_conf_file"`
194b7579f77SDag-Erling Smørgravelse
195b7579f77SDag-Erling Smørgrav    UNBOUND_RUN_DIR=""
196b7579f77SDag-Erling Smørgravfi
197b7579f77SDag-Erling Smørgrav)
198b7579f77SDag-Erling SmørgravAC_SUBST(UNBOUND_RUN_DIR)
199b7579f77SDag-Erling SmørgravACX_ESCAPE_BACKSLASH($UNBOUND_RUN_DIR, hdr_run)
200b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(RUN_DIR, ["$hdr_run"], [Directory to chdir to])
201b7579f77SDag-Erling Smørgrav
202b7579f77SDag-Erling SmørgravAC_ARG_WITH(chroot-dir,
203f44e67d1SCy Schubert    AS_HELP_STRING([--with-chroot-dir=path],[set default directory to chroot to (by default same as run-dir)]),
204b7579f77SDag-Erling Smørgrav    UNBOUND_CHROOT_DIR="$withval",
205b7579f77SDag-Erling Smørgravif test $on_mingw = no; then
206b7579f77SDag-Erling Smørgrav    UNBOUND_CHROOT_DIR="$UNBOUND_RUN_DIR"
207b7579f77SDag-Erling Smørgravelse
208b7579f77SDag-Erling Smørgrav    UNBOUND_CHROOT_DIR=""
209b7579f77SDag-Erling Smørgravfi
210b7579f77SDag-Erling Smørgrav)
211b7579f77SDag-Erling SmørgravAC_SUBST(UNBOUND_CHROOT_DIR)
212b7579f77SDag-Erling SmørgravACX_ESCAPE_BACKSLASH($UNBOUND_CHROOT_DIR, hdr_chroot)
213b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(CHROOT_DIR, ["$hdr_chroot"], [Directory to chroot to])
214b7579f77SDag-Erling Smørgrav
215b7579f77SDag-Erling SmørgravAC_ARG_WITH(share-dir,
216f44e67d1SCy Schubert    AS_HELP_STRING([--with-share-dir=path],[set default directory with shared data (by default same as share/unbound)]),
217b7579f77SDag-Erling Smørgrav    UNBOUND_SHARE_DIR="$withval",
218b7579f77SDag-Erling Smørgrav    UNBOUND_SHARE_DIR="$UNBOUND_RUN_DIR")
219b7579f77SDag-Erling SmørgravAC_SUBST(UNBOUND_SHARE_DIR)
220b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(SHARE_DIR, ["$UNBOUND_SHARE_DIR"], [Shared data])
221b7579f77SDag-Erling Smørgrav
222b7579f77SDag-Erling SmørgravAC_ARG_WITH(pidfile,
223f44e67d1SCy Schubert    AS_HELP_STRING([--with-pidfile=filename],[set default pathname to unbound pidfile (default run-dir/unbound.pid)]),
224b7579f77SDag-Erling Smørgrav    UNBOUND_PIDFILE="$withval",
225b7579f77SDag-Erling Smørgravif test $on_mingw = no; then
226b7579f77SDag-Erling Smørgrav    UNBOUND_PIDFILE="$UNBOUND_RUN_DIR/unbound.pid"
227b7579f77SDag-Erling Smørgravelse
228b7579f77SDag-Erling Smørgrav    UNBOUND_PIDFILE=""
229b7579f77SDag-Erling Smørgravfi
230b7579f77SDag-Erling Smørgrav)
231b7579f77SDag-Erling SmørgravAC_SUBST(UNBOUND_PIDFILE)
232b7579f77SDag-Erling SmørgravACX_ESCAPE_BACKSLASH($UNBOUND_PIDFILE, hdr_pid)
233b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(PIDFILE, ["$hdr_pid"], [default pidfile location])
234b7579f77SDag-Erling Smørgrav
235b7579f77SDag-Erling SmørgravAC_ARG_WITH(rootkey-file,
236f44e67d1SCy 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.]),
237b7579f77SDag-Erling Smørgrav    UNBOUND_ROOTKEY_FILE="$withval",
238b7579f77SDag-Erling Smørgravif test $on_mingw = no; then
239b7579f77SDag-Erling Smørgrav    UNBOUND_ROOTKEY_FILE="$UNBOUND_RUN_DIR/root.key"
240b7579f77SDag-Erling Smørgravelse
24165b390aaSDag-Erling Smørgrav    UNBOUND_ROOTKEY_FILE="C:\\Program Files\\Unbound\\root.key"
242b7579f77SDag-Erling Smørgravfi
243b7579f77SDag-Erling Smørgrav)
244b7579f77SDag-Erling SmørgravAC_SUBST(UNBOUND_ROOTKEY_FILE)
245b7579f77SDag-Erling SmørgravACX_ESCAPE_BACKSLASH($UNBOUND_ROOTKEY_FILE, hdr_rkey)
246b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(ROOT_ANCHOR_FILE, ["$hdr_rkey"], [default rootkey location])
247b7579f77SDag-Erling Smørgrav
248b7579f77SDag-Erling SmørgravAC_ARG_WITH(rootcert-file,
249f44e67d1SCy 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.]),
250b7579f77SDag-Erling Smørgrav    UNBOUND_ROOTCERT_FILE="$withval",
251b7579f77SDag-Erling Smørgravif test $on_mingw = no; then
252b7579f77SDag-Erling Smørgrav    UNBOUND_ROOTCERT_FILE="$UNBOUND_RUN_DIR/icannbundle.pem"
253b7579f77SDag-Erling Smørgravelse
25465b390aaSDag-Erling Smørgrav    UNBOUND_ROOTCERT_FILE="C:\\Program Files\\Unbound\\icannbundle.pem"
255b7579f77SDag-Erling Smørgravfi
256b7579f77SDag-Erling Smørgrav)
257b7579f77SDag-Erling SmørgravAC_SUBST(UNBOUND_ROOTCERT_FILE)
258b7579f77SDag-Erling SmørgravACX_ESCAPE_BACKSLASH($UNBOUND_ROOTCERT_FILE, hdr_rpem)
259b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(ROOT_CERT_FILE, ["$hdr_rpem"], [default rootcert location])
260b7579f77SDag-Erling Smørgrav
261b7579f77SDag-Erling SmørgravAC_ARG_WITH(username,
262f44e67d1SCy Schubert    AS_HELP_STRING([--with-username=user],[set default user that unbound changes to (default user is unbound)]),
263b7579f77SDag-Erling Smørgrav    UNBOUND_USERNAME="$withval",
264b7579f77SDag-Erling Smørgrav    UNBOUND_USERNAME="unbound")
265b7579f77SDag-Erling SmørgravAC_SUBST(UNBOUND_USERNAME)
266b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(UB_USERNAME, ["$UNBOUND_USERNAME"], [default username])
267b7579f77SDag-Erling Smørgrav
268b7579f77SDag-Erling SmørgravAC_DEFINE(WINVER, 0x0502, [the version of the windows API enabled])
269b7579f77SDag-Erling SmørgravACX_RSRC_VERSION(wnvs)
270b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED(RSRC_PACKAGE_VERSION, [$wnvs], [version number for resource files])
271b7579f77SDag-Erling Smørgrav
272b7579f77SDag-Erling Smørgrav# Checks for typedefs, structures, and compiler characteristics.
273b7579f77SDag-Erling SmørgravAC_C_CONST
274f44e67d1SCy SchubertAC_LANG([C])
2758ed2b524SDag-Erling Smørgrav# allow user to override the -g -O2 flags.
27657bddd21SDag-Erling Smørgravdefault_cflags=no
2778ed2b524SDag-Erling Smørgravif test "x$CFLAGS" = "x" ; then
278b7579f77SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG(g, [CFLAGS="$CFLAGS -g"])
279b7579f77SDag-Erling SmørgravACX_CHECK_COMPILER_FLAG(O2, [CFLAGS="$CFLAGS -O2"])
28057bddd21SDag-Erling Smørgravdefault_cflags=yes
2818ed2b524SDag-Erling Smørgravfi
282b7579f77SDag-Erling SmørgravAC_PROG_CC
283b7579f77SDag-Erling SmørgravACX_DEPFLAG
284b7579f77SDag-Erling SmørgravACX_DETERMINE_EXT_FLAGS_UNBOUND
285b7579f77SDag-Erling Smørgrav
286b7579f77SDag-Erling Smørgrav# debug mode flags warnings
287f44e67d1SCy SchubertAC_ARG_ENABLE(checking, AS_HELP_STRING([--enable-checking],[Enable warnings, asserts, makefile-dependencies]))
288f44e67d1SCy SchubertAC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug],[same as enable-checking]))
289b7579f77SDag-Erling Smørgravif test "$enable_debug" = "yes"; then debug_enabled="$enable_debug";
290b7579f77SDag-Erling Smørgravelse debug_enabled="$enable_checking"; fi
291b7579f77SDag-Erling SmørgravAC_SUBST(debug_enabled)
292b7579f77SDag-Erling Smørgravcase "$debug_enabled" in
293b7579f77SDag-Erling Smørgrav        yes)
294b7579f77SDag-Erling Smørgrav		ACX_CHECK_COMPILER_FLAG(W, [CFLAGS="$CFLAGS -W"])
295b7579f77SDag-Erling Smørgrav		ACX_CHECK_COMPILER_FLAG(Wall, [CFLAGS="$CFLAGS -Wall"])
296b7579f77SDag-Erling Smørgrav		ACX_CHECK_COMPILER_FLAG(Wextra, [CFLAGS="$CFLAGS -Wextra"])
297b7579f77SDag-Erling Smørgrav		ACX_CHECK_COMPILER_FLAG(Wdeclaration-after-statement, [CFLAGS="$CFLAGS -Wdeclaration-after-statement"])
298b7579f77SDag-Erling Smørgrav		AC_DEFINE([UNBOUND_DEBUG], [], [define this to enable debug checks.])
299b7579f77SDag-Erling Smørgrav		;;
300b7579f77SDag-Erling Smørgrav	no|*)
301b7579f77SDag-Erling Smørgrav		# nothing to do.
302b7579f77SDag-Erling Smørgrav		;;
303b7579f77SDag-Erling Smørgravesac
30457bddd21SDag-Erling Smørgravif test "$default_cflags" = "yes"; then
30557bddd21SDag-Erling Smørgrav	# only when CFLAGS was "" at the start, if the users wants to
30657bddd21SDag-Erling Smørgrav	# override we shouldn't add default cflags, because they wouldn't
30757bddd21SDag-Erling Smørgrav	# be able to turn off these options and set the CFLAGS wanted.
308b7579f77SDag-Erling Smørgrav	ACX_CHECK_FLTO
309b75612f8SDag-Erling Smørgrav	ACX_CHECK_PIE
310b75612f8SDag-Erling Smørgrav	ACX_CHECK_RELRO_NOW
31157bddd21SDag-Erling Smørgravfi
312b7579f77SDag-Erling Smørgrav
313b7579f77SDag-Erling SmørgravAC_C_INLINE
314b7579f77SDag-Erling SmørgravACX_CHECK_FORMAT_ATTRIBUTE
315b7579f77SDag-Erling SmørgravACX_CHECK_UNUSED_ATTRIBUTE
316b7579f77SDag-Erling Smørgrav
317e2d15004SDag-Erling SmørgravAC_DEFUN([CHECK_WEAK_ATTRIBUTE],
318e2d15004SDag-Erling Smørgrav[AC_REQUIRE([AC_PROG_CC])
319e2d15004SDag-Erling SmørgravAC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "weak" attribute)
320e2d15004SDag-Erling SmørgravAC_CACHE_VAL(ac_cv_c_weak_attribute,
321e2d15004SDag-Erling Smørgrav[ac_cv_c_weak_attribute=no
322f44e67d1SCy SchubertAC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h>
323e2d15004SDag-Erling Smørgrav__attribute__((weak)) void f(int x) { printf("%d", x); }
324f44e67d1SCy Schubert]], [[
325e2d15004SDag-Erling Smørgrav   f(1);
326f44e67d1SCy Schubert]])],[ac_cv_c_weak_attribute="yes"],[ac_cv_c_weak_attribute="no"])
327e2d15004SDag-Erling Smørgrav])
328e2d15004SDag-Erling Smørgrav
329e2d15004SDag-Erling SmørgravAC_MSG_RESULT($ac_cv_c_weak_attribute)
330e2d15004SDag-Erling Smørgravif test $ac_cv_c_weak_attribute = yes; then
331e2d15004SDag-Erling Smørgrav  AC_DEFINE(HAVE_ATTR_WEAK, 1, [Whether the C compiler accepts the "weak" attribute])
332a755b6f6SDag-Erling Smørgrav  AC_DEFINE(ATTR_WEAK, [__attribute__((weak))], [apply the weak attribute to a symbol])
333e2d15004SDag-Erling Smørgravfi
334e2d15004SDag-Erling Smørgrav])dnl End of CHECK_WEAK_ATTRIBUTE
335e2d15004SDag-Erling Smørgrav
336e2d15004SDag-Erling SmørgravCHECK_WEAK_ATTRIBUTE
337e2d15004SDag-Erling Smørgrav
338a755b6f6SDag-Erling SmørgravAC_DEFUN([CHECK_NORETURN_ATTRIBUTE],
339a755b6f6SDag-Erling Smørgrav[AC_REQUIRE([AC_PROG_CC])
340a755b6f6SDag-Erling SmørgravAC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "noreturn" attribute)
341a755b6f6SDag-Erling SmørgravAC_CACHE_VAL(ac_cv_c_noreturn_attribute,
342a755b6f6SDag-Erling Smørgrav[ac_cv_c_noreturn_attribute=no
343f44e67d1SCy SchubertAC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h>
344a755b6f6SDag-Erling Smørgrav__attribute__((noreturn)) void f(int x) { printf("%d", x); }
345f44e67d1SCy Schubert]], [[
346a755b6f6SDag-Erling Smørgrav   f(1);
347f44e67d1SCy Schubert]])],[ac_cv_c_noreturn_attribute="yes"],[ac_cv_c_noreturn_attribute="no"])
348a755b6f6SDag-Erling Smørgrav])
349a755b6f6SDag-Erling Smørgrav
350a755b6f6SDag-Erling SmørgravAC_MSG_RESULT($ac_cv_c_noreturn_attribute)
351a755b6f6SDag-Erling Smørgravif test $ac_cv_c_noreturn_attribute = yes; then
352a755b6f6SDag-Erling Smørgrav  AC_DEFINE(HAVE_ATTR_NORETURN, 1, [Whether the C compiler accepts the "noreturn" attribute])
353a755b6f6SDag-Erling Smørgrav  AC_DEFINE(ATTR_NORETURN, [__attribute__((__noreturn__))], [apply the noreturn attribute to a function that exits the program])
354a755b6f6SDag-Erling Smørgravfi
355a755b6f6SDag-Erling Smørgrav])dnl End of CHECK_NORETURN_ATTRIBUTE
356a755b6f6SDag-Erling Smørgrav
357a755b6f6SDag-Erling SmørgravCHECK_NORETURN_ATTRIBUTE
358a755b6f6SDag-Erling Smørgrav
359b7579f77SDag-Erling Smørgravif test "$srcdir" != "."; then
360b7579f77SDag-Erling Smørgrav	CPPFLAGS="$CPPFLAGS -I$srcdir"
361b7579f77SDag-Erling Smørgravfi
362b7579f77SDag-Erling Smørgrav
363b7579f77SDag-Erling SmørgravAC_DEFUN([ACX_YYLEX_DESTROY], [
364b7579f77SDag-Erling Smørgrav	AC_MSG_CHECKING([for yylex_destroy])
365b7579f77SDag-Erling Smørgrav	if echo %% | $LEX -t 2>&1 | grep yylex_destroy >/dev/null 2>&1; then
366b7579f77SDag-Erling Smørgrav		AC_DEFINE(LEX_HAS_YYLEX_DESTROY, 1, [if lex has yylex_destroy])
367b7579f77SDag-Erling Smørgrav		AC_MSG_RESULT(yes)
3684c75e3aaSDag-Erling Smørgrav	else AC_MSG_RESULT(no);
3694c75e3aaSDag-Erling Smørgrav		LEX=":"
3704c75e3aaSDag-Erling Smørgrav	fi
3714c75e3aaSDag-Erling Smørgrav])
3724c75e3aaSDag-Erling Smørgrav
3734c75e3aaSDag-Erling SmørgravAC_DEFUN([ACX_YYLEX_OPTION], [
3744c75e3aaSDag-Erling Smørgrav	AC_MSG_CHECKING([for lex %option])
3754c75e3aaSDag-Erling Smørgrav	if cat <<EOF | $LEX -t 2>&1 | grep yy_delete_buffer >/dev/null 2>&1; then
3764c75e3aaSDag-Erling Smørgrav%option nounput
3774c75e3aaSDag-Erling Smørgrav%%
3784c75e3aaSDag-Erling SmørgravEOF
3794c75e3aaSDag-Erling Smørgrav		AC_MSG_RESULT(yes)
3804c75e3aaSDag-Erling Smørgrav	else AC_MSG_RESULT(no);
3814c75e3aaSDag-Erling Smørgrav		LEX=":"
3824c75e3aaSDag-Erling Smørgrav	fi
383b7579f77SDag-Erling Smørgrav])
384b7579f77SDag-Erling Smørgrav
385f44e67d1SCy SchubertAC_PROG_LEX([noyywrap])
3864c75e3aaSDag-Erling Smørgravif test "$LEX" != "" -a "$LEX" != ":"; then
387b7579f77SDag-Erling SmørgravACX_YYLEX_DESTROY
3884c75e3aaSDag-Erling Smørgravfi
3894c75e3aaSDag-Erling Smørgravif test "$LEX" != "" -a "$LEX" != ":"; then
3904c75e3aaSDag-Erling SmørgravACX_YYLEX_OPTION
3914c75e3aaSDag-Erling Smørgravfi
392*8f76bb7dSCy Schubertif test "$LEX" = "" -o "$LEX" = ":"; then
393*8f76bb7dSCy Schubert	if test ! -f util/configlexer.c; then
394*8f76bb7dSCy Schubert		AC_MSG_ERROR([no lex and no util/configlexer.c: need flex and bison to compile from source repository.])
395*8f76bb7dSCy Schubert	fi
396*8f76bb7dSCy Schubertfi
397b7579f77SDag-Erling SmørgravAC_PROG_YACC
398*8f76bb7dSCy Schubertif test "$YACC" = "" -o "$YACC" = ":"; then
399*8f76bb7dSCy Schubert	if test ! -f util/configparser.c; then
400*8f76bb7dSCy Schubert		AC_MSG_ERROR([no yacc and no util/configparser.c: need flex and bison to compile from source repository.])
401*8f76bb7dSCy Schubert	fi
402*8f76bb7dSCy Schubertfi
403b7579f77SDag-Erling SmørgravAC_CHECK_PROG(doxygen, doxygen, doxygen)
404b7579f77SDag-Erling SmørgravAC_CHECK_TOOL(STRIP, strip)
405b7579f77SDag-Erling SmørgravACX_LIBTOOL_C_ONLY
406b7579f77SDag-Erling Smørgrav
4075469a995SCy Schubert# pkg-config is only needed for these options, do not require it otherwise
4085469a995SCy Schubertif test "$enable_systemd" = "yes" -o "$with_pyunbound" = "yes" -o "$with_pythonmod" = "yes"; then
409e86b9096SDag-Erling SmørgravPKG_PROG_PKG_CONFIG
4105469a995SCy Schubertfi
411e86b9096SDag-Erling Smørgrav
412b7579f77SDag-Erling Smørgrav# Checks for header files.
413865f46b2SCy 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])
414369c6923SCy Schubert# net/if.h portability for Darwin see:
415369c6923SCy Schubert# https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Header-Portability.html
416369c6923SCy SchubertAC_CHECK_HEADERS([net/if.h],,, [
417369c6923SCy Schubert#include <stdio.h>
418369c6923SCy Schubert#ifdef STDC_HEADERS
419369c6923SCy Schubert# include <stdlib.h>
420369c6923SCy Schubert# include <stddef.h>
421369c6923SCy Schubert#else
422369c6923SCy Schubert# ifdef HAVE_STDLIB_H
423369c6923SCy Schubert#  include <stdlib.h>
424369c6923SCy Schubert# endif
425369c6923SCy Schubert#endif
426369c6923SCy Schubert#ifdef HAVE_SYS_SOCKET_H
427369c6923SCy Schubert# include <sys/socket.h>
428369c6923SCy Schubert#endif
429369c6923SCy Schubert])
430b7579f77SDag-Erling Smørgrav
43125039b37SCy Schubert# Check for Apple header. This uncovers TARGET_OS_IPHONE, TARGET_OS_TV or TARGET_OS_WATCH
4325469a995SCy SchubertAC_CHECK_HEADERS([TargetConditionals.h],,, [AC_INCLUDES_DEFAULT])
4339cf5bc93SCy SchubertAC_CHECK_HEADERS([netioapi.h],,, [AC_INCLUDES_DEFAULT
4349cf5bc93SCy Schubert#if HAVE_SYS_PARAM_H
4359cf5bc93SCy Schubert#include <sys/param.h>
4369cf5bc93SCy Schubert#endif
4379cf5bc93SCy Schubert
4389cf5bc93SCy Schubert#ifdef HAVE_SYS_SOCKET_H
4399cf5bc93SCy Schubert#include <sys/socket.h>
4409cf5bc93SCy Schubert#endif
4419cf5bc93SCy Schubert
4429cf5bc93SCy Schubert#ifdef HAVE_SYS_UIO_H
4439cf5bc93SCy Schubert#include <sys/uio.h>
4449cf5bc93SCy Schubert#endif
4459cf5bc93SCy Schubert
4469cf5bc93SCy Schubert#ifdef HAVE_NETINET_IN_H
4479cf5bc93SCy Schubert#include <netinet/in.h>
4489cf5bc93SCy Schubert#endif
4499cf5bc93SCy Schubert
4509cf5bc93SCy Schubert#ifdef HAVE_NETINET_TCP_H
4519cf5bc93SCy Schubert#include <netinet/tcp.h>
4529cf5bc93SCy Schubert#endif
4539cf5bc93SCy Schubert
4549cf5bc93SCy Schubert#ifdef HAVE_ARPA_INET_H
4559cf5bc93SCy Schubert#include <arpa/inet.h>
4569cf5bc93SCy Schubert#endif
4579cf5bc93SCy Schubert
4589cf5bc93SCy Schubert#ifdef HAVE_WINSOCK2_H
4599cf5bc93SCy Schubert#include <winsock2.h>
4609cf5bc93SCy Schubert#endif
4619cf5bc93SCy Schubert
4629cf5bc93SCy Schubert#ifdef HAVE_WS2TCPIP_H
4639cf5bc93SCy Schubert#include <ws2tcpip.h>
4649cf5bc93SCy Schubert#endif
4659cf5bc93SCy Schubert])
46625039b37SCy Schubert
467*8f76bb7dSCy Schubert# Check for Linux timestamping headers
468*8f76bb7dSCy SchubertAC_CHECK_HEADERS([linux/net_tstamp.h],,, [AC_INCLUDES_DEFAULT])
469*8f76bb7dSCy Schubert
470b7579f77SDag-Erling Smørgrav# check for types.
471b7579f77SDag-Erling Smørgrav# Using own tests for int64* because autoconf builtin only give 32bit.
472b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(int8_t, signed char)
473b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(int16_t, short)
474b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(int32_t, int)
475b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(int64_t, long long)
476b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(uint8_t, unsigned char)
477b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(uint16_t, unsigned short)
478b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(uint32_t, unsigned int)
479b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(uint64_t, unsigned long long)
480b7579f77SDag-Erling SmørgravAC_TYPE_SIZE_T
481b7579f77SDag-Erling SmørgravAC_CHECK_TYPE(ssize_t, int)
482b7579f77SDag-Erling SmørgravAC_TYPE_UID_T
483b7579f77SDag-Erling SmørgravAC_TYPE_PID_T
484b7579f77SDag-Erling SmørgravAC_TYPE_OFF_T
485b7579f77SDag-Erling SmørgravACX_TYPE_U_CHAR
486b7579f77SDag-Erling SmørgravACX_TYPE_RLIM_T
487b7579f77SDag-Erling SmørgravACX_TYPE_SOCKLEN_T
488b7579f77SDag-Erling SmørgravACX_TYPE_IN_ADDR_T
489b7579f77SDag-Erling SmørgravACX_TYPE_IN_PORT_T
490b7579f77SDag-Erling SmørgravACX_CHECK_MEMCMP_SIGNED
491b7579f77SDag-Erling Smørgrav
49217d15b25SDag-Erling SmørgravAC_CHECK_SIZEOF(time_t,,[
49317d15b25SDag-Erling SmørgravAC_INCLUDES_DEFAULT
49417d15b25SDag-Erling Smørgrav#ifdef TIME_WITH_SYS_TIME
49517d15b25SDag-Erling Smørgrav# include <sys/time.h>
49617d15b25SDag-Erling Smørgrav# include <time.h>
49717d15b25SDag-Erling Smørgrav#else
49817d15b25SDag-Erling Smørgrav# ifdef HAVE_SYS_TIME_H
49917d15b25SDag-Erling Smørgrav#  include <sys/time.h>
50017d15b25SDag-Erling Smørgrav# else
50117d15b25SDag-Erling Smørgrav#  include <time.h>
50217d15b25SDag-Erling Smørgrav# endif
50317d15b25SDag-Erling Smørgrav#endif
50417d15b25SDag-Erling Smørgrav])
5050eefd307SCy SchubertAC_CHECK_SIZEOF(size_t)
50617d15b25SDag-Erling Smørgrav
507b7579f77SDag-Erling Smørgrav# add option to disable the evil rpath
508b7579f77SDag-Erling SmørgravACX_ARG_RPATH
509b7579f77SDag-Erling SmørgravAC_SUBST(RUNTIME_PATH)
510b7579f77SDag-Erling Smørgrav
511b7579f77SDag-Erling Smørgrav# check to see if libraries are needed for these functions.
512b7579f77SDag-Erling SmørgravAC_SEARCH_LIBS([inet_pton], [nsl])
513b7579f77SDag-Erling SmørgravAC_SEARCH_LIBS([socket], [socket])
514b7579f77SDag-Erling Smørgrav
51524e36522SCy Schubert# check whether strptime also works
516b7579f77SDag-Erling SmørgravAC_DEFUN([AC_CHECK_STRPTIME_WORKS],
517b7579f77SDag-Erling Smørgrav[AC_REQUIRE([AC_PROG_CC])
518b7579f77SDag-Erling SmørgravAC_MSG_CHECKING(whether strptime works)
519b7579f77SDag-Erling Smørgravif test c${cross_compiling} = cno; then
520b7579f77SDag-Erling SmørgravAC_RUN_IFELSE([AC_LANG_SOURCE([[
521ff825849SDag-Erling Smørgrav#define _XOPEN_SOURCE 600
522b7579f77SDag-Erling Smørgrav#include <time.h>
523b7579f77SDag-Erling Smørgravint main(void) { struct tm tm; char *res;
524b7579f77SDag-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);
525b7579f77SDag-Erling Smørgravif (!res) return 2;
526b7579f77SDag-Erling Smørgravres = strptime("20070207111842", "%Y%m%d%H%M%S", &tm);
527b7579f77SDag-Erling Smørgravif (!res) return 1; return 0; }
528b7579f77SDag-Erling Smørgrav]])] , [eval "ac_cv_c_strptime_works=yes"], [eval "ac_cv_c_strptime_works=no"])
529b7579f77SDag-Erling Smørgravelse
530b7579f77SDag-Erling Smørgraveval "ac_cv_c_strptime_works=maybe"
531b7579f77SDag-Erling Smørgravfi
532b7579f77SDag-Erling SmørgravAC_MSG_RESULT($ac_cv_c_strptime_works)
533b7579f77SDag-Erling Smørgravif test $ac_cv_c_strptime_works = no; then
534b7579f77SDag-Erling SmørgravAC_LIBOBJ(strptime)
535b7579f77SDag-Erling Smørgravelse
536b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED([STRPTIME_WORKS], 1, [use default strptime.])
537b7579f77SDag-Erling Smørgravfi
538b7579f77SDag-Erling Smørgrav])dnl
539b7579f77SDag-Erling Smørgrav
540b7579f77SDag-Erling Smørgrav# check some functions of the OS before linking libs (while still runnable).
541b7579f77SDag-Erling SmørgravAC_FUNC_CHOWN
542b7579f77SDag-Erling SmørgravAC_FUNC_FORK
543f44e67d1SCy 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.'])
544b7579f77SDag-Erling SmørgravAC_FUNC_FSEEKO
545b7579f77SDag-Erling SmørgravACX_SYS_LARGEFILE
546b7579f77SDag-Erling SmørgravACX_CHECK_NONBLOCKING_BROKEN
547b7579f77SDag-Erling SmørgravACX_MKDIR_ONE_ARG
548b7579f77SDag-Erling SmørgravAC_CHECK_FUNCS([strptime],[AC_CHECK_STRPTIME_WORKS],[AC_LIBOBJ([strptime])])
549b7579f77SDag-Erling Smørgrav
550209fcf8eSDag-Erling Smørgrav# check if we can use SO_REUSEPORT
5515469a995SCy Schubertreuseport_default=0
5525469a995SCy Schubertif echo "$host" | $GREP -i -e linux >/dev/null; then reuseport_default=1; fi
5535469a995SCy Schubertif echo "$host" | $GREP -i -e dragonfly >/dev/null; then reuseport_default=1; fi
5545469a995SCy Schubertif test "$reuseport_default" = 1; then
555209fcf8eSDag-Erling Smørgrav	AC_DEFINE(REUSEPORT_DEFAULT, 1, [if REUSEPORT is enabled by default])
556209fcf8eSDag-Erling Smørgravelse
557209fcf8eSDag-Erling Smørgrav	AC_DEFINE(REUSEPORT_DEFAULT, 0, [if REUSEPORT is enabled by default])
558209fcf8eSDag-Erling Smørgravfi
559209fcf8eSDag-Erling Smørgrav
5600eefd307SCy Schubert# Include systemd.m4 - begin
5610eefd307SCy Schubertsinclude(systemd.m4)
5620eefd307SCy Schubert# Include systemd.m4 - end
5630eefd307SCy Schubert
564b7579f77SDag-Erling Smørgrav# set memory allocation checking if requested
565f44e67d1SCy SchubertAC_ARG_ENABLE(alloc-checks, AS_HELP_STRING([--enable-alloc-checks],[ enable to memory allocation statistics, for debug purposes ]),
566b7579f77SDag-Erling Smørgrav	, )
567f44e67d1SCy SchubertAC_ARG_ENABLE(alloc-lite, AS_HELP_STRING([--enable-alloc-lite],[ enable for lightweight alloc assertions, for debug purposes ]),
568b7579f77SDag-Erling Smørgrav	, )
569f44e67d1SCy 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 ]),
570b7579f77SDag-Erling Smørgrav	, )
571b7579f77SDag-Erling Smørgravif test x_$enable_alloc_nonregional = x_yes; then
572b7579f77SDag-Erling Smørgrav	AC_DEFINE(UNBOUND_ALLOC_NONREGIONAL, 1, [use malloc not regions, for debug use])
573b7579f77SDag-Erling Smørgravfi
574b7579f77SDag-Erling Smørgravif test x_$enable_alloc_checks = x_yes; then
575b7579f77SDag-Erling Smørgrav	AC_DEFINE(UNBOUND_ALLOC_STATS, 1, [use statistics for allocs and frees, for debug use])
5760eefd307SCy Schubert	SLDNS_ALLOCCHECK_EXTRA_OBJ="alloc.lo log.lo"
5770eefd307SCy Schubert	AC_SUBST(SLDNS_ALLOCCHECK_EXTRA_OBJ)
5780eefd307SCy Schubert	ASYNCLOOK_ALLOCCHECK_EXTRA_OBJ="alloc.lo"
5790eefd307SCy Schubert	AC_SUBST(ASYNCLOOK_ALLOCCHECK_EXTRA_OBJ)
580b7579f77SDag-Erling Smørgravelse
581b7579f77SDag-Erling Smørgrav	if test x_$enable_alloc_lite = x_yes; then
582b7579f77SDag-Erling Smørgrav		AC_DEFINE(UNBOUND_ALLOC_LITE, 1, [use to enable lightweight alloc assertions, for debug use])
583b7579f77SDag-Erling Smørgrav	else
584b7579f77SDag-Erling Smørgrav		ACX_FUNC_MALLOC([unbound])
585b7579f77SDag-Erling Smørgrav	fi
586b7579f77SDag-Erling Smørgravfi
587b7579f77SDag-Erling Smørgrav
588b7579f77SDag-Erling Smørgrav# check windows threads (we use them, not pthreads, on windows).
589b7579f77SDag-Erling Smørgravif test "$on_mingw" = "yes"; then
590b7579f77SDag-Erling Smørgrav# check windows threads
591b7579f77SDag-Erling Smørgrav	AC_CHECK_HEADERS([windows.h],,, [AC_INCLUDES_DEFAULT])
592b7579f77SDag-Erling Smørgrav	AC_MSG_CHECKING([for CreateThread])
593b7579f77SDag-Erling Smørgrav	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
594b7579f77SDag-Erling Smørgrav#ifdef HAVE_WINDOWS_H
595b7579f77SDag-Erling Smørgrav#include <windows.h>
596b7579f77SDag-Erling Smørgrav#endif
597b7579f77SDag-Erling Smørgrav], [
598b7579f77SDag-Erling Smørgrav	HANDLE t = CreateThread(NULL, 0, NULL, NULL, 0, NULL);
599b7579f77SDag-Erling Smørgrav])],
600b7579f77SDag-Erling Smørgrav	AC_MSG_RESULT(yes)
601b7579f77SDag-Erling Smørgrav	AC_DEFINE(HAVE_WINDOWS_THREADS, 1, [Using Windows threads])
602b7579f77SDag-Erling Smørgrav,
603b7579f77SDag-Erling Smørgrav	AC_MSG_RESULT(no)
604b7579f77SDag-Erling Smørgrav)
605b7579f77SDag-Erling Smørgrav
606b7579f77SDag-Erling Smørgravelse
607b7579f77SDag-Erling Smørgrav# not on mingw, check thread libraries.
608b7579f77SDag-Erling Smørgrav
609b7579f77SDag-Erling Smørgrav# check for thread library.
610b7579f77SDag-Erling Smørgrav# check this first, so that the pthread lib does not get linked in via
611b7579f77SDag-Erling Smørgrav# libssl or libpython, and thus distorts the tests, and we end up using
612b7579f77SDag-Erling Smørgrav# the non-threadsafe C libraries.
613f44e67d1SCy SchubertAC_ARG_WITH(pthreads, AS_HELP_STRING([--with-pthreads],[use pthreads library, or --without-pthreads to disable threading support.]),
614b7579f77SDag-Erling Smørgrav [ ],[ withval="yes" ])
615b7579f77SDag-Erling Smørgravub_have_pthreads=no
616b7579f77SDag-Erling Smørgravif test x_$withval != x_no; then
61717d15b25SDag-Erling Smørgrav	AX_PTHREAD([
618b7579f77SDag-Erling Smørgrav		AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.])
619971980c3SDag-Erling Smørgrav		if test -n "$PTHREAD_LIBS"; then
620b7579f77SDag-Erling Smørgrav		  LIBS="$PTHREAD_LIBS $LIBS"
621971980c3SDag-Erling Smørgrav		fi
622b7579f77SDag-Erling Smørgrav		CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
623b7579f77SDag-Erling Smørgrav		CC="$PTHREAD_CC"
624b7579f77SDag-Erling Smørgrav		ub_have_pthreads=yes
625b7579f77SDag-Erling Smørgrav		AC_CHECK_TYPES([pthread_spinlock_t, pthread_rwlock_t],,,[#include <pthread.h>])
626865f46b2SCy Schubert		AC_CHECK_SIZEOF([unsigned long])
627865f46b2SCy Schubert		AC_CHECK_SIZEOF(pthread_t)
628f61ef7f6SDag-Erling Smørgrav
629f61ef7f6SDag-Erling Smørgrav		if echo "$CFLAGS" | $GREP -e "-pthread" >/dev/null; then
630f61ef7f6SDag-Erling Smørgrav		AC_MSG_CHECKING([if -pthread unused during linking])
631f61ef7f6SDag-Erling Smørgrav		# catch clang warning 'argument unused during compilation'
632f61ef7f6SDag-Erling Smørgrav		AC_LANG_CONFTEST([AC_LANG_SOURCE(AC_INCLUDES_DEFAULT
633f61ef7f6SDag-Erling Smørgrav[[
634f61ef7f6SDag-Erling Smørgravint main(void) {return 0;}
635f61ef7f6SDag-Erling Smørgrav]])])
636f61ef7f6SDag-Erling Smørgrav		pthread_unused="yes"
637f61ef7f6SDag-Erling Smørgrav		# first compile
638f61ef7f6SDag-Erling Smørgrav		echo "$CC $CFLAGS -c conftest.c -o conftest.o" >&AS_MESSAGE_LOG_FD
639f61ef7f6SDag-Erling Smørgrav		$CC $CFLAGS -c conftest.c -o conftest.o 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD
640f61ef7f6SDag-Erling Smørgrav		if test $? = 0; then
641f61ef7f6SDag-Erling Smørgrav			# then link
642f61ef7f6SDag-Erling Smørgrav			echo "$CC $CFLAGS -Werror $LDFLAGS $LIBS -o conftest contest.o" >&AS_MESSAGE_LOG_FD
643f61ef7f6SDag-Erling Smørgrav			$CC $CFLAGS -Werror $LDFLAGS $LIBS -o conftest conftest.o 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD
644f61ef7f6SDag-Erling Smørgrav			if test $? -ne 0; then
645f61ef7f6SDag-Erling Smørgrav				AC_MSG_RESULT(yes)
646f61ef7f6SDag-Erling Smørgrav				CFLAGS=`echo "$CFLAGS" | sed -e 's/-pthread//'`
647f61ef7f6SDag-Erling Smørgrav				PTHREAD_CFLAGS_ONLY="-pthread"
648f61ef7f6SDag-Erling Smørgrav				AC_SUBST(PTHREAD_CFLAGS_ONLY)
649f61ef7f6SDag-Erling Smørgrav			else
650f61ef7f6SDag-Erling Smørgrav				AC_MSG_RESULT(no)
651f61ef7f6SDag-Erling Smørgrav			fi
652f61ef7f6SDag-Erling Smørgrav		else
653f61ef7f6SDag-Erling Smørgrav			AC_MSG_RESULT(no)
654f61ef7f6SDag-Erling Smørgrav		fi # endif cc successful
655f61ef7f6SDag-Erling Smørgrav		rm -f conftest conftest.c conftest.o
656f61ef7f6SDag-Erling Smørgrav		fi # endif -pthread in CFLAGS
657f61ef7f6SDag-Erling Smørgrav
658b7579f77SDag-Erling Smørgrav		])
659b7579f77SDag-Erling Smørgravfi
660b7579f77SDag-Erling Smørgrav
661b7579f77SDag-Erling Smørgrav# check solaris thread library
662f44e67d1SCy SchubertAC_ARG_WITH(solaris-threads, AS_HELP_STRING([--with-solaris-threads],[use solaris native thread library.]), [ ],[ withval="no" ])
663b7579f77SDag-Erling Smørgravub_have_sol_threads=no
664b7579f77SDag-Erling Smørgravif test x_$withval != x_no; then
665b7579f77SDag-Erling Smørgrav	if test x_$ub_have_pthreads != x_no; then
666f44e67d1SCy Schubert	    AC_MSG_WARN([Have pthreads already, ignoring --with-solaris-threads])
667b7579f77SDag-Erling Smørgrav	else
668b7579f77SDag-Erling Smørgrav	AC_SEARCH_LIBS(thr_create, [thread],
669b7579f77SDag-Erling Smørgrav	[
670b7579f77SDag-Erling Smørgrav    		AC_DEFINE(HAVE_SOLARIS_THREADS, 1, [Using Solaris threads])
671b7579f77SDag-Erling Smørgrav
672b7579f77SDag-Erling Smørgrav		ACX_CHECK_COMPILER_FLAG(mt, [CFLAGS="$CFLAGS -mt"],
673b7579f77SDag-Erling Smørgrav			[CFLAGS="$CFLAGS -D_REENTRANT"])
674b7579f77SDag-Erling Smørgrav		ub_have_sol_threads=yes
675b7579f77SDag-Erling Smørgrav	] , [
676f44e67d1SCy Schubert		AC_MSG_ERROR([no solaris threads found.])
677b7579f77SDag-Erling Smørgrav	])
678b7579f77SDag-Erling Smørgrav	fi
679b7579f77SDag-Erling Smørgravfi
680b7579f77SDag-Erling Smørgrav
681b7579f77SDag-Erling Smørgravfi # end of non-mingw check of thread libraries
682b7579f77SDag-Erling Smørgrav
6830eefd307SCy Schubert# Check for SYSLOG_FACILITY
684f44e67d1SCy SchubertAC_ARG_WITH(syslog-facility, AS_HELP_STRING([--with-syslog-facility=LOCAL0 - LOCAL7],[ set SYSLOG_FACILITY, default DAEMON ]),
6850eefd307SCy Schubert	[ UNBOUND_SYSLOG_FACILITY="$withval" ], [])
6860eefd307SCy Schubertcase "${UNBOUND_SYSLOG_FACILITY}" in
6870eefd307SCy Schubert
6880eefd307SCy Schubert  LOCAL[[0-7]]) UNBOUND_SYSLOG_FACILITY="LOG_${UNBOUND_SYSLOG_FACILITY}" ;;
6890eefd307SCy Schubert
6900eefd307SCy Schubert           *) UNBOUND_SYSLOG_FACILITY="LOG_DAEMON" ;;
6910eefd307SCy Schubert
6920eefd307SCy Schubertesac
6930eefd307SCy SchubertAC_DEFINE_UNQUOTED(UB_SYSLOG_FACILITY,${UNBOUND_SYSLOG_FACILITY},[the SYSLOG_FACILITY to use, default LOG_DAEMON])
6940eefd307SCy Schubert
69525039b37SCy Schubert# Check for dynamic library module
69625039b37SCy SchubertAC_ARG_WITH(dynlibmodule,
697f44e67d1SCy Schubert   AS_HELP_STRING([--with-dynlibmodule],[build dynamic library module, or --without-dynlibmodule to disable it. (default=no)]),
69825039b37SCy Schubert   [], [ withval="no" ])
69925039b37SCy Schubert
70025039b37SCy Schubertif test x_$withval != x_no; then
70125039b37SCy Schubert  AC_DEFINE(WITH_DYNLIBMODULE, 1, [Define if you want dynlib module.])
70225039b37SCy Schubert  WITH_DYNLIBMODULE=yes
70325039b37SCy Schubert  AC_SUBST(WITH_DYNLIBMODULE)
70425039b37SCy Schubert  DYNLIBMOD_OBJ="dynlibmod.lo"
70525039b37SCy Schubert  AC_SUBST(DYNLIBMOD_OBJ)
70625039b37SCy Schubert  DYNLIBMOD_HEADER='$(srcdir)/dynlibmod/dynlibmod.h'
70725039b37SCy Schubert  AC_SUBST(DYNLIBMOD_HEADER)
70825039b37SCy Schubert  if test $on_mingw = "no"; then
709f44e67d1SCy Schubert    # link with -ldl if not already there, for all executables because
710f44e67d1SCy Schubert    # dlopen call is in the dynlib module.  For unbound executable, also
711f44e67d1SCy Schubert    # export symbols.
712f44e67d1SCy Schubert    AC_SEARCH_LIBS([dlopen], [dl])
713f44e67d1SCy Schubert    DYNLIBMOD_EXTRALIBS="-export-dynamic"
71425039b37SCy Schubert  else
715f44e67d1SCy Schubert    DYNLIBMOD_EXTRALIBS="-Wl,--export-all-symbols,--out-implib,libunbound.dll.a"
71625039b37SCy Schubert  fi
71725039b37SCy Schubert  AC_SUBST(DYNLIBMOD_EXTRALIBS)
71825039b37SCy Schubertfi
71925039b37SCy Schubert
720b7579f77SDag-Erling Smørgrav# Check for PyUnbound
721b7579f77SDag-Erling SmørgravAC_ARG_WITH(pyunbound,
722f44e67d1SCy Schubert   AS_HELP_STRING([--with-pyunbound],[build PyUnbound, or --without-pyunbound to skip it. (default=no)]),
723b7579f77SDag-Erling Smørgrav   [], [ withval="no" ])
724b7579f77SDag-Erling Smørgrav
725b7579f77SDag-Erling Smørgravub_test_python=no
726b7579f77SDag-Erling Smørgravub_with_pyunbound=no
727b7579f77SDag-Erling Smørgravif test x_$withval != x_no; then
728b7579f77SDag-Erling Smørgrav   ub_with_pyunbound=yes
729b7579f77SDag-Erling Smørgrav   ub_test_python=yes
730b7579f77SDag-Erling Smørgravfi
731b7579f77SDag-Erling Smørgrav
732b7579f77SDag-Erling Smørgrav# Check for Python module
733b7579f77SDag-Erling SmørgravAC_ARG_WITH(pythonmodule,
734f44e67d1SCy Schubert   AS_HELP_STRING([--with-pythonmodule],[build Python module, or --without-pythonmodule to disable script engine. (default=no)]),
735b7579f77SDag-Erling Smørgrav   [], [ withval="no" ])
736b7579f77SDag-Erling Smørgrav
737b7579f77SDag-Erling Smørgravub_with_pythonmod=no
738b7579f77SDag-Erling Smørgravif test x_$withval != x_no; then
739b7579f77SDag-Erling Smørgrav   ub_with_pythonmod=yes
740b7579f77SDag-Erling Smørgrav   ub_test_python=yes
741b7579f77SDag-Erling Smørgravfi
742b7579f77SDag-Erling Smørgrav
743b7579f77SDag-Erling Smørgrav# Check for Python & SWIG only on PyUnbound or PyModule
744b7579f77SDag-Erling Smørgravif test x_$ub_test_python != x_no; then
745b7579f77SDag-Erling Smørgrav
746b7579f77SDag-Erling Smørgrav   # Check for Python
747b7579f77SDag-Erling Smørgrav   ub_have_python=no
748b7579f77SDag-Erling Smørgrav   ac_save_LIBS="$LIBS" dnl otherwise AC_PYTHON_DEVEL thrashes $LIBS
749b7579f77SDag-Erling Smørgrav   AC_PYTHON_DEVEL
750b7579f77SDag-Erling Smørgrav   if test ! -z "$PYTHON_VERSION"; then
751*8f76bb7dSCy Schubert	badversion="no"
752*8f76bb7dSCy Schubert	if test "$PYTHON_VERSION_MAJOR" -lt 2; then
753*8f76bb7dSCy Schubert		badversion="yes"
754*8f76bb7dSCy Schubert	fi
755*8f76bb7dSCy Schubert	if test "$PYTHON_VERSION_MAJOR" -eq 2 -a "$PYTHON_VERSION_MINOR" -lt 4; then
756*8f76bb7dSCy Schubert		badversion="yes"
757*8f76bb7dSCy Schubert	fi
758*8f76bb7dSCy Schubert	if test "$badversion" = "yes"; then
759f44e67d1SCy Schubert		AC_MSG_ERROR([Python version >= 2.4.0 is required])
760b7579f77SDag-Erling Smørgrav	fi
761b7579f77SDag-Erling Smørgrav
762b75612f8SDag-Erling Smørgrav      [PY_MAJOR_VERSION="`$PYTHON -c \"import sys; print(sys.version_info[0])\"`"]
76309a3aaf3SDag-Erling Smørgrav      AC_SUBST(PY_MAJOR_VERSION)
764b7579f77SDag-Erling Smørgrav      # Have Python
765b7579f77SDag-Erling Smørgrav      AC_DEFINE(HAVE_PYTHON,1,[Define if you have Python libraries and header files.])
76624e36522SCy Schubert      if test x_$ub_with_pythonmod != x_no; then
767971980c3SDag-Erling Smørgrav        if test -n "$LIBS"; then
768b7579f77SDag-Erling Smørgrav          LIBS="$PYTHON_LDFLAGS $LIBS"
769971980c3SDag-Erling Smørgrav        else
770971980c3SDag-Erling Smørgrav          LIBS="$PYTHON_LDFLAGS"
771971980c3SDag-Erling Smørgrav        fi
77224e36522SCy Schubert      fi
77324e36522SCy Schubert      PYTHON_LIBS="$PYTHON_LDFLAGS"
77424e36522SCy Schubert      AC_SUBST(PYTHON_LIBS)
775971980c3SDag-Erling Smørgrav      if test -n "$CPPFLAGS"; then
776b7579f77SDag-Erling Smørgrav        CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS"
777971980c3SDag-Erling Smørgrav      else
778971980c3SDag-Erling Smørgrav        CPPFLAGS="$PYTHON_CPPFLAGS"
779971980c3SDag-Erling Smørgrav      fi
78025039b37SCy Schubert      if test "$PYTHON_LIBDIR" != "/usr/lib" -a "$PYTHON_LIBDIR" != "" -a "$PYTHON_LIBDIR" != "/usr/lib64"; then
78125039b37SCy Schubert        ACX_RUNTIME_PATH_ADD([$PYTHON_LIBDIR])
78225039b37SCy Schubert      fi
783b7579f77SDag-Erling Smørgrav      ub_have_python=yes
7844c75e3aaSDag-Erling Smørgrav      PKG_CHECK_EXISTS(["python${PY_MAJOR_VERSION}"],
7854c75e3aaSDag-Erling Smørgrav                       [PC_PY_DEPENDENCY="python${PY_MAJOR_VERSION}"],
7864c75e3aaSDag-Erling Smørgrav                       [PC_PY_DEPENDENCY="python"])
787bc892140SDag-Erling Smørgrav      AC_SUBST(PC_PY_DEPENDENCY)
788b7579f77SDag-Erling Smørgrav
789b7579f77SDag-Erling Smørgrav      # Check for SWIG
790b7579f77SDag-Erling Smørgrav      ub_have_swig=no
791f44e67d1SCy 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]))
79257bddd21SDag-Erling Smørgrav      if test "$enable_swig_version_check" = "yes"; then
79365b390aaSDag-Erling Smørgrav      	AC_PROG_SWIG(2.0.1)
79457bddd21SDag-Erling Smørgrav      else
79557bddd21SDag-Erling Smørgrav      	AC_PROG_SWIG
79657bddd21SDag-Erling Smørgrav      fi
797b7579f77SDag-Erling Smørgrav      AC_MSG_CHECKING(SWIG)
798b7579f77SDag-Erling Smørgrav      if test ! -x "$SWIG"; then
799f44e67d1SCy Schubert         AC_MSG_ERROR([failed to find swig tool, install it, or do not build Python module and PyUnbound])
800b7579f77SDag-Erling Smørgrav      else
801b7579f77SDag-Erling Smørgrav         AC_DEFINE(HAVE_SWIG, 1, [Define if you have Swig libraries and header files.])
802b7579f77SDag-Erling Smørgrav         AC_SUBST(swig, "$SWIG")
803b7579f77SDag-Erling Smørgrav         AC_MSG_RESULT(present)
804b7579f77SDag-Erling Smørgrav
805b7579f77SDag-Erling Smørgrav         # If have Python & SWIG
806b7579f77SDag-Erling Smørgrav         # Declare PythonMod
807b7579f77SDag-Erling Smørgrav         if test x_$ub_with_pythonmod != x_no; then
808b7579f77SDag-Erling Smørgrav            AC_DEFINE(WITH_PYTHONMODULE, 1, [Define if you want Python module.])
809b7579f77SDag-Erling Smørgrav            WITH_PYTHONMODULE=yes
810b7579f77SDag-Erling Smørgrav            AC_SUBST(WITH_PYTHONMODULE)
811b7579f77SDag-Erling Smørgrav	    PYTHONMOD_OBJ="pythonmod.lo pythonmod_utils.lo"
812b7579f77SDag-Erling Smørgrav	    AC_SUBST(PYTHONMOD_OBJ)
813b7579f77SDag-Erling Smørgrav	    PYTHONMOD_HEADER='$(srcdir)/pythonmod/pythonmod.h'
814b7579f77SDag-Erling Smørgrav	    AC_SUBST(PYTHONMOD_HEADER)
815b7579f77SDag-Erling Smørgrav	    PYTHONMOD_INSTALL=pythonmod-install
816b7579f77SDag-Erling Smørgrav	    AC_SUBST(PYTHONMOD_INSTALL)
817b7579f77SDag-Erling Smørgrav	    PYTHONMOD_UNINSTALL=pythonmod-uninstall
818b7579f77SDag-Erling Smørgrav	    AC_SUBST(PYTHONMOD_UNINSTALL)
819b7579f77SDag-Erling Smørgrav         fi
820b7579f77SDag-Erling Smørgrav
821b7579f77SDag-Erling Smørgrav         # Declare PyUnbound
822b7579f77SDag-Erling Smørgrav         if test x_$ub_with_pyunbound != x_no; then
823b7579f77SDag-Erling Smørgrav            AC_DEFINE(WITH_PYUNBOUND, 1, [Define if you want PyUnbound.])
824b7579f77SDag-Erling Smørgrav            WITH_PYUNBOUND=yes
825b7579f77SDag-Erling Smørgrav            AC_SUBST(WITH_PYUNBOUND)
826b7579f77SDag-Erling Smørgrav	    PYUNBOUND_OBJ="libunbound_wrap.lo"
827b7579f77SDag-Erling Smørgrav	    AC_SUBST(PYUNBOUND_OBJ)
828b7579f77SDag-Erling Smørgrav	    PYUNBOUND_TARGET="_unbound.la"
829b7579f77SDag-Erling Smørgrav	    AC_SUBST(PYUNBOUND_TARGET)
830b7579f77SDag-Erling Smørgrav	    PYUNBOUND_INSTALL=pyunbound-install
831b7579f77SDag-Erling Smørgrav	    AC_SUBST(PYUNBOUND_INSTALL)
832b7579f77SDag-Erling Smørgrav	    PYUNBOUND_UNINSTALL=pyunbound-uninstall
833b7579f77SDag-Erling Smørgrav	    AC_SUBST(PYUNBOUND_UNINSTALL)
834b7579f77SDag-Erling Smørgrav         fi
835b7579f77SDag-Erling Smørgrav      fi
836b7579f77SDag-Erling Smørgrav   else
837b7579f77SDag-Erling Smørgrav      AC_MSG_RESULT([*** Python libraries not found, won't build PythonMod or PyUnbound ***])
838b7579f77SDag-Erling Smørgrav      ub_with_pyunbound=no
839b7579f77SDag-Erling Smørgrav      ub_with_pythonmod=no
840b7579f77SDag-Erling Smørgrav   fi
841b7579f77SDag-Erling Smørgravfi
842b7579f77SDag-Erling Smørgrav
843b7579f77SDag-Erling Smørgravif test "`uname`" = "NetBSD"; then
844b7579f77SDag-Erling Smørgrav	NETBSD_LINTFLAGS='"-D__RENAME(x)=" -D_NETINET_IN_H_'
845b7579f77SDag-Erling Smørgrav	AC_SUBST(NETBSD_LINTFLAGS)
846b7579f77SDag-Erling Smørgravfi
84724e36522SCy Schubert
8489cf5bc93SCy Schubertif test "`uname`" = "Linux"; then
84924e36522SCy Schubert	# splint cannot parse modern c99 header files
85024e36522SCy Schubert	GCC_DOCKER_LINTFLAGS='-syntax'
85124e36522SCy Schubert	AC_SUBST(GCC_DOCKER_LINTFLAGS)
85224e36522SCy Schubertfi
853b7579f77SDag-Erling SmørgravCONFIG_DATE=`date +%Y%m%d`
854b7579f77SDag-Erling SmørgravAC_SUBST(CONFIG_DATE)
855b7579f77SDag-Erling Smørgrav
856b7579f77SDag-Erling Smørgrav# Checks for libraries.
8578ed2b524SDag-Erling Smørgrav
8588ed2b524SDag-Erling Smørgrav# libnss
8598ed2b524SDag-Erling SmørgravUSE_NSS="no"
860f44e67d1SCy SchubertAC_ARG_WITH([nss], AS_HELP_STRING([--with-nss=path],[use libnss instead of openssl, installed at path.]),
8618ed2b524SDag-Erling Smørgrav	[
8628ed2b524SDag-Erling Smørgrav	USE_NSS="yes"
8638ed2b524SDag-Erling Smørgrav	AC_DEFINE(HAVE_NSS, 1, [Use libnss for crypto])
8648ed2b524SDag-Erling Smørgrav	if test "$withval" != "" -a "$withval" != "yes"; then
8658ed2b524SDag-Erling Smørgrav		CPPFLAGS="$CPPFLAGS -I$withval/include/nss3"
8668ed2b524SDag-Erling Smørgrav		LDFLAGS="$LDFLAGS -L$withval/lib"
8678ed2b524SDag-Erling Smørgrav		ACX_RUNTIME_PATH_ADD([$withval/lib])
8688ed2b524SDag-Erling Smørgrav		CPPFLAGS="-I$withval/include/nspr4 $CPPFLAGS"
8698ed2b524SDag-Erling Smørgrav	else
8708ed2b524SDag-Erling Smørgrav		CPPFLAGS="$CPPFLAGS -I/usr/include/nss3"
8718ed2b524SDag-Erling Smørgrav		CPPFLAGS="-I/usr/include/nspr4 $CPPFLAGS"
8728ed2b524SDag-Erling Smørgrav	fi
8738ed2b524SDag-Erling Smørgrav        LIBS="$LIBS -lnss3 -lnspr4"
87405ab2901SDag-Erling Smørgrav	SSLLIB=""
875091e9e46SCy Schubert	PC_CRYPTO_DEPENDENCY="nss nspr"
876091e9e46SCy Schubert	AC_SUBST(PC_CRYPTO_DEPENDENCY)
87705ab2901SDag-Erling Smørgrav	]
87805ab2901SDag-Erling Smørgrav)
87905ab2901SDag-Erling Smørgrav
88005ab2901SDag-Erling Smørgrav# libnettle
88105ab2901SDag-Erling SmørgravUSE_NETTLE="no"
882f44e67d1SCy SchubertAC_ARG_WITH([nettle], AS_HELP_STRING([--with-nettle=path],[use libnettle as crypto library, installed at path.]),
88305ab2901SDag-Erling Smørgrav	[
88405ab2901SDag-Erling Smørgrav	USE_NETTLE="yes"
88505ab2901SDag-Erling Smørgrav	AC_DEFINE(HAVE_NETTLE, 1, [Use libnettle for crypto])
886b5663de9SDag-Erling Smørgrav	AC_CHECK_HEADERS([nettle/dsa-compat.h],,, [AC_INCLUDES_DEFAULT])
88705ab2901SDag-Erling Smørgrav	if test "$withval" != "" -a "$withval" != "yes"; then
88805ab2901SDag-Erling Smørgrav		CPPFLAGS="$CPPFLAGS -I$withval/include/nettle"
88905ab2901SDag-Erling Smørgrav		LDFLAGS="$LDFLAGS -L$withval/lib"
89005ab2901SDag-Erling Smørgrav		ACX_RUNTIME_PATH_ADD([$withval/lib])
89105ab2901SDag-Erling Smørgrav	else
89205ab2901SDag-Erling Smørgrav		CPPFLAGS="$CPPFLAGS -I/usr/include/nettle"
89305ab2901SDag-Erling Smørgrav	fi
89405ab2901SDag-Erling Smørgrav        LIBS="$LIBS -lhogweed -lnettle -lgmp"
89505ab2901SDag-Erling Smørgrav	SSLLIB=""
896091e9e46SCy Schubert	PC_CRYPTO_DEPENDENCY="hogweed nettle"
897091e9e46SCy Schubert	AC_SUBST(PC_CRYPTO_DEPENDENCY)
8988ed2b524SDag-Erling Smørgrav	]
8998ed2b524SDag-Erling Smørgrav)
9008ed2b524SDag-Erling Smørgrav
9018ed2b524SDag-Erling Smørgrav# openssl
90205ab2901SDag-Erling Smørgravif test $USE_NSS = "no" -a $USE_NETTLE = "no"; then
903b7579f77SDag-Erling SmørgravACX_WITH_SSL
904b7579f77SDag-Erling SmørgravACX_LIB_SSL
90505ab2901SDag-Erling SmørgravSSLLIB="-lssl"
906b5663de9SDag-Erling Smørgrav
90724e36522SCy SchubertPC_CRYPTO_DEPENDENCY=""
908091e9e46SCy SchubertAC_SUBST(PC_CRYPTO_DEPENDENCY)
909091e9e46SCy Schubert
910b5663de9SDag-Erling Smørgrav# check if -lcrypt32 is needed because CAPIENG needs that. (on windows)
911b5663de9SDag-Erling SmørgravBAKLIBS="$LIBS"
912b5663de9SDag-Erling SmørgravLIBS="-lssl $LIBS"
913b5663de9SDag-Erling SmørgravAC_MSG_CHECKING([if libssl needs -lcrypt32])
914f44e67d1SCy SchubertAC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
915f44e67d1SCy Schubert	int EVP_sha256(void);
916f44e67d1SCy Schubert	(void)EVP_sha256();
917f44e67d1SCy Schubert]])], [
918b5663de9SDag-Erling Smørgrav	AC_MSG_RESULT([no])
919b5663de9SDag-Erling Smørgrav	LIBS="$BAKLIBS"
920b5663de9SDag-Erling Smørgrav], [
921b5663de9SDag-Erling Smørgrav	AC_MSG_RESULT([yes])
922b5663de9SDag-Erling Smørgrav	LIBS="$BAKLIBS"
923b5663de9SDag-Erling Smørgrav	LIBS="$LIBS -lcrypt32"
924b5663de9SDag-Erling Smørgrav])
925b5663de9SDag-Erling Smørgrav
926ff825849SDag-Erling SmørgravAC_MSG_CHECKING([for LibreSSL])
92724e36522SCy Schubertif grep VERSION_TEXT $ssldir_include/openssl/opensslv.h | grep "LibreSSL" >/dev/null; then
928ff825849SDag-Erling Smørgrav	AC_MSG_RESULT([yes])
929ff825849SDag-Erling Smørgrav	AC_DEFINE([HAVE_LIBRESSL], [1], [Define if we have LibreSSL])
930ff825849SDag-Erling Smørgrav	# libressl provides these compat functions, but they may also be
931ff825849SDag-Erling Smørgrav	# declared by the OS in libc.  See if they have been declared.
9320eefd307SCy Schubert	AC_CHECK_DECLS([strlcpy,strlcat,arc4random,arc4random_uniform])
933ff825849SDag-Erling Smørgravelse
934ff825849SDag-Erling Smørgrav	AC_MSG_RESULT([no])
935ff825849SDag-Erling Smørgravfi
9365469a995SCy 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])
9370a92a9fcSCy 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])
938b5663de9SDag-Erling Smørgrav
939b5663de9SDag-Erling Smørgrav# these check_funcs need -lssl
940b5663de9SDag-Erling SmørgravBAKLIBS="$LIBS"
941b5663de9SDag-Erling SmørgravLIBS="-lssl $LIBS"
9425469a995SCy 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])
943b5663de9SDag-Erling SmørgravLIBS="$BAKLIBS"
944b5663de9SDag-Erling Smørgrav
945b75612f8SDag-Erling SmørgravAC_CHECK_DECLS([SSL_COMP_get_compression_methods,sk_SSL_COMP_pop_free,SSL_CTX_set_ecdh_auto], [], [], [
946b7579f77SDag-Erling SmørgravAC_INCLUDES_DEFAULT
947b7579f77SDag-Erling Smørgrav#ifdef HAVE_OPENSSL_ERR_H
948b7579f77SDag-Erling Smørgrav#include <openssl/err.h>
949b7579f77SDag-Erling Smørgrav#endif
950b7579f77SDag-Erling Smørgrav
951b7579f77SDag-Erling Smørgrav#ifdef HAVE_OPENSSL_RAND_H
952b7579f77SDag-Erling Smørgrav#include <openssl/rand.h>
953b7579f77SDag-Erling Smørgrav#endif
954b7579f77SDag-Erling Smørgrav
955b7579f77SDag-Erling Smørgrav#ifdef HAVE_OPENSSL_CONF_H
956b7579f77SDag-Erling Smørgrav#include <openssl/conf.h>
957b7579f77SDag-Erling Smørgrav#endif
958b7579f77SDag-Erling Smørgrav
959b7579f77SDag-Erling Smørgrav#ifdef HAVE_OPENSSL_ENGINE_H
960b7579f77SDag-Erling Smørgrav#include <openssl/engine.h>
961b7579f77SDag-Erling Smørgrav#endif
962b7579f77SDag-Erling Smørgrav#include <openssl/ssl.h>
963b7579f77SDag-Erling Smørgrav#include <openssl/evp.h>
964b7579f77SDag-Erling Smørgrav])
9650eefd307SCy Schubert
9660eefd307SCy Schubertif test "$ac_cv_func_HMAC_Init_ex" = "yes"; then
9670eefd307SCy Schubert# check function return type.
9680eefd307SCy SchubertAC_MSG_CHECKING(the return type of HMAC_Init_ex)
9690eefd307SCy SchubertAC_COMPILE_IFELSE([AC_LANG_PROGRAM([
9700eefd307SCy Schubert#ifdef HAVE_OPENSSL_ERR_H
9710eefd307SCy Schubert#include <openssl/err.h>
9720eefd307SCy Schubert#endif
9730eefd307SCy Schubert
9740eefd307SCy Schubert#ifdef HAVE_OPENSSL_RAND_H
9750eefd307SCy Schubert#include <openssl/rand.h>
9760eefd307SCy Schubert#endif
9770eefd307SCy Schubert
9780eefd307SCy Schubert#ifdef HAVE_OPENSSL_CONF_H
9790eefd307SCy Schubert#include <openssl/conf.h>
9800eefd307SCy Schubert#endif
9810eefd307SCy Schubert
9820eefd307SCy Schubert#ifdef HAVE_OPENSSL_ENGINE_H
9830eefd307SCy Schubert#include <openssl/engine.h>
9840eefd307SCy Schubert#endif
9850eefd307SCy Schubert#include <openssl/ssl.h>
9860eefd307SCy Schubert#include <openssl/evp.h>
9870eefd307SCy Schubert], [
9880eefd307SCy Schubert	HMAC_CTX* hmac_ctx = NULL;
9890eefd307SCy Schubert	void* hmac_key = NULL;
9900eefd307SCy Schubert	const EVP_MD* digest = NULL;
9910eefd307SCy Schubert	int x = HMAC_Init_ex(hmac_ctx, hmac_key, 32, digest, NULL);
9920eefd307SCy Schubert	(void)x;
9930eefd307SCy Schubert])], [
9940eefd307SCy Schubert	AC_MSG_RESULT(int)
9950eefd307SCy Schubert], [
9960eefd307SCy Schubert	AC_MSG_RESULT(void)
9970eefd307SCy Schubert	AC_DEFINE([HMAC_INIT_EX_RETURNS_VOID], 1, [If HMAC_Init_ex() returns void])
9980eefd307SCy Schubert])
9990eefd307SCy Schubertfi
10000eefd307SCy Schubert
10018ed2b524SDag-Erling Smørgravfi
100205ab2901SDag-Erling SmørgravAC_SUBST(SSLLIB)
10038ed2b524SDag-Erling Smørgrav
1004091e9e46SCy Schubert# libbsd
1005f44e67d1SCy SchubertAC_ARG_WITH([libbsd], AS_HELP_STRING([--with-libbsd],[Use portable libbsd functions]), [
1006091e9e46SCy Schubert	AC_CHECK_HEADERS([bsd/string.h bsd/stdlib.h],,, [AC_INCLUDES_DEFAULT])
1007091e9e46SCy Schubert	if test "x$ac_cv_header_bsd_string_h" = xyes -a "x$ac_cv_header_bsd_stdlib_h" = xyes; then
1008091e9e46SCy Schubert		for func in strlcpy strlcat arc4random arc4random_uniform reallocarray; do
1009091e9e46SCy Schubert			AC_SEARCH_LIBS([$func], [bsd], [
1010091e9e46SCy Schubert				AC_DEFINE(HAVE_LIBBSD, 1, [Use portable libbsd functions])
1011091e9e46SCy Schubert				PC_LIBBSD_DEPENDENCY=libbsd
1012091e9e46SCy Schubert				AC_SUBST(PC_LIBBSD_DEPENDENCY)
1013091e9e46SCy Schubert			])
1014091e9e46SCy Schubert		done
1015091e9e46SCy Schubert	fi
1016091e9e46SCy Schubert])
1017b7579f77SDag-Erling Smørgrav
1018f44e67d1SCy SchubertAC_ARG_ENABLE(sha1, AS_HELP_STRING([--disable-sha1],[Disable SHA1 RRSIG support, does not disable nsec3 support]))
101965b390aaSDag-Erling Smørgravcase "$enable_sha1" in
102065b390aaSDag-Erling Smørgrav	no)
102165b390aaSDag-Erling Smørgrav	;;
102265b390aaSDag-Erling Smørgrav	yes|*)
102365b390aaSDag-Erling Smørgrav	AC_DEFINE([USE_SHA1], [1], [Define this to enable SHA1 support.])
102465b390aaSDag-Erling Smørgrav	;;
102565b390aaSDag-Erling Smørgravesac
102665b390aaSDag-Erling Smørgrav
102765b390aaSDag-Erling Smørgrav
1028f44e67d1SCy SchubertAC_ARG_ENABLE(sha2, AS_HELP_STRING([--disable-sha2],[Disable SHA256 and SHA512 RRSIG support]))
1029b7579f77SDag-Erling Smørgravcase "$enable_sha2" in
1030b7579f77SDag-Erling Smørgrav	no)
1031b7579f77SDag-Erling Smørgrav	;;
1032b7579f77SDag-Erling Smørgrav	yes|*)
1033b7579f77SDag-Erling Smørgrav	AC_DEFINE([USE_SHA2], [1], [Define this to enable SHA256 and SHA512 support.])
1034b7579f77SDag-Erling Smørgrav	;;
1035b7579f77SDag-Erling Smørgravesac
1036b7579f77SDag-Erling Smørgrav
1037f44e67d1SCy SchubertAC_ARG_ENABLE(subnet, AS_HELP_STRING([--enable-subnet],[Enable client subnet]))
103865b390aaSDag-Erling Smørgravcase "$enable_subnet" in
103965b390aaSDag-Erling Smørgrav	yes)
104065b390aaSDag-Erling Smørgrav	AC_DEFINE([CLIENT_SUBNET], [1], [Define this to enable client subnet option.])
104165b390aaSDag-Erling Smørgrav	SUBNET_OBJ="edns-subnet.lo subnetmod.lo addrtree.lo subnet-whitelist.lo"
104265b390aaSDag-Erling Smørgrav	AC_SUBST(SUBNET_OBJ)
104365b390aaSDag-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'
104465b390aaSDag-Erling Smørgrav	AC_SUBST(SUBNET_HEADER)
104565b390aaSDag-Erling Smørgrav	;;
104665b390aaSDag-Erling Smørgrav	no|*)
104765b390aaSDag-Erling Smørgrav	;;
104865b390aaSDag-Erling Smørgravesac
104965b390aaSDag-Erling Smørgrav
105024e36522SCy Schubert# check whether gost also works
1051b7579f77SDag-Erling SmørgravAC_DEFUN([AC_CHECK_GOST_WORKS],
1052b7579f77SDag-Erling Smørgrav[AC_REQUIRE([AC_PROG_CC])
1053b7579f77SDag-Erling SmørgravAC_MSG_CHECKING([if GOST works])
1054b7579f77SDag-Erling Smørgravif test c${cross_compiling} = cno; then
1055b7579f77SDag-Erling SmørgravBAKCFLAGS="$CFLAGS"
1056b7579f77SDag-Erling Smørgravif test -n "$ssldir"; then
105724e36522SCy Schubert	CFLAGS="$CFLAGS -Wl,-rpath,$ssldir_lib"
1058b7579f77SDag-Erling Smørgravfi
1059b7579f77SDag-Erling SmørgravAC_RUN_IFELSE([AC_LANG_SOURCE([[
1060b7579f77SDag-Erling Smørgrav#include <string.h>
1061b7579f77SDag-Erling Smørgrav#include <openssl/ssl.h>
1062b7579f77SDag-Erling Smørgrav#include <openssl/evp.h>
1063b7579f77SDag-Erling Smørgrav#include <openssl/engine.h>
1064b7579f77SDag-Erling Smørgrav#include <openssl/conf.h>
106517d15b25SDag-Erling Smørgrav/* routine to load gost (from sldns) */
1066b7579f77SDag-Erling Smørgravint load_gost_id(void)
1067b7579f77SDag-Erling Smørgrav{
1068b7579f77SDag-Erling Smørgrav	static int gost_id = 0;
1069b7579f77SDag-Erling Smørgrav	const EVP_PKEY_ASN1_METHOD* meth;
1070b7579f77SDag-Erling Smørgrav	ENGINE* e;
1071b7579f77SDag-Erling Smørgrav
1072b7579f77SDag-Erling Smørgrav	if(gost_id) return gost_id;
1073b7579f77SDag-Erling Smørgrav
1074b7579f77SDag-Erling Smørgrav	/* see if configuration loaded gost implementation from other engine*/
1075b7579f77SDag-Erling Smørgrav	meth = EVP_PKEY_asn1_find_str(NULL, "gost2001", -1);
1076b7579f77SDag-Erling Smørgrav	if(meth) {
1077b7579f77SDag-Erling Smørgrav		EVP_PKEY_asn1_get0_info(&gost_id, NULL, NULL, NULL, NULL, meth);
1078b7579f77SDag-Erling Smørgrav		return gost_id;
1079b7579f77SDag-Erling Smørgrav	}
1080b7579f77SDag-Erling Smørgrav
1081b7579f77SDag-Erling Smørgrav	/* see if engine can be loaded already */
1082b7579f77SDag-Erling Smørgrav	e = ENGINE_by_id("gost");
1083b7579f77SDag-Erling Smørgrav	if(!e) {
1084b7579f77SDag-Erling Smørgrav		/* load it ourself, in case statically linked */
1085b7579f77SDag-Erling Smørgrav		ENGINE_load_builtin_engines();
1086b7579f77SDag-Erling Smørgrav		ENGINE_load_dynamic();
1087b7579f77SDag-Erling Smørgrav		e = ENGINE_by_id("gost");
1088b7579f77SDag-Erling Smørgrav	}
1089b7579f77SDag-Erling Smørgrav	if(!e) {
1090b7579f77SDag-Erling Smørgrav		/* no gost engine in openssl */
1091b7579f77SDag-Erling Smørgrav		return 0;
1092b7579f77SDag-Erling Smørgrav	}
1093b7579f77SDag-Erling Smørgrav	if(!ENGINE_set_default(e, ENGINE_METHOD_ALL)) {
1094b7579f77SDag-Erling Smørgrav		ENGINE_finish(e);
1095b7579f77SDag-Erling Smørgrav		ENGINE_free(e);
1096b7579f77SDag-Erling Smørgrav		return 0;
1097b7579f77SDag-Erling Smørgrav	}
1098b7579f77SDag-Erling Smørgrav
1099b7579f77SDag-Erling Smørgrav	meth = EVP_PKEY_asn1_find_str(&e, "gost2001", -1);
1100b7579f77SDag-Erling Smørgrav	if(!meth) {
1101b7579f77SDag-Erling Smørgrav		/* algo not found */
1102b7579f77SDag-Erling Smørgrav		ENGINE_finish(e);
1103b7579f77SDag-Erling Smørgrav		ENGINE_free(e);
1104b7579f77SDag-Erling Smørgrav		return 0;
1105b7579f77SDag-Erling Smørgrav	}
1106b7579f77SDag-Erling Smørgrav	EVP_PKEY_asn1_get0_info(&gost_id, NULL, NULL, NULL, NULL, meth);
1107b7579f77SDag-Erling Smørgrav	return gost_id;
1108b7579f77SDag-Erling Smørgrav}
1109b7579f77SDag-Erling Smørgravint main(void) {
1110b7579f77SDag-Erling Smørgrav	EVP_MD_CTX* ctx;
1111b7579f77SDag-Erling Smørgrav	const EVP_MD* md;
1112b7579f77SDag-Erling Smørgrav	unsigned char digest[64]; /* its a 256-bit digest, so uses 32 bytes */
1113b7579f77SDag-Erling Smørgrav	const char* str = "Hello world";
1114b7579f77SDag-Erling Smørgrav	const unsigned char check[] = {
1115b7579f77SDag-Erling Smørgrav		0x40 , 0xed , 0xf8 , 0x56 , 0x5a , 0xc5 , 0x36 , 0xe1 ,
1116b7579f77SDag-Erling Smørgrav		0x33 , 0x7c , 0x7e , 0x87 , 0x62 , 0x1c , 0x42 , 0xe0 ,
1117b7579f77SDag-Erling Smørgrav		0x17 , 0x1b , 0x5e , 0xce , 0xa8 , 0x46 , 0x65 , 0x4d ,
1118b7579f77SDag-Erling Smørgrav		0x8d , 0x3e , 0x22 , 0x9b , 0xe1 , 0x30 , 0x19 , 0x9d
1119b7579f77SDag-Erling Smørgrav	};
1120b7579f77SDag-Erling Smørgrav	OPENSSL_config(NULL);
1121b7579f77SDag-Erling Smørgrav	(void)load_gost_id();
1122b7579f77SDag-Erling Smørgrav	md = EVP_get_digestbyname("md_gost94");
1123b7579f77SDag-Erling Smørgrav	if(!md) return 1;
1124b7579f77SDag-Erling Smørgrav	memset(digest, 0, sizeof(digest));
1125b7579f77SDag-Erling Smørgrav	ctx = EVP_MD_CTX_create();
1126b7579f77SDag-Erling Smørgrav	if(!ctx) return 2;
1127b7579f77SDag-Erling Smørgrav	if(!EVP_DigestInit_ex(ctx, md, NULL)) return 3;
1128b7579f77SDag-Erling Smørgrav	if(!EVP_DigestUpdate(ctx, str, 10)) return 4;
1129b7579f77SDag-Erling Smørgrav	if(!EVP_DigestFinal_ex(ctx, digest, NULL)) return 5;
1130b7579f77SDag-Erling Smørgrav	/* uncomment to see the hash calculated.
1131b7579f77SDag-Erling Smørgrav		{int i;
1132b7579f77SDag-Erling Smørgrav		for(i=0; i<32; i++)
1133b7579f77SDag-Erling Smørgrav			printf(" %2.2x", (int)digest[i]);
1134b7579f77SDag-Erling Smørgrav		printf("\n");}
1135b7579f77SDag-Erling Smørgrav	*/
1136b7579f77SDag-Erling Smørgrav	if(memcmp(digest, check, sizeof(check)) != 0)
1137b7579f77SDag-Erling Smørgrav		return 6;
1138b7579f77SDag-Erling Smørgrav	return 0;
1139b7579f77SDag-Erling Smørgrav}
1140b7579f77SDag-Erling Smørgrav]])] , [eval "ac_cv_c_gost_works=yes"], [eval "ac_cv_c_gost_works=no"])
1141b7579f77SDag-Erling SmørgravCFLAGS="$BAKCFLAGS"
1142b7579f77SDag-Erling Smørgravelse
1143b7579f77SDag-Erling Smørgraveval "ac_cv_c_gost_works=maybe"
1144b7579f77SDag-Erling Smørgravfi
1145b7579f77SDag-Erling SmørgravAC_MSG_RESULT($ac_cv_c_gost_works)
1146b7579f77SDag-Erling Smørgrav])dnl
1147b7579f77SDag-Erling Smørgrav
1148f44e67d1SCy SchubertAC_ARG_ENABLE(gost, AS_HELP_STRING([--disable-gost],[Disable GOST support]))
1149b7579f77SDag-Erling Smørgravuse_gost="no"
115005ab2901SDag-Erling Smørgravif test $USE_NSS = "no" -a $USE_NETTLE = "no"; then
1151b7579f77SDag-Erling Smørgravcase "$enable_gost" in
1152b7579f77SDag-Erling Smørgrav	no)
1153b7579f77SDag-Erling Smørgrav	;;
1154b7579f77SDag-Erling Smørgrav	*)
1155b7579f77SDag-Erling Smørgrav	AC_CHECK_FUNC(EVP_PKEY_set_type_str, [:],[AC_MSG_ERROR([OpenSSL 1.0.0 is needed for GOST support])])
1156b7579f77SDag-Erling Smørgrav	AC_CHECK_FUNC(EC_KEY_new, [], [AC_MSG_ERROR([OpenSSL does not support ECC, needed for GOST support])])
1157b7579f77SDag-Erling Smørgrav	AC_CHECK_GOST_WORKS
11588ed2b524SDag-Erling Smørgrav	if test "$ac_cv_c_gost_works" != no; then
1159b7579f77SDag-Erling Smørgrav		use_gost="yes"
1160b7579f77SDag-Erling Smørgrav		AC_DEFINE([USE_GOST], [1], [Define this to enable GOST support.])
1161b7579f77SDag-Erling Smørgrav	fi
1162b7579f77SDag-Erling Smørgrav	;;
1163b7579f77SDag-Erling Smørgravesac
116405ab2901SDag-Erling Smørgravfi dnl !USE_NSS && !USE_NETTLE
1165b7579f77SDag-Erling Smørgrav
1166f44e67d1SCy SchubertAC_ARG_ENABLE(ecdsa, AS_HELP_STRING([--disable-ecdsa],[Disable ECDSA support]))
1167b7579f77SDag-Erling Smørgravuse_ecdsa="no"
1168b7579f77SDag-Erling Smørgravcase "$enable_ecdsa" in
1169b7579f77SDag-Erling Smørgrav    no)
1170b7579f77SDag-Erling Smørgrav      ;;
1171b7579f77SDag-Erling Smørgrav    *)
117205ab2901SDag-Erling Smørgrav      if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then
1173b7579f77SDag-Erling Smørgrav	      AC_CHECK_FUNC(ECDSA_sign, [], [AC_MSG_ERROR([OpenSSL does not support ECDSA: please upgrade or rerun with --disable-ecdsa])])
1174b7579f77SDag-Erling Smørgrav	      AC_CHECK_FUNC(SHA384_Init, [], [AC_MSG_ERROR([OpenSSL does not support SHA384: please upgrade or rerun with --disable-ecdsa])])
1175b7579f77SDag-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
1176b7579f77SDag-Erling Smørgrav#include <openssl/evp.h>
1177b7579f77SDag-Erling Smørgrav	      ])
1178b7579f77SDag-Erling Smørgrav	      # see if OPENSSL 1.0.0 or later (has EVP MD and Verify independency)
1179b7579f77SDag-Erling Smørgrav	      AC_MSG_CHECKING([if openssl supports SHA2 and ECDSA with EVP])
118024e36522SCy Schubert	      if grep OPENSSL_VERSION_TEXT $ssldir_include/openssl/opensslv.h | grep "OpenSSL" >/dev/null; then
118124e36522SCy Schubert		if grep OPENSSL_VERSION_NUMBER $ssldir_include/openssl/opensslv.h | grep 0x0 >/dev/null; then
1182b7579f77SDag-Erling Smørgrav		  AC_MSG_RESULT([no])
1183b7579f77SDag-Erling Smørgrav		  AC_DEFINE_UNQUOTED([USE_ECDSA_EVP_WORKAROUND], [1], [Define this to enable an EVP workaround for older openssl])
1184b7579f77SDag-Erling Smørgrav		else
1185b7579f77SDag-Erling Smørgrav		  AC_MSG_RESULT([yes])
1186b7579f77SDag-Erling Smørgrav		fi
1187ff825849SDag-Erling Smørgrav	      else
1188ff825849SDag-Erling Smørgrav		# not OpenSSL, thus likely LibreSSL, which supports it
1189ff825849SDag-Erling Smørgrav		AC_MSG_RESULT([yes])
1190ff825849SDag-Erling Smørgrav	      fi
11918ed2b524SDag-Erling Smørgrav      fi
1192b7579f77SDag-Erling Smørgrav      # we now know we have ECDSA and the required curves.
1193b7579f77SDag-Erling Smørgrav      AC_DEFINE_UNQUOTED([USE_ECDSA], [1], [Define this to enable ECDSA support.])
1194b7579f77SDag-Erling Smørgrav      use_ecdsa="yes"
1195b7579f77SDag-Erling Smørgrav      ;;
1196b7579f77SDag-Erling Smørgravesac
1197b7579f77SDag-Erling Smørgrav
1198f44e67d1SCy SchubertAC_ARG_ENABLE(dsa, AS_HELP_STRING([--disable-dsa],[Disable DSA support]))
1199e2d15004SDag-Erling Smørgravuse_dsa="no"
1200bc892140SDag-Erling Smørgravcase "$enable_dsa" in
1201091e9e46SCy Schubert    yes)
1202e2d15004SDag-Erling Smørgrav      # detect if DSA is supported, and turn it off if not.
1203971980c3SDag-Erling Smørgrav      if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then
1204bc892140SDag-Erling Smørgrav      AC_CHECK_FUNC(DSA_SIG_new, [
120557bddd21SDag-Erling Smørgrav      AC_CHECK_TYPE(DSA_SIG*, [
1206e2d15004SDag-Erling Smørgrav      AC_DEFINE_UNQUOTED([USE_DSA], [1], [Define this to enable DSA support.])
1207e2d15004SDag-Erling Smørgrav      ], [if test "x$enable_dsa" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support DSA and you used --enable-dsa.])
120857bddd21SDag-Erling Smørgrav               fi ], [
120957bddd21SDag-Erling SmørgravAC_INCLUDES_DEFAULT
121057bddd21SDag-Erling Smørgrav#ifdef HAVE_OPENSSL_ERR_H
121157bddd21SDag-Erling Smørgrav#include <openssl/err.h>
121257bddd21SDag-Erling Smørgrav#endif
121357bddd21SDag-Erling Smørgrav
121457bddd21SDag-Erling Smørgrav#ifdef HAVE_OPENSSL_RAND_H
121557bddd21SDag-Erling Smørgrav#include <openssl/rand.h>
121657bddd21SDag-Erling Smørgrav#endif
121757bddd21SDag-Erling Smørgrav
121857bddd21SDag-Erling Smørgrav#ifdef HAVE_OPENSSL_CONF_H
121957bddd21SDag-Erling Smørgrav#include <openssl/conf.h>
122057bddd21SDag-Erling Smørgrav#endif
122157bddd21SDag-Erling Smørgrav
122257bddd21SDag-Erling Smørgrav#ifdef HAVE_OPENSSL_ENGINE_H
122357bddd21SDag-Erling Smørgrav#include <openssl/engine.h>
122457bddd21SDag-Erling Smørgrav#endif
122557bddd21SDag-Erling Smørgrav      ])
122657bddd21SDag-Erling Smørgrav      ], [if test "x$enable_dsa" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support DSA and you used --enable-dsa.])
1227e2d15004SDag-Erling Smørgrav               fi ])
1228971980c3SDag-Erling Smørgrav      else
1229971980c3SDag-Erling Smørgrav      AC_DEFINE_UNQUOTED([USE_DSA], [1], [Define this to enable DSA support.])
1230971980c3SDag-Erling Smørgrav      fi
1231e2d15004SDag-Erling Smørgrav      ;;
1232091e9e46SCy Schubert    *)
1233091e9e46SCy Schubert      # disable dsa by default, RFC 8624 section 3.1, validators MUST NOT
1234091e9e46SCy Schubert      # support DSA for DNSSEC Validation.
1235091e9e46SCy Schubert      ;;
1236e2d15004SDag-Erling Smørgravesac
1237e2d15004SDag-Erling Smørgrav
12385469a995SCy 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]))
12395469a995SCy Schubertif test "$with_deprecate_rsa_1024" = "yes"; then
12405469a995SCy Schubert	AC_DEFINE([DEPRECATE_RSA_1024], [1], [Deprecate RSA 1024 bit length, makes that an unsupported key])
12415469a995SCy Schubertfi
12425469a995SCy Schubert
1243f44e67d1SCy SchubertAC_ARG_ENABLE(ed25519, AS_HELP_STRING([--disable-ed25519],[Disable ED25519 support]))
1244c7f4d7adSDag-Erling Smørgravuse_ed25519="no"
1245c7f4d7adSDag-Erling Smørgravcase "$enable_ed25519" in
1246c7f4d7adSDag-Erling Smørgrav    no)
1247c7f4d7adSDag-Erling Smørgrav      ;;
1248c7f4d7adSDag-Erling Smørgrav    *)
1249c7f4d7adSDag-Erling Smørgrav      if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then
1250c7f4d7adSDag-Erling Smørgrav	      AC_CHECK_DECLS([NID_ED25519], [
1251c7f4d7adSDag-Erling Smørgrav      		use_ed25519="yes"
1252c7f4d7adSDag-Erling Smørgrav	      ], [ if test "x$enable_ed25519" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support ED25519 and you used --enable-ed25519.])
1253c7f4d7adSDag-Erling Smørgrav	      	fi ], [AC_INCLUDES_DEFAULT
1254c7f4d7adSDag-Erling Smørgrav#include <openssl/evp.h>
1255c7f4d7adSDag-Erling Smørgrav	      ])
1256c7f4d7adSDag-Erling Smørgrav      fi
1257971980c3SDag-Erling Smørgrav      if test $USE_NETTLE = "yes"; then
1258971980c3SDag-Erling Smørgrav		AC_CHECK_HEADERS([nettle/eddsa.h], use_ed25519="yes",, [AC_INCLUDES_DEFAULT])
1259971980c3SDag-Erling Smørgrav      fi
1260971980c3SDag-Erling Smørgrav      if test $use_ed25519 = "yes"; then
1261971980c3SDag-Erling Smørgrav      		AC_DEFINE_UNQUOTED([USE_ED25519], [1], [Define this to enable ED25519 support.])
1262971980c3SDag-Erling Smørgrav      fi
1263c7f4d7adSDag-Erling Smørgrav      ;;
1264c7f4d7adSDag-Erling Smørgravesac
1265e2d15004SDag-Erling Smørgrav
1266f44e67d1SCy SchubertAC_ARG_ENABLE(ed448, AS_HELP_STRING([--disable-ed448],[Disable ED448 support]))
12670fb34990SDag-Erling Smørgravuse_ed448="no"
12680fb34990SDag-Erling Smørgravcase "$enable_ed448" in
12690fb34990SDag-Erling Smørgrav    no)
12700fb34990SDag-Erling Smørgrav      ;;
12710fb34990SDag-Erling Smørgrav    *)
12720fb34990SDag-Erling Smørgrav      if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then
12730fb34990SDag-Erling Smørgrav	      AC_CHECK_DECLS([NID_ED448], [
12740fb34990SDag-Erling Smørgrav      		use_ed448="yes"
12750fb34990SDag-Erling Smørgrav	      ], [ if test "x$enable_ed448" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support ED448 and you used --enable-ed448.])
12760fb34990SDag-Erling Smørgrav	      	fi ], [AC_INCLUDES_DEFAULT
12770fb34990SDag-Erling Smørgrav#include <openssl/evp.h>
12780fb34990SDag-Erling Smørgrav	      ])
12790fb34990SDag-Erling Smørgrav      fi
12800fb34990SDag-Erling Smørgrav      if test $use_ed448 = "yes"; then
12810fb34990SDag-Erling Smørgrav      		AC_DEFINE_UNQUOTED([USE_ED448], [1], [Define this to enable ED448 support.])
12820fb34990SDag-Erling Smørgrav      fi
12830fb34990SDag-Erling Smørgrav      ;;
12840fb34990SDag-Erling Smørgravesac
12850fb34990SDag-Erling Smørgrav
1286f44e67d1SCy SchubertAC_ARG_ENABLE(event-api, AS_HELP_STRING([--enable-event-api],[Enable (experimental) pluggable event base libunbound API installed to unbound-event.h]))
128717d15b25SDag-Erling Smørgravcase "$enable_event_api" in
128817d15b25SDag-Erling Smørgrav    yes)
1289e2d15004SDag-Erling Smørgrav      AC_SUBST(UNBOUND_EVENT_INSTALL, [unbound-event-install])
1290e2d15004SDag-Erling Smørgrav      AC_SUBST(UNBOUND_EVENT_UNINSTALL, [unbound-event-uninstall])
129117d15b25SDag-Erling Smørgrav      ;;
129217d15b25SDag-Erling Smørgrav    *)
129317d15b25SDag-Erling Smørgrav      ;;
129417d15b25SDag-Erling Smørgravesac
129517d15b25SDag-Erling Smørgrav
1296f44e67d1SCy SchubertAC_ARG_ENABLE(tfo-client, AS_HELP_STRING([--enable-tfo-client],[Enable TCP Fast Open for client mode]))
1297b5663de9SDag-Erling Smørgravcase "$enable_tfo_client" in
1298b5663de9SDag-Erling Smørgrav	yes)
12995469a995SCy Schubert		case "$host_os" in
13005469a995SCy 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])],
1301b5663de9SDag-Erling Smørgrav				[AC_MSG_ERROR([TCP Fast Open is not available for client mode: please rerun without --enable-tfo-client])],
1302b5663de9SDag-Erling Smørgrav				[AC_INCLUDES_DEFAULT
1303b5663de9SDag-Erling Smørgrav#include <netinet/tcp.h>
1304b5663de9SDag-Erling Smørgrav])
1305b5663de9SDag-Erling Smørgrav				AC_DEFINE_UNQUOTED([USE_MSG_FASTOPEN], [1], [Define this to enable client TCP Fast Open.])
1306b5663de9SDag-Erling Smørgrav				;;
13075469a995SCy 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])],
1308b5663de9SDag-Erling Smørgrav				[AC_MSG_ERROR([TCP Fast Open is not available for client mode: please rerun without --enable-tfo-client])],
1309b5663de9SDag-Erling Smørgrav				[AC_INCLUDES_DEFAULT
1310b5663de9SDag-Erling Smørgrav#include <sys/socket.h>
1311b5663de9SDag-Erling Smørgrav])
1312b5663de9SDag-Erling Smørgrav				AC_DEFINE_UNQUOTED([USE_OSX_MSG_FASTOPEN], [1], [Define this to enable client TCP Fast Open.])
1313b5663de9SDag-Erling Smørgrav				;;
1314b5663de9SDag-Erling Smørgrav		esac
1315b5663de9SDag-Erling Smørgrav		;;
1316b5663de9SDag-Erling Smørgrav	no|*)
1317b5663de9SDag-Erling Smørgrav		;;
1318b5663de9SDag-Erling Smørgravesac
1319b5663de9SDag-Erling Smørgrav
1320f44e67d1SCy SchubertAC_ARG_ENABLE(tfo-server, AS_HELP_STRING([--enable-tfo-server],[Enable TCP Fast Open for server mode]))
1321b5663de9SDag-Erling Smørgravcase "$enable_tfo_server" in
1322b5663de9SDag-Erling Smørgrav	yes)
1323b5663de9SDag-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
1324b5663de9SDag-Erling Smørgrav#include <netinet/tcp.h>
1325b5663de9SDag-Erling Smørgrav	      ])
1326b5663de9SDag-Erling Smørgrav		AC_DEFINE_UNQUOTED([USE_TCP_FASTOPEN], [1], [Define this to enable server TCP Fast Open.])
1327b5663de9SDag-Erling Smørgrav		;;
1328b5663de9SDag-Erling Smørgrav	no|*)
1329b5663de9SDag-Erling Smørgrav		;;
1330b5663de9SDag-Erling Smørgravesac
1331b5663de9SDag-Erling Smørgrav
1332b7579f77SDag-Erling Smørgrav# check for libevent
1333f44e67d1SCy 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.]),
133425039b37SCy Schubert    [ ],[ with_libevent="no" ])
133525039b37SCy Schubertif test "x_$with_libevent" != x_no; then
133625039b37SCy Schubert        AC_DEFINE([USE_LIBEVENT], [1], [Define if you enable libevent])
1337b7579f77SDag-Erling Smørgrav        AC_MSG_CHECKING(for libevent)
133825039b37SCy Schubert        if test "x_$with_libevent" = x_ -o "x_$with_libevent" = x_yes; then
133925039b37SCy Schubert            with_libevent="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
1340b7579f77SDag-Erling Smørgrav        fi
134125039b37SCy Schubert        for dir in $with_libevent; do
1342b7579f77SDag-Erling Smørgrav            thedir="$dir"
134317d15b25SDag-Erling Smørgrav            if test -f "$dir/include/event.h" -o -f "$dir/include/event2/event.h"; then
1344b7579f77SDag-Erling Smørgrav                found_libevent="yes"
1345b7579f77SDag-Erling Smørgrav				dnl assume /usr is in default path.
1346b7579f77SDag-Erling Smørgrav				if test "$thedir" != "/usr"; then
1347b7579f77SDag-Erling Smørgrav				    CPPFLAGS="$CPPFLAGS -I$thedir/include"
1348b7579f77SDag-Erling Smørgrav				fi
1349b7579f77SDag-Erling Smørgrav				break;
1350b7579f77SDag-Erling Smørgrav		    fi
1351b7579f77SDag-Erling Smørgrav        done
1352b7579f77SDag-Erling Smørgrav        if test x_$found_libevent != x_yes; then
1353b7579f77SDag-Erling Smørgrav		if test -f "$dir/event.h" -a \( -f "$dir/libevent.la" -o -f "$dir/libev.la" \) ; then
1354b7579f77SDag-Erling Smørgrav			# libevent source directory
1355b7579f77SDag-Erling Smørgrav			AC_MSG_RESULT(found in $thedir)
1356b7579f77SDag-Erling Smørgrav			CPPFLAGS="$CPPFLAGS -I$thedir -I$thedir/include"
1357b7579f77SDag-Erling Smørgrav			BAK_LDFLAGS_SET="1"
1358b7579f77SDag-Erling Smørgrav			BAK_LDFLAGS="$LDFLAGS"
1359b7579f77SDag-Erling Smørgrav			# remove evdns from linking
1360b7579f77SDag-Erling Smørgrav			mkdir build >/dev/null 2>&1
1361b7579f77SDag-Erling Smørgrav			mkdir build/libevent >/dev/null 2>&1
1362b7579f77SDag-Erling Smørgrav			mkdir build/libevent/.libs >/dev/null 2>&1
1363b7579f77SDag-Erling Smørgrav			ev_files_o=`ls $thedir/*.o | grep -v evdns\.o | grep -v bufferevent_openssl\.o`
1364b7579f77SDag-Erling Smørgrav			ev_files_lo=`ls $thedir/*.lo | grep -v evdns\.lo | grep -v bufferevent_openssl\.lo`
1365b7579f77SDag-Erling Smørgrav			ev_files_libso=`ls $thedir/.libs/*.o | grep -v evdns\.o | grep -v bufferevent_openssl\.o`
1366b7579f77SDag-Erling Smørgrav			cp $ev_files_o build/libevent
1367b7579f77SDag-Erling Smørgrav			cp $ev_files_lo build/libevent
1368b7579f77SDag-Erling Smørgrav			cp $ev_files_libso build/libevent/.libs
1369b7579f77SDag-Erling Smørgrav			LATE_LDFLAGS="build/libevent/*.lo -lm"
1370b7579f77SDag-Erling Smørgrav			LDFLAGS="build/libevent/*.o $LDFLAGS -lm"
1371b7579f77SDag-Erling Smørgrav		else
137225039b37SCy Schubert            AC_MSG_ERROR([Cannot find the libevent library in $with_libevent
1373b7579f77SDag-Erling SmørgravYou can restart ./configure --with-libevent=no to use a builtin alternative.
1374b7579f77SDag-Erling SmørgravPlease note that this alternative is not as capable as libevent when using
1375b7579f77SDag-Erling Smørgravlarge outgoing port ranges.  ])
1376b7579f77SDag-Erling Smørgrav		fi
1377b7579f77SDag-Erling Smørgrav        else
1378b7579f77SDag-Erling Smørgrav            AC_MSG_RESULT(found in $thedir)
137917d15b25SDag-Erling Smørgrav	    dnl if event2 exists and no event lib in dir itself, use subdir
138017d15b25SDag-Erling Smørgrav	    if test ! -f $thedir/lib/libevent.a -a ! -f $thedir/lib/libevent.so -a -d "$thedir/lib/event2"; then
138117d15b25SDag-Erling Smørgrav		    LDFLAGS="$LDFLAGS -L$thedir/lib/event2"
138217d15b25SDag-Erling Smørgrav		    ACX_RUNTIME_PATH_ADD([$thedir/lib/event2])
138317d15b25SDag-Erling Smørgrav	    else
1384b7579f77SDag-Erling Smørgrav		    dnl assume /usr is in default path, do not add "".
1385b7579f77SDag-Erling Smørgrav		    if test "$thedir" != "/usr" -a "$thedir" != ""; then
1386b7579f77SDag-Erling Smørgrav			LDFLAGS="$LDFLAGS -L$thedir/lib"
1387b7579f77SDag-Erling Smørgrav			ACX_RUNTIME_PATH_ADD([$thedir/lib])
1388b7579f77SDag-Erling Smørgrav		    fi
1389b7579f77SDag-Erling Smørgrav	    fi
139017d15b25SDag-Erling Smørgrav        fi
1391b7579f77SDag-Erling Smørgrav	# check for library used by libevent after 1.3c
1392b7579f77SDag-Erling Smørgrav	AC_SEARCH_LIBS([clock_gettime], [rt])
1393b7579f77SDag-Erling Smørgrav
1394b7579f77SDag-Erling Smørgrav	# is the event.h header libev or libevent?
1395b7579f77SDag-Erling Smørgrav	AC_CHECK_HEADERS([event.h],,, [AC_INCLUDES_DEFAULT])
1396b7579f77SDag-Erling Smørgrav	AC_CHECK_DECL(EV_VERSION_MAJOR, [
1397b7579f77SDag-Erling Smørgrav		AC_SEARCH_LIBS(event_set, [ev])
1398b7579f77SDag-Erling Smørgrav	],[
1399b7579f77SDag-Erling Smørgrav		AC_SEARCH_LIBS(event_set, [event])
1400b7579f77SDag-Erling Smørgrav	],[AC_INCLUDES_DEFAULT
1401b7579f77SDag-Erling Smørgrav#include <event.h>
1402b7579f77SDag-Erling Smørgrav	])
1403b7579f77SDag-Erling Smørgrav	AC_CHECK_FUNCS([event_base_free]) # only in libevent 1.2 and later
1404b7579f77SDag-Erling Smørgrav	AC_CHECK_FUNCS([event_base_once]) # only in libevent 1.4.1 and later
1405b7579f77SDag-Erling Smørgrav	AC_CHECK_FUNCS([event_base_new]) # only in libevent 1.4.1 and later
1406b7579f77SDag-Erling Smørgrav	AC_CHECK_FUNCS([event_base_get_method]) # only in libevent 1.4.3 and later
1407b7579f77SDag-Erling Smørgrav	AC_CHECK_FUNCS([ev_loop]) # only in libev. (tested on 3.51)
1408b7579f77SDag-Erling Smørgrav	AC_CHECK_FUNCS([ev_default_loop]) # only in libev. (tested on 4.00)
1409e86b9096SDag-Erling Smørgrav	AC_CHECK_FUNCS([event_assign]) # in libevent, for thread-safety
1410e86b9096SDag-Erling Smørgrav	AC_CHECK_DECLS([evsignal_assign], [], [], [AC_INCLUDES_DEFAULT
1411e86b9096SDag-Erling Smørgrav#ifdef HAVE_EVENT_H
1412e86b9096SDag-Erling Smørgrav#  include <event.h>
1413e86b9096SDag-Erling Smørgrav#else
1414e86b9096SDag-Erling Smørgrav#  include "event2/event.h"
1415e86b9096SDag-Erling Smørgrav#endif
1416e86b9096SDag-Erling Smørgrav	])
1417bc892140SDag-Erling Smørgrav        PC_LIBEVENT_DEPENDENCY="libevent"
1418bc892140SDag-Erling Smørgrav        AC_SUBST(PC_LIBEVENT_DEPENDENCY)
1419b7579f77SDag-Erling Smørgrav	if test -n "$BAK_LDFLAGS_SET"; then
1420b7579f77SDag-Erling Smørgrav		LDFLAGS="$BAK_LDFLAGS"
1421b7579f77SDag-Erling Smørgrav	fi
1422b7579f77SDag-Erling Smørgravelse
1423b7579f77SDag-Erling Smørgrav	AC_DEFINE(USE_MINI_EVENT, 1, [Define if you want to use internal select based events])
1424b7579f77SDag-Erling Smørgravfi
1425b7579f77SDag-Erling Smørgrav
1426b7579f77SDag-Erling Smørgrav# check for libexpat
1427f44e67d1SCy SchubertAC_ARG_WITH(libexpat, AS_HELP_STRING([--with-libexpat=path],[specify explicit path for libexpat.]),
1428b7579f77SDag-Erling Smørgrav    [ ],[ withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" ])
1429b7579f77SDag-Erling SmørgravAC_MSG_CHECKING(for libexpat)
1430b7579f77SDag-Erling Smørgravfound_libexpat="no"
1431b7579f77SDag-Erling Smørgravfor dir in $withval ; do
1432b7579f77SDag-Erling Smørgrav            if test -f "$dir/include/expat.h"; then
1433b7579f77SDag-Erling Smørgrav		found_libexpat="yes"
1434b7579f77SDag-Erling Smørgrav		dnl assume /usr is in default path.
1435b7579f77SDag-Erling Smørgrav		if test "$dir" != "/usr"; then
1436b7579f77SDag-Erling Smørgrav                    CPPFLAGS="$CPPFLAGS -I$dir/include"
1437b7579f77SDag-Erling Smørgrav		    LDFLAGS="$LDFLAGS -L$dir/lib"
1438b7579f77SDag-Erling Smørgrav		fi
1439b7579f77SDag-Erling Smørgrav            	AC_MSG_RESULT(found in $dir)
1440b7579f77SDag-Erling Smørgrav                break;
1441b7579f77SDag-Erling Smørgrav            fi
1442b7579f77SDag-Erling Smørgravdone
1443b7579f77SDag-Erling Smørgravif test x_$found_libexpat != x_yes; then
1444f44e67d1SCy Schubert	AC_MSG_ERROR([Could not find libexpat, expat.h])
1445b7579f77SDag-Erling Smørgravfi
1446b7579f77SDag-Erling SmørgravAC_CHECK_HEADERS([expat.h],,, [AC_INCLUDES_DEFAULT])
144705ab2901SDag-Erling SmørgravAC_CHECK_DECLS([XML_StopParser], [], [], [AC_INCLUDES_DEFAULT
144805ab2901SDag-Erling Smørgrav#include <expat.h>
144905ab2901SDag-Erling Smørgrav])
1450b7579f77SDag-Erling Smørgrav
14510fb34990SDag-Erling Smørgrav# hiredis (redis C client for cachedb)
1452f44e67d1SCy SchubertAC_ARG_WITH(libhiredis, AS_HELP_STRING([--with-libhiredis=path],[specify explicit path for libhiredis.]),
14530fb34990SDag-Erling Smørgrav    [ ],[ withval="no" ])
14540fb34990SDag-Erling Smørgravfound_libhiredis="no"
14550fb34990SDag-Erling Smørgravif test x_$withval = x_yes -o x_$withval != x_no; then
14564c75e3aaSDag-Erling Smørgrav   AC_MSG_CHECKING(for libhiredis)
14570fb34990SDag-Erling Smørgrav   if test x_$withval = x_ -o x_$withval = x_yes; then
14580fb34990SDag-Erling Smørgrav            withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
14590fb34990SDag-Erling Smørgrav   fi
14600fb34990SDag-Erling Smørgrav   for dir in $withval ; do
14610fb34990SDag-Erling Smørgrav            if test -f "$dir/include/hiredis/hiredis.h"; then
14620fb34990SDag-Erling Smørgrav		found_libhiredis="yes"
14630fb34990SDag-Erling Smørgrav		dnl assume /usr is in default path.
14640fb34990SDag-Erling Smørgrav		if test "$dir" != "/usr"; then
14650fb34990SDag-Erling Smørgrav                    CPPFLAGS="$CPPFLAGS -I$dir/include"
14660fb34990SDag-Erling Smørgrav		    LDFLAGS="$LDFLAGS -L$dir/lib"
14670fb34990SDag-Erling Smørgrav		fi
14680fb34990SDag-Erling Smørgrav		AC_MSG_RESULT(found in $dir)
14690fb34990SDag-Erling Smørgrav		AC_DEFINE([USE_REDIS], [1], [Define this to use hiredis client.])
14700fb34990SDag-Erling Smørgrav		LIBS="$LIBS -lhiredis"
14710fb34990SDag-Erling Smørgrav                break;
14720fb34990SDag-Erling Smørgrav            fi
14730fb34990SDag-Erling Smørgrav    done
14740fb34990SDag-Erling Smørgrav    if test x_$found_libhiredis != x_yes; then
1475f44e67d1SCy Schubert	AC_MSG_ERROR([Could not find libhiredis, hiredis.h])
14760fb34990SDag-Erling Smørgrav    fi
14770fb34990SDag-Erling Smørgrav    AC_CHECK_HEADERS([hiredis/hiredis.h],,, [AC_INCLUDES_DEFAULT])
14780fb34990SDag-Erling Smørgrav    AC_CHECK_DECLS([redisConnect], [], [], [AC_INCLUDES_DEFAULT
14790fb34990SDag-Erling Smørgrav    #include <hiredis/hiredis.h>
14800fb34990SDag-Erling Smørgrav    ])
14810fb34990SDag-Erling Smørgravfi
14820fb34990SDag-Erling Smørgrav
1483c0caa2e2SCy Schubert# nghttp2
1484f44e67d1SCy SchubertAC_ARG_WITH(libnghttp2, AS_HELP_STRING([--with-libnghttp2=path],[specify explicit path for libnghttp2.]),
1485c0caa2e2SCy Schubert    [ ],[ withval="no" ])
1486c0caa2e2SCy Schubertfound_libnghttp2="no"
1487c0caa2e2SCy Schubertif test x_$withval = x_yes -o x_$withval != x_no; then
1488c0caa2e2SCy Schubert   AC_MSG_CHECKING(for libnghttp2)
1489c0caa2e2SCy Schubert   if test x_$withval = x_ -o x_$withval = x_yes; then
1490c0caa2e2SCy Schubert            withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
1491c0caa2e2SCy Schubert   fi
1492c0caa2e2SCy Schubert   for dir in $withval ; do
1493c0caa2e2SCy Schubert            if test -f "$dir/include/nghttp2/nghttp2.h"; then
1494c0caa2e2SCy Schubert		found_libnghttp2="yes"
1495c0caa2e2SCy Schubert		dnl assume /usr is in default path.
1496c0caa2e2SCy Schubert		if test "$dir" != "/usr"; then
1497c0caa2e2SCy Schubert                    CPPFLAGS="$CPPFLAGS -I$dir/include"
1498c0caa2e2SCy Schubert		    LDFLAGS="$LDFLAGS -L$dir/lib"
1499c0caa2e2SCy Schubert		fi
1500c0caa2e2SCy Schubert		AC_MSG_RESULT(found in $dir)
1501c0caa2e2SCy Schubert		AC_DEFINE([HAVE_NGHTTP2], [1], [Define this to use nghttp2 client.])
1502c0caa2e2SCy Schubert		LIBS="$LIBS -lnghttp2"
1503c0caa2e2SCy Schubert                break;
1504c0caa2e2SCy Schubert            fi
1505c0caa2e2SCy Schubert    done
1506c0caa2e2SCy Schubert    if test x_$found_libnghttp2 != x_yes; then
1507f44e67d1SCy Schubert	AC_MSG_ERROR([Could not find libnghttp2, nghttp2.h])
1508c0caa2e2SCy Schubert    fi
1509c0caa2e2SCy Schubert    AC_CHECK_HEADERS([nghttp2/nghttp2.h],,, [AC_INCLUDES_DEFAULT])
1510c0caa2e2SCy Schubert    AC_CHECK_DECLS([nghttp2_session_server_new], [], [], [AC_INCLUDES_DEFAULT
1511c0caa2e2SCy Schubert    #include <nghttp2/nghttp2.h>
1512c0caa2e2SCy Schubert    ])
1513c0caa2e2SCy Schubertfi
1514c0caa2e2SCy Schubert
15150eefd307SCy Schubert# set static linking for uninstalled libraries if requested
1516b7579f77SDag-Erling SmørgravAC_SUBST(staticexe)
1517b7579f77SDag-Erling Smørgravstaticexe=""
1518f44e67d1SCy SchubertAC_ARG_ENABLE(static-exe, AS_HELP_STRING([--enable-static-exe],[ enable to compile executables statically against (event) uninstalled libs, for debug purposes ]),
1519b7579f77SDag-Erling Smørgrav	, )
1520b7579f77SDag-Erling Smørgravif test x_$enable_static_exe = x_yes; then
1521b7579f77SDag-Erling Smørgrav	staticexe="-static"
1522b7579f77SDag-Erling Smørgrav	if test "$on_mingw" = yes; then
1523b7579f77SDag-Erling Smørgrav		staticexe="-all-static"
1524b5663de9SDag-Erling Smørgrav		# for static compile, include gdi32 and zlib here.
1525971980c3SDag-Erling Smørgrav		if echo $LIBS | grep 'lgdi32' >/dev/null; then
1526971980c3SDag-Erling Smørgrav			:
1527971980c3SDag-Erling Smørgrav		else
1528971980c3SDag-Erling Smørgrav			LIBS="$LIBS -lgdi32"
1529971980c3SDag-Erling Smørgrav		fi
15300a92a9fcSCy Schubert		AC_CHECK_LIB([z], [compress], [ LIBS="$LIBS -lz" ])
1531f44e67d1SCy Schubert		LIBS="$LIBS -l:libssp.a"
1532b7579f77SDag-Erling Smørgrav	fi
1533b7579f77SDag-Erling Smørgravfi
1534b7579f77SDag-Erling Smørgrav
15350eefd307SCy Schubert# set full static linking if requested
1536f44e67d1SCy SchubertAC_ARG_ENABLE(fully-static, AS_HELP_STRING([--enable-fully-static],[ enable to compile fully static ]),
15370eefd307SCy Schubert	, )
15380eefd307SCy Schubertif test x_$enable_fully_static = x_yes; then
15390eefd307SCy Schubert	staticexe="-all-static"
15400eefd307SCy Schubert	if test "$on_mingw" = yes; then
15410eefd307SCy Schubert		# for static compile, include gdi32 and zlib here.
15420eefd307SCy Schubert		if echo $LIBS | grep 'lgdi32' >/dev/null; then
15430eefd307SCy Schubert			:
15440eefd307SCy Schubert		else
15450eefd307SCy Schubert			LIBS="$LIBS -lgdi32"
15460eefd307SCy Schubert		fi
15470a92a9fcSCy Schubert		AC_CHECK_LIB([z], [compress], [ LIBS="$LIBS -lz" ])
1548f44e67d1SCy Schubert		LIBS="$LIBS -l:libssp.a"
15490eefd307SCy Schubert	fi
15500eefd307SCy Schubertfi
15513005e0a3SDag-Erling Smørgrav
1552b7579f77SDag-Erling Smørgrav# set lock checking if requested
1553f44e67d1SCy SchubertAC_ARG_ENABLE(lock_checks, AS_HELP_STRING([--enable-lock-checks],[ enable to check lock and unlock calls, for debug purposes ]),
1554b7579f77SDag-Erling Smørgrav	, )
1555b7579f77SDag-Erling Smørgravif test x_$enable_lock_checks = x_yes; then
1556b7579f77SDag-Erling Smørgrav	AC_DEFINE(ENABLE_LOCK_CHECKS, 1, [Define if you want to use debug lock checking (slow).])
1557b7579f77SDag-Erling Smørgrav	CHECKLOCK_OBJ="checklocks.lo"
1558b7579f77SDag-Erling Smørgrav	AC_SUBST(CHECKLOCK_OBJ)
1559b7579f77SDag-Erling Smørgravfi
1560b7579f77SDag-Erling Smørgrav
1561b7579f77SDag-Erling SmørgravACX_CHECK_GETADDRINFO_WITH_INCLUDES
1562b7579f77SDag-Erling Smørgravif test "$USE_WINSOCK" = 1; then
1563b7579f77SDag-Erling Smørgrav	AC_DEFINE(UB_ON_WINDOWS, 1, [Use win32 resources and API])
1564b7579f77SDag-Erling Smørgrav	AC_CHECK_HEADERS([iphlpapi.h],,, [AC_INCLUDES_DEFAULT
1565b7579f77SDag-Erling Smørgrav#include <windows.h>
1566b7579f77SDag-Erling Smørgrav	])
1567b7579f77SDag-Erling Smørgrav	AC_CHECK_TOOL(WINDRES, windres)
15683bd4df0aSDag-Erling Smørgrav	LIBS="$LIBS -liphlpapi -lcrypt32"
1569b7579f77SDag-Erling Smørgrav	WINAPPS="unbound-service-install.exe unbound-service-remove.exe anchor-update.exe"
1570b7579f77SDag-Erling Smørgrav	AC_SUBST(WINAPPS)
1571b7579f77SDag-Erling Smørgrav	WIN_DAEMON_SRC="winrc/win_svc.c winrc/w_inst.c"
1572b7579f77SDag-Erling Smørgrav	AC_SUBST(WIN_DAEMON_SRC)
1573b7579f77SDag-Erling Smørgrav	WIN_DAEMON_OBJ="win_svc.lo w_inst.lo"
1574b7579f77SDag-Erling Smørgrav	AC_SUBST(WIN_DAEMON_OBJ)
1575b7579f77SDag-Erling Smørgrav	WIN_DAEMON_OBJ_LINK="rsrc_unbound.o"
1576b7579f77SDag-Erling Smørgrav	AC_SUBST(WIN_DAEMON_OBJ_LINK)
1577b7579f77SDag-Erling Smørgrav	WIN_HOST_OBJ_LINK="rsrc_unbound_host.o"
1578b7579f77SDag-Erling Smørgrav	AC_SUBST(WIN_HOST_OBJ_LINK)
1579b7579f77SDag-Erling Smørgrav	WIN_UBANCHOR_OBJ_LINK="rsrc_unbound_anchor.o log.lo locks.lo"
1580b7579f77SDag-Erling Smørgrav	AC_SUBST(WIN_UBANCHOR_OBJ_LINK)
1581b7579f77SDag-Erling Smørgrav	WIN_CONTROL_OBJ_LINK="rsrc_unbound_control.o"
1582b7579f77SDag-Erling Smørgrav	AC_SUBST(WIN_CONTROL_OBJ_LINK)
1583b7579f77SDag-Erling Smørgrav	WIN_CHECKCONF_OBJ_LINK="rsrc_unbound_checkconf.o"
1584b7579f77SDag-Erling Smørgrav	AC_SUBST(WIN_CHECKCONF_OBJ_LINK)
1585a39a5a69SCy Schubert	AC_DEFINE(__USE_MINGW_ANSI_STDIO, 1, [defined to use gcc ansi snprintf and sscanf that understands %lld when compiled for windows.])
1586b7579f77SDag-Erling Smørgravfi
1587b7579f77SDag-Erling Smørgravif test $ac_cv_func_getaddrinfo = no; then
1588b7579f77SDag-Erling Smørgrav	AC_LIBOBJ([fake-rfc2553])
1589b7579f77SDag-Erling Smørgravfi
1590b7579f77SDag-Erling Smørgrav# check after getaddrinfo for its libraries
1591b7579f77SDag-Erling SmørgravACX_FUNC_IOCTLSOCKET
1592b7579f77SDag-Erling Smørgrav
1593b7579f77SDag-Erling Smørgrav# see if daemon(3) exists, and if it is deprecated.
1594b7579f77SDag-Erling SmørgravAC_CHECK_FUNCS([daemon])
1595b7579f77SDag-Erling Smørgravif test $ac_cv_func_daemon = yes; then
1596b7579f77SDag-Erling Smørgrav	ACX_FUNC_DEPRECATED([daemon], [(void)daemon(0, 0);], [
1597b7579f77SDag-Erling Smørgrav#include <stdlib.h>
15985469a995SCy Schubert#include <unistd.h>
1599b7579f77SDag-Erling Smørgrav])
1600b7579f77SDag-Erling Smørgravfi
1601b7579f77SDag-Erling Smørgrav
1602748bd829SDag-Erling SmørgravAC_CHECK_MEMBERS([struct sockaddr_un.sun_len],,,[
1603748bd829SDag-Erling SmørgravAC_INCLUDES_DEFAULT
1604748bd829SDag-Erling Smørgrav#ifdef HAVE_SYS_UN_H
1605748bd829SDag-Erling Smørgrav#include <sys/un.h>
1606748bd829SDag-Erling Smørgrav#endif
1607748bd829SDag-Erling Smørgrav])
1608b7579f77SDag-Erling SmørgravAC_CHECK_MEMBERS([struct in_pktinfo.ipi_spec_dst],,,[
1609b7579f77SDag-Erling SmørgravAC_INCLUDES_DEFAULT
1610b7579f77SDag-Erling Smørgrav#if HAVE_SYS_PARAM_H
1611b7579f77SDag-Erling Smørgrav#include <sys/param.h>
1612b7579f77SDag-Erling Smørgrav#endif
1613b7579f77SDag-Erling Smørgrav
1614b7579f77SDag-Erling Smørgrav#ifdef HAVE_SYS_SOCKET_H
1615b7579f77SDag-Erling Smørgrav#include <sys/socket.h>
1616b7579f77SDag-Erling Smørgrav#endif
1617b7579f77SDag-Erling Smørgrav
1618b7579f77SDag-Erling Smørgrav#ifdef HAVE_SYS_UIO_H
1619b7579f77SDag-Erling Smørgrav#include <sys/uio.h>
1620b7579f77SDag-Erling Smørgrav#endif
1621b7579f77SDag-Erling Smørgrav
1622b7579f77SDag-Erling Smørgrav#ifdef HAVE_NETINET_IN_H
1623b7579f77SDag-Erling Smørgrav#include <netinet/in.h>
1624b7579f77SDag-Erling Smørgrav#endif
1625b7579f77SDag-Erling Smørgrav
1626f61ef7f6SDag-Erling Smørgrav#ifdef HAVE_NETINET_TCP_H
1627f61ef7f6SDag-Erling Smørgrav#include <netinet/tcp.h>
1628f61ef7f6SDag-Erling Smørgrav#endif
1629f61ef7f6SDag-Erling Smørgrav
1630b7579f77SDag-Erling Smørgrav#ifdef HAVE_ARPA_INET_H
1631b7579f77SDag-Erling Smørgrav#include <arpa/inet.h>
1632b7579f77SDag-Erling Smørgrav#endif
1633b7579f77SDag-Erling Smørgrav
1634b7579f77SDag-Erling Smørgrav#ifdef HAVE_WINSOCK2_H
1635b7579f77SDag-Erling Smørgrav#include <winsock2.h>
1636b7579f77SDag-Erling Smørgrav#endif
1637b7579f77SDag-Erling Smørgrav
1638b7579f77SDag-Erling Smørgrav#ifdef HAVE_WS2TCPIP_H
1639b7579f77SDag-Erling Smørgrav#include <ws2tcpip.h>
1640b7579f77SDag-Erling Smørgrav#endif
1641b7579f77SDag-Erling Smørgrav])
1642091e9e46SCy Schubert
1643091e9e46SCy SchubertAC_MSG_CHECKING([for htobe64])
1644091e9e46SCy SchubertAC_LINK_IFELSE([AC_LANG_PROGRAM([
1645091e9e46SCy Schubert#include <stdio.h>
1646091e9e46SCy Schubert#ifdef HAVE_ENDIAN_H
1647091e9e46SCy Schubert#  include <endian.h>
1648091e9e46SCy Schubert#endif
1649091e9e46SCy Schubert#ifdef HAVE_SYS_ENDIAN_H
1650091e9e46SCy Schubert#  include <sys/endian.h>
1651091e9e46SCy Schubert#endif
1652091e9e46SCy Schubert], [unsigned long long x = htobe64(0); printf("%u", (unsigned)x);])],
1653091e9e46SCy Schubert  AC_MSG_RESULT(yes)
1654091e9e46SCy Schubert  AC_DEFINE(HAVE_HTOBE64, 1, [If we have htobe64]),
1655091e9e46SCy Schubert  AC_MSG_RESULT(no))
1656091e9e46SCy Schubert
1657091e9e46SCy SchubertAC_MSG_CHECKING([for be64toh])
1658091e9e46SCy SchubertAC_LINK_IFELSE([AC_LANG_PROGRAM([
1659091e9e46SCy Schubert#include <stdio.h>
1660091e9e46SCy Schubert#ifdef HAVE_ENDIAN_H
1661091e9e46SCy Schubert#  include <endian.h>
1662091e9e46SCy Schubert#endif
1663091e9e46SCy Schubert#ifdef HAVE_SYS_ENDIAN_H
1664091e9e46SCy Schubert#  include <sys/endian.h>
1665091e9e46SCy Schubert#endif
1666091e9e46SCy Schubert], [unsigned long long x = be64toh(0); printf("%u", (unsigned)x);])],
1667091e9e46SCy Schubert  AC_MSG_RESULT(yes)
1668091e9e46SCy Schubert  AC_DEFINE(HAVE_BE64TOH, 1, [If we have be64toh]),
1669091e9e46SCy Schubert  AC_MSG_RESULT(no))
1670091e9e46SCy Schubert
1671b7579f77SDag-Erling SmørgravAC_SEARCH_LIBS([setusercontext], [util])
1672865f46b2SCy 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])
1673b7579f77SDag-Erling SmørgravAC_CHECK_FUNCS([setresuid],,[AC_CHECK_FUNCS([setreuid])])
1674b7579f77SDag-Erling SmørgravAC_CHECK_FUNCS([setresgid],,[AC_CHECK_FUNCS([setregid])])
1675b7579f77SDag-Erling Smørgrav
1676b7579f77SDag-Erling Smørgrav# check if setreuid en setregid fail, on MacOSX10.4(darwin8).
16775469a995SCy Schubertif echo $host_os | grep darwin8 > /dev/null; then
1678b7579f77SDag-Erling Smørgrav	AC_DEFINE(DARWIN_BROKEN_SETREUID, 1, [Define this if on macOSX10.4-darwin8 and setreuid and setregid do not work])
1679b7579f77SDag-Erling Smørgravfi
16803005e0a3SDag-Erling SmørgravAC_CHECK_DECLS([inet_pton,inet_ntop], [], [], [
16813005e0a3SDag-Erling SmørgravAC_INCLUDES_DEFAULT
16823005e0a3SDag-Erling Smørgrav#ifdef HAVE_NETINET_IN_H
16833005e0a3SDag-Erling Smørgrav#include <netinet/in.h>
16843005e0a3SDag-Erling Smørgrav#endif
16853005e0a3SDag-Erling Smørgrav
16863005e0a3SDag-Erling Smørgrav#ifdef HAVE_NETINET_TCP_H
16873005e0a3SDag-Erling Smørgrav#include <netinet/tcp.h>
16883005e0a3SDag-Erling Smørgrav#endif
16893005e0a3SDag-Erling Smørgrav
16903005e0a3SDag-Erling Smørgrav#ifdef HAVE_ARPA_INET_H
16913005e0a3SDag-Erling Smørgrav#include <arpa/inet.h>
16923005e0a3SDag-Erling Smørgrav#endif
16933005e0a3SDag-Erling Smørgrav
16943005e0a3SDag-Erling Smørgrav#ifdef HAVE_WINSOCK2_H
16953005e0a3SDag-Erling Smørgrav#include <winsock2.h>
16963005e0a3SDag-Erling Smørgrav#endif
16973005e0a3SDag-Erling Smørgrav
16983005e0a3SDag-Erling Smørgrav#ifdef HAVE_WS2TCPIP_H
16993005e0a3SDag-Erling Smørgrav#include <ws2tcpip.h>
17003005e0a3SDag-Erling Smørgrav#endif
17013005e0a3SDag-Erling Smørgrav])
1702b7579f77SDag-Erling SmørgravAC_REPLACE_FUNCS(inet_aton)
1703b7579f77SDag-Erling SmørgravAC_REPLACE_FUNCS(inet_pton)
1704b7579f77SDag-Erling SmørgravAC_REPLACE_FUNCS(inet_ntop)
1705b7579f77SDag-Erling SmørgravAC_REPLACE_FUNCS(snprintf)
170605ab2901SDag-Erling Smørgrav# test if snprintf return the proper length
170705ab2901SDag-Erling Smørgravif test "x$ac_cv_func_snprintf" = xyes; then
170805ab2901SDag-Erling Smørgrav    if test c${cross_compiling} = cno; then
170905ab2901SDag-Erling Smørgrav	AC_MSG_CHECKING([for correct snprintf return value])
171005ab2901SDag-Erling Smørgrav	AC_RUN_IFELSE([AC_LANG_SOURCE(AC_INCLUDES_DEFAULT
171105ab2901SDag-Erling Smørgrav[[
171205ab2901SDag-Erling Smørgravint main(void) { return !(snprintf(NULL, 0, "test") == 4); }
171305ab2901SDag-Erling Smørgrav]])], [AC_MSG_RESULT(yes)], [
171405ab2901SDag-Erling Smørgrav		AC_MSG_RESULT(no)
171505ab2901SDag-Erling Smørgrav		AC_DEFINE([SNPRINTF_RET_BROKEN], [], [define if (v)snprintf does not return length needed, (but length used)])
171605ab2901SDag-Erling Smørgrav		AC_LIBOBJ(snprintf)
171705ab2901SDag-Erling Smørgrav	  ])
171805ab2901SDag-Erling Smørgrav    fi
171905ab2901SDag-Erling Smørgravfi
172017d15b25SDag-Erling SmørgravAC_REPLACE_FUNCS(strlcat)
1721b7579f77SDag-Erling SmørgravAC_REPLACE_FUNCS(strlcpy)
1722b7579f77SDag-Erling SmørgravAC_REPLACE_FUNCS(memmove)
1723b7579f77SDag-Erling SmørgravAC_REPLACE_FUNCS(gmtime_r)
172405ab2901SDag-Erling SmørgravAC_REPLACE_FUNCS(isblank)
1725a755b6f6SDag-Erling SmørgravAC_REPLACE_FUNCS(explicit_bzero)
172609a3aaf3SDag-Erling Smørgravdnl without CTIME, ARC4-functions and without reallocarray.
1727ff825849SDag-Erling SmørgravLIBOBJ_WITHOUT_CTIMEARC4="$LIBOBJS"
1728ff825849SDag-Erling SmørgravAC_SUBST(LIBOBJ_WITHOUT_CTIMEARC4)
1729e86b9096SDag-Erling SmørgravAC_MSG_CHECKING([for reallocarray])
1730e86b9096SDag-Erling SmørgravAC_LINK_IFELSE([AC_LANG_SOURCE(AC_INCLUDES_DEFAULT
1731e86b9096SDag-Erling Smørgrav[[
1732e86b9096SDag-Erling Smørgrav#ifndef _OPENBSD_SOURCE
1733e86b9096SDag-Erling Smørgrav#define _OPENBSD_SOURCE 1
1734e86b9096SDag-Erling Smørgrav#endif
1735e86b9096SDag-Erling Smørgrav#include <stdlib.h>
1736e86b9096SDag-Erling Smørgravint main(void) {
1737e86b9096SDag-Erling Smørgrav	void* p = reallocarray(NULL, 10, 100);
1738e86b9096SDag-Erling Smørgrav	free(p);
1739e86b9096SDag-Erling Smørgrav	return 0;
1740e86b9096SDag-Erling Smørgrav}
1741e86b9096SDag-Erling Smørgrav]])], [AC_MSG_RESULT(yes)
1742e86b9096SDag-Erling Smørgrav	AC_DEFINE(HAVE_REALLOCARRAY, 1, [If we have reallocarray(3)])
1743e86b9096SDag-Erling Smørgrav], [
1744e86b9096SDag-Erling Smørgrav	AC_MSG_RESULT(no)
1745e86b9096SDag-Erling Smørgrav	AC_LIBOBJ(reallocarray)
1746e86b9096SDag-Erling Smørgrav])
17470eefd307SCy SchubertAC_CHECK_DECLS([reallocarray])
1748ff825849SDag-Erling Smørgravif test "$USE_NSS" = "no"; then
1749ff825849SDag-Erling Smørgrav	AC_REPLACE_FUNCS(arc4random)
1750ff825849SDag-Erling Smørgrav	AC_REPLACE_FUNCS(arc4random_uniform)
1751ff825849SDag-Erling Smørgrav	if test "$ac_cv_func_arc4random" = "no"; then
1752ff825849SDag-Erling Smørgrav		AC_LIBOBJ(arc4_lock)
1753ff825849SDag-Erling Smørgrav		AC_CHECK_FUNCS([getentropy],,[
1754ff825849SDag-Erling Smørgrav		    if test "$USE_WINSOCK" = 1; then
1755ff825849SDag-Erling Smørgrav			AC_LIBOBJ(getentropy_win)
1756ff825849SDag-Erling Smørgrav		    else
17573005e0a3SDag-Erling Smørgrav			case "$host" in
17583005e0a3SDag-Erling Smørgrav			Darwin|*darwin*)
1759ff825849SDag-Erling Smørgrav				AC_LIBOBJ(getentropy_osx)
1760ff825849SDag-Erling Smørgrav			;;
17613005e0a3SDag-Erling Smørgrav			*solaris*|*sunos*|SunOS)
1762ff825849SDag-Erling Smørgrav				AC_LIBOBJ(getentropy_solaris)
1763ff825849SDag-Erling Smørgrav				AC_CHECK_HEADERS([sys/sha2.h],, [
1764ff825849SDag-Erling Smørgrav					AC_CHECK_FUNCS([SHA512_Update],,[
1765ff825849SDag-Erling Smørgrav						AC_LIBOBJ(sha512)
1766ff825849SDag-Erling Smørgrav					])
1767ff825849SDag-Erling Smørgrav				], [AC_INCLUDES_DEFAULT])
1768ff825849SDag-Erling Smørgrav				if test "$ac_cv_header_sys_sha2_h" = "yes"; then
1769ff825849SDag-Erling Smørgrav					# this lib needed for sha2 on solaris
1770ff825849SDag-Erling Smørgrav					LIBS="$LIBS -lmd"
1771ff825849SDag-Erling Smørgrav				fi
17726480faa8SDag-Erling Smørgrav				AC_SEARCH_LIBS([clock_gettime], [rt])
1773ff825849SDag-Erling Smørgrav			;;
17740eefd307SCy Schubert			*freebsd*|*FreeBSD)
17750eefd307SCy Schubert				AC_LIBOBJ(getentropy_freebsd)
17760eefd307SCy Schubert			;;
17773005e0a3SDag-Erling Smørgrav			*linux*|Linux|*)
1778ff825849SDag-Erling Smørgrav				AC_LIBOBJ(getentropy_linux)
1779ff825849SDag-Erling Smørgrav				AC_CHECK_FUNCS([SHA512_Update],,[
1780ff825849SDag-Erling Smørgrav					AC_DEFINE([COMPAT_SHA512], [1], [Do sha512 definitions in config.h])
1781ff825849SDag-Erling Smørgrav					AC_LIBOBJ(sha512)
1782ff825849SDag-Erling Smørgrav				])
1783ff825849SDag-Erling Smørgrav				AC_CHECK_HEADERS([sys/sysctl.h],,, [AC_INCLUDES_DEFAULT])
17846480faa8SDag-Erling Smørgrav				AC_CHECK_FUNCS([getauxval])
1785ff825849SDag-Erling Smørgrav				AC_SEARCH_LIBS([clock_gettime], [rt])
1786ff825849SDag-Erling Smørgrav			;;
1787ff825849SDag-Erling Smørgrav			esac
1788ff825849SDag-Erling Smørgrav		    fi
1789ff825849SDag-Erling Smørgrav		])
1790ff825849SDag-Erling Smørgrav	fi
1791ff825849SDag-Erling Smørgravfi
1792b7579f77SDag-Erling SmørgravLIBOBJ_WITHOUT_CTIME="$LIBOBJS"
1793b7579f77SDag-Erling SmørgravAC_SUBST(LIBOBJ_WITHOUT_CTIME)
1794b7579f77SDag-Erling SmørgravAC_REPLACE_FUNCS(ctime_r)
1795e2d15004SDag-Erling SmørgravAC_REPLACE_FUNCS(strsep)
1796b7579f77SDag-Erling Smørgrav
1797f44e67d1SCy 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]))
1798b7579f77SDag-Erling Smørgravcase "$enable_allsymbols" in
1799b7579f77SDag-Erling Smørgrav	yes)
1800b7579f77SDag-Erling Smørgrav	COMMON_OBJ_ALL_SYMBOLS=""
1801b7579f77SDag-Erling Smørgrav	UBSYMS=""
18025469a995SCy Schubert	EXTRALINK="libunbound.la"
1803b7579f77SDag-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])
1804b7579f77SDag-Erling Smørgrav	;;
1805b7579f77SDag-Erling Smørgrav	no|*)
1806b7579f77SDag-Erling Smørgrav	COMMON_OBJ_ALL_SYMBOLS='$(COMMON_OBJ)'
1807b7579f77SDag-Erling Smørgrav	UBSYMS='-export-symbols $(srcdir)/libunbound/ubsyms.def'
1808b7579f77SDag-Erling Smørgrav	EXTRALINK=""
1809b7579f77SDag-Erling Smørgrav	;;
1810b7579f77SDag-Erling Smørgravesac
1811b7579f77SDag-Erling SmørgravAC_SUBST(COMMON_OBJ_ALL_SYMBOLS)
1812b7579f77SDag-Erling SmørgravAC_SUBST(EXTRALINK)
1813b7579f77SDag-Erling SmørgravAC_SUBST(UBSYMS)
1814b7579f77SDag-Erling Smørgravif test x_$enable_lock_checks = x_yes; then
1815b7579f77SDag-Erling Smørgrav	UBSYMS="-export-symbols clubsyms.def"
1816b7579f77SDag-Erling Smørgrav	cp ${srcdir}/libunbound/ubsyms.def clubsyms.def
1817b7579f77SDag-Erling Smørgrav	echo lock_protect >> clubsyms.def
1818b7579f77SDag-Erling Smørgrav	echo lock_unprotect >> clubsyms.def
1819b7579f77SDag-Erling Smørgrav	echo lock_get_mem >> clubsyms.def
1820b7579f77SDag-Erling Smørgrav	echo checklock_start >> clubsyms.def
1821b7579f77SDag-Erling Smørgrav	echo checklock_stop >> clubsyms.def
1822b7579f77SDag-Erling Smørgrav	echo checklock_lock >> clubsyms.def
1823b7579f77SDag-Erling Smørgrav	echo checklock_unlock >> clubsyms.def
1824b7579f77SDag-Erling Smørgrav	echo checklock_init >> clubsyms.def
1825b7579f77SDag-Erling Smørgrav	echo checklock_thrcreate >> clubsyms.def
1826b7579f77SDag-Erling Smørgrav	echo checklock_thrjoin >> clubsyms.def
1827b7579f77SDag-Erling Smørgravfi
1828b7579f77SDag-Erling Smørgrav
1829ff825849SDag-Erling Smørgrav# check for dnstap if requested
1830ff825849SDag-Erling Smørgravdt_DNSTAP([$UNBOUND_RUN_DIR/dnstap.sock],
1831ff825849SDag-Erling Smørgrav    [
1832ff825849SDag-Erling Smørgrav        AC_DEFINE([USE_DNSTAP], [1], [Define to 1 to enable dnstap support])
1833ff825849SDag-Erling Smørgrav        AC_SUBST([ENABLE_DNSTAP], [1])
1834ff825849SDag-Erling Smørgrav
1835ff825849SDag-Erling Smørgrav        AC_SUBST([opt_dnstap_socket_path])
1836ff825849SDag-Erling Smørgrav        ACX_ESCAPE_BACKSLASH($opt_dnstap_socket_path, hdr_dnstap_socket_path)
1837ff825849SDag-Erling Smørgrav        AC_DEFINE_UNQUOTED(DNSTAP_SOCKET_PATH,
1838ff825849SDag-Erling Smørgrav            ["$hdr_dnstap_socket_path"], [default dnstap socket path])
183925039b37SCy Schubert	AC_SUBST(DNSTAP_SOCKET_PATH,["$hdr_dnstap_socket_path"])
1840f44e67d1SCy Schubert	AC_SUBST(DNSTAP_SOCKET_TESTBIN,['unbound-dnstap-socket$(EXEEXT)'])
184125039b37SCy Schubert        AC_SUBST([DNSTAP_SRC], ["dnstap/dnstap.c dnstap/dnstap.pb-c.c dnstap/dnstap_fstrm.c dnstap/dtstream.c"])
184225039b37SCy Schubert        AC_SUBST([DNSTAP_OBJ], ["dnstap.lo dnstap.pb-c.lo dnstap_fstrm.lo dtstream.lo"])
1843ff825849SDag-Erling Smørgrav    ],
1844ff825849SDag-Erling Smørgrav    [
1845ff825849SDag-Erling Smørgrav        AC_SUBST([ENABLE_DNSTAP], [0])
1846ff825849SDag-Erling Smørgrav    ]
1847ff825849SDag-Erling Smørgrav)
1848ff825849SDag-Erling Smørgrav
184965b390aaSDag-Erling Smørgrav# check for dnscrypt if requested
185065b390aaSDag-Erling Smørgravdnsc_DNSCRYPT([
185165b390aaSDag-Erling Smørgrav        AC_DEFINE([USE_DNSCRYPT], [1], [Define to 1 to enable dnscrypt support])
185265b390aaSDag-Erling Smørgrav        AC_SUBST([ENABLE_DNSCRYPT], [1])
185365b390aaSDag-Erling Smørgrav
185465b390aaSDag-Erling Smørgrav        AC_SUBST([DNSCRYPT_SRC], ["dnscrypt/dnscrypt.c"])
185565b390aaSDag-Erling Smørgrav        AC_SUBST([DNSCRYPT_OBJ], ["dnscrypt.lo"])
185665b390aaSDag-Erling Smørgrav    ],
185765b390aaSDag-Erling Smørgrav    [
185865b390aaSDag-Erling Smørgrav        AC_SUBST([ENABLE_DNSCRYPT], [0])
185965b390aaSDag-Erling Smørgrav    ]
186065b390aaSDag-Erling Smørgrav)
186165b390aaSDag-Erling Smørgrav
1862e2d15004SDag-Erling Smørgrav# check for cachedb if requested
1863f44e67d1SCy SchubertAC_ARG_ENABLE(cachedb, AS_HELP_STRING([--enable-cachedb],[enable cachedb module that can use external cache storage]))
18643bd4df0aSDag-Erling Smørgrav# turn on cachedb when hiredis support is enabled.
18653bd4df0aSDag-Erling Smørgravif test "$found_libhiredis" = "yes"; then enable_cachedb="yes"; fi
1866e2d15004SDag-Erling Smørgravcase "$enable_cachedb" in
1867e2d15004SDag-Erling Smørgrav    yes)
1868e2d15004SDag-Erling Smørgrav    	AC_DEFINE([USE_CACHEDB], [1], [Define to 1 to use cachedb support])
18695469a995SCy Schubert	AC_SUBST([CACHEDB_SRC], ["cachedb/cachedb.c cachedb/redis.c"])
18705469a995SCy Schubert	AC_SUBST([CACHEDB_OBJ], ["cachedb.lo redis.lo"])
1871e2d15004SDag-Erling Smørgrav    	;;
1872e2d15004SDag-Erling Smørgrav    no|*)
1873e2d15004SDag-Erling Smørgrav    	# nothing
1874e2d15004SDag-Erling Smørgrav    	;;
1875e2d15004SDag-Erling Smørgravesac
1876e2d15004SDag-Erling Smørgrav
1877c7f4d7adSDag-Erling Smørgrav# check for ipsecmod if requested
1878f44e67d1SCy SchubertAC_ARG_ENABLE(ipsecmod, AS_HELP_STRING([--enable-ipsecmod],[Enable ipsecmod module that facilitates opportunistic IPsec]))
1879c7f4d7adSDag-Erling Smørgravcase "$enable_ipsecmod" in
1880c7f4d7adSDag-Erling Smørgrav	yes)
1881c7f4d7adSDag-Erling Smørgrav		AC_DEFINE([USE_IPSECMOD], [1], [Define to 1 to use ipsecmod support.])
1882c7f4d7adSDag-Erling Smørgrav		IPSECMOD_OBJ="ipsecmod.lo ipsecmod-whitelist.lo"
1883c7f4d7adSDag-Erling Smørgrav		AC_SUBST(IPSECMOD_OBJ)
1884c7f4d7adSDag-Erling Smørgrav		IPSECMOD_HEADER='$(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/ipsecmod/ipsecmod-whitelist.h'
1885c7f4d7adSDag-Erling Smørgrav		AC_SUBST(IPSECMOD_HEADER)
1886c7f4d7adSDag-Erling Smørgrav		;;
1887c7f4d7adSDag-Erling Smørgrav	no|*)
1888c7f4d7adSDag-Erling Smørgrav		# nothing
1889c7f4d7adSDag-Erling Smørgrav		;;
1890c7f4d7adSDag-Erling Smørgravesac
1891c7f4d7adSDag-Erling Smørgrav
18920eefd307SCy Schubert# check for ipset if requested
1893f44e67d1SCy SchubertAC_ARG_ENABLE(ipset, AS_HELP_STRING([--enable-ipset],[enable ipset module]))
18940eefd307SCy Schubertcase "$enable_ipset" in
18950eefd307SCy Schubert    yes)
18960eefd307SCy Schubert		AC_DEFINE([USE_IPSET], [1], [Define to 1 to use ipset support])
18970eefd307SCy Schubert		IPSET_SRC="ipset/ipset.c"
18980eefd307SCy Schubert		AC_SUBST(IPSET_SRC)
18990eefd307SCy Schubert		IPSET_OBJ="ipset.lo"
19000eefd307SCy Schubert		AC_SUBST(IPSET_OBJ)
19010eefd307SCy Schubert
19020eefd307SCy Schubert		# mnl
1903f44e67d1SCy Schubert		AC_ARG_WITH(libmnl, AS_HELP_STRING([--with-libmnl=path],[specify explicit path for libmnl.]),
19040eefd307SCy Schubert			[ ],[ withval="yes" ])
19050eefd307SCy Schubert		found_libmnl="no"
19060eefd307SCy Schubert		AC_MSG_CHECKING(for libmnl)
19070eefd307SCy Schubert		if test x_$withval = x_ -o x_$withval = x_yes; then
19080eefd307SCy Schubert			withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
19090eefd307SCy Schubert		fi
19100eefd307SCy Schubert		for dir in $withval ; do
1911a39a5a69SCy Schubert			if test -f "$dir/include/libmnl/libmnl.h" -o -f "$dir/include/libmnl/libmnl/libmnl.h"; then
19120eefd307SCy Schubert				found_libmnl="yes"
19130eefd307SCy Schubert				dnl assume /usr is in default path.
1914a39a5a69SCy Schubert				extralibmnl=""
1915a39a5a69SCy Schubert				if test -f "$dir/include/libmnl/libmnl/libmnl.h"; then
1916a39a5a69SCy Schubert					extralibmnl="/libmnl"
1917a39a5a69SCy Schubert				fi
1918a39a5a69SCy Schubert				if test "$dir" != "/usr" -o -n "$extralibmnl"; then
1919a39a5a69SCy Schubert					CPPFLAGS="$CPPFLAGS -I$dir/include$extralibmnl"
1920a39a5a69SCy Schubert				fi
19210eefd307SCy Schubert				if test "$dir" != "/usr"; then
19220eefd307SCy Schubert					LDFLAGS="$LDFLAGS -L$dir/lib"
19230eefd307SCy Schubert				fi
19240eefd307SCy Schubert				AC_MSG_RESULT(found in $dir)
19250eefd307SCy Schubert				LIBS="$LIBS -lmnl"
19260eefd307SCy Schubert				break;
19270eefd307SCy Schubert			fi
19280eefd307SCy Schubert		done
19290eefd307SCy Schubert		if test x_$found_libmnl != x_yes; then
1930f44e67d1SCy Schubert			AC_MSG_ERROR([Could not find libmnl, libmnl.h])
19310eefd307SCy Schubert		fi
19320eefd307SCy Schubert		;;
19330eefd307SCy Schubert    no|*)
19340eefd307SCy Schubert    	# nothing
19350eefd307SCy Schubert		;;
19360eefd307SCy Schubertesac
1937f44e67d1SCy 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]))
193825039b37SCy Schubertcase "$enable_explicit_port_randomisation" in
193925039b37SCy Schubert	no)
194025039b37SCy Schubert		AC_DEFINE([DISABLE_EXPLICIT_PORT_RANDOMISATION], [1], [Define this to enable kernel based UDP source port randomization.])
194125039b37SCy Schubert		;;
194225039b37SCy Schubert	yes|*)
194325039b37SCy Schubert		;;
194425039b37SCy Schubertesac
194525039b37SCy Schubert
19465469a995SCy Schubertif echo "$host" | $GREP -i -e linux >/dev/null; then
19475469a995SCy Schubert	AC_ARG_ENABLE(linux-ip-local-port-range, AC_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.]))
19485469a995SCy Schubert	case "$enable_linux_ip_local_port_range" in
19495469a995SCy Schubert		yes)
19505469a995SCy 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.])
19515469a995SCy Schubert			;;
19525469a995SCy Schubert		no|*)
19535469a995SCy Schubert			;;
19545469a995SCy Schubert	esac
19555469a995SCy Schubertfi
19565469a995SCy Schubert
19570eefd307SCy Schubert
1958b7579f77SDag-Erling SmørgravAC_MSG_CHECKING([if ${MAKE:-make} supports $< with implicit rule in scope])
1959b7579f77SDag-Erling Smørgrav# on openBSD, the implicit rule make $< work.
1960b7579f77SDag-Erling Smørgrav# on Solaris, it does not work ($? is changed sources, $^ lists dependencies).
1961b7579f77SDag-Erling Smørgrav# gmake works.
1962b7579f77SDag-Erling Smørgravcat >conftest.make <<EOF
1963b7579f77SDag-Erling Smørgravall:	conftest.lo
1964b7579f77SDag-Erling Smørgrav
1965b7579f77SDag-Erling Smørgravconftest.lo foo.lo bla.lo:
1966b7579f77SDag-Erling Smørgrav	if test -f "\$<"; then touch \$@; fi
1967b7579f77SDag-Erling Smørgrav
1968b7579f77SDag-Erling Smørgrav.SUFFIXES: .lo
1969b7579f77SDag-Erling Smørgrav.c.lo:
1970b7579f77SDag-Erling Smørgrav	if test -f "\$<"; then touch \$@; fi
1971b7579f77SDag-Erling Smørgrav
1972b7579f77SDag-Erling Smørgravconftest.lo:        conftest.dir/conftest.c
1973b7579f77SDag-Erling SmørgravEOF
1974b7579f77SDag-Erling Smørgravmkdir conftest.dir
1975b7579f77SDag-Erling Smørgravtouch conftest.dir/conftest.c
1976b7579f77SDag-Erling Smørgravrm -f conftest.lo conftest.c
1977b7579f77SDag-Erling Smørgrav${MAKE:-make} -f conftest.make >/dev/null
1978b7579f77SDag-Erling Smørgravrm -f conftest.make conftest.c conftest.dir/conftest.c
1979b7579f77SDag-Erling Smørgravrm -rf conftest.dir
1980b7579f77SDag-Erling Smørgravif test ! -f conftest.lo; then
1981b7579f77SDag-Erling Smørgrav	AC_MSG_RESULT(no)
1982b7579f77SDag-Erling Smørgrav	SOURCEDETERMINE='echo "$^" | awk "-F " "{print \$$1;}" > .source'
1983b7579f77SDag-Erling Smørgrav	SOURCEFILE='`cat .source`'
1984b7579f77SDag-Erling Smørgravelse
1985b7579f77SDag-Erling Smørgrav	AC_MSG_RESULT(yes)
1986b7579f77SDag-Erling Smørgrav	SOURCEDETERMINE=':'
1987b7579f77SDag-Erling Smørgrav	SOURCEFILE='$<'
1988b7579f77SDag-Erling Smørgravfi
1989b7579f77SDag-Erling Smørgravrm -f conftest.lo
1990b7579f77SDag-Erling SmørgravAC_SUBST(SOURCEDETERMINE)
1991b7579f77SDag-Erling SmørgravAC_SUBST(SOURCEFILE)
1992b7579f77SDag-Erling Smørgrav
19938ed2b524SDag-Erling Smørgrav# see if we want to build the library or everything
19948ed2b524SDag-Erling SmørgravALLTARGET="alltargets"
199517d15b25SDag-Erling SmørgravINSTALLTARGET="install-all"
1996f44e67d1SCy SchubertAC_ARG_WITH(libunbound-only, AS_HELP_STRING([--with-libunbound-only],[do not build daemon and tool programs]),
19978ed2b524SDag-Erling Smørgrav	[
19988ed2b524SDag-Erling Smørgrav	if test "$withval" = "yes"; then
19998ed2b524SDag-Erling Smørgrav		ALLTARGET="lib"
200017d15b25SDag-Erling Smørgrav		INSTALLTARGET="install-lib"
20018ed2b524SDag-Erling Smørgrav	fi
20028ed2b524SDag-Erling Smørgrav])
200357bddd21SDag-Erling Smørgravif test $ALLTARGET = "alltargets"; then
200457bddd21SDag-Erling Smørgrav	if test $USE_NSS = "yes"; then
2005f44e67d1SCy Schubert		AC_MSG_ERROR([--with-nss can only be used in combination with --with-libunbound-only.])
200657bddd21SDag-Erling Smørgrav	fi
200757bddd21SDag-Erling Smørgrav	if test $USE_NETTLE = "yes"; then
2008f44e67d1SCy Schubert		AC_MSG_ERROR([--with-nettle can only be used in combination with --with-libunbound-only.])
200957bddd21SDag-Erling Smørgrav	fi
201057bddd21SDag-Erling Smørgravfi
201157bddd21SDag-Erling Smørgrav
20128ed2b524SDag-Erling SmørgravAC_SUBST(ALLTARGET)
201317d15b25SDag-Erling SmørgravAC_SUBST(INSTALLTARGET)
2014b7579f77SDag-Erling Smørgrav
2015b7579f77SDag-Erling SmørgravACX_STRIP_EXT_FLAGS
2016971980c3SDag-Erling Smørgravif test -n "$LATE_LDFLAGS"; then
2017b7579f77SDag-Erling Smørgrav  LDFLAGS="$LATE_LDFLAGS $LDFLAGS"
2018971980c3SDag-Erling Smørgravfi
2019971980c3SDag-Erling Smørgrav# remove start spaces
2020971980c3SDag-Erling SmørgravLDFLAGS=`echo "$LDFLAGS"|sed -e 's/^ *//'`
2021971980c3SDag-Erling SmørgravLIBS=`echo "$LIBS"|sed -e 's/^ *//'`
2022b7579f77SDag-Erling Smørgrav
2023b7579f77SDag-Erling SmørgravAC_DEFINE_UNQUOTED([MAXSYSLOGMSGLEN], [10240], [Define to the maximum message length to pass to syslog.])
2024b7579f77SDag-Erling Smørgrav
2025b7579f77SDag-Erling SmørgravAH_BOTTOM(
2026b7579f77SDag-Erling Smørgravdnl this must be first AH_CONFIG, to define the flags before any includes.
2027b7579f77SDag-Erling SmørgravAHX_CONFIG_EXT_FLAGS
2028b7579f77SDag-Erling Smørgrav
2029b7579f77SDag-Erling Smørgravdnl includes
2030b7579f77SDag-Erling Smørgrav[
2031e86b9096SDag-Erling Smørgrav#ifndef _OPENBSD_SOURCE
2032e86b9096SDag-Erling Smørgrav#define _OPENBSD_SOURCE 1
2033e86b9096SDag-Erling Smørgrav#endif
2034e86b9096SDag-Erling Smørgrav
2035b7579f77SDag-Erling Smørgrav#ifndef UNBOUND_DEBUG
2036e86b9096SDag-Erling Smørgrav# ifndef NDEBUG
2037b7579f77SDag-Erling Smørgrav#  define NDEBUG
2038b7579f77SDag-Erling Smørgrav# endif
2039e86b9096SDag-Erling Smørgrav#endif
2040b7579f77SDag-Erling Smørgrav
204117d15b25SDag-Erling Smørgrav/** Use small-ldns codebase */
204217d15b25SDag-Erling Smørgrav#define USE_SLDNS 1
204317d15b25SDag-Erling Smørgrav#ifdef HAVE_SSL
204417d15b25SDag-Erling Smørgrav#  define LDNS_BUILD_CONFIG_HAVE_SSL 1
204517d15b25SDag-Erling Smørgrav#endif
204617d15b25SDag-Erling Smørgrav
2047b7579f77SDag-Erling Smørgrav#include <stdio.h>
2048b7579f77SDag-Erling Smørgrav#include <string.h>
2049b7579f77SDag-Erling Smørgrav#include <unistd.h>
2050b7579f77SDag-Erling Smørgrav#include <assert.h>
2051b7579f77SDag-Erling Smørgrav
2052b7579f77SDag-Erling Smørgrav#if STDC_HEADERS
2053b7579f77SDag-Erling Smørgrav#include <stdlib.h>
2054b7579f77SDag-Erling Smørgrav#include <stddef.h>
2055b7579f77SDag-Erling Smørgrav#endif
2056b7579f77SDag-Erling Smørgrav
205717d15b25SDag-Erling Smørgrav#ifdef HAVE_STDARG_H
205817d15b25SDag-Erling Smørgrav#include <stdarg.h>
205917d15b25SDag-Erling Smørgrav#endif
206017d15b25SDag-Erling Smørgrav
2061b7579f77SDag-Erling Smørgrav#ifdef HAVE_STDINT_H
2062b7579f77SDag-Erling Smørgrav#include <stdint.h>
2063b7579f77SDag-Erling Smørgrav#endif
2064b7579f77SDag-Erling Smørgrav
2065b7579f77SDag-Erling Smørgrav#include <errno.h>
2066b7579f77SDag-Erling Smørgrav
2067b7579f77SDag-Erling Smørgrav#if HAVE_SYS_PARAM_H
2068b7579f77SDag-Erling Smørgrav#include <sys/param.h>
2069b7579f77SDag-Erling Smørgrav#endif
2070b7579f77SDag-Erling Smørgrav
2071b7579f77SDag-Erling Smørgrav#ifdef HAVE_SYS_SOCKET_H
2072b7579f77SDag-Erling Smørgrav#include <sys/socket.h>
2073b7579f77SDag-Erling Smørgrav#endif
2074b7579f77SDag-Erling Smørgrav
2075b7579f77SDag-Erling Smørgrav#ifdef HAVE_SYS_UIO_H
2076b7579f77SDag-Erling Smørgrav#include <sys/uio.h>
2077b7579f77SDag-Erling Smørgrav#endif
2078b7579f77SDag-Erling Smørgrav
2079b7579f77SDag-Erling Smørgrav#ifdef HAVE_NETINET_IN_H
2080b7579f77SDag-Erling Smørgrav#include <netinet/in.h>
2081b7579f77SDag-Erling Smørgrav#endif
2082b7579f77SDag-Erling Smørgrav
2083f61ef7f6SDag-Erling Smørgrav#ifdef HAVE_NETINET_TCP_H
2084f61ef7f6SDag-Erling Smørgrav#include <netinet/tcp.h>
2085f61ef7f6SDag-Erling Smørgrav#endif
2086f61ef7f6SDag-Erling Smørgrav
2087b7579f77SDag-Erling Smørgrav#ifdef HAVE_ARPA_INET_H
2088b7579f77SDag-Erling Smørgrav#include <arpa/inet.h>
2089b7579f77SDag-Erling Smørgrav#endif
2090b7579f77SDag-Erling Smørgrav
2091b7579f77SDag-Erling Smørgrav#ifdef HAVE_WINSOCK2_H
2092b7579f77SDag-Erling Smørgrav#include <winsock2.h>
2093b7579f77SDag-Erling Smørgrav#endif
2094b7579f77SDag-Erling Smørgrav
2095b7579f77SDag-Erling Smørgrav#ifdef HAVE_WS2TCPIP_H
2096b7579f77SDag-Erling Smørgrav#include <ws2tcpip.h>
2097b7579f77SDag-Erling Smørgrav#endif
209817d15b25SDag-Erling Smørgrav
2099a39a5a69SCy Schubert#if !defined(USE_WINSOCK) || !defined(HAVE_SNPRINTF) || defined(SNPRINTF_RET_BROKEN) || defined(__USE_MINGW_ANSI_STDIO)
210017d15b25SDag-Erling Smørgrav#define ARG_LL "%ll"
210117d15b25SDag-Erling Smørgrav#else
210217d15b25SDag-Erling Smørgrav#define ARG_LL "%I64"
210317d15b25SDag-Erling Smørgrav#endif
21046480faa8SDag-Erling Smørgrav
21056480faa8SDag-Erling Smørgrav#ifndef AF_LOCAL
21066480faa8SDag-Erling Smørgrav#define AF_LOCAL AF_UNIX
21076480faa8SDag-Erling Smørgrav#endif
2108b7579f77SDag-Erling Smørgrav]
2109b7579f77SDag-Erling Smørgrav
2110b7579f77SDag-Erling SmørgravAHX_CONFIG_FORMAT_ATTRIBUTE
2111b7579f77SDag-Erling SmørgravAHX_CONFIG_UNUSED_ATTRIBUTE
2112b7579f77SDag-Erling SmørgravAHX_CONFIG_FSEEKO
2113b7579f77SDag-Erling SmørgravAHX_CONFIG_MAXHOSTNAMELEN
211405ab2901SDag-Erling Smørgrav#if !defined(HAVE_SNPRINTF) || defined(SNPRINTF_RET_BROKEN)
211505ab2901SDag-Erling Smørgrav#define snprintf snprintf_unbound
211605ab2901SDag-Erling Smørgrav#define vsnprintf vsnprintf_unbound
211705ab2901SDag-Erling Smørgrav#include <stdarg.h>
211805ab2901SDag-Erling Smørgravint snprintf (char *str, size_t count, const char *fmt, ...);
211905ab2901SDag-Erling Smørgravint vsnprintf (char *str, size_t count, const char *fmt, va_list arg);
212005ab2901SDag-Erling Smørgrav#endif /* HAVE_SNPRINTF or SNPRINTF_RET_BROKEN */
2121b7579f77SDag-Erling SmørgravAHX_CONFIG_INET_PTON(unbound)
2122b7579f77SDag-Erling SmørgravAHX_CONFIG_INET_NTOP(unbound)
2123b7579f77SDag-Erling SmørgravAHX_CONFIG_INET_ATON(unbound)
2124b7579f77SDag-Erling SmørgravAHX_CONFIG_MEMMOVE(unbound)
212517d15b25SDag-Erling SmørgravAHX_CONFIG_STRLCAT(unbound)
2126b7579f77SDag-Erling SmørgravAHX_CONFIG_STRLCPY(unbound)
2127b7579f77SDag-Erling SmørgravAHX_CONFIG_GMTIME_R(unbound)
212809a3aaf3SDag-Erling SmørgravAHX_CONFIG_REALLOCARRAY(unbound)
2129b7579f77SDag-Erling SmørgravAHX_CONFIG_W32_SLEEP
2130b7579f77SDag-Erling SmørgravAHX_CONFIG_W32_USLEEP
2131b7579f77SDag-Erling SmørgravAHX_CONFIG_W32_RANDOM
2132b7579f77SDag-Erling SmørgravAHX_CONFIG_W32_SRANDOM
2133b7579f77SDag-Erling SmørgravAHX_CONFIG_W32_FD_SET_T
2134b7579f77SDag-Erling SmørgravAHX_CONFIG_IPV6_MIN_MTU
2135b7579f77SDag-Erling SmørgravAHX_MEMCMP_BROKEN(unbound)
2136b7579f77SDag-Erling Smørgrav
2137b7579f77SDag-Erling Smørgrav[
2138b7579f77SDag-Erling Smørgrav#ifndef HAVE_CTIME_R
2139b7579f77SDag-Erling Smørgrav#define ctime_r unbound_ctime_r
2140b7579f77SDag-Erling Smørgravchar *ctime_r(const time_t *timep, char *buf);
2141b7579f77SDag-Erling Smørgrav#endif
2142b7579f77SDag-Erling Smørgrav
2143e2d15004SDag-Erling Smørgrav#ifndef HAVE_STRSEP
2144e2d15004SDag-Erling Smørgrav#define strsep unbound_strsep
2145e2d15004SDag-Erling Smørgravchar *strsep(char **stringp, const char *delim);
2146e2d15004SDag-Erling Smørgrav#endif
2147e2d15004SDag-Erling Smørgrav
214805ab2901SDag-Erling Smørgrav#ifndef HAVE_ISBLANK
214905ab2901SDag-Erling Smørgrav#define isblank unbound_isblank
215005ab2901SDag-Erling Smørgravint isblank(int c);
215105ab2901SDag-Erling Smørgrav#endif
215205ab2901SDag-Erling Smørgrav
2153a755b6f6SDag-Erling Smørgrav#ifndef HAVE_EXPLICIT_BZERO
2154a755b6f6SDag-Erling Smørgrav#define explicit_bzero unbound_explicit_bzero
2155a755b6f6SDag-Erling Smørgravvoid explicit_bzero(void* buf, size_t len);
2156a755b6f6SDag-Erling Smørgrav#endif
2157a755b6f6SDag-Erling Smørgrav
21583005e0a3SDag-Erling Smørgrav#if defined(HAVE_INET_NTOP) && !HAVE_DECL_INET_NTOP
21593005e0a3SDag-Erling Smørgravconst char *inet_ntop(int af, const void *src, char *dst, size_t size);
21603005e0a3SDag-Erling Smørgrav#endif
21613005e0a3SDag-Erling Smørgrav
21623005e0a3SDag-Erling Smørgrav#if defined(HAVE_INET_PTON) && !HAVE_DECL_INET_PTON
21633005e0a3SDag-Erling Smørgravint inet_pton(int af, const char* src, void* dst);
21643005e0a3SDag-Erling Smørgrav#endif
21653005e0a3SDag-Erling Smørgrav
2166b7579f77SDag-Erling Smørgrav#if !defined(HAVE_STRPTIME) || !defined(STRPTIME_WORKS)
2167b7579f77SDag-Erling Smørgrav#define strptime unbound_strptime
2168b7579f77SDag-Erling Smørgravstruct tm;
2169b7579f77SDag-Erling Smørgravchar *strptime(const char *s, const char *format, struct tm *tm);
2170b7579f77SDag-Erling Smørgrav#endif
2171b7579f77SDag-Erling Smørgrav
21720eefd307SCy Schubert#if !HAVE_DECL_REALLOCARRAY
21730eefd307SCy Schubertvoid *reallocarray(void *ptr, size_t nmemb, size_t size);
21740eefd307SCy Schubert#endif
21750eefd307SCy Schubert
2176091e9e46SCy Schubert#ifdef HAVE_LIBBSD
2177091e9e46SCy Schubert#include <bsd/string.h>
2178091e9e46SCy Schubert#include <bsd/stdlib.h>
2179091e9e46SCy Schubert#endif
2180091e9e46SCy Schubert
2181ff825849SDag-Erling Smørgrav#ifdef HAVE_LIBRESSL
2182ff825849SDag-Erling Smørgrav#  if !HAVE_DECL_STRLCPY
2183ff825849SDag-Erling Smørgravsize_t strlcpy(char *dst, const char *src, size_t siz);
2184ff825849SDag-Erling Smørgrav#  endif
2185ff825849SDag-Erling Smørgrav#  if !HAVE_DECL_STRLCAT
2186ff825849SDag-Erling Smørgravsize_t strlcat(char *dst, const char *src, size_t siz);
2187ff825849SDag-Erling Smørgrav#  endif
2188ff825849SDag-Erling Smørgrav#  if !HAVE_DECL_ARC4RANDOM && defined(HAVE_ARC4RANDOM)
2189ff825849SDag-Erling Smørgravuint32_t arc4random(void);
2190ff825849SDag-Erling Smørgrav#  endif
2191ff825849SDag-Erling Smørgrav#  if !HAVE_DECL_ARC4RANDOM_UNIFORM && defined(HAVE_ARC4RANDOM_UNIFORM)
2192ff825849SDag-Erling Smørgravuint32_t arc4random_uniform(uint32_t upper_bound);
2193ff825849SDag-Erling Smørgrav#  endif
2194ff825849SDag-Erling Smørgrav#endif /* HAVE_LIBRESSL */
2195ff825849SDag-Erling Smørgrav#ifndef HAVE_ARC4RANDOM
2196ff825849SDag-Erling Smørgravint getentropy(void* buf, size_t len);
2197ff825849SDag-Erling Smørgravuint32_t arc4random(void);
2198ff825849SDag-Erling Smørgravvoid arc4random_buf(void* buf, size_t n);
2199ff825849SDag-Erling Smørgravvoid _ARC4_LOCK(void);
2200ff825849SDag-Erling Smørgravvoid _ARC4_UNLOCK(void);
220157bddd21SDag-Erling Smørgravvoid _ARC4_LOCK_DESTROY(void);
2202ff825849SDag-Erling Smørgrav#endif
2203ff825849SDag-Erling Smørgrav#ifndef HAVE_ARC4RANDOM_UNIFORM
2204ff825849SDag-Erling Smørgravuint32_t arc4random_uniform(uint32_t upper_bound);
2205ff825849SDag-Erling Smørgrav#endif
2206ff825849SDag-Erling Smørgrav#ifdef COMPAT_SHA512
2207ff825849SDag-Erling Smørgrav#ifndef SHA512_DIGEST_LENGTH
2208ff825849SDag-Erling Smørgrav#define SHA512_BLOCK_LENGTH		128
2209ff825849SDag-Erling Smørgrav#define SHA512_DIGEST_LENGTH		64
2210ff825849SDag-Erling Smørgrav#define SHA512_DIGEST_STRING_LENGTH	(SHA512_DIGEST_LENGTH * 2 + 1)
2211ff825849SDag-Erling Smørgravtypedef struct _SHA512_CTX {
2212ff825849SDag-Erling Smørgrav	uint64_t	state[8];
2213ff825849SDag-Erling Smørgrav	uint64_t	bitcount[2];
2214ff825849SDag-Erling Smørgrav	uint8_t	buffer[SHA512_BLOCK_LENGTH];
2215ff825849SDag-Erling Smørgrav} SHA512_CTX;
2216ff825849SDag-Erling Smørgrav#endif /* SHA512_DIGEST_LENGTH */
2217ff825849SDag-Erling Smørgravvoid SHA512_Init(SHA512_CTX*);
2218ff825849SDag-Erling Smørgravvoid SHA512_Update(SHA512_CTX*, void*, size_t);
2219ff825849SDag-Erling Smørgravvoid SHA512_Final(uint8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*);
2220ff825849SDag-Erling Smørgravunsigned char *SHA512(void* data, unsigned int data_len, unsigned char *digest);
2221ff825849SDag-Erling Smørgrav#endif /* COMPAT_SHA512 */
2222ff825849SDag-Erling Smørgrav
2223ff825849SDag-Erling Smørgrav
2224ff825849SDag-Erling Smørgrav
2225b7579f77SDag-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))
2226b7579f77SDag-Erling Smørgrav   /* using version of libevent that is not threadsafe. */
2227b7579f77SDag-Erling Smørgrav#  define LIBEVENT_SIGNAL_PROBLEM 1
2228b7579f77SDag-Erling Smørgrav#endif
2229b7579f77SDag-Erling Smørgrav
2230b7579f77SDag-Erling Smørgrav#ifndef CHECKED_INET6
2231b7579f77SDag-Erling Smørgrav#  define CHECKED_INET6
2232b7579f77SDag-Erling Smørgrav#  ifdef AF_INET6
2233b7579f77SDag-Erling Smørgrav#    define INET6
2234b7579f77SDag-Erling Smørgrav#  else
2235b7579f77SDag-Erling Smørgrav#    define AF_INET6        28
2236b7579f77SDag-Erling Smørgrav#  endif
2237b7579f77SDag-Erling Smørgrav#endif /* CHECKED_INET6 */
2238b7579f77SDag-Erling Smørgrav
2239b7579f77SDag-Erling Smørgrav#ifndef HAVE_GETADDRINFO
2240b7579f77SDag-Erling Smørgravstruct sockaddr_storage;
2241b7579f77SDag-Erling Smørgrav#include "compat/fake-rfc2553.h"
2242b7579f77SDag-Erling Smørgrav#endif
2243b7579f77SDag-Erling Smørgrav
2244b7579f77SDag-Erling Smørgrav#ifdef UNBOUND_ALLOC_STATS
2245b7579f77SDag-Erling Smørgrav#  define malloc(s) unbound_stat_malloc_log(s, __FILE__, __LINE__, __func__)
2246b7579f77SDag-Erling Smørgrav#  define calloc(n,s) unbound_stat_calloc_log(n, s, __FILE__, __LINE__, __func__)
2247b7579f77SDag-Erling Smørgrav#  define free(p) unbound_stat_free_log(p, __FILE__, __LINE__, __func__)
2248b7579f77SDag-Erling Smørgrav#  define realloc(p,s) unbound_stat_realloc_log(p, s, __FILE__, __LINE__, __func__)
2249b7579f77SDag-Erling Smørgravvoid *unbound_stat_malloc(size_t size);
2250b7579f77SDag-Erling Smørgravvoid *unbound_stat_calloc(size_t nmemb, size_t size);
2251b7579f77SDag-Erling Smørgravvoid unbound_stat_free(void *ptr);
2252b7579f77SDag-Erling Smørgravvoid *unbound_stat_realloc(void *ptr, size_t size);
2253b7579f77SDag-Erling Smørgravvoid *unbound_stat_malloc_log(size_t size, const char* file, int line,
2254b7579f77SDag-Erling Smørgrav	const char* func);
2255b7579f77SDag-Erling Smørgravvoid *unbound_stat_calloc_log(size_t nmemb, size_t size, const char* file,
2256b7579f77SDag-Erling Smørgrav	int line, const char* func);
2257b7579f77SDag-Erling Smørgravvoid unbound_stat_free_log(void *ptr, const char* file, int line,
2258b7579f77SDag-Erling Smørgrav	const char* func);
2259b7579f77SDag-Erling Smørgravvoid *unbound_stat_realloc_log(void *ptr, size_t size, const char* file,
2260b7579f77SDag-Erling Smørgrav	int line, const char* func);
2261b7579f77SDag-Erling Smørgrav#elif defined(UNBOUND_ALLOC_LITE)
2262b7579f77SDag-Erling Smørgrav#  include "util/alloc.h"
2263b7579f77SDag-Erling Smørgrav#endif /* UNBOUND_ALLOC_LITE and UNBOUND_ALLOC_STATS */
2264b7579f77SDag-Erling Smørgrav
2265b7579f77SDag-Erling Smørgrav/** default port for DNS traffic. */
2266b7579f77SDag-Erling Smørgrav#define UNBOUND_DNS_PORT 53
22670fb34990SDag-Erling Smørgrav/** default port for DNS over TLS traffic. */
22680fb34990SDag-Erling Smørgrav#define UNBOUND_DNS_OVER_TLS_PORT 853
2269c0caa2e2SCy Schubert/** default port for DNS over HTTPS traffic. */
2270c0caa2e2SCy Schubert#define UNBOUND_DNS_OVER_HTTPS_PORT 443
2271b7579f77SDag-Erling Smørgrav/** default port for unbound control traffic, registered port with IANA,
2272b7579f77SDag-Erling Smørgrav    ub-dns-control  8953/tcp    unbound dns nameserver control */
2273b7579f77SDag-Erling Smørgrav#define UNBOUND_CONTROL_PORT 8953
2274b7579f77SDag-Erling Smørgrav/** the version of unbound-control that this software implements */
2275b7579f77SDag-Erling Smørgrav#define UNBOUND_CONTROL_VERSION 1
2276b7579f77SDag-Erling Smørgrav
2277b7579f77SDag-Erling Smørgrav])
2278b7579f77SDag-Erling Smørgrav
2279ff825849SDag-Erling Smørgravdnl if we build from source tree, the man pages need @date@ and @version@
2280ff825849SDag-Erling Smørgravdnl if this is a distro tarball, that was already done by makedist.sh
2281ff825849SDag-Erling SmørgravAC_SUBST(version, [VERSION_MAJOR.VERSION_MINOR.VERSION_MICRO])
2282ff825849SDag-Erling SmørgravAC_SUBST(date, [`date +'%b %e, %Y'`])
2283ff825849SDag-Erling Smørgrav
2284091e9e46SCy 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])
2285f44e67d1SCy SchubertAC_CONFIG_HEADERS([config.h])
2286b7579f77SDag-Erling SmørgravAC_OUTPUT
2287