2 # Process this file with autoconf to produce a configure script.
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)
11 # must be numbers. ac_defun because of later processing
12 m4_define([VERSION_MAJOR],[1])
13 m4_define([VERSION_MINOR],[17])
14 m4_define([VERSION_MICRO],[1])
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])
21 LIBUNBOUND_REVISION=21
30 # 1.3.0 had 1:0:0 # ub_cancel and -export-symbols.
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
50 # and 1.4.13p1 and 1.4.13.p2
52 # 1.4.15 had 3:0:1 # adds ub_version()
57 # 1.4.20 had 4:0:2 # adds libunbound.ttl # but shipped 3:5:1
60 # 1.5.0 had 5:3:3 # adds ub_ctx_add_ta_autr
68 # 1.5.8 had 6:0:4 # adds ub_ctx_set_stub
72 # 1.6.1 had 7:0:5 # ub_callback_t typedef renamed to ub_callback_type
84 # 1.8.0 had 8:0:0 # changes the event callback function signature
88 # 1.9.0 had 9:0:1 # add ub_ctx_set_tls
111 # Current -- the number of the binary API that we're implementing
112 # Revision -- which iteration of the implementation of the binary
113 # API are we supplying?
114 # Age -- How many previous binary API versions do we also
117 # If we release a new version that does not change the binary API,
118 # increment Revision.
120 # If we release a new version that changes the binary API, but does
121 # not break programs compiled against the old binary API, increment
122 # Current and Age. Set Revision to 0, since this is the first
123 # implementation of the new API.
125 # Otherwise, we're changing the binary API and breaking backward
126 # compatibility with old binaries. Increment Current. Set Age to 0,
127 # since we're backward compatible with no previous APIs. Set Revision
129 AC_SUBST(LIBUNBOUND_CURRENT)
130 AC_SUBST(LIBUNBOUND_REVISION)
131 AC_SUBST(LIBUNBOUND_AGE)
134 cmdln="`echo $@ | sed -e 's/\\\\/\\\\\\\\/g' | sed -e 's/"/\\\\"/'g`"
135 AC_DEFINE_UNQUOTED(CONFCMDLINE, ["$cmdln"], [Command line arguments used with configure])
138 AC_USE_SYSTEM_EXTENSIONS
139 if test "$ac_cv_header_minix_config_h" = "yes"; then
140 AC_DEFINE(_NETBSD_SOURCE,1, [Enable for compile on Minix])
144 dnl By default set prefix to /usr/local
151 case "$exec_prefix" in
153 exec_prefix="$prefix"
158 if uname -s 2>&1 | grep MINGW >/dev/null; then on_mingw="yes"
160 if echo $host | grep mingw >/dev/null; then on_mingw="yes"
161 else on_mingw="no"; fi
165 # Determine configuration file
166 # the eval is to evaluate shell expansion twice
167 UNBOUND_SBIN_DIR=`eval echo "${sbindir}"`
168 AC_SUBST(UNBOUND_SBIN_DIR)
169 UNBOUND_SYSCONF_DIR=`eval echo "${sysconfdir}"`
170 AC_SUBST(UNBOUND_SYSCONF_DIR)
171 UNBOUND_LOCALSTATE_DIR=`eval echo "${localstatedir}"`
172 AC_SUBST(UNBOUND_LOCALSTATE_DIR)
173 if test $on_mingw = "no"; then
174 ub_conf_file=`eval echo "${sysconfdir}/unbound/unbound.conf"`
176 ub_conf_file="C:\\Program Files\\Unbound\\service.conf"
178 AC_ARG_WITH([conf_file],
179 AS_HELP_STRING([--with-conf-file=path],[Pathname to the Unbound configuration file]),
180 [ub_conf_file="$withval"])
181 AC_SUBST(ub_conf_file)
182 ACX_ESCAPE_BACKSLASH($ub_conf_file, hdr_config)
183 AC_DEFINE_UNQUOTED(CONFIGFILE, ["$hdr_config"], [Pathname to the Unbound configuration file])
184 ub_conf_dir=`AS_DIRNAME(["$ub_conf_file"])`
185 AC_SUBST(ub_conf_dir)
187 # Determine run, chroot directory and pidfile locations
189 AS_HELP_STRING([--with-run-dir=path],[set default directory to chdir to (by default dir part of cfg file)]),
190 UNBOUND_RUN_DIR="$withval",
191 if test $on_mingw = no; then
192 UNBOUND_RUN_DIR=`dirname "$ub_conf_file"`
197 AC_SUBST(UNBOUND_RUN_DIR)
198 ACX_ESCAPE_BACKSLASH($UNBOUND_RUN_DIR, hdr_run)
199 AC_DEFINE_UNQUOTED(RUN_DIR, ["$hdr_run"], [Directory to chdir to])
201 AC_ARG_WITH(chroot-dir,
202 AS_HELP_STRING([--with-chroot-dir=path],[set default directory to chroot to (by default same as run-dir)]),
203 UNBOUND_CHROOT_DIR="$withval",
204 if test $on_mingw = no; then
205 UNBOUND_CHROOT_DIR="$UNBOUND_RUN_DIR"
207 UNBOUND_CHROOT_DIR=""
210 AC_SUBST(UNBOUND_CHROOT_DIR)
211 ACX_ESCAPE_BACKSLASH($UNBOUND_CHROOT_DIR, hdr_chroot)
212 AC_DEFINE_UNQUOTED(CHROOT_DIR, ["$hdr_chroot"], [Directory to chroot to])
214 AC_ARG_WITH(share-dir,
215 AS_HELP_STRING([--with-share-dir=path],[set default directory with shared data (by default same as share/unbound)]),
216 UNBOUND_SHARE_DIR="$withval",
217 UNBOUND_SHARE_DIR="$UNBOUND_RUN_DIR")
218 AC_SUBST(UNBOUND_SHARE_DIR)
219 AC_DEFINE_UNQUOTED(SHARE_DIR, ["$UNBOUND_SHARE_DIR"], [Shared data])
222 AS_HELP_STRING([--with-pidfile=filename],[set default pathname to unbound pidfile (default run-dir/unbound.pid)]),
223 UNBOUND_PIDFILE="$withval",
224 if test $on_mingw = no; then
225 UNBOUND_PIDFILE="$UNBOUND_RUN_DIR/unbound.pid"
230 AC_SUBST(UNBOUND_PIDFILE)
231 ACX_ESCAPE_BACKSLASH($UNBOUND_PIDFILE, hdr_pid)
232 AC_DEFINE_UNQUOTED(PIDFILE, ["$hdr_pid"], [default pidfile location])
234 AC_ARG_WITH(rootkey-file,
235 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.]),
236 UNBOUND_ROOTKEY_FILE="$withval",
237 if test $on_mingw = no; then
238 UNBOUND_ROOTKEY_FILE="$UNBOUND_RUN_DIR/root.key"
240 UNBOUND_ROOTKEY_FILE="C:\\Program Files\\Unbound\\root.key"
243 AC_SUBST(UNBOUND_ROOTKEY_FILE)
244 ACX_ESCAPE_BACKSLASH($UNBOUND_ROOTKEY_FILE, hdr_rkey)
245 AC_DEFINE_UNQUOTED(ROOT_ANCHOR_FILE, ["$hdr_rkey"], [default rootkey location])
247 AC_ARG_WITH(rootcert-file,
248 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.]),
249 UNBOUND_ROOTCERT_FILE="$withval",
250 if test $on_mingw = no; then
251 UNBOUND_ROOTCERT_FILE="$UNBOUND_RUN_DIR/icannbundle.pem"
253 UNBOUND_ROOTCERT_FILE="C:\\Program Files\\Unbound\\icannbundle.pem"
256 AC_SUBST(UNBOUND_ROOTCERT_FILE)
257 ACX_ESCAPE_BACKSLASH($UNBOUND_ROOTCERT_FILE, hdr_rpem)
258 AC_DEFINE_UNQUOTED(ROOT_CERT_FILE, ["$hdr_rpem"], [default rootcert location])
260 AC_ARG_WITH(username,
261 AS_HELP_STRING([--with-username=user],[set default user that unbound changes to (default user is unbound)]),
262 UNBOUND_USERNAME="$withval",
263 UNBOUND_USERNAME="unbound")
264 AC_SUBST(UNBOUND_USERNAME)
265 AC_DEFINE_UNQUOTED(UB_USERNAME, ["$UNBOUND_USERNAME"], [default username])
267 AC_DEFINE(WINVER, 0x0502, [the version of the windows API enabled])
268 ACX_RSRC_VERSION(wnvs)
269 AC_DEFINE_UNQUOTED(RSRC_PACKAGE_VERSION, [$wnvs], [version number for resource files])
271 # Checks for typedefs, structures, and compiler characteristics.
274 # allow user to override the -g -O2 flags.
276 if test "x$CFLAGS" = "x" ; then
277 ACX_CHECK_COMPILER_FLAG(g, [CFLAGS="$CFLAGS -g"])
278 ACX_CHECK_COMPILER_FLAG(O2, [CFLAGS="$CFLAGS -O2"])
283 ACX_DETERMINE_EXT_FLAGS_UNBOUND
285 # debug mode flags warnings
286 AC_ARG_ENABLE(checking, AS_HELP_STRING([--enable-checking],[Enable warnings, asserts, makefile-dependencies]))
287 AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug],[same as enable-checking]))
288 if test "$enable_debug" = "yes"; then debug_enabled="$enable_debug";
289 else debug_enabled="$enable_checking"; fi
290 AC_SUBST(debug_enabled)
291 case "$debug_enabled" in
293 ACX_CHECK_COMPILER_FLAG(W, [CFLAGS="$CFLAGS -W"])
294 ACX_CHECK_COMPILER_FLAG(Wall, [CFLAGS="$CFLAGS -Wall"])
295 ACX_CHECK_COMPILER_FLAG(Wextra, [CFLAGS="$CFLAGS -Wextra"])
296 ACX_CHECK_COMPILER_FLAG(Wdeclaration-after-statement, [CFLAGS="$CFLAGS -Wdeclaration-after-statement"])
297 AC_DEFINE([UNBOUND_DEBUG], [], [define this to enable debug checks.])
303 if test "$default_cflags" = "yes"; then
304 # only when CFLAGS was "" at the start, if the users wants to
305 # override we shouldn't add default cflags, because they wouldn't
306 # be able to turn off these options and set the CFLAGS wanted.
313 ACX_CHECK_FORMAT_ATTRIBUTE
314 ACX_CHECK_UNUSED_ATTRIBUTE
316 AC_DEFUN([CHECK_WEAK_ATTRIBUTE],
317 [AC_REQUIRE([AC_PROG_CC])
318 AC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "weak" attribute)
319 AC_CACHE_VAL(ac_cv_c_weak_attribute,
320 [ac_cv_c_weak_attribute=no
321 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h>
322 __attribute__((weak)) void f(int x) { printf("%d", x); }
325 ]])],[ac_cv_c_weak_attribute="yes"],[ac_cv_c_weak_attribute="no"])
328 AC_MSG_RESULT($ac_cv_c_weak_attribute)
329 if test $ac_cv_c_weak_attribute = yes; then
330 AC_DEFINE(HAVE_ATTR_WEAK, 1, [Whether the C compiler accepts the "weak" attribute])
331 AC_DEFINE(ATTR_WEAK, [__attribute__((weak))], [apply the weak attribute to a symbol])
333 ])dnl End of CHECK_WEAK_ATTRIBUTE
337 AC_DEFUN([CHECK_NORETURN_ATTRIBUTE],
338 [AC_REQUIRE([AC_PROG_CC])
339 AC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "noreturn" attribute)
340 AC_CACHE_VAL(ac_cv_c_noreturn_attribute,
341 [ac_cv_c_noreturn_attribute=no
342 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h>
343 __attribute__((noreturn)) void f(int x) { printf("%d", x); }
346 ]])],[ac_cv_c_noreturn_attribute="yes"],[ac_cv_c_noreturn_attribute="no"])
349 AC_MSG_RESULT($ac_cv_c_noreturn_attribute)
350 if test $ac_cv_c_noreturn_attribute = yes; then
351 AC_DEFINE(HAVE_ATTR_NORETURN, 1, [Whether the C compiler accepts the "noreturn" attribute])
352 AC_DEFINE(ATTR_NORETURN, [__attribute__((__noreturn__))], [apply the noreturn attribute to a function that exits the program])
354 ])dnl End of CHECK_NORETURN_ATTRIBUTE
356 CHECK_NORETURN_ATTRIBUTE
358 if test "$srcdir" != "."; then
359 CPPFLAGS="$CPPFLAGS -I$srcdir"
362 AC_DEFUN([ACX_YYLEX_DESTROY], [
363 AC_MSG_CHECKING([for yylex_destroy])
364 if echo %% | $LEX -t 2>&1 | grep yylex_destroy >/dev/null 2>&1; then
365 AC_DEFINE(LEX_HAS_YYLEX_DESTROY, 1, [if lex has yylex_destroy])
367 else AC_MSG_RESULT(no);
372 AC_DEFUN([ACX_YYLEX_OPTION], [
373 AC_MSG_CHECKING([for lex %option])
374 if cat <<EOF | $LEX -t 2>&1 | grep yy_delete_buffer >/dev/null 2>&1; then
379 else AC_MSG_RESULT(no);
384 AC_PROG_LEX([noyywrap])
385 if test "$LEX" != "" -a "$LEX" != ":"; then
388 if test "$LEX" != "" -a "$LEX" != ":"; then
392 AC_CHECK_PROG(doxygen, doxygen, doxygen)
393 AC_CHECK_TOOL(STRIP, strip)
396 # pkg-config is only needed for these options, do not require it otherwise
397 if test "$enable_systemd" = "yes" -o "$with_pyunbound" = "yes" -o "$with_pythonmod" = "yes"; then
401 # Checks for header files.
402 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])
403 # net/if.h portability for Darwin see:
404 # https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Header-Portability.html
405 AC_CHECK_HEADERS([net/if.h],,, [
411 # ifdef HAVE_STDLIB_H
415 #ifdef HAVE_SYS_SOCKET_H
416 # include <sys/socket.h>
420 # Check for Apple header. This uncovers TARGET_OS_IPHONE, TARGET_OS_TV or TARGET_OS_WATCH
421 AC_CHECK_HEADERS([TargetConditionals.h],,, [AC_INCLUDES_DEFAULT])
422 AC_CHECK_HEADERS([netioapi.h],,, [AC_INCLUDES_DEFAULT
424 #include <sys/param.h>
427 #ifdef HAVE_SYS_SOCKET_H
428 #include <sys/socket.h>
431 #ifdef HAVE_SYS_UIO_H
435 #ifdef HAVE_NETINET_IN_H
436 #include <netinet/in.h>
439 #ifdef HAVE_NETINET_TCP_H
440 #include <netinet/tcp.h>
443 #ifdef HAVE_ARPA_INET_H
444 #include <arpa/inet.h>
447 #ifdef HAVE_WINSOCK2_H
448 #include <winsock2.h>
451 #ifdef HAVE_WS2TCPIP_H
452 #include <ws2tcpip.h>
457 # Using own tests for int64* because autoconf builtin only give 32bit.
458 AC_CHECK_TYPE(int8_t, signed char)
459 AC_CHECK_TYPE(int16_t, short)
460 AC_CHECK_TYPE(int32_t, int)
461 AC_CHECK_TYPE(int64_t, long long)
462 AC_CHECK_TYPE(uint8_t, unsigned char)
463 AC_CHECK_TYPE(uint16_t, unsigned short)
464 AC_CHECK_TYPE(uint32_t, unsigned int)
465 AC_CHECK_TYPE(uint64_t, unsigned long long)
467 AC_CHECK_TYPE(ssize_t, int)
476 ACX_CHECK_MEMCMP_SIGNED
478 AC_CHECK_SIZEOF(time_t,,[
480 #ifdef TIME_WITH_SYS_TIME
481 # include <sys/time.h>
484 # ifdef HAVE_SYS_TIME_H
485 # include <sys/time.h>
491 AC_CHECK_SIZEOF(size_t)
493 # add option to disable the evil rpath
495 AC_SUBST(RUNTIME_PATH)
497 # check to see if libraries are needed for these functions.
498 AC_SEARCH_LIBS([inet_pton], [nsl])
499 AC_SEARCH_LIBS([socket], [socket])
501 # check whether strptime also works
502 AC_DEFUN([AC_CHECK_STRPTIME_WORKS],
503 [AC_REQUIRE([AC_PROG_CC])
504 AC_MSG_CHECKING(whether strptime works)
505 if test c${cross_compiling} = cno; then
506 AC_RUN_IFELSE([AC_LANG_SOURCE([[
507 #define _XOPEN_SOURCE 600
509 int main(void) { struct tm tm; char *res;
510 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);
512 res = strptime("20070207111842", "%Y%m%d%H%M%S", &tm);
513 if (!res) return 1; return 0; }
514 ]])] , [eval "ac_cv_c_strptime_works=yes"], [eval "ac_cv_c_strptime_works=no"])
516 eval "ac_cv_c_strptime_works=maybe"
518 AC_MSG_RESULT($ac_cv_c_strptime_works)
519 if test $ac_cv_c_strptime_works = no; then
522 AC_DEFINE_UNQUOTED([STRPTIME_WORKS], 1, [use default strptime.])
526 # check some functions of the OS before linking libs (while still runnable).
529 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.'])
532 ACX_CHECK_NONBLOCKING_BROKEN
534 AC_CHECK_FUNCS([strptime],[AC_CHECK_STRPTIME_WORKS],[AC_LIBOBJ([strptime])])
536 # check if we can use SO_REUSEPORT
538 if echo "$host" | $GREP -i -e linux >/dev/null; then reuseport_default=1; fi
539 if echo "$host" | $GREP -i -e dragonfly >/dev/null; then reuseport_default=1; fi
540 if test "$reuseport_default" = 1; then
541 AC_DEFINE(REUSEPORT_DEFAULT, 1, [if REUSEPORT is enabled by default])
543 AC_DEFINE(REUSEPORT_DEFAULT, 0, [if REUSEPORT is enabled by default])
546 # Include systemd.m4 - begin
548 # Include systemd.m4 - end
550 # set memory allocation checking if requested
551 AC_ARG_ENABLE(alloc-checks, AS_HELP_STRING([--enable-alloc-checks],[ enable to memory allocation statistics, for debug purposes ]),
553 AC_ARG_ENABLE(alloc-lite, AS_HELP_STRING([--enable-alloc-lite],[ enable for lightweight alloc assertions, for debug purposes ]),
555 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 ]),
557 if test x_$enable_alloc_nonregional = x_yes; then
558 AC_DEFINE(UNBOUND_ALLOC_NONREGIONAL, 1, [use malloc not regions, for debug use])
560 if test x_$enable_alloc_checks = x_yes; then
561 AC_DEFINE(UNBOUND_ALLOC_STATS, 1, [use statistics for allocs and frees, for debug use])
562 SLDNS_ALLOCCHECK_EXTRA_OBJ="alloc.lo log.lo"
563 AC_SUBST(SLDNS_ALLOCCHECK_EXTRA_OBJ)
564 ASYNCLOOK_ALLOCCHECK_EXTRA_OBJ="alloc.lo"
565 AC_SUBST(ASYNCLOOK_ALLOCCHECK_EXTRA_OBJ)
567 if test x_$enable_alloc_lite = x_yes; then
568 AC_DEFINE(UNBOUND_ALLOC_LITE, 1, [use to enable lightweight alloc assertions, for debug use])
570 ACX_FUNC_MALLOC([unbound])
574 # check windows threads (we use them, not pthreads, on windows).
575 if test "$on_mingw" = "yes"; then
576 # check windows threads
577 AC_CHECK_HEADERS([windows.h],,, [AC_INCLUDES_DEFAULT])
578 AC_MSG_CHECKING([for CreateThread])
579 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
580 #ifdef HAVE_WINDOWS_H
584 HANDLE t = CreateThread(NULL, 0, NULL, NULL, 0, NULL);
587 AC_DEFINE(HAVE_WINDOWS_THREADS, 1, [Using Windows threads])
593 # not on mingw, check thread libraries.
595 # check for thread library.
596 # check this first, so that the pthread lib does not get linked in via
597 # libssl or libpython, and thus distorts the tests, and we end up using
598 # the non-threadsafe C libraries.
599 AC_ARG_WITH(pthreads, AS_HELP_STRING([--with-pthreads],[use pthreads library, or --without-pthreads to disable threading support.]),
600 [ ],[ withval="yes" ])
602 if test x_$withval != x_no; then
604 AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.])
605 if test -n "$PTHREAD_LIBS"; then
606 LIBS="$PTHREAD_LIBS $LIBS"
608 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
611 AC_CHECK_TYPES([pthread_spinlock_t, pthread_rwlock_t],,,[#include <pthread.h>])
612 AC_CHECK_SIZEOF([unsigned long])
613 AC_CHECK_SIZEOF(pthread_t)
615 if echo "$CFLAGS" | $GREP -e "-pthread" >/dev/null; then
616 AC_MSG_CHECKING([if -pthread unused during linking])
617 # catch clang warning 'argument unused during compilation'
618 AC_LANG_CONFTEST([AC_LANG_SOURCE(AC_INCLUDES_DEFAULT
620 int main(void) {return 0;}
624 echo "$CC $CFLAGS -c conftest.c -o conftest.o" >&AS_MESSAGE_LOG_FD
625 $CC $CFLAGS -c conftest.c -o conftest.o 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD
628 echo "$CC $CFLAGS -Werror $LDFLAGS $LIBS -o conftest contest.o" >&AS_MESSAGE_LOG_FD
629 $CC $CFLAGS -Werror $LDFLAGS $LIBS -o conftest conftest.o 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD
630 if test $? -ne 0; then
632 CFLAGS=`echo "$CFLAGS" | sed -e 's/-pthread//'`
633 PTHREAD_CFLAGS_ONLY="-pthread"
634 AC_SUBST(PTHREAD_CFLAGS_ONLY)
640 fi # endif cc successful
641 rm -f conftest conftest.c conftest.o
642 fi # endif -pthread in CFLAGS
647 # check solaris thread library
648 AC_ARG_WITH(solaris-threads, AS_HELP_STRING([--with-solaris-threads],[use solaris native thread library.]), [ ],[ withval="no" ])
649 ub_have_sol_threads=no
650 if test x_$withval != x_no; then
651 if test x_$ub_have_pthreads != x_no; then
652 AC_MSG_WARN([Have pthreads already, ignoring --with-solaris-threads])
654 AC_SEARCH_LIBS(thr_create, [thread],
656 AC_DEFINE(HAVE_SOLARIS_THREADS, 1, [Using Solaris threads])
658 ACX_CHECK_COMPILER_FLAG(mt, [CFLAGS="$CFLAGS -mt"],
659 [CFLAGS="$CFLAGS -D_REENTRANT"])
660 ub_have_sol_threads=yes
662 AC_MSG_ERROR([no solaris threads found.])
667 fi # end of non-mingw check of thread libraries
669 # Check for SYSLOG_FACILITY
670 AC_ARG_WITH(syslog-facility, AS_HELP_STRING([--with-syslog-facility=LOCAL0 - LOCAL7],[ set SYSLOG_FACILITY, default DAEMON ]),
671 [ UNBOUND_SYSLOG_FACILITY="$withval" ], [])
672 case "${UNBOUND_SYSLOG_FACILITY}" in
674 LOCAL[[0-7]]) UNBOUND_SYSLOG_FACILITY="LOG_${UNBOUND_SYSLOG_FACILITY}" ;;
676 *) UNBOUND_SYSLOG_FACILITY="LOG_DAEMON" ;;
679 AC_DEFINE_UNQUOTED(UB_SYSLOG_FACILITY,${UNBOUND_SYSLOG_FACILITY},[the SYSLOG_FACILITY to use, default LOG_DAEMON])
681 # Check for dynamic library module
682 AC_ARG_WITH(dynlibmodule,
683 AS_HELP_STRING([--with-dynlibmodule],[build dynamic library module, or --without-dynlibmodule to disable it. (default=no)]),
684 [], [ withval="no" ])
686 if test x_$withval != x_no; then
687 AC_DEFINE(WITH_DYNLIBMODULE, 1, [Define if you want dynlib module.])
688 WITH_DYNLIBMODULE=yes
689 AC_SUBST(WITH_DYNLIBMODULE)
690 DYNLIBMOD_OBJ="dynlibmod.lo"
691 AC_SUBST(DYNLIBMOD_OBJ)
692 DYNLIBMOD_HEADER='$(srcdir)/dynlibmod/dynlibmod.h'
693 AC_SUBST(DYNLIBMOD_HEADER)
694 if test $on_mingw = "no"; then
695 # link with -ldl if not already there, for all executables because
696 # dlopen call is in the dynlib module. For unbound executable, also
698 AC_SEARCH_LIBS([dlopen], [dl])
699 DYNLIBMOD_EXTRALIBS="-export-dynamic"
701 DYNLIBMOD_EXTRALIBS="-Wl,--export-all-symbols,--out-implib,libunbound.dll.a"
703 AC_SUBST(DYNLIBMOD_EXTRALIBS)
706 # Check for PyUnbound
707 AC_ARG_WITH(pyunbound,
708 AS_HELP_STRING([--with-pyunbound],[build PyUnbound, or --without-pyunbound to skip it. (default=no)]),
709 [], [ withval="no" ])
713 if test x_$withval != x_no; then
714 ub_with_pyunbound=yes
718 # Check for Python module
719 AC_ARG_WITH(pythonmodule,
720 AS_HELP_STRING([--with-pythonmodule],[build Python module, or --without-pythonmodule to disable script engine. (default=no)]),
721 [], [ withval="no" ])
724 if test x_$withval != x_no; then
725 ub_with_pythonmod=yes
729 # Check for Python & SWIG only on PyUnbound or PyModule
730 if test x_$ub_test_python != x_no; then
734 ac_save_LIBS="$LIBS" dnl otherwise AC_PYTHON_DEVEL thrashes $LIBS
736 if test ! -z "$PYTHON_VERSION"; then
737 if test `$PYTHON -c "print('$PYTHON_VERSION' >= '2.4.0')"` = "False"; then
738 AC_MSG_ERROR([Python version >= 2.4.0 is required])
741 [PY_MAJOR_VERSION="`$PYTHON -c \"import sys; print(sys.version_info[0])\"`"]
742 AC_SUBST(PY_MAJOR_VERSION)
744 AC_DEFINE(HAVE_PYTHON,1,[Define if you have Python libraries and header files.])
745 if test x_$ub_with_pythonmod != x_no; then
746 if test -n "$LIBS"; then
747 LIBS="$PYTHON_LDFLAGS $LIBS"
749 LIBS="$PYTHON_LDFLAGS"
752 PYTHON_LIBS="$PYTHON_LDFLAGS"
753 AC_SUBST(PYTHON_LIBS)
754 if test -n "$CPPFLAGS"; then
755 CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS"
757 CPPFLAGS="$PYTHON_CPPFLAGS"
759 if test "$PYTHON_LIBDIR" != "/usr/lib" -a "$PYTHON_LIBDIR" != "" -a "$PYTHON_LIBDIR" != "/usr/lib64"; then
760 ACX_RUNTIME_PATH_ADD([$PYTHON_LIBDIR])
763 PKG_CHECK_EXISTS(["python${PY_MAJOR_VERSION}"],
764 [PC_PY_DEPENDENCY="python${PY_MAJOR_VERSION}"],
765 [PC_PY_DEPENDENCY="python"])
766 AC_SUBST(PC_PY_DEPENDENCY)
770 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]))
771 if test "$enable_swig_version_check" = "yes"; then
776 AC_MSG_CHECKING(SWIG)
777 if test ! -x "$SWIG"; then
778 AC_MSG_ERROR([failed to find swig tool, install it, or do not build Python module and PyUnbound])
780 AC_DEFINE(HAVE_SWIG, 1, [Define if you have Swig libraries and header files.])
781 AC_SUBST(swig, "$SWIG")
782 AC_MSG_RESULT(present)
784 # If have Python & SWIG
786 if test x_$ub_with_pythonmod != x_no; then
787 AC_DEFINE(WITH_PYTHONMODULE, 1, [Define if you want Python module.])
788 WITH_PYTHONMODULE=yes
789 AC_SUBST(WITH_PYTHONMODULE)
790 PYTHONMOD_OBJ="pythonmod.lo pythonmod_utils.lo"
791 AC_SUBST(PYTHONMOD_OBJ)
792 PYTHONMOD_HEADER='$(srcdir)/pythonmod/pythonmod.h'
793 AC_SUBST(PYTHONMOD_HEADER)
794 PYTHONMOD_INSTALL=pythonmod-install
795 AC_SUBST(PYTHONMOD_INSTALL)
796 PYTHONMOD_UNINSTALL=pythonmod-uninstall
797 AC_SUBST(PYTHONMOD_UNINSTALL)
801 if test x_$ub_with_pyunbound != x_no; then
802 AC_DEFINE(WITH_PYUNBOUND, 1, [Define if you want PyUnbound.])
804 AC_SUBST(WITH_PYUNBOUND)
805 PYUNBOUND_OBJ="libunbound_wrap.lo"
806 AC_SUBST(PYUNBOUND_OBJ)
807 PYUNBOUND_TARGET="_unbound.la"
808 AC_SUBST(PYUNBOUND_TARGET)
809 PYUNBOUND_INSTALL=pyunbound-install
810 AC_SUBST(PYUNBOUND_INSTALL)
811 PYUNBOUND_UNINSTALL=pyunbound-uninstall
812 AC_SUBST(PYUNBOUND_UNINSTALL)
816 AC_MSG_RESULT([*** Python libraries not found, won't build PythonMod or PyUnbound ***])
822 if test "`uname`" = "NetBSD"; then
823 NETBSD_LINTFLAGS='"-D__RENAME(x)=" -D_NETINET_IN_H_'
824 AC_SUBST(NETBSD_LINTFLAGS)
827 if test "`uname`" = "Linux"; then
828 # splint cannot parse modern c99 header files
829 GCC_DOCKER_LINTFLAGS='-syntax'
830 AC_SUBST(GCC_DOCKER_LINTFLAGS)
832 CONFIG_DATE=`date +%Y%m%d`
833 AC_SUBST(CONFIG_DATE)
835 # Checks for libraries.
839 AC_ARG_WITH([nss], AS_HELP_STRING([--with-nss=path],[use libnss instead of openssl, installed at path.]),
842 AC_DEFINE(HAVE_NSS, 1, [Use libnss for crypto])
843 if test "$withval" != "" -a "$withval" != "yes"; then
844 CPPFLAGS="$CPPFLAGS -I$withval/include/nss3"
845 LDFLAGS="$LDFLAGS -L$withval/lib"
846 ACX_RUNTIME_PATH_ADD([$withval/lib])
847 CPPFLAGS="-I$withval/include/nspr4 $CPPFLAGS"
849 CPPFLAGS="$CPPFLAGS -I/usr/include/nss3"
850 CPPFLAGS="-I/usr/include/nspr4 $CPPFLAGS"
852 LIBS="$LIBS -lnss3 -lnspr4"
854 PC_CRYPTO_DEPENDENCY="nss nspr"
855 AC_SUBST(PC_CRYPTO_DEPENDENCY)
861 AC_ARG_WITH([nettle], AS_HELP_STRING([--with-nettle=path],[use libnettle as crypto library, installed at path.]),
864 AC_DEFINE(HAVE_NETTLE, 1, [Use libnettle for crypto])
865 AC_CHECK_HEADERS([nettle/dsa-compat.h],,, [AC_INCLUDES_DEFAULT])
866 if test "$withval" != "" -a "$withval" != "yes"; then
867 CPPFLAGS="$CPPFLAGS -I$withval/include/nettle"
868 LDFLAGS="$LDFLAGS -L$withval/lib"
869 ACX_RUNTIME_PATH_ADD([$withval/lib])
871 CPPFLAGS="$CPPFLAGS -I/usr/include/nettle"
873 LIBS="$LIBS -lhogweed -lnettle -lgmp"
875 PC_CRYPTO_DEPENDENCY="hogweed nettle"
876 AC_SUBST(PC_CRYPTO_DEPENDENCY)
881 if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then
886 PC_CRYPTO_DEPENDENCY=""
887 AC_SUBST(PC_CRYPTO_DEPENDENCY)
889 # check if -lcrypt32 is needed because CAPIENG needs that. (on windows)
892 AC_MSG_CHECKING([if libssl needs -lcrypt32])
893 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
894 int EVP_sha256(void);
902 LIBS="$LIBS -lcrypt32"
905 AC_MSG_CHECKING([for LibreSSL])
906 if grep VERSION_TEXT $ssldir_include/openssl/opensslv.h | grep "LibreSSL" >/dev/null; then
908 AC_DEFINE([HAVE_LIBRESSL], [1], [Define if we have LibreSSL])
909 # libressl provides these compat functions, but they may also be
910 # declared by the OS in libc. See if they have been declared.
911 AC_CHECK_DECLS([strlcpy,strlcat,arc4random,arc4random_uniform])
915 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])
916 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])
918 # these check_funcs need -lssl
921 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])
924 AC_CHECK_DECLS([SSL_COMP_get_compression_methods,sk_SSL_COMP_pop_free,SSL_CTX_set_ecdh_auto], [], [], [
926 #ifdef HAVE_OPENSSL_ERR_H
927 #include <openssl/err.h>
930 #ifdef HAVE_OPENSSL_RAND_H
931 #include <openssl/rand.h>
934 #ifdef HAVE_OPENSSL_CONF_H
935 #include <openssl/conf.h>
938 #ifdef HAVE_OPENSSL_ENGINE_H
939 #include <openssl/engine.h>
941 #include <openssl/ssl.h>
942 #include <openssl/evp.h>
945 if test "$ac_cv_func_HMAC_Init_ex" = "yes"; then
946 # check function return type.
947 AC_MSG_CHECKING(the return type of HMAC_Init_ex)
948 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
949 #ifdef HAVE_OPENSSL_ERR_H
950 #include <openssl/err.h>
953 #ifdef HAVE_OPENSSL_RAND_H
954 #include <openssl/rand.h>
957 #ifdef HAVE_OPENSSL_CONF_H
958 #include <openssl/conf.h>
961 #ifdef HAVE_OPENSSL_ENGINE_H
962 #include <openssl/engine.h>
964 #include <openssl/ssl.h>
965 #include <openssl/evp.h>
967 HMAC_CTX* hmac_ctx = NULL;
968 void* hmac_key = NULL;
969 const EVP_MD* digest = NULL;
970 int x = HMAC_Init_ex(hmac_ctx, hmac_key, 32, digest, NULL);
976 AC_DEFINE([HMAC_INIT_EX_RETURNS_VOID], 1, [If HMAC_Init_ex() returns void])
984 AC_ARG_WITH([libbsd], AS_HELP_STRING([--with-libbsd],[Use portable libbsd functions]), [
985 AC_CHECK_HEADERS([bsd/string.h bsd/stdlib.h],,, [AC_INCLUDES_DEFAULT])
986 if test "x$ac_cv_header_bsd_string_h" = xyes -a "x$ac_cv_header_bsd_stdlib_h" = xyes; then
987 for func in strlcpy strlcat arc4random arc4random_uniform reallocarray; do
988 AC_SEARCH_LIBS([$func], [bsd], [
989 AC_DEFINE(HAVE_LIBBSD, 1, [Use portable libbsd functions])
990 PC_LIBBSD_DEPENDENCY=libbsd
991 AC_SUBST(PC_LIBBSD_DEPENDENCY)
997 AC_ARG_ENABLE(sha1, AS_HELP_STRING([--disable-sha1],[Disable SHA1 RRSIG support, does not disable nsec3 support]))
998 case "$enable_sha1" in
1002 AC_DEFINE([USE_SHA1], [1], [Define this to enable SHA1 support.])
1007 AC_ARG_ENABLE(sha2, AS_HELP_STRING([--disable-sha2],[Disable SHA256 and SHA512 RRSIG support]))
1008 case "$enable_sha2" in
1012 AC_DEFINE([USE_SHA2], [1], [Define this to enable SHA256 and SHA512 support.])
1016 AC_ARG_ENABLE(subnet, AS_HELP_STRING([--enable-subnet],[Enable client subnet]))
1017 case "$enable_subnet" in
1019 AC_DEFINE([CLIENT_SUBNET], [1], [Define this to enable client subnet option.])
1020 SUBNET_OBJ="edns-subnet.lo subnetmod.lo addrtree.lo subnet-whitelist.lo"
1021 AC_SUBST(SUBNET_OBJ)
1022 SUBNET_HEADER='$(srcdir)/edns-subnet/subnetmod.h $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/edns-subnet/subnet-whitelist.h $(srcdir)/edns-subnet/addrtree.h'
1023 AC_SUBST(SUBNET_HEADER)
1029 # check whether gost also works
1030 AC_DEFUN([AC_CHECK_GOST_WORKS],
1031 [AC_REQUIRE([AC_PROG_CC])
1032 AC_MSG_CHECKING([if GOST works])
1033 if test c${cross_compiling} = cno; then
1035 if test -n "$ssldir"; then
1036 CFLAGS="$CFLAGS -Wl,-rpath,$ssldir_lib"
1038 AC_RUN_IFELSE([AC_LANG_SOURCE([[
1040 #include <openssl/ssl.h>
1041 #include <openssl/evp.h>
1042 #include <openssl/engine.h>
1043 #include <openssl/conf.h>
1044 /* routine to load gost (from sldns) */
1045 int load_gost_id(void)
1047 static int gost_id = 0;
1048 const EVP_PKEY_ASN1_METHOD* meth;
1051 if(gost_id) return gost_id;
1053 /* see if configuration loaded gost implementation from other engine*/
1054 meth = EVP_PKEY_asn1_find_str(NULL, "gost2001", -1);
1056 EVP_PKEY_asn1_get0_info(&gost_id, NULL, NULL, NULL, NULL, meth);
1060 /* see if engine can be loaded already */
1061 e = ENGINE_by_id("gost");
1063 /* load it ourself, in case statically linked */
1064 ENGINE_load_builtin_engines();
1065 ENGINE_load_dynamic();
1066 e = ENGINE_by_id("gost");
1069 /* no gost engine in openssl */
1072 if(!ENGINE_set_default(e, ENGINE_METHOD_ALL)) {
1078 meth = EVP_PKEY_asn1_find_str(&e, "gost2001", -1);
1080 /* algo not found */
1085 EVP_PKEY_asn1_get0_info(&gost_id, NULL, NULL, NULL, NULL, meth);
1091 unsigned char digest[64]; /* its a 256-bit digest, so uses 32 bytes */
1092 const char* str = "Hello world";
1093 const unsigned char check[] = {
1094 0x40 , 0xed , 0xf8 , 0x56 , 0x5a , 0xc5 , 0x36 , 0xe1 ,
1095 0x33 , 0x7c , 0x7e , 0x87 , 0x62 , 0x1c , 0x42 , 0xe0 ,
1096 0x17 , 0x1b , 0x5e , 0xce , 0xa8 , 0x46 , 0x65 , 0x4d ,
1097 0x8d , 0x3e , 0x22 , 0x9b , 0xe1 , 0x30 , 0x19 , 0x9d
1099 OPENSSL_config(NULL);
1100 (void)load_gost_id();
1101 md = EVP_get_digestbyname("md_gost94");
1103 memset(digest, 0, sizeof(digest));
1104 ctx = EVP_MD_CTX_create();
1106 if(!EVP_DigestInit_ex(ctx, md, NULL)) return 3;
1107 if(!EVP_DigestUpdate(ctx, str, 10)) return 4;
1108 if(!EVP_DigestFinal_ex(ctx, digest, NULL)) return 5;
1109 /* uncomment to see the hash calculated.
1112 printf(" %2.2x", (int)digest[i]);
1115 if(memcmp(digest, check, sizeof(check)) != 0)
1119 ]])] , [eval "ac_cv_c_gost_works=yes"], [eval "ac_cv_c_gost_works=no"])
1122 eval "ac_cv_c_gost_works=maybe"
1124 AC_MSG_RESULT($ac_cv_c_gost_works)
1127 AC_ARG_ENABLE(gost, AS_HELP_STRING([--disable-gost],[Disable GOST support]))
1129 if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then
1130 case "$enable_gost" in
1134 AC_CHECK_FUNC(EVP_PKEY_set_type_str, [:],[AC_MSG_ERROR([OpenSSL 1.0.0 is needed for GOST support])])
1135 AC_CHECK_FUNC(EC_KEY_new, [], [AC_MSG_ERROR([OpenSSL does not support ECC, needed for GOST support])])
1137 if test "$ac_cv_c_gost_works" != no; then
1139 AC_DEFINE([USE_GOST], [1], [Define this to enable GOST support.])
1143 fi dnl !USE_NSS && !USE_NETTLE
1145 AC_ARG_ENABLE(ecdsa, AS_HELP_STRING([--disable-ecdsa],[Disable ECDSA support]))
1147 case "$enable_ecdsa" in
1151 if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then
1152 AC_CHECK_FUNC(ECDSA_sign, [], [AC_MSG_ERROR([OpenSSL does not support ECDSA: please upgrade or rerun with --disable-ecdsa])])
1153 AC_CHECK_FUNC(SHA384_Init, [], [AC_MSG_ERROR([OpenSSL does not support SHA384: please upgrade or rerun with --disable-ecdsa])])
1154 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
1155 #include <openssl/evp.h>
1157 # see if OPENSSL 1.0.0 or later (has EVP MD and Verify independency)
1158 AC_MSG_CHECKING([if openssl supports SHA2 and ECDSA with EVP])
1159 if grep OPENSSL_VERSION_TEXT $ssldir_include/openssl/opensslv.h | grep "OpenSSL" >/dev/null; then
1160 if grep OPENSSL_VERSION_NUMBER $ssldir_include/openssl/opensslv.h | grep 0x0 >/dev/null; then
1162 AC_DEFINE_UNQUOTED([USE_ECDSA_EVP_WORKAROUND], [1], [Define this to enable an EVP workaround for older openssl])
1164 AC_MSG_RESULT([yes])
1167 # not OpenSSL, thus likely LibreSSL, which supports it
1168 AC_MSG_RESULT([yes])
1171 # we now know we have ECDSA and the required curves.
1172 AC_DEFINE_UNQUOTED([USE_ECDSA], [1], [Define this to enable ECDSA support.])
1177 AC_ARG_ENABLE(dsa, AS_HELP_STRING([--disable-dsa],[Disable DSA support]))
1179 case "$enable_dsa" in
1181 # detect if DSA is supported, and turn it off if not.
1182 if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then
1183 AC_CHECK_FUNC(DSA_SIG_new, [
1184 AC_CHECK_TYPE(DSA_SIG*, [
1185 AC_DEFINE_UNQUOTED([USE_DSA], [1], [Define this to enable DSA support.])
1186 ], [if test "x$enable_dsa" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support DSA and you used --enable-dsa.])
1189 #ifdef HAVE_OPENSSL_ERR_H
1190 #include <openssl/err.h>
1193 #ifdef HAVE_OPENSSL_RAND_H
1194 #include <openssl/rand.h>
1197 #ifdef HAVE_OPENSSL_CONF_H
1198 #include <openssl/conf.h>
1201 #ifdef HAVE_OPENSSL_ENGINE_H
1202 #include <openssl/engine.h>
1205 ], [if test "x$enable_dsa" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support DSA and you used --enable-dsa.])
1208 AC_DEFINE_UNQUOTED([USE_DSA], [1], [Define this to enable DSA support.])
1212 # disable dsa by default, RFC 8624 section 3.1, validators MUST NOT
1213 # support DSA for DNSSEC Validation.
1217 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]))
1218 if test "$with_deprecate_rsa_1024" = "yes"; then
1219 AC_DEFINE([DEPRECATE_RSA_1024], [1], [Deprecate RSA 1024 bit length, makes that an unsupported key])
1222 AC_ARG_ENABLE(ed25519, AS_HELP_STRING([--disable-ed25519],[Disable ED25519 support]))
1224 case "$enable_ed25519" in
1228 if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then
1229 AC_CHECK_DECLS([NID_ED25519], [
1231 ], [ if test "x$enable_ed25519" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support ED25519 and you used --enable-ed25519.])
1232 fi ], [AC_INCLUDES_DEFAULT
1233 #include <openssl/evp.h>
1236 if test $USE_NETTLE = "yes"; then
1237 AC_CHECK_HEADERS([nettle/eddsa.h], use_ed25519="yes",, [AC_INCLUDES_DEFAULT])
1239 if test $use_ed25519 = "yes"; then
1240 AC_DEFINE_UNQUOTED([USE_ED25519], [1], [Define this to enable ED25519 support.])
1245 AC_ARG_ENABLE(ed448, AS_HELP_STRING([--disable-ed448],[Disable ED448 support]))
1247 case "$enable_ed448" in
1251 if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then
1252 AC_CHECK_DECLS([NID_ED448], [
1254 ], [ if test "x$enable_ed448" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support ED448 and you used --enable-ed448.])
1255 fi ], [AC_INCLUDES_DEFAULT
1256 #include <openssl/evp.h>
1259 if test $use_ed448 = "yes"; then
1260 AC_DEFINE_UNQUOTED([USE_ED448], [1], [Define this to enable ED448 support.])
1265 AC_ARG_ENABLE(event-api, AS_HELP_STRING([--enable-event-api],[Enable (experimental) pluggable event base libunbound API installed to unbound-event.h]))
1266 case "$enable_event_api" in
1268 AC_SUBST(UNBOUND_EVENT_INSTALL, [unbound-event-install])
1269 AC_SUBST(UNBOUND_EVENT_UNINSTALL, [unbound-event-uninstall])
1275 AC_ARG_ENABLE(tfo-client, AS_HELP_STRING([--enable-tfo-client],[Enable TCP Fast Open for client mode]))
1276 case "$enable_tfo_client" in
1279 linux*) AC_CHECK_DECL([MSG_FASTOPEN], [AC_MSG_WARN([Check the platform specific TFO kernel parameters are correctly configured to support client mode TFO])],
1280 [AC_MSG_ERROR([TCP Fast Open is not available for client mode: please rerun without --enable-tfo-client])],
1281 [AC_INCLUDES_DEFAULT
1282 #include <netinet/tcp.h>
1284 AC_DEFINE_UNQUOTED([USE_MSG_FASTOPEN], [1], [Define this to enable client TCP Fast Open.])
1286 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])],
1287 [AC_MSG_ERROR([TCP Fast Open is not available for client mode: please rerun without --enable-tfo-client])],
1288 [AC_INCLUDES_DEFAULT
1289 #include <sys/socket.h>
1291 AC_DEFINE_UNQUOTED([USE_OSX_MSG_FASTOPEN], [1], [Define this to enable client TCP Fast Open.])
1299 AC_ARG_ENABLE(tfo-server, AS_HELP_STRING([--enable-tfo-server],[Enable TCP Fast Open for server mode]))
1300 case "$enable_tfo_server" in
1302 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
1303 #include <netinet/tcp.h>
1305 AC_DEFINE_UNQUOTED([USE_TCP_FASTOPEN], [1], [Define this to enable server TCP Fast Open.])
1311 # check for libevent
1312 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.]),
1313 [ ],[ with_libevent="no" ])
1314 if test "x_$with_libevent" != x_no; then
1315 AC_DEFINE([USE_LIBEVENT], [1], [Define if you enable libevent])
1316 AC_MSG_CHECKING(for libevent)
1317 if test "x_$with_libevent" = x_ -o "x_$with_libevent" = x_yes; then
1318 with_libevent="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
1320 for dir in $with_libevent; do
1322 if test -f "$dir/include/event.h" -o -f "$dir/include/event2/event.h"; then
1323 found_libevent="yes"
1324 dnl assume /usr is in default path.
1325 if test "$thedir" != "/usr"; then
1326 CPPFLAGS="$CPPFLAGS -I$thedir/include"
1331 if test x_$found_libevent != x_yes; then
1332 if test -f "$dir/event.h" -a \( -f "$dir/libevent.la" -o -f "$dir/libev.la" \) ; then
1333 # libevent source directory
1334 AC_MSG_RESULT(found in $thedir)
1335 CPPFLAGS="$CPPFLAGS -I$thedir -I$thedir/include"
1337 BAK_LDFLAGS="$LDFLAGS"
1338 # remove evdns from linking
1339 mkdir build >/dev/null 2>&1
1340 mkdir build/libevent >/dev/null 2>&1
1341 mkdir build/libevent/.libs >/dev/null 2>&1
1342 ev_files_o=`ls $thedir/*.o | grep -v evdns\.o | grep -v bufferevent_openssl\.o`
1343 ev_files_lo=`ls $thedir/*.lo | grep -v evdns\.lo | grep -v bufferevent_openssl\.lo`
1344 ev_files_libso=`ls $thedir/.libs/*.o | grep -v evdns\.o | grep -v bufferevent_openssl\.o`
1345 cp $ev_files_o build/libevent
1346 cp $ev_files_lo build/libevent
1347 cp $ev_files_libso build/libevent/.libs
1348 LATE_LDFLAGS="build/libevent/*.lo -lm"
1349 LDFLAGS="build/libevent/*.o $LDFLAGS -lm"
1351 AC_MSG_ERROR([Cannot find the libevent library in $with_libevent
1352 You can restart ./configure --with-libevent=no to use a builtin alternative.
1353 Please note that this alternative is not as capable as libevent when using
1354 large outgoing port ranges. ])
1357 AC_MSG_RESULT(found in $thedir)
1358 dnl if event2 exists and no event lib in dir itself, use subdir
1359 if test ! -f $thedir/lib/libevent.a -a ! -f $thedir/lib/libevent.so -a -d "$thedir/lib/event2"; then
1360 LDFLAGS="$LDFLAGS -L$thedir/lib/event2"
1361 ACX_RUNTIME_PATH_ADD([$thedir/lib/event2])
1363 dnl assume /usr is in default path, do not add "".
1364 if test "$thedir" != "/usr" -a "$thedir" != ""; then
1365 LDFLAGS="$LDFLAGS -L$thedir/lib"
1366 ACX_RUNTIME_PATH_ADD([$thedir/lib])
1370 # check for library used by libevent after 1.3c
1371 AC_SEARCH_LIBS([clock_gettime], [rt])
1373 # is the event.h header libev or libevent?
1374 AC_CHECK_HEADERS([event.h],,, [AC_INCLUDES_DEFAULT])
1375 AC_CHECK_DECL(EV_VERSION_MAJOR, [
1376 AC_SEARCH_LIBS(event_set, [ev])
1378 AC_SEARCH_LIBS(event_set, [event])
1379 ],[AC_INCLUDES_DEFAULT
1382 AC_CHECK_FUNCS([event_base_free]) # only in libevent 1.2 and later
1383 AC_CHECK_FUNCS([event_base_once]) # only in libevent 1.4.1 and later
1384 AC_CHECK_FUNCS([event_base_new]) # only in libevent 1.4.1 and later
1385 AC_CHECK_FUNCS([event_base_get_method]) # only in libevent 1.4.3 and later
1386 AC_CHECK_FUNCS([ev_loop]) # only in libev. (tested on 3.51)
1387 AC_CHECK_FUNCS([ev_default_loop]) # only in libev. (tested on 4.00)
1388 AC_CHECK_FUNCS([event_assign]) # in libevent, for thread-safety
1389 AC_CHECK_DECLS([evsignal_assign], [], [], [AC_INCLUDES_DEFAULT
1393 # include "event2/event.h"
1396 PC_LIBEVENT_DEPENDENCY="libevent"
1397 AC_SUBST(PC_LIBEVENT_DEPENDENCY)
1398 if test -n "$BAK_LDFLAGS_SET"; then
1399 LDFLAGS="$BAK_LDFLAGS"
1402 AC_DEFINE(USE_MINI_EVENT, 1, [Define if you want to use internal select based events])
1405 # check for libexpat
1406 AC_ARG_WITH(libexpat, AS_HELP_STRING([--with-libexpat=path],[specify explicit path for libexpat.]),
1407 [ ],[ withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" ])
1408 AC_MSG_CHECKING(for libexpat)
1410 for dir in $withval ; do
1411 if test -f "$dir/include/expat.h"; then
1412 found_libexpat="yes"
1413 dnl assume /usr is in default path.
1414 if test "$dir" != "/usr"; then
1415 CPPFLAGS="$CPPFLAGS -I$dir/include"
1416 LDFLAGS="$LDFLAGS -L$dir/lib"
1418 AC_MSG_RESULT(found in $dir)
1422 if test x_$found_libexpat != x_yes; then
1423 AC_MSG_ERROR([Could not find libexpat, expat.h])
1425 AC_CHECK_HEADERS([expat.h],,, [AC_INCLUDES_DEFAULT])
1426 AC_CHECK_DECLS([XML_StopParser], [], [], [AC_INCLUDES_DEFAULT
1430 # hiredis (redis C client for cachedb)
1431 AC_ARG_WITH(libhiredis, AS_HELP_STRING([--with-libhiredis=path],[specify explicit path for libhiredis.]),
1432 [ ],[ withval="no" ])
1433 found_libhiredis="no"
1434 if test x_$withval = x_yes -o x_$withval != x_no; then
1435 AC_MSG_CHECKING(for libhiredis)
1436 if test x_$withval = x_ -o x_$withval = x_yes; then
1437 withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
1439 for dir in $withval ; do
1440 if test -f "$dir/include/hiredis/hiredis.h"; then
1441 found_libhiredis="yes"
1442 dnl assume /usr is in default path.
1443 if test "$dir" != "/usr"; then
1444 CPPFLAGS="$CPPFLAGS -I$dir/include"
1445 LDFLAGS="$LDFLAGS -L$dir/lib"
1447 AC_MSG_RESULT(found in $dir)
1448 AC_DEFINE([USE_REDIS], [1], [Define this to use hiredis client.])
1449 LIBS="$LIBS -lhiredis"
1453 if test x_$found_libhiredis != x_yes; then
1454 AC_MSG_ERROR([Could not find libhiredis, hiredis.h])
1456 AC_CHECK_HEADERS([hiredis/hiredis.h],,, [AC_INCLUDES_DEFAULT])
1457 AC_CHECK_DECLS([redisConnect], [], [], [AC_INCLUDES_DEFAULT
1458 #include <hiredis/hiredis.h>
1463 AC_ARG_WITH(libnghttp2, AS_HELP_STRING([--with-libnghttp2=path],[specify explicit path for libnghttp2.]),
1464 [ ],[ withval="no" ])
1465 found_libnghttp2="no"
1466 if test x_$withval = x_yes -o x_$withval != x_no; then
1467 AC_MSG_CHECKING(for libnghttp2)
1468 if test x_$withval = x_ -o x_$withval = x_yes; then
1469 withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
1471 for dir in $withval ; do
1472 if test -f "$dir/include/nghttp2/nghttp2.h"; then
1473 found_libnghttp2="yes"
1474 dnl assume /usr is in default path.
1475 if test "$dir" != "/usr"; then
1476 CPPFLAGS="$CPPFLAGS -I$dir/include"
1477 LDFLAGS="$LDFLAGS -L$dir/lib"
1479 AC_MSG_RESULT(found in $dir)
1480 AC_DEFINE([HAVE_NGHTTP2], [1], [Define this to use nghttp2 client.])
1481 LIBS="$LIBS -lnghttp2"
1485 if test x_$found_libnghttp2 != x_yes; then
1486 AC_MSG_ERROR([Could not find libnghttp2, nghttp2.h])
1488 AC_CHECK_HEADERS([nghttp2/nghttp2.h],,, [AC_INCLUDES_DEFAULT])
1489 AC_CHECK_DECLS([nghttp2_session_server_new], [], [], [AC_INCLUDES_DEFAULT
1490 #include <nghttp2/nghttp2.h>
1494 # set static linking for uninstalled libraries if requested
1497 AC_ARG_ENABLE(static-exe, AS_HELP_STRING([--enable-static-exe],[ enable to compile executables statically against (event) uninstalled libs, for debug purposes ]),
1499 if test x_$enable_static_exe = x_yes; then
1501 if test "$on_mingw" = yes; then
1502 staticexe="-all-static"
1503 # for static compile, include gdi32 and zlib here.
1504 if echo $LIBS | grep 'lgdi32' >/dev/null; then
1507 LIBS="$LIBS -lgdi32"
1509 AC_CHECK_LIB([z], [compress], [ LIBS="$LIBS -lz" ])
1510 LIBS="$LIBS -l:libssp.a"
1514 # set full static linking if requested
1515 AC_ARG_ENABLE(fully-static, AS_HELP_STRING([--enable-fully-static],[ enable to compile fully static ]),
1517 if test x_$enable_fully_static = x_yes; then
1518 staticexe="-all-static"
1519 if test "$on_mingw" = yes; then
1520 # for static compile, include gdi32 and zlib here.
1521 if echo $LIBS | grep 'lgdi32' >/dev/null; then
1524 LIBS="$LIBS -lgdi32"
1526 AC_CHECK_LIB([z], [compress], [ LIBS="$LIBS -lz" ])
1527 LIBS="$LIBS -l:libssp.a"
1531 # set lock checking if requested
1532 AC_ARG_ENABLE(lock_checks, AS_HELP_STRING([--enable-lock-checks],[ enable to check lock and unlock calls, for debug purposes ]),
1534 if test x_$enable_lock_checks = x_yes; then
1535 AC_DEFINE(ENABLE_LOCK_CHECKS, 1, [Define if you want to use debug lock checking (slow).])
1536 CHECKLOCK_OBJ="checklocks.lo"
1537 AC_SUBST(CHECKLOCK_OBJ)
1540 ACX_CHECK_GETADDRINFO_WITH_INCLUDES
1541 if test "$USE_WINSOCK" = 1; then
1542 AC_DEFINE(UB_ON_WINDOWS, 1, [Use win32 resources and API])
1543 AC_CHECK_HEADERS([iphlpapi.h],,, [AC_INCLUDES_DEFAULT
1544 #include <windows.h>
1546 AC_CHECK_TOOL(WINDRES, windres)
1547 LIBS="$LIBS -liphlpapi -lcrypt32"
1548 WINAPPS="unbound-service-install.exe unbound-service-remove.exe anchor-update.exe"
1550 WIN_DAEMON_SRC="winrc/win_svc.c winrc/w_inst.c"
1551 AC_SUBST(WIN_DAEMON_SRC)
1552 WIN_DAEMON_OBJ="win_svc.lo w_inst.lo"
1553 AC_SUBST(WIN_DAEMON_OBJ)
1554 WIN_DAEMON_OBJ_LINK="rsrc_unbound.o"
1555 AC_SUBST(WIN_DAEMON_OBJ_LINK)
1556 WIN_HOST_OBJ_LINK="rsrc_unbound_host.o"
1557 AC_SUBST(WIN_HOST_OBJ_LINK)
1558 WIN_UBANCHOR_OBJ_LINK="rsrc_unbound_anchor.o log.lo locks.lo"
1559 AC_SUBST(WIN_UBANCHOR_OBJ_LINK)
1560 WIN_CONTROL_OBJ_LINK="rsrc_unbound_control.o"
1561 AC_SUBST(WIN_CONTROL_OBJ_LINK)
1562 WIN_CHECKCONF_OBJ_LINK="rsrc_unbound_checkconf.o"
1563 AC_SUBST(WIN_CHECKCONF_OBJ_LINK)
1564 AC_DEFINE(__USE_MINGW_ANSI_STDIO, 1, [defined to use gcc ansi snprintf and sscanf that understands %lld when compiled for windows.])
1566 if test $ac_cv_func_getaddrinfo = no; then
1567 AC_LIBOBJ([fake-rfc2553])
1569 # check after getaddrinfo for its libraries
1570 ACX_FUNC_IOCTLSOCKET
1572 # see if daemon(3) exists, and if it is deprecated.
1573 AC_CHECK_FUNCS([daemon])
1574 if test $ac_cv_func_daemon = yes; then
1575 ACX_FUNC_DEPRECATED([daemon], [(void)daemon(0, 0);], [
1581 AC_CHECK_MEMBERS([struct sockaddr_un.sun_len],,,[
1583 #ifdef HAVE_SYS_UN_H
1587 AC_CHECK_MEMBERS([struct in_pktinfo.ipi_spec_dst],,,[
1589 #if HAVE_SYS_PARAM_H
1590 #include <sys/param.h>
1593 #ifdef HAVE_SYS_SOCKET_H
1594 #include <sys/socket.h>
1597 #ifdef HAVE_SYS_UIO_H
1598 #include <sys/uio.h>
1601 #ifdef HAVE_NETINET_IN_H
1602 #include <netinet/in.h>
1605 #ifdef HAVE_NETINET_TCP_H
1606 #include <netinet/tcp.h>
1609 #ifdef HAVE_ARPA_INET_H
1610 #include <arpa/inet.h>
1613 #ifdef HAVE_WINSOCK2_H
1614 #include <winsock2.h>
1617 #ifdef HAVE_WS2TCPIP_H
1618 #include <ws2tcpip.h>
1622 AC_MSG_CHECKING([for htobe64])
1623 AC_LINK_IFELSE([AC_LANG_PROGRAM([
1625 #ifdef HAVE_ENDIAN_H
1626 # include <endian.h>
1628 #ifdef HAVE_SYS_ENDIAN_H
1629 # include <sys/endian.h>
1631 ], [unsigned long long x = htobe64(0); printf("%u", (unsigned)x);])],
1633 AC_DEFINE(HAVE_HTOBE64, 1, [If we have htobe64]),
1636 AC_MSG_CHECKING([for be64toh])
1637 AC_LINK_IFELSE([AC_LANG_PROGRAM([
1639 #ifdef HAVE_ENDIAN_H
1640 # include <endian.h>
1642 #ifdef HAVE_SYS_ENDIAN_H
1643 # include <sys/endian.h>
1645 ], [unsigned long long x = be64toh(0); printf("%u", (unsigned)x);])],
1647 AC_DEFINE(HAVE_BE64TOH, 1, [If we have be64toh]),
1650 AC_SEARCH_LIBS([setusercontext], [util])
1651 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])
1652 AC_CHECK_FUNCS([setresuid],,[AC_CHECK_FUNCS([setreuid])])
1653 AC_CHECK_FUNCS([setresgid],,[AC_CHECK_FUNCS([setregid])])
1655 # check if setreuid en setregid fail, on MacOSX10.4(darwin8).
1656 if echo $host_os | grep darwin8 > /dev/null; then
1657 AC_DEFINE(DARWIN_BROKEN_SETREUID, 1, [Define this if on macOSX10.4-darwin8 and setreuid and setregid do not work])
1659 AC_CHECK_DECLS([inet_pton,inet_ntop], [], [], [
1661 #ifdef HAVE_NETINET_IN_H
1662 #include <netinet/in.h>
1665 #ifdef HAVE_NETINET_TCP_H
1666 #include <netinet/tcp.h>
1669 #ifdef HAVE_ARPA_INET_H
1670 #include <arpa/inet.h>
1673 #ifdef HAVE_WINSOCK2_H
1674 #include <winsock2.h>
1677 #ifdef HAVE_WS2TCPIP_H
1678 #include <ws2tcpip.h>
1681 AC_REPLACE_FUNCS(inet_aton)
1682 AC_REPLACE_FUNCS(inet_pton)
1683 AC_REPLACE_FUNCS(inet_ntop)
1684 AC_REPLACE_FUNCS(snprintf)
1685 # test if snprintf return the proper length
1686 if test "x$ac_cv_func_snprintf" = xyes; then
1687 if test c${cross_compiling} = cno; then
1688 AC_MSG_CHECKING([for correct snprintf return value])
1689 AC_RUN_IFELSE([AC_LANG_SOURCE(AC_INCLUDES_DEFAULT
1691 int main(void) { return !(snprintf(NULL, 0, "test") == 4); }
1692 ]])], [AC_MSG_RESULT(yes)], [
1694 AC_DEFINE([SNPRINTF_RET_BROKEN], [], [define if (v)snprintf does not return length needed, (but length used)])
1699 AC_REPLACE_FUNCS(strlcat)
1700 AC_REPLACE_FUNCS(strlcpy)
1701 AC_REPLACE_FUNCS(memmove)
1702 AC_REPLACE_FUNCS(gmtime_r)
1703 AC_REPLACE_FUNCS(isblank)
1704 AC_REPLACE_FUNCS(explicit_bzero)
1705 dnl without CTIME, ARC4-functions and without reallocarray.
1706 LIBOBJ_WITHOUT_CTIMEARC4="$LIBOBJS"
1707 AC_SUBST(LIBOBJ_WITHOUT_CTIMEARC4)
1708 AC_MSG_CHECKING([for reallocarray])
1709 AC_LINK_IFELSE([AC_LANG_SOURCE(AC_INCLUDES_DEFAULT
1711 #ifndef _OPENBSD_SOURCE
1712 #define _OPENBSD_SOURCE 1
1716 void* p = reallocarray(NULL, 10, 100);
1720 ]])], [AC_MSG_RESULT(yes)
1721 AC_DEFINE(HAVE_REALLOCARRAY, 1, [If we have reallocarray(3)])
1724 AC_LIBOBJ(reallocarray)
1726 AC_CHECK_DECLS([reallocarray])
1727 if test "$USE_NSS" = "no"; then
1728 AC_REPLACE_FUNCS(arc4random)
1729 AC_REPLACE_FUNCS(arc4random_uniform)
1730 if test "$ac_cv_func_arc4random" = "no"; then
1731 AC_LIBOBJ(arc4_lock)
1732 AC_CHECK_FUNCS([getentropy],,[
1733 if test "$USE_WINSOCK" = 1; then
1734 AC_LIBOBJ(getentropy_win)
1738 AC_LIBOBJ(getentropy_osx)
1740 *solaris*|*sunos*|SunOS)
1741 AC_LIBOBJ(getentropy_solaris)
1742 AC_CHECK_HEADERS([sys/sha2.h],, [
1743 AC_CHECK_FUNCS([SHA512_Update],,[
1746 ], [AC_INCLUDES_DEFAULT])
1747 if test "$ac_cv_header_sys_sha2_h" = "yes"; then
1748 # this lib needed for sha2 on solaris
1751 AC_SEARCH_LIBS([clock_gettime], [rt])
1754 AC_LIBOBJ(getentropy_freebsd)
1757 AC_LIBOBJ(getentropy_linux)
1758 AC_CHECK_FUNCS([SHA512_Update],,[
1759 AC_DEFINE([COMPAT_SHA512], [1], [Do sha512 definitions in config.h])
1762 AC_CHECK_HEADERS([sys/sysctl.h],,, [AC_INCLUDES_DEFAULT])
1763 AC_CHECK_FUNCS([getauxval])
1764 AC_SEARCH_LIBS([clock_gettime], [rt])
1771 LIBOBJ_WITHOUT_CTIME="$LIBOBJS"
1772 AC_SUBST(LIBOBJ_WITHOUT_CTIME)
1773 AC_REPLACE_FUNCS(ctime_r)
1774 AC_REPLACE_FUNCS(strsep)
1776 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]))
1777 case "$enable_allsymbols" in
1779 COMMON_OBJ_ALL_SYMBOLS=""
1781 EXTRALINK="libunbound.la"
1782 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])
1785 COMMON_OBJ_ALL_SYMBOLS='$(COMMON_OBJ)'
1786 UBSYMS='-export-symbols $(srcdir)/libunbound/ubsyms.def'
1790 AC_SUBST(COMMON_OBJ_ALL_SYMBOLS)
1793 if test x_$enable_lock_checks = x_yes; then
1794 UBSYMS="-export-symbols clubsyms.def"
1795 cp ${srcdir}/libunbound/ubsyms.def clubsyms.def
1796 echo lock_protect >> clubsyms.def
1797 echo lock_unprotect >> clubsyms.def
1798 echo lock_get_mem >> clubsyms.def
1799 echo checklock_start >> clubsyms.def
1800 echo checklock_stop >> clubsyms.def
1801 echo checklock_lock >> clubsyms.def
1802 echo checklock_unlock >> clubsyms.def
1803 echo checklock_init >> clubsyms.def
1804 echo checklock_thrcreate >> clubsyms.def
1805 echo checklock_thrjoin >> clubsyms.def
1808 # check for dnstap if requested
1809 dt_DNSTAP([$UNBOUND_RUN_DIR/dnstap.sock],
1811 AC_DEFINE([USE_DNSTAP], [1], [Define to 1 to enable dnstap support])
1812 AC_SUBST([ENABLE_DNSTAP], [1])
1814 AC_SUBST([opt_dnstap_socket_path])
1815 ACX_ESCAPE_BACKSLASH($opt_dnstap_socket_path, hdr_dnstap_socket_path)
1816 AC_DEFINE_UNQUOTED(DNSTAP_SOCKET_PATH,
1817 ["$hdr_dnstap_socket_path"], [default dnstap socket path])
1818 AC_SUBST(DNSTAP_SOCKET_PATH,["$hdr_dnstap_socket_path"])
1819 AC_SUBST(DNSTAP_SOCKET_TESTBIN,['unbound-dnstap-socket$(EXEEXT)'])
1820 AC_SUBST([DNSTAP_SRC], ["dnstap/dnstap.c dnstap/dnstap.pb-c.c dnstap/dnstap_fstrm.c dnstap/dtstream.c"])
1821 AC_SUBST([DNSTAP_OBJ], ["dnstap.lo dnstap.pb-c.lo dnstap_fstrm.lo dtstream.lo"])
1824 AC_SUBST([ENABLE_DNSTAP], [0])
1828 # check for dnscrypt if requested
1830 AC_DEFINE([USE_DNSCRYPT], [1], [Define to 1 to enable dnscrypt support])
1831 AC_SUBST([ENABLE_DNSCRYPT], [1])
1833 AC_SUBST([DNSCRYPT_SRC], ["dnscrypt/dnscrypt.c"])
1834 AC_SUBST([DNSCRYPT_OBJ], ["dnscrypt.lo"])
1837 AC_SUBST([ENABLE_DNSCRYPT], [0])
1841 # check for cachedb if requested
1842 AC_ARG_ENABLE(cachedb, AS_HELP_STRING([--enable-cachedb],[enable cachedb module that can use external cache storage]))
1843 # turn on cachedb when hiredis support is enabled.
1844 if test "$found_libhiredis" = "yes"; then enable_cachedb="yes"; fi
1845 case "$enable_cachedb" in
1847 AC_DEFINE([USE_CACHEDB], [1], [Define to 1 to use cachedb support])
1848 AC_SUBST([CACHEDB_SRC], ["cachedb/cachedb.c cachedb/redis.c"])
1849 AC_SUBST([CACHEDB_OBJ], ["cachedb.lo redis.lo"])
1856 # check for ipsecmod if requested
1857 AC_ARG_ENABLE(ipsecmod, AS_HELP_STRING([--enable-ipsecmod],[Enable ipsecmod module that facilitates opportunistic IPsec]))
1858 case "$enable_ipsecmod" in
1860 AC_DEFINE([USE_IPSECMOD], [1], [Define to 1 to use ipsecmod support.])
1861 IPSECMOD_OBJ="ipsecmod.lo ipsecmod-whitelist.lo"
1862 AC_SUBST(IPSECMOD_OBJ)
1863 IPSECMOD_HEADER='$(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/ipsecmod/ipsecmod-whitelist.h'
1864 AC_SUBST(IPSECMOD_HEADER)
1871 # check for ipset if requested
1872 AC_ARG_ENABLE(ipset, AS_HELP_STRING([--enable-ipset],[enable ipset module]))
1873 case "$enable_ipset" in
1875 AC_DEFINE([USE_IPSET], [1], [Define to 1 to use ipset support])
1876 IPSET_SRC="ipset/ipset.c"
1878 IPSET_OBJ="ipset.lo"
1882 AC_ARG_WITH(libmnl, AS_HELP_STRING([--with-libmnl=path],[specify explicit path for libmnl.]),
1883 [ ],[ withval="yes" ])
1885 AC_MSG_CHECKING(for libmnl)
1886 if test x_$withval = x_ -o x_$withval = x_yes; then
1887 withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
1889 for dir in $withval ; do
1890 if test -f "$dir/include/libmnl/libmnl.h" -o -f "$dir/include/libmnl/libmnl/libmnl.h"; then
1892 dnl assume /usr is in default path.
1894 if test -f "$dir/include/libmnl/libmnl/libmnl.h"; then
1895 extralibmnl="/libmnl"
1897 if test "$dir" != "/usr" -o -n "$extralibmnl"; then
1898 CPPFLAGS="$CPPFLAGS -I$dir/include$extralibmnl"
1900 if test "$dir" != "/usr"; then
1901 LDFLAGS="$LDFLAGS -L$dir/lib"
1903 AC_MSG_RESULT(found in $dir)
1908 if test x_$found_libmnl != x_yes; then
1909 AC_MSG_ERROR([Could not find libmnl, libmnl.h])
1916 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]))
1917 case "$enable_explicit_port_randomisation" in
1919 AC_DEFINE([DISABLE_EXPLICIT_PORT_RANDOMISATION], [1], [Define this to enable kernel based UDP source port randomization.])
1925 if echo "$host" | $GREP -i -e linux >/dev/null; then
1926 AC_ARG_ENABLE(linux-ip-local-port-range, AC_HELP_STRING([--enable-linux-ip-local-port-range], [Define this to enable use of /proc/sys/net/ipv4/ip_local_port_range as a default outgoing port range. This is only for the libunbound on Linux and does not affect unbound resolving daemon itself. This may severely limit the number of available outgoing ports and thus decrease randomness. Define this only when the target system restricts (e.g. some of SELinux enabled distributions) the use of non-ephemeral ports.]))
1927 case "$enable_linux_ip_local_port_range" in
1929 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.])
1937 AC_MSG_CHECKING([if ${MAKE:-make} supports $< with implicit rule in scope])
1938 # on openBSD, the implicit rule make $< work.
1939 # on Solaris, it does not work ($? is changed sources, $^ lists dependencies).
1941 cat >conftest.make <<EOF
1944 conftest.lo foo.lo bla.lo:
1945 if test -f "\$<"; then touch \$@; fi
1949 if test -f "\$<"; then touch \$@; fi
1951 conftest.lo: conftest.dir/conftest.c
1954 touch conftest.dir/conftest.c
1955 rm -f conftest.lo conftest.c
1956 ${MAKE:-make} -f conftest.make >/dev/null
1957 rm -f conftest.make conftest.c conftest.dir/conftest.c
1959 if test ! -f conftest.lo; then
1961 SOURCEDETERMINE='echo "$^" | awk "-F " "{print \$$1;}" > .source'
1962 SOURCEFILE='`cat .source`'
1969 AC_SUBST(SOURCEDETERMINE)
1970 AC_SUBST(SOURCEFILE)
1972 # see if we want to build the library or everything
1973 ALLTARGET="alltargets"
1974 INSTALLTARGET="install-all"
1975 AC_ARG_WITH(libunbound-only, AS_HELP_STRING([--with-libunbound-only],[do not build daemon and tool programs]),
1977 if test "$withval" = "yes"; then
1979 INSTALLTARGET="install-lib"
1982 if test $ALLTARGET = "alltargets"; then
1983 if test $USE_NSS = "yes"; then
1984 AC_MSG_ERROR([--with-nss can only be used in combination with --with-libunbound-only.])
1986 if test $USE_NETTLE = "yes"; then
1987 AC_MSG_ERROR([--with-nettle can only be used in combination with --with-libunbound-only.])
1992 AC_SUBST(INSTALLTARGET)
1995 if test -n "$LATE_LDFLAGS"; then
1996 LDFLAGS="$LATE_LDFLAGS $LDFLAGS"
1998 # remove start spaces
1999 LDFLAGS=`echo "$LDFLAGS"|sed -e 's/^ *//'`
2000 LIBS=`echo "$LIBS"|sed -e 's/^ *//'`
2002 AC_DEFINE_UNQUOTED([MAXSYSLOGMSGLEN], [10240], [Define to the maximum message length to pass to syslog.])
2005 dnl this must be first AH_CONFIG, to define the flags before any includes.
2006 AHX_CONFIG_EXT_FLAGS
2010 #ifndef _OPENBSD_SOURCE
2011 #define _OPENBSD_SOURCE 1
2014 #ifndef UNBOUND_DEBUG
2020 /** Use small-ldns codebase */
2023 # define LDNS_BUILD_CONFIG_HAVE_SSL 1
2036 #ifdef HAVE_STDARG_H
2040 #ifdef HAVE_STDINT_H
2046 #if HAVE_SYS_PARAM_H
2047 #include <sys/param.h>
2050 #ifdef HAVE_SYS_SOCKET_H
2051 #include <sys/socket.h>
2054 #ifdef HAVE_SYS_UIO_H
2055 #include <sys/uio.h>
2058 #ifdef HAVE_NETINET_IN_H
2059 #include <netinet/in.h>
2062 #ifdef HAVE_NETINET_TCP_H
2063 #include <netinet/tcp.h>
2066 #ifdef HAVE_ARPA_INET_H
2067 #include <arpa/inet.h>
2070 #ifdef HAVE_WINSOCK2_H
2071 #include <winsock2.h>
2074 #ifdef HAVE_WS2TCPIP_H
2075 #include <ws2tcpip.h>
2078 #if !defined(USE_WINSOCK) || !defined(HAVE_SNPRINTF) || defined(SNPRINTF_RET_BROKEN) || defined(__USE_MINGW_ANSI_STDIO)
2079 #define ARG_LL "%ll"
2081 #define ARG_LL "%I64"
2085 #define AF_LOCAL AF_UNIX
2089 AHX_CONFIG_FORMAT_ATTRIBUTE
2090 AHX_CONFIG_UNUSED_ATTRIBUTE
2092 AHX_CONFIG_MAXHOSTNAMELEN
2093 #if !defined(HAVE_SNPRINTF) || defined(SNPRINTF_RET_BROKEN)
2094 #define snprintf snprintf_unbound
2095 #define vsnprintf vsnprintf_unbound
2097 int snprintf (char *str, size_t count, const char *fmt, ...);
2098 int vsnprintf (char *str, size_t count, const char *fmt, va_list arg);
2099 #endif /* HAVE_SNPRINTF or SNPRINTF_RET_BROKEN */
2100 AHX_CONFIG_INET_PTON(unbound)
2101 AHX_CONFIG_INET_NTOP(unbound)
2102 AHX_CONFIG_INET_ATON(unbound)
2103 AHX_CONFIG_MEMMOVE(unbound)
2104 AHX_CONFIG_STRLCAT(unbound)
2105 AHX_CONFIG_STRLCPY(unbound)
2106 AHX_CONFIG_GMTIME_R(unbound)
2107 AHX_CONFIG_REALLOCARRAY(unbound)
2108 AHX_CONFIG_W32_SLEEP
2109 AHX_CONFIG_W32_USLEEP
2110 AHX_CONFIG_W32_RANDOM
2111 AHX_CONFIG_W32_SRANDOM
2112 AHX_CONFIG_W32_FD_SET_T
2113 AHX_CONFIG_IPV6_MIN_MTU
2114 AHX_MEMCMP_BROKEN(unbound)
2117 #ifndef HAVE_CTIME_R
2118 #define ctime_r unbound_ctime_r
2119 char *ctime_r(const time_t *timep, char *buf);
2123 #define strsep unbound_strsep
2124 char *strsep(char **stringp, const char *delim);
2127 #ifndef HAVE_ISBLANK
2128 #define isblank unbound_isblank
2132 #ifndef HAVE_EXPLICIT_BZERO
2133 #define explicit_bzero unbound_explicit_bzero
2134 void explicit_bzero(void* buf, size_t len);
2137 #if defined(HAVE_INET_NTOP) && !HAVE_DECL_INET_NTOP
2138 const char *inet_ntop(int af, const void *src, char *dst, size_t size);
2141 #if defined(HAVE_INET_PTON) && !HAVE_DECL_INET_PTON
2142 int inet_pton(int af, const char* src, void* dst);
2145 #if !defined(HAVE_STRPTIME) || !defined(STRPTIME_WORKS)
2146 #define strptime unbound_strptime
2148 char *strptime(const char *s, const char *format, struct tm *tm);
2151 #if !HAVE_DECL_REALLOCARRAY
2152 void *reallocarray(void *ptr, size_t nmemb, size_t size);
2156 #include <bsd/string.h>
2157 #include <bsd/stdlib.h>
2160 #ifdef HAVE_LIBRESSL
2161 # if !HAVE_DECL_STRLCPY
2162 size_t strlcpy(char *dst, const char *src, size_t siz);
2164 # if !HAVE_DECL_STRLCAT
2165 size_t strlcat(char *dst, const char *src, size_t siz);
2167 # if !HAVE_DECL_ARC4RANDOM && defined(HAVE_ARC4RANDOM)
2168 uint32_t arc4random(void);
2170 # if !HAVE_DECL_ARC4RANDOM_UNIFORM && defined(HAVE_ARC4RANDOM_UNIFORM)
2171 uint32_t arc4random_uniform(uint32_t upper_bound);
2173 #endif /* HAVE_LIBRESSL */
2174 #ifndef HAVE_ARC4RANDOM
2175 int getentropy(void* buf, size_t len);
2176 uint32_t arc4random(void);
2177 void arc4random_buf(void* buf, size_t n);
2178 void _ARC4_LOCK(void);
2179 void _ARC4_UNLOCK(void);
2180 void _ARC4_LOCK_DESTROY(void);
2182 #ifndef HAVE_ARC4RANDOM_UNIFORM
2183 uint32_t arc4random_uniform(uint32_t upper_bound);
2185 #ifdef COMPAT_SHA512
2186 #ifndef SHA512_DIGEST_LENGTH
2187 #define SHA512_BLOCK_LENGTH 128
2188 #define SHA512_DIGEST_LENGTH 64
2189 #define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1)
2190 typedef struct _SHA512_CTX {
2192 uint64_t bitcount[2];
2193 uint8_t buffer[SHA512_BLOCK_LENGTH];
2195 #endif /* SHA512_DIGEST_LENGTH */
2196 void SHA512_Init(SHA512_CTX*);
2197 void SHA512_Update(SHA512_CTX*, void*, size_t);
2198 void SHA512_Final(uint8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*);
2199 unsigned char *SHA512(void* data, unsigned int data_len, unsigned char *digest);
2200 #endif /* COMPAT_SHA512 */
2204 #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))
2205 /* using version of libevent that is not threadsafe. */
2206 # define LIBEVENT_SIGNAL_PROBLEM 1
2209 #ifndef CHECKED_INET6
2210 # define CHECKED_INET6
2214 # define AF_INET6 28
2216 #endif /* CHECKED_INET6 */
2218 #ifndef HAVE_GETADDRINFO
2219 struct sockaddr_storage;
2220 #include "compat/fake-rfc2553.h"
2223 #ifdef UNBOUND_ALLOC_STATS
2224 # define malloc(s) unbound_stat_malloc_log(s, __FILE__, __LINE__, __func__)
2225 # define calloc(n,s) unbound_stat_calloc_log(n, s, __FILE__, __LINE__, __func__)
2226 # define free(p) unbound_stat_free_log(p, __FILE__, __LINE__, __func__)
2227 # define realloc(p,s) unbound_stat_realloc_log(p, s, __FILE__, __LINE__, __func__)
2228 void *unbound_stat_malloc(size_t size);
2229 void *unbound_stat_calloc(size_t nmemb, size_t size);
2230 void unbound_stat_free(void *ptr);
2231 void *unbound_stat_realloc(void *ptr, size_t size);
2232 void *unbound_stat_malloc_log(size_t size, const char* file, int line,
2234 void *unbound_stat_calloc_log(size_t nmemb, size_t size, const char* file,
2235 int line, const char* func);
2236 void unbound_stat_free_log(void *ptr, const char* file, int line,
2238 void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file,
2239 int line, const char* func);
2240 #elif defined(UNBOUND_ALLOC_LITE)
2241 # include "util/alloc.h"
2242 #endif /* UNBOUND_ALLOC_LITE and UNBOUND_ALLOC_STATS */
2244 /** default port for DNS traffic. */
2245 #define UNBOUND_DNS_PORT 53
2246 /** default port for DNS over TLS traffic. */
2247 #define UNBOUND_DNS_OVER_TLS_PORT 853
2248 /** default port for DNS over HTTPS traffic. */
2249 #define UNBOUND_DNS_OVER_HTTPS_PORT 443
2250 /** default port for unbound control traffic, registered port with IANA,
2251 ub-dns-control 8953/tcp unbound dns nameserver control */
2252 #define UNBOUND_CONTROL_PORT 8953
2253 /** the version of unbound-control that this software implements */
2254 #define UNBOUND_CONTROL_VERSION 1
2258 dnl if we build from source tree, the man pages need @date@ and @version@
2259 dnl if this is a distro tarball, that was already done by makedist.sh
2260 AC_SUBST(version, [VERSION_MAJOR.VERSION_MINOR.VERSION_MICRO])
2261 AC_SUBST(date, [`date +'%b %e, %Y'`])
2263 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])
2264 AC_CONFIG_HEADERS([config.h])