]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - configure.ac
unbound: Vendor import 1.19.0
[FreeBSD/FreeBSD.git] / configure.ac
1 #                                               -*- Autoconf -*-
2 # Process this file with autoconf to produce a configure script.
3 AC_PREREQ([2.56])
4 sinclude(acx_nlnetlabs.m4)
5 sinclude(ax_pthread.m4)
6 sinclude(acx_python.m4)
7 sinclude(ac_pkg_swig.m4)
8 sinclude(dnstap/dnstap.m4)
9 sinclude(dnscrypt/dnscrypt.m4)
10
11 # must be numbers. ac_defun because of later processing
12 m4_define([VERSION_MAJOR],[1])
13 m4_define([VERSION_MINOR],[19])
14 m4_define([VERSION_MICRO],[0])
15 AC_INIT([unbound],m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]),[unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues],[unbound])
16 AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR])
17 AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR])
18 AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO])
19
20 LIBUNBOUND_CURRENT=9
21 LIBUNBOUND_REVISION=23
22 LIBUNBOUND_AGE=1
23 # 1.0.0 had 0:12:0
24 # 1.0.1 had 0:13:0
25 # 1.0.2 had 0:14:0
26 # 1.1.0 had 0:15:0
27 # 1.1.1 had 0:16:0
28 # 1.2.0 had 0:17:0
29 # 1.2.1 had 0:18:0
30 # 1.3.0 had 1:0:0   # ub_cancel and -export-symbols.
31 # 1.3.1 had 1:1:0
32 # 1.3.2 had 1:2:0
33 # 1.3.3 had 1:3:0
34 # 1.3.4 had 1:4:0
35 # 1.4.0-snapshots had 1:5:0
36 # 1.4.0 had 1:5:0 (not 2:0:0)   # ub_result.why_bogus
37 # 1.4.1 had 2:1:0
38 # 1.4.2 had 2:2:0
39 # 1.4.3 had 2:3:0
40 # 1.4.4 had 2:4:0
41 # 1.4.5 had 2:5:0
42 # 1.4.6 had 2:6:0
43 # 1.4.7 had 2:7:0
44 # 1.4.8 had 2:8:0
45 # 1.4.9 had 2:9:0
46 # 1.4.10 had 2:10:0
47 # 1.4.11 had 2:11:0
48 # 1.4.12 had 2:12:0
49 # 1.4.13 had 2:13:0
50 # and 1.4.13p1 and 1.4.13.p2
51 # 1.4.14 had 2:14:0
52 # 1.4.15 had 3:0:1 # adds ub_version()
53 # 1.4.16 had 3:1:1
54 # 1.4.17 had 3:2:1
55 # 1.4.18 had 3:3:1
56 # 1.4.19 had 3:4:1
57 # 1.4.20 had 4:0:2 # adds libunbound.ttl # but shipped 3:5:1
58 # 1.4.21 had 4:1:2
59 # 1.4.22 had 4:1:2
60 # 1.5.0 had 5:3:3 # adds ub_ctx_add_ta_autr
61 # 1.5.1 had 5:3:3
62 # 1.5.2 had 5:5:3
63 # 1.5.3 had 5:6:3
64 # 1.5.4 had 5:7:3
65 # 1.5.5 had 5:8:3
66 # 1.5.6 had 5:9:3
67 # 1.5.7 had 5:10:3
68 # 1.5.8 had 6:0:4 # adds ub_ctx_set_stub
69 # 1.5.9 had 6:1:4
70 # 1.5.10 had 6:2:4
71 # 1.6.0 had 6:3:4
72 # 1.6.1 had 7:0:5 # ub_callback_t typedef renamed to ub_callback_type
73 # 1.6.2 had 7:1:5
74 # 1.6.3 had 7:2:5
75 # 1.6.4 had 7:3:5
76 # 1.6.5 had 7:4:5
77 # 1.6.6 had 7:5:5
78 # 1.6.7 had 7:6:5
79 # 1.6.8 had 7:7:5
80 # 1.7.0 had 7:8:5
81 # 1.7.1 had 7:9:5
82 # 1.7.2 had 7:10:5
83 # 1.7.3 had 7:11:5
84 # 1.8.0 had 8:0:0 # changes the event callback function signature
85 # 1.8.1 had 8:1:0
86 # 1.8.2 had 8:2:0
87 # 1.8.3 had 8:3:0
88 # 1.9.0 had 9:0:1 # add ub_ctx_set_tls
89 # 1.9.1 had 9:1:1
90 # 1.9.2 had 9:2:1
91 # 1.9.3 had 9:3:1
92 # 1.9.4 had 9:4:1
93 # 1.9.5 had 9:5:1
94 # 1.9.6 had 9:6:1
95 # 1.10.0 had 9:7:1
96 # 1.10.1 had 9:8:1
97 # 1.11.0 had 9:9:1
98 # 1.12.0 had 9:10:1
99 # 1.13.0 had 9:11:1
100 # 1.13.1 had 9:12:1
101 # 1.13.2 had 9:13:1
102 # 1.14.0 had 9:14:1
103 # 1.15.0 had 9:15:1
104 # 1.16.0 had 9:16:1
105 # 1.16.1 had 9:17:1
106 # 1.16.2 had 9:18:1
107 # 1.16.3 had 9:19:1
108 # 1.17.0 had 9:20:1
109 # 1.17.1 had 9:21:1
110 # 1.18.0 had 9:22:1
111 # 1.19.0 had 9:23:1
112
113 #   Current  -- the number of the binary API that we're implementing
114 #   Revision -- which iteration of the implementation of the binary
115 #               API are we supplying?
116 #   Age      -- How many previous binary API versions do we also
117 #               support?
118 #
119 # If we release a new version that does not change the binary API,
120 # increment Revision.
121 #
122 # If we release a new version that changes the binary API, but does
123 # not break programs compiled against the old binary API, increment
124 # Current and Age.  Set Revision to 0, since this is the first
125 # implementation of the new API.
126 #
127 # Otherwise, we're changing the binary API and breaking backward
128 # compatibility with old binaries.  Increment Current.  Set Age to 0,
129 # since we're backward compatible with no previous APIs.  Set Revision
130 # to 0 too.
131 AC_SUBST(LIBUNBOUND_CURRENT)
132 AC_SUBST(LIBUNBOUND_REVISION)
133 AC_SUBST(LIBUNBOUND_AGE)
134
135
136 cmdln="`echo $@ | sed -e 's/\\\\/\\\\\\\\/g' | sed -e 's/"/\\\\"/'g`"
137 AC_DEFINE_UNQUOTED(CONFCMDLINE, ["$cmdln"], [Command line arguments used with configure])
138
139 CFLAGS="$CFLAGS"
140 AC_USE_SYSTEM_EXTENSIONS
141 if test "$ac_cv_header_minix_config_h" = "yes"; then
142         AC_DEFINE(_NETBSD_SOURCE,1, [Enable for compile on Minix])
143 fi
144
145 dnl
146 dnl By default set prefix to /usr/local
147 dnl
148 case "$prefix" in
149         NONE)
150                 prefix="/usr/local"
151         ;;
152 esac
153 case "$exec_prefix" in
154         NONE)
155                 exec_prefix="$prefix"
156         ;;
157 esac
158
159 # are we on MinGW?
160 if uname -s 2>&1 | grep MINGW >/dev/null; then on_mingw="yes"
161 else
162         if echo $host | grep mingw >/dev/null; then on_mingw="yes"
163         else on_mingw="no"; fi
164 fi
165
166 #
167 # Determine configuration file
168 # the eval is to evaluate shell expansion twice
169 UNBOUND_SBIN_DIR=`eval echo "${sbindir}"`
170 AC_SUBST(UNBOUND_SBIN_DIR)
171 UNBOUND_SYSCONF_DIR=`eval echo "${sysconfdir}"`
172 AC_SUBST(UNBOUND_SYSCONF_DIR)
173 UNBOUND_LOCALSTATE_DIR=`eval echo "${localstatedir}"`
174 AC_SUBST(UNBOUND_LOCALSTATE_DIR)
175 if test $on_mingw = "no"; then
176   ub_conf_file=`eval echo "${sysconfdir}/unbound/unbound.conf"`
177 else
178   ub_conf_file="C:\\Program Files\\Unbound\\service.conf"
179 fi
180 AC_ARG_WITH([conf_file],
181         AS_HELP_STRING([--with-conf-file=path],[Pathname to the Unbound configuration file]),
182         [ub_conf_file="$withval"])
183 AC_SUBST(ub_conf_file)
184 ACX_ESCAPE_BACKSLASH($ub_conf_file, hdr_config)
185 AC_DEFINE_UNQUOTED(CONFIGFILE, ["$hdr_config"], [Pathname to the Unbound configuration file])
186 ub_conf_dir=`AS_DIRNAME(["$ub_conf_file"])`
187 AC_SUBST(ub_conf_dir)
188
189 # Determine run, chroot directory and pidfile locations
190 AC_ARG_WITH(run-dir,
191     AS_HELP_STRING([--with-run-dir=path],[set default directory to chdir to (by default dir part of cfg file)]),
192     UNBOUND_RUN_DIR="$withval",
193 if test $on_mingw = no; then
194     UNBOUND_RUN_DIR=`dirname "$ub_conf_file"`
195 else
196     UNBOUND_RUN_DIR=""
197 fi
198 )
199 AC_SUBST(UNBOUND_RUN_DIR)
200 ACX_ESCAPE_BACKSLASH($UNBOUND_RUN_DIR, hdr_run)
201 AC_DEFINE_UNQUOTED(RUN_DIR, ["$hdr_run"], [Directory to chdir to])
202
203 AC_ARG_WITH(chroot-dir,
204     AS_HELP_STRING([--with-chroot-dir=path],[set default directory to chroot to (by default same as run-dir)]),
205     UNBOUND_CHROOT_DIR="$withval",
206 if test $on_mingw = no; then
207     UNBOUND_CHROOT_DIR="$UNBOUND_RUN_DIR"
208 else
209     UNBOUND_CHROOT_DIR=""
210 fi
211 )
212 AC_SUBST(UNBOUND_CHROOT_DIR)
213 ACX_ESCAPE_BACKSLASH($UNBOUND_CHROOT_DIR, hdr_chroot)
214 AC_DEFINE_UNQUOTED(CHROOT_DIR, ["$hdr_chroot"], [Directory to chroot to])
215
216 AC_ARG_WITH(share-dir,
217     AS_HELP_STRING([--with-share-dir=path],[set default directory with shared data (by default same as share/unbound)]),
218     UNBOUND_SHARE_DIR="$withval",
219     UNBOUND_SHARE_DIR="$UNBOUND_RUN_DIR")
220 AC_SUBST(UNBOUND_SHARE_DIR)
221 AC_DEFINE_UNQUOTED(SHARE_DIR, ["$UNBOUND_SHARE_DIR"], [Shared data])
222
223 AC_ARG_WITH(pidfile,
224     AS_HELP_STRING([--with-pidfile=filename],[set default pathname to unbound pidfile (default run-dir/unbound.pid)]),
225     UNBOUND_PIDFILE="$withval",
226 if test $on_mingw = no; then
227     UNBOUND_PIDFILE="$UNBOUND_RUN_DIR/unbound.pid"
228 else
229     UNBOUND_PIDFILE=""
230 fi
231 )
232 AC_SUBST(UNBOUND_PIDFILE)
233 ACX_ESCAPE_BACKSLASH($UNBOUND_PIDFILE, hdr_pid)
234 AC_DEFINE_UNQUOTED(PIDFILE, ["$hdr_pid"], [default pidfile location])
235
236 AC_ARG_WITH(rootkey-file,
237     AS_HELP_STRING([--with-rootkey-file=filename],[set default pathname to root key file (default run-dir/root.key). This file is read and written.]),
238     UNBOUND_ROOTKEY_FILE="$withval",
239 if test $on_mingw = no; then
240     UNBOUND_ROOTKEY_FILE="$UNBOUND_RUN_DIR/root.key"
241 else
242     UNBOUND_ROOTKEY_FILE="C:\\Program Files\\Unbound\\root.key"
243 fi
244 )
245 AC_SUBST(UNBOUND_ROOTKEY_FILE)
246 ACX_ESCAPE_BACKSLASH($UNBOUND_ROOTKEY_FILE, hdr_rkey)
247 AC_DEFINE_UNQUOTED(ROOT_ANCHOR_FILE, ["$hdr_rkey"], [default rootkey location])
248
249 AC_ARG_WITH(rootcert-file,
250     AS_HELP_STRING([--with-rootcert-file=filename],[set default pathname to root update certificate file (default run-dir/icannbundle.pem).  This file need not exist if you are content with the builtin.]),
251     UNBOUND_ROOTCERT_FILE="$withval",
252 if test $on_mingw = no; then
253     UNBOUND_ROOTCERT_FILE="$UNBOUND_RUN_DIR/icannbundle.pem"
254 else
255     UNBOUND_ROOTCERT_FILE="C:\\Program Files\\Unbound\\icannbundle.pem"
256 fi
257 )
258 AC_SUBST(UNBOUND_ROOTCERT_FILE)
259 ACX_ESCAPE_BACKSLASH($UNBOUND_ROOTCERT_FILE, hdr_rpem)
260 AC_DEFINE_UNQUOTED(ROOT_CERT_FILE, ["$hdr_rpem"], [default rootcert location])
261
262 AC_ARG_WITH(username,
263     AS_HELP_STRING([--with-username=user],[set default user that unbound changes to (default user is unbound)]),
264     UNBOUND_USERNAME="$withval",
265     UNBOUND_USERNAME="unbound")
266 AC_SUBST(UNBOUND_USERNAME)
267 AC_DEFINE_UNQUOTED(UB_USERNAME, ["$UNBOUND_USERNAME"], [default username])
268
269 AC_DEFINE(WINVER, 0x0502, [the version of the windows API enabled])
270 ACX_RSRC_VERSION(wnvs)
271 AC_DEFINE_UNQUOTED(RSRC_PACKAGE_VERSION, [$wnvs], [version number for resource files])
272
273 # Checks for typedefs, structures, and compiler characteristics.
274 AC_C_CONST
275 AC_LANG([C])
276 # allow user to override the -g -O2 flags.
277 default_cflags=no
278 if test "x$CFLAGS" = "x" ; then
279 ACX_CHECK_COMPILER_FLAG(g, [CFLAGS="$CFLAGS -g"])
280 ACX_CHECK_COMPILER_FLAG(O2, [CFLAGS="$CFLAGS -O2"])
281 default_cflags=yes
282 fi
283 m4_version_prereq([2.70], [AC_PROG_CC], [AC_PROG_CC_STDC])
284 ACX_DEPFLAG
285 ACX_DETERMINE_EXT_FLAGS_UNBOUND
286
287 # debug mode flags warnings
288 AC_ARG_ENABLE(checking, AS_HELP_STRING([--enable-checking],[Enable warnings, asserts, makefile-dependencies]))
289 AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug],[same as enable-checking]))
290 if test "$enable_debug" = "yes"; then debug_enabled="$enable_debug";
291 else debug_enabled="$enable_checking"; fi
292 AC_SUBST(debug_enabled)
293 case "$debug_enabled" in
294         yes)
295                 ACX_CHECK_COMPILER_FLAG(W, [CFLAGS="$CFLAGS -W"])
296                 ACX_CHECK_COMPILER_FLAG(Wall, [CFLAGS="$CFLAGS -Wall"])
297                 ACX_CHECK_COMPILER_FLAG(Wextra, [CFLAGS="$CFLAGS -Wextra"])
298                 ACX_CHECK_COMPILER_FLAG(Wdeclaration-after-statement, [CFLAGS="$CFLAGS -Wdeclaration-after-statement"])
299                 AC_DEFINE([UNBOUND_DEBUG], [], [define this to enable debug checks.])
300                 ;;
301         no|*)
302                 # nothing to do.
303                 ;;
304 esac
305 if test "$default_cflags" = "yes"; then
306         # only when CFLAGS was "" at the start, if the users wants to
307         # override we shouldn't add default cflags, because they wouldn't
308         # be able to turn off these options and set the CFLAGS wanted.
309         ACX_CHECK_FLTO
310         ACX_CHECK_PIE
311         ACX_CHECK_RELRO_NOW
312 fi
313
314 AC_C_INLINE
315 ACX_CHECK_FORMAT_ATTRIBUTE
316 ACX_CHECK_UNUSED_ATTRIBUTE
317
318 AC_DEFUN([CHECK_WEAK_ATTRIBUTE],
319 [AC_REQUIRE([AC_PROG_CC])
320 AC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "weak" attribute)
321 AC_CACHE_VAL(ac_cv_c_weak_attribute,
322 [ac_cv_c_weak_attribute=no
323 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h>
324 __attribute__((weak)) void f(int x) { printf("%d", x); }
325 ]], [[
326    f(1);
327 ]])],[ac_cv_c_weak_attribute="yes"],[ac_cv_c_weak_attribute="no"])
328 ])
329
330 AC_MSG_RESULT($ac_cv_c_weak_attribute)
331 if test $ac_cv_c_weak_attribute = yes; then
332   AC_DEFINE(HAVE_ATTR_WEAK, 1, [Whether the C compiler accepts the "weak" attribute])
333   AC_DEFINE(ATTR_WEAK, [__attribute__((weak))], [apply the weak attribute to a symbol])
334 fi
335 ])dnl End of CHECK_WEAK_ATTRIBUTE
336
337 CHECK_WEAK_ATTRIBUTE
338
339 AC_DEFUN([CHECK_NORETURN_ATTRIBUTE],
340 [AC_REQUIRE([AC_PROG_CC])
341 AC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "noreturn" attribute)
342 AC_CACHE_VAL(ac_cv_c_noreturn_attribute,
343 [ac_cv_c_noreturn_attribute=no
344 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h>
345 __attribute__((noreturn)) void f(int x) { printf("%d", x); }
346 ]], [[
347    f(1);
348 ]])],[ac_cv_c_noreturn_attribute="yes"],[ac_cv_c_noreturn_attribute="no"])
349 ])
350
351 AC_MSG_RESULT($ac_cv_c_noreturn_attribute)
352 if test $ac_cv_c_noreturn_attribute = yes; then
353   AC_DEFINE(HAVE_ATTR_NORETURN, 1, [Whether the C compiler accepts the "noreturn" attribute])
354   AC_DEFINE(ATTR_NORETURN, [__attribute__((__noreturn__))], [apply the noreturn attribute to a function that exits the program])
355 fi
356 ])dnl End of CHECK_NORETURN_ATTRIBUTE
357
358 CHECK_NORETURN_ATTRIBUTE
359
360 if test "$srcdir" != "."; then
361         CPPFLAGS="$CPPFLAGS -I$srcdir"
362 fi
363
364 AC_DEFUN([ACX_YYLEX_DESTROY], [
365         AC_MSG_CHECKING([for yylex_destroy])
366         if echo %% | $LEX -t 2>&1 | grep yylex_destroy >/dev/null 2>&1; then
367                 AC_DEFINE(LEX_HAS_YYLEX_DESTROY, 1, [if lex has yylex_destroy])
368                 AC_MSG_RESULT(yes)
369         else AC_MSG_RESULT(no);
370                 LEX=":"
371         fi
372 ])
373
374 AC_DEFUN([ACX_YYLEX_OPTION], [
375         AC_MSG_CHECKING([for lex %option])
376         if cat <<EOF | $LEX -t 2>&1 | grep yy_delete_buffer >/dev/null 2>&1; then
377 %option nounput
378 %%
379 EOF
380                 AC_MSG_RESULT(yes)
381         else AC_MSG_RESULT(no);
382                 LEX=":"
383         fi
384 ])
385
386 AC_PROG_LEX([noyywrap])
387 if test "$LEX" != "" -a "$LEX" != ":"; then
388 ACX_YYLEX_DESTROY
389 fi
390 if test "$LEX" != "" -a "$LEX" != ":"; then
391 ACX_YYLEX_OPTION
392 fi
393 if test "$LEX" = "" -o "$LEX" = ":"; then
394         if test ! -f util/configlexer.c; then
395                 AC_MSG_ERROR([no lex and no util/configlexer.c: need flex and bison to compile from source repository.])
396         fi
397 fi
398 AC_PROG_YACC
399 if test "$YACC" = "" -o "$YACC" = ":"; then
400         if test ! -f util/configparser.c; then
401                 AC_MSG_ERROR([no yacc and no util/configparser.c: need flex and bison to compile from source repository.])
402         fi
403 fi
404 AC_CHECK_PROG(doxygen, doxygen, doxygen)
405 AC_CHECK_TOOL(STRIP, strip)
406 ACX_LIBTOOL_C_ONLY
407
408 # pkg-config is only needed for these options, do not require it otherwise
409 if test "$enable_systemd" = "yes" -o "$with_pyunbound" = "yes" -o "$with_pythonmod" = "yes"; then
410 PKG_PROG_PKG_CONFIG
411 fi
412
413 # Checks for header files.
414 AC_CHECK_HEADERS([stdarg.h stdbool.h netinet/in.h netinet/tcp.h sys/param.h sys/select.h sys/socket.h sys/un.h sys/uio.h sys/resource.h arpa/inet.h syslog.h netdb.h sys/wait.h pwd.h glob.h grp.h login_cap.h winsock2.h ws2tcpip.h endian.h sys/endian.h libkern/OSByteOrder.h sys/ipc.h sys/shm.h ifaddrs.h poll.h],,, [AC_INCLUDES_DEFAULT])
415 # net/if.h portability for Darwin see:
416 # https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Header-Portability.html
417 AC_CHECK_HEADERS([net/if.h],,, [
418 #include <stdio.h>
419 #ifdef STDC_HEADERS
420 # include <stdlib.h>
421 # include <stddef.h>
422 #else
423 # ifdef HAVE_STDLIB_H
424 #  include <stdlib.h>
425 # endif
426 #endif
427 #ifdef HAVE_SYS_SOCKET_H
428 # include <sys/socket.h>
429 #endif
430 ])
431
432 # Check for Apple header. This uncovers TARGET_OS_IPHONE, TARGET_OS_TV or TARGET_OS_WATCH
433 AC_CHECK_HEADERS([TargetConditionals.h],,, [AC_INCLUDES_DEFAULT])
434 AC_CHECK_HEADERS([netioapi.h],,, [AC_INCLUDES_DEFAULT
435 #if HAVE_SYS_PARAM_H
436 #include <sys/param.h>
437 #endif
438
439 #ifdef HAVE_SYS_SOCKET_H
440 #include <sys/socket.h>
441 #endif
442
443 #ifdef HAVE_SYS_UIO_H
444 #include <sys/uio.h>
445 #endif
446
447 #ifdef HAVE_NETINET_IN_H
448 #include <netinet/in.h>
449 #endif
450
451 #ifdef HAVE_NETINET_TCP_H
452 #include <netinet/tcp.h>
453 #endif
454
455 #ifdef HAVE_ARPA_INET_H
456 #include <arpa/inet.h>
457 #endif
458
459 #ifdef HAVE_WINSOCK2_H
460 #include <winsock2.h>
461 #endif
462
463 #ifdef HAVE_WS2TCPIP_H
464 #include <ws2tcpip.h>
465 #endif
466 ])
467
468 # Check for Linux timestamping headers
469 AC_CHECK_HEADERS([linux/net_tstamp.h],,, [AC_INCLUDES_DEFAULT])
470
471 # check for types.  
472 # Using own tests for int64* because autoconf builtin only give 32bit.
473 AC_CHECK_TYPE(int8_t, signed char)
474 AC_CHECK_TYPE(int16_t, short)
475 AC_CHECK_TYPE(int32_t, int)
476 AC_CHECK_TYPE(int64_t, long long)
477 AC_CHECK_TYPE(uint8_t, unsigned char)
478 AC_CHECK_TYPE(uint16_t, unsigned short)
479 AC_CHECK_TYPE(uint32_t, unsigned int)
480 AC_CHECK_TYPE(uint64_t, unsigned long long)
481 AC_TYPE_SIZE_T
482 AC_CHECK_TYPE(ssize_t, int)
483 AC_TYPE_UID_T
484 AC_TYPE_PID_T
485 AC_TYPE_OFF_T
486 ACX_TYPE_U_CHAR
487 ACX_TYPE_RLIM_T
488 ACX_TYPE_SOCKLEN_T
489 ACX_TYPE_IN_ADDR_T
490 ACX_TYPE_IN_PORT_T
491 ACX_CHECK_MEMCMP_SIGNED
492
493 AC_CHECK_SIZEOF(time_t,,[
494 AC_INCLUDES_DEFAULT
495 #ifdef TIME_WITH_SYS_TIME
496 # include <sys/time.h>
497 # include <time.h>
498 #else
499 # ifdef HAVE_SYS_TIME_H
500 #  include <sys/time.h>
501 # else
502 #  include <time.h>
503 # endif
504 #endif
505 ])
506 AC_CHECK_SIZEOF(size_t)
507
508 # add option to disable the evil rpath
509 ACX_ARG_RPATH
510 AC_SUBST(RUNTIME_PATH)
511
512 # check to see if libraries are needed for these functions.
513 AC_SEARCH_LIBS([inet_pton], [nsl])
514 AC_SEARCH_LIBS([socket], [socket])
515
516 # check whether strptime also works
517 AC_DEFUN([AC_CHECK_STRPTIME_WORKS],
518 [AC_REQUIRE([AC_PROG_CC])
519 AC_MSG_CHECKING(whether strptime works)
520 if test c${cross_compiling} = cno; then
521 AC_RUN_IFELSE([AC_LANG_SOURCE([[
522 #define _XOPEN_SOURCE 600
523 #include <time.h>
524 int main(void) { struct tm tm; char *res;
525 res = 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);
526 if (!res) return 2;
527 res = strptime("20070207111842", "%Y%m%d%H%M%S", &tm);
528 if (!res) return 1; return 0; }
529 ]])] , [eval "ac_cv_c_strptime_works=yes"], [eval "ac_cv_c_strptime_works=no"],
530 [eval "ac_cv_c_strptime_works=maybe"])
531 else
532 eval "ac_cv_c_strptime_works=maybe"
533 fi
534 AC_MSG_RESULT($ac_cv_c_strptime_works)
535 if test $ac_cv_c_strptime_works = no; then
536 AC_LIBOBJ(strptime)
537 else
538 AC_DEFINE_UNQUOTED([STRPTIME_WORKS], 1, [use default strptime.])
539 fi
540 ])dnl
541
542 # check some functions of the OS before linking libs (while still runnable).
543 AC_FUNC_CHOWN
544 AC_FUNC_FORK
545 AC_DEFINE(RETSIGTYPE,void,[Return type of signal handlers, but autoconf 2.70 says 'your code may safely assume C89 semantics that RETSIGTYPE is void.'])
546 AC_FUNC_FSEEKO
547 ACX_SYS_LARGEFILE
548 ACX_CHECK_NONBLOCKING_BROKEN
549 ACX_MKDIR_ONE_ARG
550 AC_CHECK_FUNCS([strptime],[AC_CHECK_STRPTIME_WORKS],[AC_LIBOBJ([strptime])])
551
552 # check if we can use SO_REUSEPORT
553 reuseport_default=0
554 if echo "$host" | $GREP -i -e linux >/dev/null; then reuseport_default=1; fi
555 if echo "$host" | $GREP -i -e dragonfly >/dev/null; then reuseport_default=1; fi
556 if test "$reuseport_default" = 1; then
557         AC_DEFINE(REUSEPORT_DEFAULT, 1, [if REUSEPORT is enabled by default])
558 else
559         AC_DEFINE(REUSEPORT_DEFAULT, 0, [if REUSEPORT is enabled by default])
560 fi
561
562 # Include systemd.m4 - begin
563 sinclude(systemd.m4)
564 # Include systemd.m4 - end
565
566 # set memory allocation checking if requested
567 AC_ARG_ENABLE(alloc-checks, AS_HELP_STRING([--enable-alloc-checks],[ enable to memory allocation statistics, for debug purposes ]),
568         , )
569 AC_ARG_ENABLE(alloc-lite, AS_HELP_STRING([--enable-alloc-lite],[ enable for lightweight alloc assertions, for debug purposes ]),
570         , )
571 AC_ARG_ENABLE(alloc-nonregional, AS_HELP_STRING([--enable-alloc-nonregional],[ enable nonregional allocs, slow but exposes regional allocations to other memory purifiers, for debug purposes ]),
572         , )
573 if test x_$enable_alloc_nonregional = x_yes; then
574         AC_DEFINE(UNBOUND_ALLOC_NONREGIONAL, 1, [use malloc not regions, for debug use])
575 fi
576 if test x_$enable_alloc_checks = x_yes; then
577         AC_DEFINE(UNBOUND_ALLOC_STATS, 1, [use statistics for allocs and frees, for debug use])
578         SLDNS_ALLOCCHECK_EXTRA_OBJ="alloc.lo log.lo"
579         AC_SUBST(SLDNS_ALLOCCHECK_EXTRA_OBJ)
580         ASYNCLOOK_ALLOCCHECK_EXTRA_OBJ="alloc.lo"
581         AC_SUBST(ASYNCLOOK_ALLOCCHECK_EXTRA_OBJ)
582 else
583         if test x_$enable_alloc_lite = x_yes; then
584                 AC_DEFINE(UNBOUND_ALLOC_LITE, 1, [use to enable lightweight alloc assertions, for debug use])
585         else
586                 ACX_FUNC_MALLOC([unbound])
587         fi
588 fi
589
590 # check windows threads (we use them, not pthreads, on windows).
591 if test "$on_mingw" = "yes"; then
592 # check windows threads
593         AC_CHECK_HEADERS([windows.h],,, [AC_INCLUDES_DEFAULT])
594         AC_MSG_CHECKING([for CreateThread])
595         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
596 #ifdef HAVE_WINDOWS_H
597 #include <windows.h>
598 #endif
599 ], [
600         HANDLE t = CreateThread(NULL, 0, NULL, NULL, 0, NULL);
601 ])],
602         AC_MSG_RESULT(yes)
603         AC_DEFINE(HAVE_WINDOWS_THREADS, 1, [Using Windows threads])
604 ,
605         AC_MSG_RESULT(no)
606 )
607
608 else
609 # not on mingw, check thread libraries.
610
611 # check for thread library.
612 # check this first, so that the pthread lib does not get linked in via
613 # libssl or libpython, and thus distorts the tests, and we end up using
614 # the non-threadsafe C libraries.
615 AC_ARG_WITH(pthreads, AS_HELP_STRING([--with-pthreads],[use pthreads library, or --without-pthreads to disable threading support.]),
616  [ ],[ withval="yes" ])
617 ub_have_pthreads=no
618 if test x_$withval != x_no; then
619         AX_PTHREAD([
620                 AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.])
621                 if test -n "$PTHREAD_LIBS"; then
622                   LIBS="$PTHREAD_LIBS $LIBS"
623                 fi
624                 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
625                 CC="$PTHREAD_CC"
626                 ub_have_pthreads=yes
627                 AC_CHECK_TYPES([pthread_spinlock_t, pthread_rwlock_t],,,[#include <pthread.h>])
628                 AC_CHECK_SIZEOF([unsigned long])
629                 AC_CHECK_SIZEOF(pthread_t)
630
631                 if echo "$CFLAGS" | $GREP -e "-pthread" >/dev/null; then
632                 AC_MSG_CHECKING([if -pthread unused during linking])
633                 # catch clang warning 'argument unused during compilation'
634                 AC_LANG_CONFTEST([AC_LANG_SOURCE(AC_INCLUDES_DEFAULT
635 [[
636 int main(void) {return 0;}
637 ]])])
638                 pthread_unused="yes"
639                 # first compile
640                 echo "$CC $CFLAGS -c conftest.c -o conftest.o" >&AS_MESSAGE_LOG_FD
641                 $CC $CFLAGS -c conftest.c -o conftest.o 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD
642                 if test $? = 0; then
643                         # then link
644                         echo "$CC $CFLAGS -Werror $LDFLAGS $LIBS -o conftest contest.o" >&AS_MESSAGE_LOG_FD
645                         $CC $CFLAGS -Werror $LDFLAGS $LIBS -o conftest conftest.o 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD
646                         if test $? -ne 0; then
647                                 AC_MSG_RESULT(yes)
648                                 CFLAGS=`echo "$CFLAGS" | sed -e 's/-pthread//'`
649                                 PTHREAD_CFLAGS_ONLY="-pthread"
650                                 AC_SUBST(PTHREAD_CFLAGS_ONLY)
651                         else
652                                 AC_MSG_RESULT(no)
653                         fi
654                 else
655                         AC_MSG_RESULT(no)
656                 fi # endif cc successful
657                 rm -f conftest conftest.c conftest.o
658                 fi # endif -pthread in CFLAGS
659
660                 ])
661 fi
662
663 # check solaris thread library
664 AC_ARG_WITH(solaris-threads, AS_HELP_STRING([--with-solaris-threads],[use solaris native thread library.]), [ ],[ withval="no" ])
665 ub_have_sol_threads=no
666 if test x_$withval != x_no; then
667         if test x_$ub_have_pthreads != x_no; then
668             AC_MSG_WARN([Have pthreads already, ignoring --with-solaris-threads])
669         else
670         AC_SEARCH_LIBS(thr_create, [thread],
671         [
672                 AC_DEFINE(HAVE_SOLARIS_THREADS, 1, [Using Solaris threads])
673
674                 ACX_CHECK_COMPILER_FLAG(mt, [CFLAGS="$CFLAGS -mt"],
675                         [CFLAGS="$CFLAGS -D_REENTRANT"])
676                 ub_have_sol_threads=yes
677         ] , [
678                 AC_MSG_ERROR([no solaris threads found.])
679         ])
680         fi
681 fi
682
683 fi # end of non-mingw check of thread libraries
684
685 # Check for SYSLOG_FACILITY
686 AC_ARG_WITH(syslog-facility, AS_HELP_STRING([--with-syslog-facility=LOCAL0 - LOCAL7],[ set SYSLOG_FACILITY, default DAEMON ]),
687         [ UNBOUND_SYSLOG_FACILITY="$withval" ], [])
688 case "${UNBOUND_SYSLOG_FACILITY}" in
689
690   LOCAL[[0-7]]) UNBOUND_SYSLOG_FACILITY="LOG_${UNBOUND_SYSLOG_FACILITY}" ;;
691
692            *) UNBOUND_SYSLOG_FACILITY="LOG_DAEMON" ;;
693
694 esac
695 AC_DEFINE_UNQUOTED(UB_SYSLOG_FACILITY,${UNBOUND_SYSLOG_FACILITY},[the SYSLOG_FACILITY to use, default LOG_DAEMON])
696
697 # Check for dynamic library module
698 AC_ARG_WITH(dynlibmodule,
699    AS_HELP_STRING([--with-dynlibmodule],[build dynamic library module, or --without-dynlibmodule to disable it. (default=no)]),
700    [], [ withval="no" ])
701
702 if test x_$withval != x_no; then
703   AC_DEFINE(WITH_DYNLIBMODULE, 1, [Define if you want dynlib module.])
704   WITH_DYNLIBMODULE=yes
705   AC_SUBST(WITH_DYNLIBMODULE)
706   DYNLIBMOD_OBJ="dynlibmod.lo"
707   AC_SUBST(DYNLIBMOD_OBJ)
708   DYNLIBMOD_HEADER='$(srcdir)/dynlibmod/dynlibmod.h'
709   AC_SUBST(DYNLIBMOD_HEADER)
710   if test $on_mingw = "no"; then
711     # link with -ldl if not already there, for all executables because
712     # dlopen call is in the dynlib module.  For unbound executable, also
713     # export symbols.
714     AC_SEARCH_LIBS([dlopen], [dl])
715     DYNLIBMOD_EXTRALIBS="-export-dynamic"
716   else
717     DYNLIBMOD_EXTRALIBS="-Wl,--export-all-symbols,--out-implib,libunbound.dll.a"
718   fi
719   AC_SUBST(DYNLIBMOD_EXTRALIBS)
720 fi
721
722 # Check for PyUnbound
723 AC_ARG_WITH(pyunbound,
724    AS_HELP_STRING([--with-pyunbound],[build PyUnbound, or --without-pyunbound to skip it. (default=no)]),
725    [], [ withval="no" ])
726
727 ub_test_python=no
728 ub_with_pyunbound=no
729 if test x_$withval != x_no; then
730    ub_with_pyunbound=yes
731    ub_test_python=yes
732 fi
733
734 # Check for Python module
735 AC_ARG_WITH(pythonmodule,
736    AS_HELP_STRING([--with-pythonmodule],[build Python module, or --without-pythonmodule to disable script engine. (default=no)]),
737    [], [ withval="no" ])
738
739 ub_with_pythonmod=no
740 if test x_$withval != x_no; then
741    ub_with_pythonmod=yes
742    ub_test_python=yes
743 fi
744
745 # Check for Python & SWIG only on PyUnbound or PyModule
746 if test x_$ub_test_python != x_no; then
747
748    # Check for Python
749    ub_have_python=no
750    ac_save_LIBS="$LIBS" dnl otherwise AC_PYTHON_DEVEL thrashes $LIBS
751    AC_PYTHON_DEVEL
752    if test ! -z "$PYTHON_VERSION"; then
753         badversion="no"
754         if test "$PYTHON_VERSION_MAJOR" -lt 2; then
755                 badversion="yes"
756         fi
757         if test "$PYTHON_VERSION_MAJOR" -eq 2 -a "$PYTHON_VERSION_MINOR" -lt 4; then
758                 badversion="yes"
759         fi
760         if test "$badversion" = "yes"; then
761                 AC_MSG_ERROR([Python version >= 2.4.0 is required])
762         fi
763
764       [PY_MAJOR_VERSION="`$PYTHON -c \"import sys; print(sys.version_info[0])\"`"]
765       AC_SUBST(PY_MAJOR_VERSION)
766       # Have Python
767       AC_DEFINE(HAVE_PYTHON,1,[Define if you have Python libraries and header files.])
768       if test x_$ub_with_pythonmod != x_no; then
769         if test -n "$LIBS"; then
770           LIBS="$PYTHON_LDFLAGS $LIBS"
771         else
772           LIBS="$PYTHON_LDFLAGS"
773         fi
774       fi
775       PYTHON_LIBS="$PYTHON_LDFLAGS"
776       AC_SUBST(PYTHON_LIBS)
777       if test -n "$CPPFLAGS"; then
778         CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS"
779       else
780         CPPFLAGS="$PYTHON_CPPFLAGS"
781       fi
782       if test "$PYTHON_LIBDIR" != "/usr/lib" -a "$PYTHON_LIBDIR" != "" -a "$PYTHON_LIBDIR" != "/usr/lib64"; then
783         ACX_RUNTIME_PATH_ADD([$PYTHON_LIBDIR])
784       fi
785       ub_have_python=yes
786       PKG_CHECK_EXISTS(["python${PY_MAJOR_VERSION}"],
787                        [PC_PY_DEPENDENCY="python${PY_MAJOR_VERSION}"],
788                        [PC_PY_DEPENDENCY="python"])
789       AC_SUBST(PC_PY_DEPENDENCY)
790
791       # Check for SWIG
792       ub_have_swig=no
793       AC_ARG_ENABLE(swig-version-check, AS_HELP_STRING([--disable-swig-version-check],[Disable swig version check to build python modules with older swig even though that is unreliable]))
794       if test "$enable_swig_version_check" = "yes"; then
795         AC_PROG_SWIG(2.0.1)
796       else
797         AC_PROG_SWIG
798       fi
799       AC_MSG_CHECKING(SWIG)
800       if test ! -x "$SWIG"; then
801          AC_MSG_ERROR([failed to find swig tool, install it, or do not build Python module and PyUnbound])
802       else
803          AC_DEFINE(HAVE_SWIG, 1, [Define if you have Swig libraries and header files.])
804          AC_SUBST(swig, "$SWIG")
805          AC_MSG_RESULT(present)
806
807          # If have Python & SWIG
808          # Declare PythonMod
809          if test x_$ub_with_pythonmod != x_no; then
810             AC_DEFINE(WITH_PYTHONMODULE, 1, [Define if you want Python module.])
811             WITH_PYTHONMODULE=yes
812             AC_SUBST(WITH_PYTHONMODULE)
813             PYTHONMOD_OBJ="pythonmod.lo pythonmod_utils.lo"
814             AC_SUBST(PYTHONMOD_OBJ)
815             PYTHONMOD_HEADER='$(srcdir)/pythonmod/pythonmod.h'
816             AC_SUBST(PYTHONMOD_HEADER)
817             PYTHONMOD_INSTALL=pythonmod-install
818             AC_SUBST(PYTHONMOD_INSTALL)
819             PYTHONMOD_UNINSTALL=pythonmod-uninstall
820             AC_SUBST(PYTHONMOD_UNINSTALL)
821          fi
822
823          # Declare PyUnbound
824          if test x_$ub_with_pyunbound != x_no; then
825             AC_DEFINE(WITH_PYUNBOUND, 1, [Define if you want PyUnbound.])
826             WITH_PYUNBOUND=yes
827             AC_SUBST(WITH_PYUNBOUND)
828             PYUNBOUND_OBJ="libunbound_wrap.lo"
829             AC_SUBST(PYUNBOUND_OBJ)
830             PYUNBOUND_TARGET="_unbound.la"
831             AC_SUBST(PYUNBOUND_TARGET)
832             PYUNBOUND_INSTALL=pyunbound-install
833             AC_SUBST(PYUNBOUND_INSTALL)
834             PYUNBOUND_UNINSTALL=pyunbound-uninstall
835             AC_SUBST(PYUNBOUND_UNINSTALL)
836          fi
837       fi
838    else
839       AC_MSG_RESULT([*** Python libraries not found, won't build PythonMod or PyUnbound ***])
840       ub_with_pyunbound=no
841       ub_with_pythonmod=no
842    fi
843 fi
844
845 if test "`uname`" = "NetBSD"; then
846         NETBSD_LINTFLAGS='"-D__RENAME(x)=" -D_NETINET_IN_H_'
847         AC_SUBST(NETBSD_LINTFLAGS)
848 fi
849
850 if test "`uname`" = "Linux"; then
851         # splint cannot parse modern c99 header files
852         GCC_DOCKER_LINTFLAGS='-syntax'
853         AC_SUBST(GCC_DOCKER_LINTFLAGS)
854 fi
855 CONFIG_DATE=`date +%Y%m%d`
856 AC_SUBST(CONFIG_DATE)
857
858 # Checks for libraries.
859
860 # libnss
861 USE_NSS="no"
862 AC_ARG_WITH([nss], AS_HELP_STRING([--with-nss=path],[use libnss instead of openssl, installed at path.]),
863         [
864         USE_NSS="yes"
865         AC_DEFINE(HAVE_NSS, 1, [Use libnss for crypto])
866         if test "$withval" != "" -a "$withval" != "yes"; then
867                 CPPFLAGS="$CPPFLAGS -I$withval/include/nss3"
868                 LDFLAGS="$LDFLAGS -L$withval/lib"
869                 ACX_RUNTIME_PATH_ADD([$withval/lib])
870                 CPPFLAGS="-I$withval/include/nspr4 $CPPFLAGS"
871         else
872                 CPPFLAGS="$CPPFLAGS -I/usr/include/nss3"
873                 CPPFLAGS="-I/usr/include/nspr4 $CPPFLAGS"
874         fi
875         LIBS="$LIBS -lnss3 -lnspr4"
876         SSLLIB=""
877         PC_CRYPTO_DEPENDENCY="nss nspr"
878         AC_SUBST(PC_CRYPTO_DEPENDENCY)
879         ]
880 )
881
882 # libnettle
883 USE_NETTLE="no"
884 AC_ARG_WITH([nettle], AS_HELP_STRING([--with-nettle=path],[use libnettle as crypto library, installed at path.]),
885         [
886         USE_NETTLE="yes"
887         AC_DEFINE(HAVE_NETTLE, 1, [Use libnettle for crypto])
888         AC_CHECK_HEADERS([nettle/dsa-compat.h],,, [AC_INCLUDES_DEFAULT])
889         if test "$withval" != "" -a "$withval" != "yes"; then
890                 CPPFLAGS="$CPPFLAGS -I$withval/include/nettle"
891                 LDFLAGS="$LDFLAGS -L$withval/lib"
892                 ACX_RUNTIME_PATH_ADD([$withval/lib])
893         else
894                 CPPFLAGS="$CPPFLAGS -I/usr/include/nettle"
895         fi
896         LIBS="$LIBS -lhogweed -lnettle -lgmp"
897         SSLLIB=""
898         PC_CRYPTO_DEPENDENCY="hogweed nettle"
899         AC_SUBST(PC_CRYPTO_DEPENDENCY)
900         ]
901 )
902
903 # openssl
904 if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then
905 ACX_WITH_SSL
906 ACX_LIB_SSL
907 SSLLIB="-lssl"
908
909 PC_CRYPTO_DEPENDENCY=""
910 AC_SUBST(PC_CRYPTO_DEPENDENCY)
911
912 # check if -lcrypt32 is needed because CAPIENG needs that. (on windows)
913 BAKLIBS="$LIBS"
914 LIBS="-lssl $LIBS"
915 AC_MSG_CHECKING([if libssl needs -lcrypt32])
916 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
917         int EVP_sha256(void);
918         (void)EVP_sha256();
919 ]])], [
920         AC_MSG_RESULT([no])
921         LIBS="$BAKLIBS"
922 ], [
923         AC_MSG_RESULT([yes])
924         LIBS="$BAKLIBS"
925         LIBS="$LIBS -lcrypt32"
926 ])
927
928 AC_MSG_CHECKING([for LibreSSL])
929 if grep VERSION_TEXT $ssldir_include/openssl/opensslv.h | grep "LibreSSL" >/dev/null; then
930         AC_MSG_RESULT([yes])
931         AC_DEFINE([HAVE_LIBRESSL], [1], [Define if we have LibreSSL])
932         # libressl provides these compat functions, but they may also be
933         # declared by the OS in libc.  See if they have been declared.
934         AC_CHECK_DECLS([strlcpy,strlcat,arc4random,arc4random_uniform])
935 else
936         AC_MSG_RESULT([no])
937 fi
938 AC_CHECK_HEADERS([openssl/conf.h openssl/engine.h openssl/bn.h openssl/dh.h openssl/dsa.h openssl/rsa.h openssl/core_names.h openssl/param_build.h],,, [AC_INCLUDES_DEFAULT])
939 AC_CHECK_FUNCS([OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_default_properties_is_fips_enabled EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ENGINE_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback EVP_MAC_CTX_set_params OSSL_PARAM_BLD_new BIO_set_callback_ex])
940
941 # these check_funcs need -lssl
942 BAKLIBS="$LIBS"
943 LIBS="-lssl $LIBS"
944 AC_CHECK_FUNCS([OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername X509_VERIFY_PARAM_set1_host SSL_CTX_set_ciphersuites SSL_CTX_set_tlsext_ticket_key_evp_cb SSL_CTX_set_alpn_select_cb SSL_get0_alpn_selected SSL_CTX_set_alpn_protos SSL_get1_peer_certificate])
945 LIBS="$BAKLIBS"
946
947 AC_CHECK_DECLS([SSL_COMP_get_compression_methods,sk_SSL_COMP_pop_free,SSL_CTX_set_ecdh_auto], [], [], [
948 AC_INCLUDES_DEFAULT
949 #ifdef HAVE_OPENSSL_ERR_H
950 #include <openssl/err.h>
951 #endif
952
953 #ifdef HAVE_OPENSSL_RAND_H
954 #include <openssl/rand.h>
955 #endif
956
957 #ifdef HAVE_OPENSSL_CONF_H
958 #include <openssl/conf.h>
959 #endif
960
961 #ifdef HAVE_OPENSSL_ENGINE_H
962 #include <openssl/engine.h>
963 #endif
964 #include <openssl/ssl.h>
965 #include <openssl/evp.h>
966 ])
967
968 if test "$ac_cv_func_HMAC_Init_ex" = "yes"; then
969 # check function return type.
970 AC_MSG_CHECKING(the return type of HMAC_Init_ex)
971 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
972 #ifdef HAVE_OPENSSL_ERR_H
973 #include <openssl/err.h>
974 #endif
975
976 #ifdef HAVE_OPENSSL_RAND_H
977 #include <openssl/rand.h>
978 #endif
979
980 #ifdef HAVE_OPENSSL_CONF_H
981 #include <openssl/conf.h>
982 #endif
983
984 #ifdef HAVE_OPENSSL_ENGINE_H
985 #include <openssl/engine.h>
986 #endif
987 #include <openssl/ssl.h>
988 #include <openssl/evp.h>
989 ], [
990         HMAC_CTX* hmac_ctx = NULL;
991         void* hmac_key = NULL;
992         const EVP_MD* digest = NULL;
993         int x = HMAC_Init_ex(hmac_ctx, hmac_key, 32, digest, NULL);
994         (void)x;
995 ])], [
996         AC_MSG_RESULT(int)
997 ], [
998         AC_MSG_RESULT(void)
999         AC_DEFINE([HMAC_INIT_EX_RETURNS_VOID], 1, [If HMAC_Init_ex() returns void])
1000 ])
1001 fi
1002
1003 fi
1004 AC_SUBST(SSLLIB)
1005
1006 # libbsd
1007 AC_ARG_WITH([libbsd], AS_HELP_STRING([--with-libbsd],[Use portable libbsd functions]), [
1008         AC_CHECK_HEADERS([bsd/string.h bsd/stdlib.h],,, [AC_INCLUDES_DEFAULT])
1009         if test "x$ac_cv_header_bsd_string_h" = xyes -a "x$ac_cv_header_bsd_stdlib_h" = xyes; then
1010                 for func in strlcpy strlcat arc4random arc4random_uniform reallocarray; do
1011                         AC_SEARCH_LIBS([$func], [bsd], [
1012                                 AC_DEFINE(HAVE_LIBBSD, 1, [Use portable libbsd functions])
1013                                 PC_LIBBSD_DEPENDENCY=libbsd
1014                                 AC_SUBST(PC_LIBBSD_DEPENDENCY)
1015                         ])
1016                 done
1017         fi
1018 ])
1019
1020 AC_ARG_ENABLE(sha1, AS_HELP_STRING([--disable-sha1],[Disable SHA1 RRSIG support, does not disable nsec3 support]))
1021 case "$enable_sha1" in
1022         no)
1023         ;;
1024         yes|*)
1025         AC_DEFINE([USE_SHA1], [1], [Define this to enable SHA1 support.])
1026         ;;
1027 esac
1028
1029
1030 AC_ARG_ENABLE(sha2, AS_HELP_STRING([--disable-sha2],[Disable SHA256 and SHA512 RRSIG support]))
1031 case "$enable_sha2" in
1032         no)
1033         ;;
1034         yes|*)
1035         AC_DEFINE([USE_SHA2], [1], [Define this to enable SHA256 and SHA512 support.])
1036         ;;
1037 esac
1038
1039 AC_ARG_ENABLE(subnet, AS_HELP_STRING([--enable-subnet],[Enable client subnet]))
1040 case "$enable_subnet" in
1041         yes)
1042         AC_DEFINE([CLIENT_SUBNET], [1], [Define this to enable client subnet option.])
1043         SUBNET_OBJ="edns-subnet.lo subnetmod.lo addrtree.lo subnet-whitelist.lo"
1044         AC_SUBST(SUBNET_OBJ)
1045         SUBNET_HEADER='$(srcdir)/edns-subnet/subnetmod.h $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/edns-subnet/subnet-whitelist.h $(srcdir)/edns-subnet/addrtree.h'
1046         AC_SUBST(SUBNET_HEADER)
1047         ;;
1048         no|*)
1049         ;;
1050 esac
1051
1052 # check whether gost also works
1053 AC_DEFUN([AC_CHECK_GOST_WORKS],
1054 [AC_REQUIRE([AC_PROG_CC])
1055 AC_MSG_CHECKING([if GOST works])
1056 if test c${cross_compiling} = cno; then
1057 BAKCFLAGS="$CFLAGS"
1058 if test -n "$ssldir"; then
1059         CFLAGS="$CFLAGS -Wl,-rpath,$ssldir_lib"
1060 fi
1061 AC_RUN_IFELSE([AC_LANG_SOURCE([[
1062 #include <string.h>
1063 #include <openssl/ssl.h>
1064 #include <openssl/evp.h>
1065 #include <openssl/engine.h>
1066 #include <openssl/conf.h>
1067 /* routine to load gost (from sldns) */
1068 int load_gost_id(void)
1069 {
1070         static int gost_id = 0;
1071         const EVP_PKEY_ASN1_METHOD* meth;
1072         ENGINE* e;
1073
1074         if(gost_id) return gost_id;
1075
1076         /* see if configuration loaded gost implementation from other engine*/
1077         meth = EVP_PKEY_asn1_find_str(NULL, "gost2001", -1);
1078         if(meth) {
1079                 EVP_PKEY_asn1_get0_info(&gost_id, NULL, NULL, NULL, NULL, meth);
1080                 return gost_id;
1081         }
1082
1083         /* see if engine can be loaded already */
1084         e = ENGINE_by_id("gost");
1085         if(!e) {
1086                 /* load it ourself, in case statically linked */
1087                 ENGINE_load_builtin_engines();
1088                 ENGINE_load_dynamic();
1089                 e = ENGINE_by_id("gost");
1090         }
1091         if(!e) {
1092                 /* no gost engine in openssl */
1093                 return 0;
1094         }
1095         if(!ENGINE_set_default(e, ENGINE_METHOD_ALL)) {
1096                 ENGINE_finish(e);
1097                 ENGINE_free(e);
1098                 return 0;
1099         }
1100
1101         meth = EVP_PKEY_asn1_find_str(&e, "gost2001", -1);
1102         if(!meth) {
1103                 /* algo not found */
1104                 ENGINE_finish(e);
1105                 ENGINE_free(e);
1106                 return 0;
1107         }
1108         EVP_PKEY_asn1_get0_info(&gost_id, NULL, NULL, NULL, NULL, meth);
1109         return gost_id;
1110 }
1111 int main(void) {
1112         EVP_MD_CTX* ctx;
1113         const EVP_MD* md;
1114         unsigned char digest[64]; /* its a 256-bit digest, so uses 32 bytes */
1115         const char* str = "Hello world";
1116         const unsigned char check[] = {
1117                 0x40 , 0xed , 0xf8 , 0x56 , 0x5a , 0xc5 , 0x36 , 0xe1 ,
1118                 0x33 , 0x7c , 0x7e , 0x87 , 0x62 , 0x1c , 0x42 , 0xe0 ,
1119                 0x17 , 0x1b , 0x5e , 0xce , 0xa8 , 0x46 , 0x65 , 0x4d ,
1120                 0x8d , 0x3e , 0x22 , 0x9b , 0xe1 , 0x30 , 0x19 , 0x9d
1121         };
1122         OPENSSL_config(NULL);
1123         (void)load_gost_id();
1124         md = EVP_get_digestbyname("md_gost94");
1125         if(!md) return 1;
1126         memset(digest, 0, sizeof(digest));
1127         ctx = EVP_MD_CTX_create();
1128         if(!ctx) return 2;
1129         if(!EVP_DigestInit_ex(ctx, md, NULL)) return 3;
1130         if(!EVP_DigestUpdate(ctx, str, 10)) return 4;
1131         if(!EVP_DigestFinal_ex(ctx, digest, NULL)) return 5;
1132         /* uncomment to see the hash calculated.
1133                 {int i;
1134                 for(i=0; i<32; i++)
1135                         printf(" %2.2x", (int)digest[i]);
1136                 printf("\n");}
1137         */
1138         if(memcmp(digest, check, sizeof(check)) != 0)
1139                 return 6;
1140         return 0;
1141 }
1142 ]])] , [eval "ac_cv_c_gost_works=yes"], [eval "ac_cv_c_gost_works=no"],
1143 [eval "ac_cv_c_gost_works=maybe"])
1144 CFLAGS="$BAKCFLAGS"
1145 else
1146 eval "ac_cv_c_gost_works=maybe"
1147 fi
1148 AC_MSG_RESULT($ac_cv_c_gost_works)
1149 ])dnl
1150
1151 AC_ARG_ENABLE(gost, AS_HELP_STRING([--disable-gost],[Disable GOST support]))
1152 use_gost="no"
1153 if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then
1154 case "$enable_gost" in
1155         no)
1156         ;;
1157         *)
1158         AC_CHECK_FUNC(EVP_PKEY_set_type_str, [:],[AC_MSG_ERROR([OpenSSL 1.0.0 is needed for GOST support])])
1159         AC_CHECK_FUNC(EC_KEY_new, [], [AC_MSG_ERROR([OpenSSL does not support ECC, needed for GOST support])])
1160         AC_CHECK_GOST_WORKS
1161         if test "$ac_cv_c_gost_works" != no; then
1162                 use_gost="yes"
1163                 AC_DEFINE([USE_GOST], [1], [Define this to enable GOST support.])
1164         fi
1165         ;;
1166 esac
1167 fi dnl !USE_NSS && !USE_NETTLE
1168
1169 AC_ARG_ENABLE(ecdsa, AS_HELP_STRING([--disable-ecdsa],[Disable ECDSA support]))
1170 use_ecdsa="no"
1171 case "$enable_ecdsa" in
1172     no)
1173       ;;
1174     *)
1175       if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then
1176               AC_CHECK_FUNC(ECDSA_sign, [], [AC_MSG_ERROR([OpenSSL does not support ECDSA: please upgrade or rerun with --disable-ecdsa])])
1177               AC_CHECK_FUNC(SHA384_Init, [], [AC_MSG_ERROR([OpenSSL does not support SHA384: please upgrade or rerun with --disable-ecdsa])])
1178               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
1179 #include <openssl/evp.h>
1180               ])
1181               # see if OPENSSL 1.0.0 or later (has EVP MD and Verify independency)
1182               AC_MSG_CHECKING([if openssl supports SHA2 and ECDSA with EVP])
1183               if grep OPENSSL_VERSION_TEXT $ssldir_include/openssl/opensslv.h | grep "OpenSSL" >/dev/null; then
1184                 if grep OPENSSL_VERSION_NUMBER $ssldir_include/openssl/opensslv.h | grep 0x0 >/dev/null; then
1185                   AC_MSG_RESULT([no])
1186                   AC_DEFINE_UNQUOTED([USE_ECDSA_EVP_WORKAROUND], [1], [Define this to enable an EVP workaround for older openssl])
1187                 else
1188                   AC_MSG_RESULT([yes])
1189                 fi
1190               else
1191                 # not OpenSSL, thus likely LibreSSL, which supports it
1192                 AC_MSG_RESULT([yes])
1193               fi
1194       fi
1195       # we now know we have ECDSA and the required curves.
1196       AC_DEFINE_UNQUOTED([USE_ECDSA], [1], [Define this to enable ECDSA support.])
1197       use_ecdsa="yes"
1198       ;;
1199 esac
1200
1201 AC_ARG_ENABLE(dsa, AS_HELP_STRING([--disable-dsa],[Disable DSA support]))
1202 use_dsa="no"
1203 case "$enable_dsa" in
1204     yes)
1205       # detect if DSA is supported, and turn it off if not.
1206       if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then
1207       AC_CHECK_FUNC(DSA_SIG_new, [
1208       AC_CHECK_TYPE(DSA_SIG*, [
1209       AC_DEFINE_UNQUOTED([USE_DSA], [1], [Define this to enable DSA support.])
1210       ], [if test "x$enable_dsa" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support DSA and you used --enable-dsa.])
1211                fi ], [
1212 AC_INCLUDES_DEFAULT
1213 #ifdef HAVE_OPENSSL_ERR_H
1214 #include <openssl/err.h>
1215 #endif
1216
1217 #ifdef HAVE_OPENSSL_RAND_H
1218 #include <openssl/rand.h>
1219 #endif
1220
1221 #ifdef HAVE_OPENSSL_CONF_H
1222 #include <openssl/conf.h>
1223 #endif
1224
1225 #ifdef HAVE_OPENSSL_ENGINE_H
1226 #include <openssl/engine.h>
1227 #endif
1228       ])
1229       ], [if test "x$enable_dsa" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support DSA and you used --enable-dsa.])
1230                fi ])
1231       else
1232       AC_DEFINE_UNQUOTED([USE_DSA], [1], [Define this to enable DSA support.])
1233       fi
1234       ;;
1235     *)
1236       # disable dsa by default, RFC 8624 section 3.1, validators MUST NOT
1237       # support DSA for DNSSEC Validation.
1238       ;;
1239 esac
1240
1241 AC_ARG_WITH(deprecate-rsa-1024, AS_HELP_STRING([--with-deprecate-rsa-1024],[Deprecate RSA 1024 bit length, makes that an unsupported key, for use when OpenSSL FIPS refuses 1024 bit verification]))
1242 if test "$with_deprecate_rsa_1024" = "yes"; then
1243         AC_DEFINE([DEPRECATE_RSA_1024], [1], [Deprecate RSA 1024 bit length, makes that an unsupported key])
1244 fi
1245
1246 AC_ARG_ENABLE(ed25519, AS_HELP_STRING([--disable-ed25519],[Disable ED25519 support]))
1247 use_ed25519="no"
1248 case "$enable_ed25519" in
1249     no)
1250       ;;
1251     *)
1252       if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then
1253               AC_CHECK_DECLS([NID_ED25519], [
1254                 use_ed25519="yes"
1255               ], [ if test "x$enable_ed25519" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support ED25519 and you used --enable-ed25519.])
1256                 fi ], [AC_INCLUDES_DEFAULT
1257 #include <openssl/evp.h>
1258               ])
1259       fi
1260       if test $USE_NETTLE = "yes"; then
1261                 AC_CHECK_HEADERS([nettle/eddsa.h], use_ed25519="yes",, [AC_INCLUDES_DEFAULT])
1262       fi
1263       if test $use_ed25519 = "yes"; then
1264                 AC_DEFINE_UNQUOTED([USE_ED25519], [1], [Define this to enable ED25519 support.])
1265       fi
1266       ;;
1267 esac
1268
1269 AC_ARG_ENABLE(ed448, AS_HELP_STRING([--disable-ed448],[Disable ED448 support]))
1270 use_ed448="no"
1271 case "$enable_ed448" in
1272     no)
1273       ;;
1274     *)
1275       if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then
1276               AC_CHECK_DECLS([NID_ED448], [
1277                 use_ed448="yes"
1278               ], [ if test "x$enable_ed448" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support ED448 and you used --enable-ed448.])
1279                 fi ], [AC_INCLUDES_DEFAULT
1280 #include <openssl/evp.h>
1281               ])
1282       fi
1283       if test $use_ed448 = "yes"; then
1284                 AC_DEFINE_UNQUOTED([USE_ED448], [1], [Define this to enable ED448 support.])
1285       fi
1286       ;;
1287 esac
1288
1289 AC_ARG_ENABLE(event-api, AS_HELP_STRING([--enable-event-api],[Enable (experimental) pluggable event base libunbound API installed to unbound-event.h]))
1290 case "$enable_event_api" in
1291     yes)
1292       AC_SUBST(UNBOUND_EVENT_INSTALL, [unbound-event-install])
1293       AC_SUBST(UNBOUND_EVENT_UNINSTALL, [unbound-event-uninstall])
1294       ;;
1295     *)
1296       ;;
1297 esac
1298
1299 AC_ARG_ENABLE(tfo-client, AS_HELP_STRING([--enable-tfo-client],[Enable TCP Fast Open for client mode]))
1300 case "$enable_tfo_client" in
1301         yes)
1302                 case "$host_os" in
1303                         linux*) AC_CHECK_DECL([MSG_FASTOPEN], [AC_MSG_WARN([Check the platform specific TFO kernel parameters are correctly configured to support client mode TFO])],
1304                                 [AC_MSG_ERROR([TCP Fast Open is not available for client mode: please rerun without --enable-tfo-client])],
1305                                 [AC_INCLUDES_DEFAULT
1306 #include <netinet/tcp.h>
1307 ])
1308                                 AC_DEFINE_UNQUOTED([USE_MSG_FASTOPEN], [1], [Define this to enable client TCP Fast Open.])
1309                                 ;;
1310                         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])],
1311                                 [AC_MSG_ERROR([TCP Fast Open is not available for client mode: please rerun without --enable-tfo-client])],
1312                                 [AC_INCLUDES_DEFAULT
1313 #include <sys/socket.h>
1314 ])
1315                                 AC_DEFINE_UNQUOTED([USE_OSX_MSG_FASTOPEN], [1], [Define this to enable client TCP Fast Open.])
1316                                 ;;
1317                 esac
1318                 ;;
1319         no|*)
1320                 ;;
1321 esac
1322
1323 AC_ARG_ENABLE(tfo-server, AS_HELP_STRING([--enable-tfo-server],[Enable TCP Fast Open for server mode]))
1324 case "$enable_tfo_server" in
1325         yes)
1326               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
1327 #include <netinet/tcp.h>
1328               ])
1329                 AC_DEFINE_UNQUOTED([USE_TCP_FASTOPEN], [1], [Define this to enable server TCP Fast Open.])
1330                 ;;
1331         no|*)
1332                 ;;
1333 esac
1334
1335 # check for libevent
1336 AC_ARG_WITH(libevent, AS_HELP_STRING([--with-libevent=pathname],[use libevent (will check /usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr  or you can specify an explicit path). Slower, but allows use of large outgoing port ranges.]),
1337     [ ],[ with_libevent="no" ])
1338 if test "x_$with_libevent" != x_no; then
1339         AC_DEFINE([USE_LIBEVENT], [1], [Define if you enable libevent])
1340         AC_MSG_CHECKING(for libevent)
1341         if test "x_$with_libevent" = x_ -o "x_$with_libevent" = x_yes; then
1342             with_libevent="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
1343         fi
1344         for dir in $with_libevent; do
1345             thedir="$dir"
1346             if test -f "$dir/include/event.h" -o -f "$dir/include/event2/event.h"; then
1347                 found_libevent="yes"
1348                                 dnl assume /usr is in default path.
1349                                 if test "$thedir" != "/usr"; then
1350                                     CPPFLAGS="$CPPFLAGS -I$thedir/include"
1351                                 fi
1352                                 break;
1353                     fi
1354         done
1355         if test x_$found_libevent != x_yes; then
1356                 if test -f "$dir/event.h" -a \( -f "$dir/libevent.la" -o -f "$dir/libev.la" \) ; then
1357                         # libevent source directory
1358                         AC_MSG_RESULT(found in $thedir)
1359                         CPPFLAGS="$CPPFLAGS -I$thedir -I$thedir/include"
1360                         BAK_LDFLAGS_SET="1"
1361                         BAK_LDFLAGS="$LDFLAGS"
1362                         # remove evdns from linking
1363                         mkdir build >/dev/null 2>&1
1364                         mkdir build/libevent >/dev/null 2>&1
1365                         mkdir build/libevent/.libs >/dev/null 2>&1
1366                         ev_files_o=`ls $thedir/*.o | grep -v evdns\.o | grep -v bufferevent_openssl\.o`
1367                         ev_files_lo=`ls $thedir/*.lo | grep -v evdns\.lo | grep -v bufferevent_openssl\.lo`
1368                         ev_files_libso=`ls $thedir/.libs/*.o | grep -v evdns\.o | grep -v bufferevent_openssl\.o`
1369                         cp $ev_files_o build/libevent
1370                         cp $ev_files_lo build/libevent
1371                         cp $ev_files_libso build/libevent/.libs
1372                         LATE_LDFLAGS="build/libevent/*.lo -lm"
1373                         LDFLAGS="build/libevent/*.o $LDFLAGS -lm"
1374                 else
1375             AC_MSG_ERROR([Cannot find the libevent library in $with_libevent
1376 You can restart ./configure --with-libevent=no to use a builtin alternative.
1377 Please note that this alternative is not as capable as libevent when using
1378 large outgoing port ranges.  ])
1379                 fi
1380         else
1381             AC_MSG_RESULT(found in $thedir)
1382             dnl if event2 exists and no event lib in dir itself, use subdir
1383             if test ! -f $thedir/lib/libevent.a -a ! -f $thedir/lib/libevent.so -a -d "$thedir/lib/event2"; then
1384                     LDFLAGS="$LDFLAGS -L$thedir/lib/event2"
1385                     ACX_RUNTIME_PATH_ADD([$thedir/lib/event2])
1386             else
1387                     dnl assume /usr is in default path, do not add "".
1388                     if test "$thedir" != "/usr" -a "$thedir" != ""; then
1389                         LDFLAGS="$LDFLAGS -L$thedir/lib"
1390                         ACX_RUNTIME_PATH_ADD([$thedir/lib])
1391                     fi
1392             fi
1393         fi
1394         # check for library used by libevent after 1.3c
1395         AC_SEARCH_LIBS([clock_gettime], [rt])
1396
1397         # is the event.h header libev or libevent?
1398         AC_CHECK_HEADERS([event.h],,, [AC_INCLUDES_DEFAULT])
1399         AC_CHECK_DECL(EV_VERSION_MAJOR, [
1400                 AC_SEARCH_LIBS(event_set, [ev])
1401         ],[
1402                 AC_SEARCH_LIBS(event_set, [event])
1403         ],[AC_INCLUDES_DEFAULT
1404 #include <event.h>
1405         ])
1406         AC_CHECK_FUNCS([event_base_free]) # only in libevent 1.2 and later
1407         AC_CHECK_FUNCS([event_base_once]) # only in libevent 1.4.1 and later
1408         AC_CHECK_FUNCS([event_base_new]) # only in libevent 1.4.1 and later
1409         AC_CHECK_FUNCS([event_base_get_method]) # only in libevent 1.4.3 and later
1410         AC_CHECK_FUNCS([ev_loop]) # only in libev. (tested on 3.51)
1411         AC_CHECK_FUNCS([ev_default_loop]) # only in libev. (tested on 4.00)
1412         AC_CHECK_FUNCS([event_assign]) # in libevent, for thread-safety
1413         AC_CHECK_DECLS([evsignal_assign], [], [], [AC_INCLUDES_DEFAULT
1414 #ifdef HAVE_EVENT_H
1415 #  include <event.h>
1416 #else
1417 #  include "event2/event.h"
1418 #endif
1419         ])
1420         PC_LIBEVENT_DEPENDENCY="libevent"
1421         AC_SUBST(PC_LIBEVENT_DEPENDENCY)
1422         if test -n "$BAK_LDFLAGS_SET"; then
1423                 LDFLAGS="$BAK_LDFLAGS"
1424         fi
1425 else
1426         AC_DEFINE(USE_MINI_EVENT, 1, [Define if you want to use internal select based events])
1427 fi
1428
1429 # check for libexpat
1430 AC_ARG_WITH(libexpat, AS_HELP_STRING([--with-libexpat=path],[specify explicit path for libexpat.]),
1431     [ ],[ withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" ])
1432 AC_MSG_CHECKING(for libexpat)
1433 found_libexpat="no"
1434 for dir in $withval ; do
1435             if test -f "$dir/include/expat.h"; then
1436                 found_libexpat="yes"
1437                 dnl assume /usr is in default path.
1438                 if test "$dir" != "/usr"; then
1439                     CPPFLAGS="$CPPFLAGS -I$dir/include"
1440                     LDFLAGS="$LDFLAGS -L$dir/lib"
1441                 fi
1442                 AC_MSG_RESULT(found in $dir)
1443                 break;
1444             fi
1445 done
1446 if test x_$found_libexpat != x_yes; then
1447         AC_MSG_ERROR([Could not find libexpat, expat.h])
1448 fi
1449 AC_CHECK_HEADERS([expat.h],,, [AC_INCLUDES_DEFAULT])
1450 AC_CHECK_DECLS([XML_StopParser], [], [], [AC_INCLUDES_DEFAULT
1451 #include <expat.h>
1452 ])
1453
1454 # hiredis (redis C client for cachedb)
1455 AC_ARG_WITH(libhiredis, AS_HELP_STRING([--with-libhiredis=path],[specify explicit path for libhiredis.]),
1456     [ ],[ withval="no" ])
1457 found_libhiredis="no"
1458 if test x_$withval = x_yes -o x_$withval != x_no; then
1459    AC_MSG_CHECKING(for libhiredis)
1460    if test x_$withval = x_ -o x_$withval = x_yes; then
1461             withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
1462    fi
1463    for dir in $withval ; do
1464             if test -f "$dir/include/hiredis/hiredis.h"; then
1465                 found_libhiredis="yes"
1466                 dnl assume /usr is in default path.
1467                 if test "$dir" != "/usr"; then
1468                     CPPFLAGS="$CPPFLAGS -I$dir/include"
1469                     LDFLAGS="$LDFLAGS -L$dir/lib"
1470                 fi
1471                 AC_MSG_RESULT(found in $dir)
1472                 AC_DEFINE([USE_REDIS], [1], [Define this to use hiredis client.])
1473                 LIBS="$LIBS -lhiredis"
1474                 break;
1475             fi
1476     done
1477     if test x_$found_libhiredis != x_yes; then
1478         AC_MSG_ERROR([Could not find libhiredis, hiredis.h])
1479     fi
1480     AC_CHECK_HEADERS([hiredis/hiredis.h],,, [AC_INCLUDES_DEFAULT])
1481     AC_CHECK_DECLS([redisConnect], [], [], [AC_INCLUDES_DEFAULT
1482     #include <hiredis/hiredis.h>
1483     ])
1484 fi
1485
1486 # nghttp2
1487 AC_ARG_WITH(libnghttp2, AS_HELP_STRING([--with-libnghttp2=path],[specify explicit path for libnghttp2.]),
1488     [ ],[ withval="no" ])
1489 found_libnghttp2="no"
1490 if test x_$withval = x_yes -o x_$withval != x_no; then
1491    AC_MSG_CHECKING(for libnghttp2)
1492    if test x_$withval = x_ -o x_$withval = x_yes; then
1493             withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
1494    fi
1495    for dir in $withval ; do
1496             if test -f "$dir/include/nghttp2/nghttp2.h"; then
1497                 found_libnghttp2="yes"
1498                 dnl assume /usr is in default path.
1499                 if test "$dir" != "/usr"; then
1500                     CPPFLAGS="$CPPFLAGS -I$dir/include"
1501                     LDFLAGS="$LDFLAGS -L$dir/lib"
1502                 fi
1503                 AC_MSG_RESULT(found in $dir)
1504                 AC_DEFINE([HAVE_NGHTTP2], [1], [Define this to use nghttp2 client.])
1505                 LIBS="$LIBS -lnghttp2"
1506                 break;
1507             fi
1508     done
1509     if test x_$found_libnghttp2 != x_yes; then
1510         AC_MSG_ERROR([Could not find libnghttp2, nghttp2.h])
1511     fi
1512     AC_CHECK_HEADERS([nghttp2/nghttp2.h],,, [AC_INCLUDES_DEFAULT])
1513     AC_CHECK_DECLS([nghttp2_session_server_new], [], [], [AC_INCLUDES_DEFAULT
1514     #include <nghttp2/nghttp2.h>
1515     ])
1516 fi
1517
1518 # set static linking for uninstalled libraries if requested
1519 AC_SUBST(staticexe)
1520 staticexe=""
1521 AC_ARG_ENABLE(static-exe, AS_HELP_STRING([--enable-static-exe],[ enable to compile executables statically against (event) uninstalled libs, for debug purposes ]),
1522         , )
1523 if test x_$enable_static_exe = x_yes; then
1524         staticexe="-static"
1525         if test "$on_mingw" = yes; then
1526                 staticexe="-all-static"
1527                 # for static compile, include gdi32 and zlib here.
1528                 if echo $LIBS | grep 'lgdi32' >/dev/null; then
1529                         :
1530                 else
1531                         LIBS="$LIBS -lgdi32"
1532                 fi
1533                 AC_CHECK_LIB([z], [compress], [ LIBS="$LIBS -lz" ])
1534                 LIBS="$LIBS -l:libssp.a"
1535         fi
1536 fi
1537
1538 # set full static linking if requested
1539 AC_ARG_ENABLE(fully-static, AS_HELP_STRING([--enable-fully-static],[ enable to compile fully static ]),
1540         , )
1541 if test x_$enable_fully_static = x_yes; then
1542         staticexe="-all-static"
1543         if test "$on_mingw" = yes; then
1544                 # for static compile, include gdi32 and zlib here.
1545                 if echo $LIBS | grep 'lgdi32' >/dev/null; then
1546                         :
1547                 else
1548                         LIBS="$LIBS -lgdi32"
1549                 fi
1550                 AC_CHECK_LIB([z], [compress], [ LIBS="$LIBS -lz" ])
1551                 LIBS="$LIBS -l:libssp.a"
1552         fi
1553 fi
1554
1555 # set lock checking if requested
1556 AC_ARG_ENABLE(lock_checks, AS_HELP_STRING([--enable-lock-checks],[ enable to check lock and unlock calls, for debug purposes ]),
1557         , )
1558 if test x_$enable_lock_checks = x_yes; then
1559         AC_DEFINE(ENABLE_LOCK_CHECKS, 1, [Define if you want to use debug lock checking (slow).])
1560         CHECKLOCK_OBJ="checklocks.lo"
1561         AC_SUBST(CHECKLOCK_OBJ)
1562 fi
1563
1564 ACX_CHECK_GETADDRINFO_WITH_INCLUDES
1565 if test "$USE_WINSOCK" = 1; then
1566         AC_DEFINE(UB_ON_WINDOWS, 1, [Use win32 resources and API])
1567         AC_CHECK_HEADERS([iphlpapi.h],,, [AC_INCLUDES_DEFAULT
1568 #include <windows.h>
1569         ])
1570         AC_CHECK_TOOL(WINDRES, windres)
1571         LIBS="$LIBS -liphlpapi -lcrypt32"
1572         WINAPPS="unbound-service-install.exe unbound-service-remove.exe anchor-update.exe"
1573         AC_SUBST(WINAPPS)
1574         WIN_DAEMON_SRC="winrc/win_svc.c winrc/w_inst.c"
1575         AC_SUBST(WIN_DAEMON_SRC)
1576         WIN_DAEMON_OBJ="win_svc.lo w_inst.lo"
1577         AC_SUBST(WIN_DAEMON_OBJ)
1578         WIN_DAEMON_OBJ_LINK="rsrc_unbound.o"
1579         AC_SUBST(WIN_DAEMON_OBJ_LINK)
1580         WIN_HOST_OBJ_LINK="rsrc_unbound_host.o"
1581         AC_SUBST(WIN_HOST_OBJ_LINK)
1582         WIN_UBANCHOR_OBJ_LINK="rsrc_unbound_anchor.o log.lo locks.lo"
1583         AC_SUBST(WIN_UBANCHOR_OBJ_LINK)
1584         WIN_CONTROL_OBJ_LINK="rsrc_unbound_control.o"
1585         AC_SUBST(WIN_CONTROL_OBJ_LINK)
1586         WIN_CHECKCONF_OBJ_LINK="rsrc_unbound_checkconf.o"
1587         AC_SUBST(WIN_CHECKCONF_OBJ_LINK)
1588         AC_DEFINE(__USE_MINGW_ANSI_STDIO, 1, [defined to use gcc ansi snprintf and sscanf that understands %lld when compiled for windows.])
1589 fi
1590 if test $ac_cv_func_getaddrinfo = no; then
1591         AC_LIBOBJ([fake-rfc2553])
1592 fi
1593 # check after getaddrinfo for its libraries
1594 ACX_FUNC_IOCTLSOCKET
1595
1596 # see if daemon(3) exists, and if it is deprecated.
1597 AC_CHECK_FUNCS([daemon])
1598 if test $ac_cv_func_daemon = yes; then
1599         ACX_FUNC_DEPRECATED([daemon], [(void)daemon(0, 0);], [
1600 #include <stdlib.h>
1601 #include <unistd.h>
1602 ])
1603 fi
1604
1605 AC_CHECK_MEMBERS([struct sockaddr_un.sun_len],,,[
1606 AC_INCLUDES_DEFAULT
1607 #ifdef HAVE_SYS_UN_H
1608 #include <sys/un.h>
1609 #endif
1610 ])
1611 AC_CHECK_MEMBERS([struct in_pktinfo.ipi_spec_dst],,,[
1612 AC_INCLUDES_DEFAULT
1613 #if HAVE_SYS_PARAM_H
1614 #include <sys/param.h>
1615 #endif
1616
1617 #ifdef HAVE_SYS_SOCKET_H
1618 #include <sys/socket.h>
1619 #endif
1620
1621 #ifdef HAVE_SYS_UIO_H
1622 #include <sys/uio.h>
1623 #endif
1624
1625 #ifdef HAVE_NETINET_IN_H
1626 #include <netinet/in.h>
1627 #endif
1628
1629 #ifdef HAVE_NETINET_TCP_H
1630 #include <netinet/tcp.h>
1631 #endif
1632
1633 #ifdef HAVE_ARPA_INET_H
1634 #include <arpa/inet.h>
1635 #endif
1636
1637 #ifdef HAVE_WINSOCK2_H
1638 #include <winsock2.h>
1639 #endif
1640
1641 #ifdef HAVE_WS2TCPIP_H
1642 #include <ws2tcpip.h>
1643 #endif
1644 ])
1645
1646 AC_MSG_CHECKING([for htobe64])
1647 AC_LINK_IFELSE([AC_LANG_PROGRAM([
1648 #include <stdio.h>
1649 #ifdef HAVE_ENDIAN_H
1650 #  include <endian.h>
1651 #endif
1652 #ifdef HAVE_SYS_ENDIAN_H
1653 #  include <sys/endian.h>
1654 #endif
1655 ], [unsigned long long x = htobe64(0); printf("%u", (unsigned)x);])],
1656   AC_MSG_RESULT(yes)
1657   AC_DEFINE(HAVE_HTOBE64, 1, [If we have htobe64]),
1658   AC_MSG_RESULT(no))
1659
1660 AC_MSG_CHECKING([for be64toh])
1661 AC_LINK_IFELSE([AC_LANG_PROGRAM([
1662 #include <stdio.h>
1663 #ifdef HAVE_ENDIAN_H
1664 #  include <endian.h>
1665 #endif
1666 #ifdef HAVE_SYS_ENDIAN_H
1667 #  include <sys/endian.h>
1668 #endif
1669 ], [unsigned long long x = be64toh(0); printf("%u", (unsigned)x);])],
1670   AC_MSG_RESULT(yes)
1671   AC_DEFINE(HAVE_BE64TOH, 1, [If we have be64toh]),
1672   AC_MSG_RESULT(no))
1673
1674 AC_SEARCH_LIBS([setusercontext], [util])
1675 AC_CHECK_FUNCS([tzset sigprocmask fcntl getpwnam endpwent getrlimit setrlimit setsid chroot kill chown sleep usleep random srandom recvmsg sendmsg writev socketpair glob initgroups strftime localtime_r setusercontext _beginthreadex endservent endprotoent fsync shmget accept4 getifaddrs if_nametoindex poll gettid])
1676 AC_CHECK_FUNCS([setresuid],,[AC_CHECK_FUNCS([setreuid])])
1677 AC_CHECK_FUNCS([setresgid],,[AC_CHECK_FUNCS([setregid])])
1678
1679 # check if setreuid en setregid fail, on MacOSX10.4(darwin8).
1680 if echo $host_os | grep darwin8 > /dev/null; then
1681         AC_DEFINE(DARWIN_BROKEN_SETREUID, 1, [Define this if on macOSX10.4-darwin8 and setreuid and setregid do not work])
1682 fi
1683 AC_CHECK_DECLS([inet_pton,inet_ntop], [], [], [
1684 AC_INCLUDES_DEFAULT
1685 #ifdef HAVE_NETINET_IN_H
1686 #include <netinet/in.h>
1687 #endif
1688
1689 #ifdef HAVE_NETINET_TCP_H
1690 #include <netinet/tcp.h>
1691 #endif
1692
1693 #ifdef HAVE_ARPA_INET_H
1694 #include <arpa/inet.h>
1695 #endif
1696
1697 #ifdef HAVE_WINSOCK2_H
1698 #include <winsock2.h>
1699 #endif
1700
1701 #ifdef HAVE_WS2TCPIP_H
1702 #include <ws2tcpip.h>
1703 #endif
1704 ])
1705 AC_REPLACE_FUNCS(inet_aton)
1706 AC_REPLACE_FUNCS(inet_pton)
1707 AC_REPLACE_FUNCS(inet_ntop)
1708 AC_REPLACE_FUNCS(snprintf)
1709 # test if snprintf return the proper length
1710 if test "x$ac_cv_func_snprintf" = xyes; then
1711     if test c${cross_compiling} = cno; then
1712         AC_MSG_CHECKING([for correct snprintf return value])
1713         AC_RUN_IFELSE([AC_LANG_SOURCE(AC_INCLUDES_DEFAULT
1714 [[
1715 int main(void) { return !(snprintf(NULL, 0, "test") == 4); }
1716 ]])], [AC_MSG_RESULT(yes)], [
1717                 AC_MSG_RESULT(no)
1718                 AC_DEFINE([SNPRINTF_RET_BROKEN], [], [define if (v)snprintf does not return length needed, (but length used)])
1719                 AC_LIBOBJ(snprintf)
1720           ], [AC_MSG_RESULT(maybe)])
1721     fi
1722 fi
1723 AC_REPLACE_FUNCS(strlcat)
1724 AC_REPLACE_FUNCS(strlcpy)
1725 AC_REPLACE_FUNCS(memmove)
1726 AC_REPLACE_FUNCS(gmtime_r)
1727 AC_REPLACE_FUNCS(isblank)
1728 AC_REPLACE_FUNCS(explicit_bzero)
1729 dnl without CTIME, ARC4-functions and without reallocarray.
1730 LIBOBJ_WITHOUT_CTIMEARC4="$LIBOBJS"
1731 AC_SUBST(LIBOBJ_WITHOUT_CTIMEARC4)
1732 AC_MSG_CHECKING([for reallocarray])
1733 AC_LINK_IFELSE([AC_LANG_SOURCE(AC_INCLUDES_DEFAULT
1734 [[
1735 #ifndef _OPENBSD_SOURCE
1736 #define _OPENBSD_SOURCE 1
1737 #endif
1738 #include <stdlib.h>
1739 int main(void) {
1740         void* p = reallocarray(NULL, 10, 100);
1741         free(p);
1742         return 0;
1743 }
1744 ]])], [AC_MSG_RESULT(yes)
1745         AC_DEFINE(HAVE_REALLOCARRAY, 1, [If we have reallocarray(3)])
1746 ], [
1747         AC_MSG_RESULT(no)
1748         AC_LIBOBJ(reallocarray)
1749 ])
1750 AC_CHECK_DECLS([reallocarray])
1751 if test "$USE_NSS" = "no"; then
1752         AC_REPLACE_FUNCS(arc4random)
1753         AC_REPLACE_FUNCS(arc4random_uniform)
1754         if test "$ac_cv_func_arc4random" = "no"; then
1755                 AC_LIBOBJ(arc4_lock)
1756                 AC_CHECK_FUNCS([getentropy],,[
1757                     if test "$USE_WINSOCK" = 1; then
1758                         AC_LIBOBJ(getentropy_win)
1759                     else
1760                         case "$host" in
1761                         Darwin|*darwin*)
1762                                 AC_LIBOBJ(getentropy_osx)
1763                         ;;
1764                         *solaris*|*sunos*|SunOS)
1765                                 AC_LIBOBJ(getentropy_solaris)
1766                                 AC_CHECK_HEADERS([sys/sha2.h],, [
1767                                         AC_CHECK_FUNCS([SHA512_Update],,[
1768                                                 AC_LIBOBJ(sha512)
1769                                         ])
1770                                 ], [AC_INCLUDES_DEFAULT])
1771                                 if test "$ac_cv_header_sys_sha2_h" = "yes"; then
1772                                         # this lib needed for sha2 on solaris
1773                                         LIBS="$LIBS -lmd"
1774                                 fi
1775                                 AC_SEARCH_LIBS([clock_gettime], [rt])
1776                         ;;
1777                         *freebsd*|*FreeBSD)
1778                                 AC_LIBOBJ(getentropy_freebsd)
1779                         ;;
1780                         *linux*|Linux|*)
1781                                 AC_LIBOBJ(getentropy_linux)
1782                                 AC_CHECK_FUNCS([SHA512_Update],,[
1783                                         AC_DEFINE([COMPAT_SHA512], [1], [Do sha512 definitions in config.h])
1784                                         AC_LIBOBJ(sha512)
1785                                 ])
1786                                 AC_CHECK_HEADERS([sys/sysctl.h],,, [AC_INCLUDES_DEFAULT])
1787                                 AC_CHECK_FUNCS([getauxval])
1788                                 AC_SEARCH_LIBS([clock_gettime], [rt])
1789                         ;;
1790                         esac
1791                     fi
1792                 ])
1793         fi
1794 fi
1795 LIBOBJ_WITHOUT_CTIME="$LIBOBJS"
1796 AC_SUBST(LIBOBJ_WITHOUT_CTIME)
1797 AC_REPLACE_FUNCS(ctime_r)
1798 AC_REPLACE_FUNCS(strsep)
1799
1800 AC_ARG_ENABLE(allsymbols, AS_HELP_STRING([--enable-allsymbols],[export all symbols from libunbound and link binaries to it, smaller install size but libunbound export table is polluted by internal symbols]))
1801 case "$enable_allsymbols" in
1802         yes)
1803         COMMON_OBJ_ALL_SYMBOLS=""
1804         UBSYMS=""
1805         EXTRALINK="libunbound.la"
1806         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])
1807         ;;
1808         no|*)
1809         COMMON_OBJ_ALL_SYMBOLS='$(COMMON_OBJ)'
1810         UBSYMS='-export-symbols $(srcdir)/libunbound/ubsyms.def'
1811         EXTRALINK=""
1812         ;;
1813 esac
1814 AC_SUBST(COMMON_OBJ_ALL_SYMBOLS)
1815 AC_SUBST(EXTRALINK)
1816 AC_SUBST(UBSYMS)
1817 if test x_$enable_lock_checks = x_yes; then
1818         UBSYMS="-export-symbols clubsyms.def"
1819         cp ${srcdir}/libunbound/ubsyms.def clubsyms.def
1820         echo lock_protect >> clubsyms.def
1821         echo lock_unprotect >> clubsyms.def
1822         echo lock_get_mem >> clubsyms.def
1823         echo checklock_start >> clubsyms.def
1824         echo checklock_stop >> clubsyms.def
1825         echo checklock_lock >> clubsyms.def
1826         echo checklock_unlock >> clubsyms.def
1827         echo checklock_init >> clubsyms.def
1828         echo checklock_thrcreate >> clubsyms.def
1829         echo checklock_thrjoin >> clubsyms.def
1830 fi
1831
1832 # check for dnstap if requested
1833 dt_DNSTAP([$UNBOUND_RUN_DIR/dnstap.sock],
1834     [
1835         AC_DEFINE([USE_DNSTAP], [1], [Define to 1 to enable dnstap support])
1836         AC_SUBST([ENABLE_DNSTAP], [1])
1837
1838         AC_SUBST([opt_dnstap_socket_path])
1839         ACX_ESCAPE_BACKSLASH($opt_dnstap_socket_path, hdr_dnstap_socket_path)
1840         AC_DEFINE_UNQUOTED(DNSTAP_SOCKET_PATH,
1841             ["$hdr_dnstap_socket_path"], [default dnstap socket path])
1842         AC_SUBST(DNSTAP_SOCKET_PATH,["$hdr_dnstap_socket_path"])
1843         AC_SUBST(DNSTAP_SOCKET_TESTBIN,['unbound-dnstap-socket$(EXEEXT)'])
1844         AC_SUBST([DNSTAP_SRC], ["dnstap/dnstap.c dnstap/dnstap.pb-c.c dnstap/dnstap_fstrm.c dnstap/dtstream.c"])
1845         AC_SUBST([DNSTAP_OBJ], ["dnstap.lo dnstap.pb-c.lo dnstap_fstrm.lo dtstream.lo"])
1846     ],
1847     [
1848         AC_SUBST([ENABLE_DNSTAP], [0])
1849     ]
1850 )
1851
1852 # check for dnscrypt if requested
1853 dnsc_DNSCRYPT([
1854         AC_DEFINE([USE_DNSCRYPT], [1], [Define to 1 to enable dnscrypt support])
1855         AC_SUBST([ENABLE_DNSCRYPT], [1])
1856
1857         AC_SUBST([DNSCRYPT_SRC], ["dnscrypt/dnscrypt.c"])
1858         AC_SUBST([DNSCRYPT_OBJ], ["dnscrypt.lo"])
1859     ],
1860     [
1861         AC_SUBST([ENABLE_DNSCRYPT], [0])
1862     ]
1863 )
1864
1865 # check for cachedb if requested
1866 AC_ARG_ENABLE(cachedb, AS_HELP_STRING([--enable-cachedb],[enable cachedb module that can use external cache storage]))
1867 # turn on cachedb when hiredis support is enabled.
1868 if test "$found_libhiredis" = "yes"; then enable_cachedb="yes"; fi
1869 case "$enable_cachedb" in
1870     yes)
1871         AC_DEFINE([USE_CACHEDB], [1], [Define to 1 to use cachedb support])
1872         AC_SUBST([CACHEDB_SRC], ["cachedb/cachedb.c cachedb/redis.c"])
1873         AC_SUBST([CACHEDB_OBJ], ["cachedb.lo redis.lo"])
1874         ;;
1875     no|*)
1876         # nothing
1877         ;;
1878 esac
1879
1880 # check for ipsecmod if requested
1881 AC_ARG_ENABLE(ipsecmod, AS_HELP_STRING([--enable-ipsecmod],[Enable ipsecmod module that facilitates opportunistic IPsec]))
1882 case "$enable_ipsecmod" in
1883         yes)
1884                 AC_DEFINE([USE_IPSECMOD], [1], [Define to 1 to use ipsecmod support.])
1885                 IPSECMOD_OBJ="ipsecmod.lo ipsecmod-whitelist.lo"
1886                 AC_SUBST(IPSECMOD_OBJ)
1887                 IPSECMOD_HEADER='$(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/ipsecmod/ipsecmod-whitelist.h'
1888                 AC_SUBST(IPSECMOD_HEADER)
1889                 ;;
1890         no|*)
1891                 # nothing
1892                 ;;
1893 esac
1894
1895 # check for ipset if requested
1896 AC_ARG_ENABLE(ipset, AS_HELP_STRING([--enable-ipset],[enable ipset module]))
1897 case "$enable_ipset" in
1898     yes)
1899                 AC_DEFINE([USE_IPSET], [1], [Define to 1 to use ipset support])
1900                 IPSET_SRC="ipset/ipset.c"
1901                 AC_SUBST(IPSET_SRC)
1902                 IPSET_OBJ="ipset.lo"
1903                 AC_SUBST(IPSET_OBJ)
1904
1905                 # mnl
1906                 AC_ARG_WITH(libmnl, AS_HELP_STRING([--with-libmnl=path],[specify explicit path for libmnl.]),
1907                         [ ],[ withval="yes" ])
1908                 found_libmnl="no"
1909                 AC_MSG_CHECKING(for libmnl)
1910                 if test x_$withval = x_ -o x_$withval = x_yes; then
1911                         withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
1912                 fi
1913                 for dir in $withval ; do
1914                         if test -f "$dir/include/libmnl/libmnl.h" -o -f "$dir/include/libmnl/libmnl/libmnl.h"; then
1915                                 found_libmnl="yes"
1916                                 dnl assume /usr is in default path.
1917                                 extralibmnl=""
1918                                 if test -f "$dir/include/libmnl/libmnl/libmnl.h"; then
1919                                         extralibmnl="/libmnl"
1920                                 fi
1921                                 if test "$dir" != "/usr" -o -n "$extralibmnl"; then
1922                                         CPPFLAGS="$CPPFLAGS -I$dir/include$extralibmnl"
1923                                 fi
1924                                 if test "$dir" != "/usr"; then
1925                                         LDFLAGS="$LDFLAGS -L$dir/lib"
1926                                 fi
1927                                 AC_MSG_RESULT(found in $dir)
1928                                 LIBS="$LIBS -lmnl"
1929                                 break;
1930                         fi
1931                 done
1932                 if test x_$found_libmnl != x_yes; then
1933                         AC_MSG_ERROR([Could not find libmnl, libmnl.h])
1934                 fi
1935                 ;;
1936     no|*)
1937         # nothing
1938                 ;;
1939 esac
1940 AC_ARG_ENABLE(explicit-port-randomisation, AS_HELP_STRING([--disable-explicit-port-randomisation],[disable explicit source port randomisation and rely on the kernel to provide random source ports]))
1941 case "$enable_explicit_port_randomisation" in
1942         no)
1943                 AC_DEFINE([DISABLE_EXPLICIT_PORT_RANDOMISATION], [1], [Define this to enable kernel based UDP source port randomization.])
1944                 ;;
1945         yes|*)
1946                 ;;
1947 esac
1948
1949 if echo "$host" | $GREP -i -e linux >/dev/null; then
1950         AC_ARG_ENABLE(linux-ip-local-port-range, AS_HELP_STRING([--enable-linux-ip-local-port-range], [Define this to enable use of /proc/sys/net/ipv4/ip_local_port_range as a default outgoing port range. This is only for the libunbound on Linux and does not affect unbound resolving daemon itself. This may severely limit the number of available outgoing ports and thus decrease randomness. Define this only when the target system restricts (e.g. some of SELinux enabled distributions) the use of non-ephemeral ports.]))
1951         case "$enable_linux_ip_local_port_range" in
1952                 yes)
1953                         AC_DEFINE([USE_LINUX_IP_LOCAL_PORT_RANGE], [1], [Define this to enable use of /proc/sys/net/ipv4/ip_local_port_range as a default outgoing port range. This is only for the libunbound on Linux and does not affect unbound resolving daemon itself. This may severely limit the number of available outgoing ports and thus decrease randomness. Define this only when the target system restricts (e.g. some of SELinux enabled distributions) the use of non-ephemeral ports.])
1954                         ;;
1955                 no|*)
1956                         ;;
1957         esac
1958 fi
1959
1960
1961 AC_MSG_CHECKING([if ${MAKE:-make} supports $< with implicit rule in scope])
1962 # on openBSD, the implicit rule make $< work.
1963 # on Solaris, it does not work ($? is changed sources, $^ lists dependencies).
1964 # gmake works.
1965 cat >conftest.make <<EOF
1966 all:    conftest.lo
1967
1968 conftest.lo foo.lo bla.lo:
1969         if test -f "\$<"; then touch \$@; fi
1970
1971 .SUFFIXES: .lo
1972 .c.lo:
1973         if test -f "\$<"; then touch \$@; fi
1974
1975 conftest.lo:        conftest.dir/conftest.c
1976 EOF
1977 mkdir conftest.dir
1978 touch conftest.dir/conftest.c
1979 rm -f conftest.lo conftest.c
1980 ${MAKE:-make} -f conftest.make >/dev/null
1981 rm -f conftest.make conftest.c conftest.dir/conftest.c
1982 rm -rf conftest.dir
1983 if test ! -f conftest.lo; then
1984         AC_MSG_RESULT(no)
1985         SOURCEDETERMINE='echo "$^" | awk "-F " "{print \$$1;}" > .source'
1986         SOURCEFILE='`cat .source`'
1987 else
1988         AC_MSG_RESULT(yes)
1989         SOURCEDETERMINE=':'
1990         SOURCEFILE='$<'
1991 fi
1992 rm -f conftest.lo
1993 AC_SUBST(SOURCEDETERMINE)
1994 AC_SUBST(SOURCEFILE)
1995
1996 # see if we want to build the library or everything
1997 ALLTARGET="alltargets"
1998 INSTALLTARGET="install-all"
1999 AC_ARG_WITH(libunbound-only, AS_HELP_STRING([--with-libunbound-only],[do not build daemon and tool programs]),
2000         [
2001         if test "$withval" = "yes"; then
2002                 ALLTARGET="lib"
2003                 INSTALLTARGET="install-lib"
2004         fi
2005 ])
2006 if test $ALLTARGET = "alltargets"; then
2007         if test $USE_NSS = "yes"; then
2008                 AC_MSG_ERROR([--with-nss can only be used in combination with --with-libunbound-only.])
2009         fi
2010         if test $USE_NETTLE = "yes"; then
2011                 AC_MSG_ERROR([--with-nettle can only be used in combination with --with-libunbound-only.])
2012         fi
2013 fi
2014
2015 AC_SUBST(ALLTARGET)
2016 AC_SUBST(INSTALLTARGET)
2017
2018 ACX_STRIP_EXT_FLAGS
2019 if test -n "$LATE_LDFLAGS"; then
2020   LDFLAGS="$LATE_LDFLAGS $LDFLAGS"
2021 fi
2022 # remove start spaces
2023 LDFLAGS=`echo "$LDFLAGS"|sed -e 's/^ *//'`
2024 LIBS=`echo "$LIBS"|sed -e 's/^ *//'`
2025
2026 AC_DEFINE_UNQUOTED([MAXSYSLOGMSGLEN], [10240], [Define to the maximum message length to pass to syslog.])
2027
2028 AH_BOTTOM(
2029 dnl this must be first AH_CONFIG, to define the flags before any includes.
2030 AHX_CONFIG_EXT_FLAGS
2031
2032 dnl includes
2033 [
2034 #ifndef _OPENBSD_SOURCE
2035 #define _OPENBSD_SOURCE 1
2036 #endif
2037
2038 #ifndef UNBOUND_DEBUG
2039 # ifndef NDEBUG
2040 #  define NDEBUG
2041 # endif
2042 #endif
2043
2044 /** Use small-ldns codebase */
2045 #define USE_SLDNS 1
2046 #ifdef HAVE_SSL
2047 #  define LDNS_BUILD_CONFIG_HAVE_SSL 1
2048 #endif
2049
2050 #include <stdio.h>
2051 #include <string.h>
2052 #include <unistd.h>
2053 #include <assert.h>
2054
2055 #if STDC_HEADERS
2056 #include <stdlib.h>
2057 #include <stddef.h>
2058 #endif
2059
2060 #ifdef HAVE_STDARG_H
2061 #include <stdarg.h>
2062 #endif
2063
2064 #ifdef HAVE_STDINT_H
2065 #include <stdint.h>
2066 #endif
2067
2068 #include <errno.h>
2069
2070 #if HAVE_SYS_PARAM_H
2071 #include <sys/param.h>
2072 #endif
2073
2074 #ifdef HAVE_SYS_SOCKET_H
2075 #include <sys/socket.h>
2076 #endif
2077
2078 #ifdef HAVE_SYS_UIO_H
2079 #include <sys/uio.h>
2080 #endif
2081
2082 #ifdef HAVE_NETINET_IN_H
2083 #include <netinet/in.h>
2084 #endif
2085
2086 #ifdef HAVE_NETINET_TCP_H
2087 #include <netinet/tcp.h>
2088 #endif
2089
2090 #ifdef HAVE_ARPA_INET_H
2091 #include <arpa/inet.h>
2092 #endif
2093
2094 #ifdef HAVE_WINSOCK2_H
2095 #include <winsock2.h>
2096 #endif
2097
2098 #ifdef HAVE_WS2TCPIP_H
2099 #include <ws2tcpip.h>
2100 #endif
2101
2102 #if !defined(USE_WINSOCK) || !defined(HAVE_SNPRINTF) || defined(SNPRINTF_RET_BROKEN) || defined(__USE_MINGW_ANSI_STDIO)
2103 #define ARG_LL "%ll"
2104 #else
2105 #define ARG_LL "%I64"
2106 #endif
2107
2108 #ifndef AF_LOCAL
2109 #define AF_LOCAL AF_UNIX
2110 #endif
2111 ]
2112
2113 AHX_CONFIG_FORMAT_ATTRIBUTE
2114 AHX_CONFIG_UNUSED_ATTRIBUTE
2115 AHX_CONFIG_FSEEKO
2116 AHX_CONFIG_MAXHOSTNAMELEN
2117 #if !defined(HAVE_SNPRINTF) || defined(SNPRINTF_RET_BROKEN)
2118 #define snprintf snprintf_unbound
2119 #define vsnprintf vsnprintf_unbound
2120 #include <stdarg.h>
2121 int snprintf (char *str, size_t count, const char *fmt, ...);
2122 int vsnprintf (char *str, size_t count, const char *fmt, va_list arg);
2123 #endif /* HAVE_SNPRINTF or SNPRINTF_RET_BROKEN */
2124 AHX_CONFIG_INET_PTON(unbound)
2125 AHX_CONFIG_INET_NTOP(unbound)
2126 AHX_CONFIG_INET_ATON(unbound)
2127 AHX_CONFIG_MEMMOVE(unbound)
2128 AHX_CONFIG_STRLCAT(unbound)
2129 AHX_CONFIG_STRLCPY(unbound)
2130 AHX_CONFIG_GMTIME_R(unbound)
2131 AHX_CONFIG_REALLOCARRAY(unbound)
2132 AHX_CONFIG_W32_SLEEP
2133 AHX_CONFIG_W32_USLEEP
2134 AHX_CONFIG_W32_RANDOM
2135 AHX_CONFIG_W32_SRANDOM
2136 AHX_CONFIG_W32_FD_SET_T
2137 AHX_CONFIG_IPV6_MIN_MTU
2138 AHX_MEMCMP_BROKEN(unbound)
2139
2140 [
2141 #ifndef HAVE_CTIME_R
2142 #define ctime_r unbound_ctime_r
2143 char *ctime_r(const time_t *timep, char *buf);
2144 #endif
2145
2146 #ifndef HAVE_STRSEP
2147 #define strsep unbound_strsep
2148 char *strsep(char **stringp, const char *delim);
2149 #endif
2150
2151 #ifndef HAVE_ISBLANK
2152 #define isblank unbound_isblank
2153 int isblank(int c);
2154 #endif
2155
2156 #ifndef HAVE_EXPLICIT_BZERO
2157 #define explicit_bzero unbound_explicit_bzero
2158 void explicit_bzero(void* buf, size_t len);
2159 #endif
2160
2161 #if defined(HAVE_INET_NTOP) && !HAVE_DECL_INET_NTOP
2162 const char *inet_ntop(int af, const void *src, char *dst, size_t size);
2163 #endif
2164
2165 #if defined(HAVE_INET_PTON) && !HAVE_DECL_INET_PTON
2166 int inet_pton(int af, const char* src, void* dst);
2167 #endif
2168
2169 #if !defined(HAVE_STRPTIME) || !defined(STRPTIME_WORKS)
2170 #define strptime unbound_strptime
2171 struct tm;
2172 char *strptime(const char *s, const char *format, struct tm *tm);
2173 #endif
2174
2175 #if !HAVE_DECL_REALLOCARRAY
2176 void *reallocarray(void *ptr, size_t nmemb, size_t size);
2177 #endif
2178
2179 #ifdef HAVE_LIBBSD
2180 #include <bsd/string.h>
2181 #include <bsd/stdlib.h>
2182 #endif
2183
2184 #ifdef HAVE_LIBRESSL
2185 #  if !HAVE_DECL_STRLCPY
2186 size_t strlcpy(char *dst, const char *src, size_t siz);
2187 #  endif
2188 #  if !HAVE_DECL_STRLCAT
2189 size_t strlcat(char *dst, const char *src, size_t siz);
2190 #  endif
2191 #  if !HAVE_DECL_ARC4RANDOM && defined(HAVE_ARC4RANDOM)
2192 uint32_t arc4random(void);
2193 #  endif
2194 #  if !HAVE_DECL_ARC4RANDOM_UNIFORM && defined(HAVE_ARC4RANDOM_UNIFORM)
2195 uint32_t arc4random_uniform(uint32_t upper_bound);
2196 #  endif
2197 #endif /* HAVE_LIBRESSL */
2198 #ifndef HAVE_ARC4RANDOM
2199 int getentropy(void* buf, size_t len);
2200 uint32_t arc4random(void);
2201 void arc4random_buf(void* buf, size_t n);
2202 void _ARC4_LOCK(void);
2203 void _ARC4_UNLOCK(void);
2204 void _ARC4_LOCK_DESTROY(void);
2205 #endif
2206 #ifndef HAVE_ARC4RANDOM_UNIFORM
2207 uint32_t arc4random_uniform(uint32_t upper_bound);
2208 #endif
2209 #ifdef COMPAT_SHA512
2210 #ifndef SHA512_DIGEST_LENGTH
2211 #define SHA512_BLOCK_LENGTH             128
2212 #define SHA512_DIGEST_LENGTH            64
2213 #define SHA512_DIGEST_STRING_LENGTH     (SHA512_DIGEST_LENGTH * 2 + 1)
2214 typedef struct _SHA512_CTX {
2215         uint64_t        state[8];
2216         uint64_t        bitcount[2];
2217         uint8_t buffer[SHA512_BLOCK_LENGTH];
2218 } SHA512_CTX;
2219 #endif /* SHA512_DIGEST_LENGTH */
2220 void SHA512_Init(SHA512_CTX*);
2221 void SHA512_Update(SHA512_CTX*, void*, size_t);
2222 void SHA512_Final(uint8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*);
2223 unsigned char *SHA512(void* data, unsigned int data_len, unsigned char *digest);
2224 #endif /* COMPAT_SHA512 */
2225
2226
2227
2228 #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))
2229    /* using version of libevent that is not threadsafe. */
2230 #  define LIBEVENT_SIGNAL_PROBLEM 1
2231 #endif
2232
2233 #ifndef CHECKED_INET6
2234 #  define CHECKED_INET6
2235 #  ifdef AF_INET6
2236 #    define INET6
2237 #  else
2238 #    define AF_INET6        28
2239 #  endif
2240 #endif /* CHECKED_INET6 */
2241
2242 #ifndef HAVE_GETADDRINFO
2243 struct sockaddr_storage;
2244 #include "compat/fake-rfc2553.h"
2245 #endif
2246
2247 #ifdef UNBOUND_ALLOC_STATS
2248 #  define malloc(s) unbound_stat_malloc_log(s, __FILE__, __LINE__, __func__)
2249 #  define calloc(n,s) unbound_stat_calloc_log(n, s, __FILE__, __LINE__, __func__)
2250 #  define free(p) unbound_stat_free_log(p, __FILE__, __LINE__, __func__)
2251 #  define realloc(p,s) unbound_stat_realloc_log(p, s, __FILE__, __LINE__, __func__)
2252 void *unbound_stat_malloc(size_t size);
2253 void *unbound_stat_calloc(size_t nmemb, size_t size);
2254 void unbound_stat_free(void *ptr);
2255 void *unbound_stat_realloc(void *ptr, size_t size);
2256 void *unbound_stat_malloc_log(size_t size, const char* file, int line,
2257         const char* func);
2258 void *unbound_stat_calloc_log(size_t nmemb, size_t size, const char* file,
2259         int line, const char* func);
2260 void unbound_stat_free_log(void *ptr, const char* file, int line,
2261         const char* func);
2262 void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file,
2263         int line, const char* func);
2264 #elif defined(UNBOUND_ALLOC_LITE)
2265 #  include "util/alloc.h"
2266 #endif /* UNBOUND_ALLOC_LITE and UNBOUND_ALLOC_STATS */
2267
2268 /** default port for DNS traffic. */
2269 #define UNBOUND_DNS_PORT 53
2270 /** default port for DNS over TLS traffic. */
2271 #define UNBOUND_DNS_OVER_TLS_PORT 853
2272 /** default port for DNS over HTTPS traffic. */
2273 #define UNBOUND_DNS_OVER_HTTPS_PORT 443
2274 /** default port for unbound control traffic, registered port with IANA,
2275     ub-dns-control  8953/tcp    unbound dns nameserver control */
2276 #define UNBOUND_CONTROL_PORT 8953
2277 /** the version of unbound-control that this software implements */
2278 #define UNBOUND_CONTROL_VERSION 1
2279
2280 ])
2281
2282 dnl if we build from source tree, the man pages need @date@ and @version@
2283 dnl if this is a distro tarball, that was already done by makedist.sh
2284 AC_SUBST(version, [VERSION_MAJOR.VERSION_MINOR.VERSION_MICRO])
2285 AC_SUBST(date, [`date +'%b %e, %Y'`])
2286
2287 AC_CONFIG_FILES([Makefile doc/example.conf doc/libunbound.3 doc/unbound.8 doc/unbound-anchor.8 doc/unbound-checkconf.8 doc/unbound.conf.5 doc/unbound-control.8 doc/unbound-host.1 smallapp/unbound-control-setup.sh dnstap/dnstap_config.h dnscrypt/dnscrypt_config.h contrib/libunbound.pc contrib/unbound.socket contrib/unbound.service contrib/unbound_portable.service])
2288 AC_CONFIG_HEADERS([config.h])
2289 AC_OUTPUT