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