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