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],[14])
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])
21 LIBUNBOUND_REVISION=14
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
104 # Current -- the number of the binary API that we're implementing
105 # Revision -- which iteration of the implementation of the binary
106 # API are we supplying?
107 # Age -- How many previous binary API versions do we also
110 # If we release a new version that does not change the binary API,
111 # increment Revision.
113 # If we release a new version that changes the binary API, but does
114 # not break programs compiled against the old binary API, increment
115 # Current and Age. Set Revision to 0, since this is the first
116 # implementation of the new API.
118 # Otherwise, we're changing the binary API and breaking backward
119 # compatibility with old binaries. Increment Current. Set Age to 0,
120 # since we're backward compatible with no previous APIs. Set Revision
122 AC_SUBST(LIBUNBOUND_CURRENT)
123 AC_SUBST(LIBUNBOUND_REVISION)
124 AC_SUBST(LIBUNBOUND_AGE)
127 cmdln="`echo $@ | sed -e 's/\\\\/\\\\\\\\/g' | sed -e 's/"/\\\\"/'g`"
128 AC_DEFINE_UNQUOTED(CONFCMDLINE, ["$cmdln"], [Command line arguments used with configure])
131 AC_USE_SYSTEM_EXTENSIONS
132 if test "$ac_cv_header_minix_config_h" = "yes"; then
133 AC_DEFINE(_NETBSD_SOURCE,1, [Enable for compile on Minix])
137 dnl By default set prefix to /usr/local
144 case "$exec_prefix" in
146 exec_prefix="$prefix"
151 if uname -s 2>&1 | grep MINGW >/dev/null; then on_mingw="yes"
153 if echo $host | grep mingw >/dev/null; then on_mingw="yes"
154 else on_mingw="no"; fi
158 # Determine configuration file
159 # the eval is to evaluate shell expansion twice
160 UNBOUND_SBIN_DIR=`eval echo "${sbindir}"`
161 AC_SUBST(UNBOUND_SBIN_DIR)
162 UNBOUND_SYSCONF_DIR=`eval echo "${sysconfdir}"`
163 AC_SUBST(UNBOUND_SYSCONF_DIR)
164 UNBOUND_LOCALSTATE_DIR=`eval echo "${localstatedir}"`
165 AC_SUBST(UNBOUND_LOCALSTATE_DIR)
166 if test $on_mingw = "no"; then
167 ub_conf_file=`eval echo "${sysconfdir}/unbound/unbound.conf"`
169 ub_conf_file="C:\\Program Files\\Unbound\\service.conf"
171 AC_ARG_WITH([conf_file],
172 AS_HELP_STRING([--with-conf-file=path],[Pathname to the Unbound configuration file]),
173 [ub_conf_file="$withval"])
174 AC_SUBST(ub_conf_file)
175 ACX_ESCAPE_BACKSLASH($ub_conf_file, hdr_config)
176 AC_DEFINE_UNQUOTED(CONFIGFILE, ["$hdr_config"], [Pathname to the Unbound configuration file])
177 ub_conf_dir=`AS_DIRNAME(["$ub_conf_file"])`
178 AC_SUBST(ub_conf_dir)
180 # Determine run, chroot directory and pidfile locations
182 AS_HELP_STRING([--with-run-dir=path],[set default directory to chdir to (by default dir part of cfg file)]),
183 UNBOUND_RUN_DIR="$withval",
184 if test $on_mingw = no; then
185 UNBOUND_RUN_DIR=`dirname "$ub_conf_file"`
190 AC_SUBST(UNBOUND_RUN_DIR)
191 ACX_ESCAPE_BACKSLASH($UNBOUND_RUN_DIR, hdr_run)
192 AC_DEFINE_UNQUOTED(RUN_DIR, ["$hdr_run"], [Directory to chdir to])
194 AC_ARG_WITH(chroot-dir,
195 AS_HELP_STRING([--with-chroot-dir=path],[set default directory to chroot to (by default same as run-dir)]),
196 UNBOUND_CHROOT_DIR="$withval",
197 if test $on_mingw = no; then
198 UNBOUND_CHROOT_DIR="$UNBOUND_RUN_DIR"
200 UNBOUND_CHROOT_DIR=""
203 AC_SUBST(UNBOUND_CHROOT_DIR)
204 ACX_ESCAPE_BACKSLASH($UNBOUND_CHROOT_DIR, hdr_chroot)
205 AC_DEFINE_UNQUOTED(CHROOT_DIR, ["$hdr_chroot"], [Directory to chroot to])
207 AC_ARG_WITH(share-dir,
208 AS_HELP_STRING([--with-share-dir=path],[set default directory with shared data (by default same as share/unbound)]),
209 UNBOUND_SHARE_DIR="$withval",
210 UNBOUND_SHARE_DIR="$UNBOUND_RUN_DIR")
211 AC_SUBST(UNBOUND_SHARE_DIR)
212 AC_DEFINE_UNQUOTED(SHARE_DIR, ["$UNBOUND_SHARE_DIR"], [Shared data])
215 AS_HELP_STRING([--with-pidfile=filename],[set default pathname to unbound pidfile (default run-dir/unbound.pid)]),
216 UNBOUND_PIDFILE="$withval",
217 if test $on_mingw = no; then
218 UNBOUND_PIDFILE="$UNBOUND_RUN_DIR/unbound.pid"
223 AC_SUBST(UNBOUND_PIDFILE)
224 ACX_ESCAPE_BACKSLASH($UNBOUND_PIDFILE, hdr_pid)
225 AC_DEFINE_UNQUOTED(PIDFILE, ["$hdr_pid"], [default pidfile location])
227 AC_ARG_WITH(rootkey-file,
228 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.]),
229 UNBOUND_ROOTKEY_FILE="$withval",
230 if test $on_mingw = no; then
231 UNBOUND_ROOTKEY_FILE="$UNBOUND_RUN_DIR/root.key"
233 UNBOUND_ROOTKEY_FILE="C:\\Program Files\\Unbound\\root.key"
236 AC_SUBST(UNBOUND_ROOTKEY_FILE)
237 ACX_ESCAPE_BACKSLASH($UNBOUND_ROOTKEY_FILE, hdr_rkey)
238 AC_DEFINE_UNQUOTED(ROOT_ANCHOR_FILE, ["$hdr_rkey"], [default rootkey location])
240 AC_ARG_WITH(rootcert-file,
241 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.]),
242 UNBOUND_ROOTCERT_FILE="$withval",
243 if test $on_mingw = no; then
244 UNBOUND_ROOTCERT_FILE="$UNBOUND_RUN_DIR/icannbundle.pem"
246 UNBOUND_ROOTCERT_FILE="C:\\Program Files\\Unbound\\icannbundle.pem"
249 AC_SUBST(UNBOUND_ROOTCERT_FILE)
250 ACX_ESCAPE_BACKSLASH($UNBOUND_ROOTCERT_FILE, hdr_rpem)
251 AC_DEFINE_UNQUOTED(ROOT_CERT_FILE, ["$hdr_rpem"], [default rootcert location])
253 AC_ARG_WITH(username,
254 AS_HELP_STRING([--with-username=user],[set default user that unbound changes to (default user is unbound)]),
255 UNBOUND_USERNAME="$withval",
256 UNBOUND_USERNAME="unbound")
257 AC_SUBST(UNBOUND_USERNAME)
258 AC_DEFINE_UNQUOTED(UB_USERNAME, ["$UNBOUND_USERNAME"], [default username])
260 AC_DEFINE(WINVER, 0x0502, [the version of the windows API enabled])
261 ACX_RSRC_VERSION(wnvs)
262 AC_DEFINE_UNQUOTED(RSRC_PACKAGE_VERSION, [$wnvs], [version number for resource files])
264 # Checks for typedefs, structures, and compiler characteristics.
267 # allow user to override the -g -O2 flags.
269 if test "x$CFLAGS" = "x" ; then
270 ACX_CHECK_COMPILER_FLAG(g, [CFLAGS="$CFLAGS -g"])
271 ACX_CHECK_COMPILER_FLAG(O2, [CFLAGS="$CFLAGS -O2"])
276 ACX_DETERMINE_EXT_FLAGS_UNBOUND
278 # debug mode flags warnings
279 AC_ARG_ENABLE(checking, AS_HELP_STRING([--enable-checking],[Enable warnings, asserts, makefile-dependencies]))
280 AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug],[same as enable-checking]))
281 if test "$enable_debug" = "yes"; then debug_enabled="$enable_debug";
282 else debug_enabled="$enable_checking"; fi
283 AC_SUBST(debug_enabled)
284 case "$debug_enabled" in
286 ACX_CHECK_COMPILER_FLAG(W, [CFLAGS="$CFLAGS -W"])
287 ACX_CHECK_COMPILER_FLAG(Wall, [CFLAGS="$CFLAGS -Wall"])
288 ACX_CHECK_COMPILER_FLAG(Wextra, [CFLAGS="$CFLAGS -Wextra"])
289 ACX_CHECK_COMPILER_FLAG(Wdeclaration-after-statement, [CFLAGS="$CFLAGS -Wdeclaration-after-statement"])
290 AC_DEFINE([UNBOUND_DEBUG], [], [define this to enable debug checks.])
296 if test "$default_cflags" = "yes"; then
297 # only when CFLAGS was "" at the start, if the users wants to
298 # override we shouldn't add default cflags, because they wouldn't
299 # be able to turn off these options and set the CFLAGS wanted.
306 ACX_CHECK_FORMAT_ATTRIBUTE
307 ACX_CHECK_UNUSED_ATTRIBUTE
309 AC_DEFUN([CHECK_WEAK_ATTRIBUTE],
310 [AC_REQUIRE([AC_PROG_CC])
311 AC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "weak" attribute)
312 AC_CACHE_VAL(ac_cv_c_weak_attribute,
313 [ac_cv_c_weak_attribute=no
314 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h>
315 __attribute__((weak)) void f(int x) { printf("%d", x); }
318 ]])],[ac_cv_c_weak_attribute="yes"],[ac_cv_c_weak_attribute="no"])
321 AC_MSG_RESULT($ac_cv_c_weak_attribute)
322 if test $ac_cv_c_weak_attribute = yes; then
323 AC_DEFINE(HAVE_ATTR_WEAK, 1, [Whether the C compiler accepts the "weak" attribute])
324 AC_DEFINE(ATTR_WEAK, [__attribute__((weak))], [apply the weak attribute to a symbol])
326 ])dnl End of CHECK_WEAK_ATTRIBUTE
330 AC_DEFUN([CHECK_NORETURN_ATTRIBUTE],
331 [AC_REQUIRE([AC_PROG_CC])
332 AC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "noreturn" attribute)
333 AC_CACHE_VAL(ac_cv_c_noreturn_attribute,
334 [ac_cv_c_noreturn_attribute=no
335 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h>
336 __attribute__((noreturn)) void f(int x) { printf("%d", x); }
339 ]])],[ac_cv_c_noreturn_attribute="yes"],[ac_cv_c_noreturn_attribute="no"])
342 AC_MSG_RESULT($ac_cv_c_noreturn_attribute)
343 if test $ac_cv_c_noreturn_attribute = yes; then
344 AC_DEFINE(HAVE_ATTR_NORETURN, 1, [Whether the C compiler accepts the "noreturn" attribute])
345 AC_DEFINE(ATTR_NORETURN, [__attribute__((__noreturn__))], [apply the noreturn attribute to a function that exits the program])
347 ])dnl End of CHECK_NORETURN_ATTRIBUTE
349 CHECK_NORETURN_ATTRIBUTE
351 if test "$srcdir" != "."; then
352 CPPFLAGS="$CPPFLAGS -I$srcdir"
355 AC_DEFUN([ACX_YYLEX_DESTROY], [
356 AC_MSG_CHECKING([for yylex_destroy])
357 if echo %% | $LEX -t 2>&1 | grep yylex_destroy >/dev/null 2>&1; then
358 AC_DEFINE(LEX_HAS_YYLEX_DESTROY, 1, [if lex has yylex_destroy])
360 else AC_MSG_RESULT(no);
365 AC_DEFUN([ACX_YYLEX_OPTION], [
366 AC_MSG_CHECKING([for lex %option])
367 if cat <<EOF | $LEX -t 2>&1 | grep yy_delete_buffer >/dev/null 2>&1; then
372 else AC_MSG_RESULT(no);
377 AC_PROG_LEX([noyywrap])
378 if test "$LEX" != "" -a "$LEX" != ":"; then
381 if test "$LEX" != "" -a "$LEX" != ":"; then
385 AC_CHECK_PROG(doxygen, doxygen, doxygen)
386 AC_CHECK_TOOL(STRIP, strip)
389 # pkg-config is only needed for these options, do not require it otherwise
390 if test "$enable_systemd" = "yes" -o "$with_pyunbound" = "yes" -o "$with_pythonmod" = "yes"; then
394 # Checks for header files.
395 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],,, [AC_INCLUDES_DEFAULT])
396 # net/if.h portability for Darwin see:
397 # https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Header-Portability.html
398 AC_CHECK_HEADERS([net/if.h],,, [
404 # ifdef HAVE_STDLIB_H
408 #ifdef HAVE_SYS_SOCKET_H
409 # include <sys/socket.h>
413 # Check for Apple header. This uncovers TARGET_OS_IPHONE, TARGET_OS_TV or TARGET_OS_WATCH
414 AC_CHECK_HEADERS([TargetConditionals.h],,, [AC_INCLUDES_DEFAULT])
417 # Using own tests for int64* because autoconf builtin only give 32bit.
418 AC_CHECK_TYPE(int8_t, signed char)
419 AC_CHECK_TYPE(int16_t, short)
420 AC_CHECK_TYPE(int32_t, int)
421 AC_CHECK_TYPE(int64_t, long long)
422 AC_CHECK_TYPE(uint8_t, unsigned char)
423 AC_CHECK_TYPE(uint16_t, unsigned short)
424 AC_CHECK_TYPE(uint32_t, unsigned int)
425 AC_CHECK_TYPE(uint64_t, unsigned long long)
427 AC_CHECK_TYPE(ssize_t, int)
436 ACX_CHECK_MEMCMP_SIGNED
438 AC_CHECK_SIZEOF(time_t,,[
440 #ifdef TIME_WITH_SYS_TIME
441 # include <sys/time.h>
444 # ifdef HAVE_SYS_TIME_H
445 # include <sys/time.h>
451 AC_CHECK_SIZEOF(size_t)
453 # add option to disable the evil rpath
455 AC_SUBST(RUNTIME_PATH)
457 # check to see if libraries are needed for these functions.
458 AC_SEARCH_LIBS([inet_pton], [nsl])
459 AC_SEARCH_LIBS([socket], [socket])
461 # check whether strptime also works
462 AC_DEFUN([AC_CHECK_STRPTIME_WORKS],
463 [AC_REQUIRE([AC_PROG_CC])
464 AC_MSG_CHECKING(whether strptime works)
465 if test c${cross_compiling} = cno; then
466 AC_RUN_IFELSE([AC_LANG_SOURCE([[
467 #define _XOPEN_SOURCE 600
469 int main(void) { struct tm tm; char *res;
470 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);
472 res = strptime("20070207111842", "%Y%m%d%H%M%S", &tm);
473 if (!res) return 1; return 0; }
474 ]])] , [eval "ac_cv_c_strptime_works=yes"], [eval "ac_cv_c_strptime_works=no"])
476 eval "ac_cv_c_strptime_works=maybe"
478 AC_MSG_RESULT($ac_cv_c_strptime_works)
479 if test $ac_cv_c_strptime_works = no; then
482 AC_DEFINE_UNQUOTED([STRPTIME_WORKS], 1, [use default strptime.])
486 # check some functions of the OS before linking libs (while still runnable).
489 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.'])
492 ACX_CHECK_NONBLOCKING_BROKEN
494 AC_CHECK_FUNCS([strptime],[AC_CHECK_STRPTIME_WORKS],[AC_LIBOBJ([strptime])])
496 # check if we can use SO_REUSEPORT
498 if echo "$host" | $GREP -i -e linux >/dev/null; then reuseport_default=1; fi
499 if echo "$host" | $GREP -i -e dragonfly >/dev/null; then reuseport_default=1; fi
500 if test "$reuseport_default" = 1; then
501 AC_DEFINE(REUSEPORT_DEFAULT, 1, [if REUSEPORT is enabled by default])
503 AC_DEFINE(REUSEPORT_DEFAULT, 0, [if REUSEPORT is enabled by default])
506 # Include systemd.m4 - begin
508 # Include systemd.m4 - end
510 # set memory allocation checking if requested
511 AC_ARG_ENABLE(alloc-checks, AS_HELP_STRING([--enable-alloc-checks],[ enable to memory allocation statistics, for debug purposes ]),
513 AC_ARG_ENABLE(alloc-lite, AS_HELP_STRING([--enable-alloc-lite],[ enable for lightweight alloc assertions, for debug purposes ]),
515 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 ]),
517 if test x_$enable_alloc_nonregional = x_yes; then
518 AC_DEFINE(UNBOUND_ALLOC_NONREGIONAL, 1, [use malloc not regions, for debug use])
520 if test x_$enable_alloc_checks = x_yes; then
521 AC_DEFINE(UNBOUND_ALLOC_STATS, 1, [use statistics for allocs and frees, for debug use])
522 SLDNS_ALLOCCHECK_EXTRA_OBJ="alloc.lo log.lo"
523 AC_SUBST(SLDNS_ALLOCCHECK_EXTRA_OBJ)
524 ASYNCLOOK_ALLOCCHECK_EXTRA_OBJ="alloc.lo"
525 AC_SUBST(ASYNCLOOK_ALLOCCHECK_EXTRA_OBJ)
527 if test x_$enable_alloc_lite = x_yes; then
528 AC_DEFINE(UNBOUND_ALLOC_LITE, 1, [use to enable lightweight alloc assertions, for debug use])
530 ACX_FUNC_MALLOC([unbound])
534 # check windows threads (we use them, not pthreads, on windows).
535 if test "$on_mingw" = "yes"; then
536 # check windows threads
537 AC_CHECK_HEADERS([windows.h],,, [AC_INCLUDES_DEFAULT])
538 AC_MSG_CHECKING([for CreateThread])
539 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
540 #ifdef HAVE_WINDOWS_H
544 HANDLE t = CreateThread(NULL, 0, NULL, NULL, 0, NULL);
547 AC_DEFINE(HAVE_WINDOWS_THREADS, 1, [Using Windows threads])
553 # not on mingw, check thread libraries.
555 # check for thread library.
556 # check this first, so that the pthread lib does not get linked in via
557 # libssl or libpython, and thus distorts the tests, and we end up using
558 # the non-threadsafe C libraries.
559 AC_ARG_WITH(pthreads, AS_HELP_STRING([--with-pthreads],[use pthreads library, or --without-pthreads to disable threading support.]),
560 [ ],[ withval="yes" ])
562 if test x_$withval != x_no; then
564 AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.])
565 if test -n "$PTHREAD_LIBS"; then
566 LIBS="$PTHREAD_LIBS $LIBS"
568 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
571 AC_CHECK_TYPES([pthread_spinlock_t, pthread_rwlock_t],,,[#include <pthread.h>])
573 if echo "$CFLAGS" | $GREP -e "-pthread" >/dev/null; then
574 AC_MSG_CHECKING([if -pthread unused during linking])
575 # catch clang warning 'argument unused during compilation'
576 AC_LANG_CONFTEST([AC_LANG_SOURCE(AC_INCLUDES_DEFAULT
578 int main(void) {return 0;}
582 echo "$CC $CFLAGS -c conftest.c -o conftest.o" >&AS_MESSAGE_LOG_FD
583 $CC $CFLAGS -c conftest.c -o conftest.o 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD
586 echo "$CC $CFLAGS -Werror $LDFLAGS $LIBS -o conftest contest.o" >&AS_MESSAGE_LOG_FD
587 $CC $CFLAGS -Werror $LDFLAGS $LIBS -o conftest conftest.o 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD
588 if test $? -ne 0; then
590 CFLAGS=`echo "$CFLAGS" | sed -e 's/-pthread//'`
591 PTHREAD_CFLAGS_ONLY="-pthread"
592 AC_SUBST(PTHREAD_CFLAGS_ONLY)
598 fi # endif cc successful
599 rm -f conftest conftest.c conftest.o
600 fi # endif -pthread in CFLAGS
605 # check solaris thread library
606 AC_ARG_WITH(solaris-threads, AS_HELP_STRING([--with-solaris-threads],[use solaris native thread library.]), [ ],[ withval="no" ])
607 ub_have_sol_threads=no
608 if test x_$withval != x_no; then
609 if test x_$ub_have_pthreads != x_no; then
610 AC_MSG_WARN([Have pthreads already, ignoring --with-solaris-threads])
612 AC_SEARCH_LIBS(thr_create, [thread],
614 AC_DEFINE(HAVE_SOLARIS_THREADS, 1, [Using Solaris threads])
616 ACX_CHECK_COMPILER_FLAG(mt, [CFLAGS="$CFLAGS -mt"],
617 [CFLAGS="$CFLAGS -D_REENTRANT"])
618 ub_have_sol_threads=yes
620 AC_MSG_ERROR([no solaris threads found.])
625 fi # end of non-mingw check of thread libraries
627 # Check for SYSLOG_FACILITY
628 AC_ARG_WITH(syslog-facility, AS_HELP_STRING([--with-syslog-facility=LOCAL0 - LOCAL7],[ set SYSLOG_FACILITY, default DAEMON ]),
629 [ UNBOUND_SYSLOG_FACILITY="$withval" ], [])
630 case "${UNBOUND_SYSLOG_FACILITY}" in
632 LOCAL[[0-7]]) UNBOUND_SYSLOG_FACILITY="LOG_${UNBOUND_SYSLOG_FACILITY}" ;;
634 *) UNBOUND_SYSLOG_FACILITY="LOG_DAEMON" ;;
637 AC_DEFINE_UNQUOTED(UB_SYSLOG_FACILITY,${UNBOUND_SYSLOG_FACILITY},[the SYSLOG_FACILITY to use, default LOG_DAEMON])
639 # Check for dynamic library module
640 AC_ARG_WITH(dynlibmodule,
641 AS_HELP_STRING([--with-dynlibmodule],[build dynamic library module, or --without-dynlibmodule to disable it. (default=no)]),
642 [], [ withval="no" ])
644 if test x_$withval != x_no; then
645 AC_DEFINE(WITH_DYNLIBMODULE, 1, [Define if you want dynlib module.])
646 WITH_DYNLIBMODULE=yes
647 AC_SUBST(WITH_DYNLIBMODULE)
648 DYNLIBMOD_OBJ="dynlibmod.lo"
649 AC_SUBST(DYNLIBMOD_OBJ)
650 DYNLIBMOD_HEADER='$(srcdir)/dynlibmod/dynlibmod.h'
651 AC_SUBST(DYNLIBMOD_HEADER)
652 if test $on_mingw = "no"; then
653 # link with -ldl if not already there, for all executables because
654 # dlopen call is in the dynlib module. For unbound executable, also
656 AC_SEARCH_LIBS([dlopen], [dl])
657 DYNLIBMOD_EXTRALIBS="-export-dynamic"
659 DYNLIBMOD_EXTRALIBS="-Wl,--export-all-symbols,--out-implib,libunbound.dll.a"
661 AC_SUBST(DYNLIBMOD_EXTRALIBS)
664 # Check for PyUnbound
665 AC_ARG_WITH(pyunbound,
666 AS_HELP_STRING([--with-pyunbound],[build PyUnbound, or --without-pyunbound to skip it. (default=no)]),
667 [], [ withval="no" ])
671 if test x_$withval != x_no; then
672 ub_with_pyunbound=yes
676 # Check for Python module
677 AC_ARG_WITH(pythonmodule,
678 AS_HELP_STRING([--with-pythonmodule],[build Python module, or --without-pythonmodule to disable script engine. (default=no)]),
679 [], [ withval="no" ])
682 if test x_$withval != x_no; then
683 ub_with_pythonmod=yes
687 # Check for Python & SWIG only on PyUnbound or PyModule
688 if test x_$ub_test_python != x_no; then
692 ac_save_LIBS="$LIBS" dnl otherwise AC_PYTHON_DEVEL thrashes $LIBS
694 if test ! -z "$PYTHON_VERSION"; then
695 if test `$PYTHON -c "print('$PYTHON_VERSION' >= '2.4.0')"` = "False"; then
696 AC_MSG_ERROR([Python version >= 2.4.0 is required])
699 [PY_MAJOR_VERSION="`$PYTHON -c \"import sys; print(sys.version_info[0])\"`"]
700 AC_SUBST(PY_MAJOR_VERSION)
702 AC_DEFINE(HAVE_PYTHON,1,[Define if you have Python libraries and header files.])
703 if test x_$ub_with_pythonmod != x_no; then
704 if test -n "$LIBS"; then
705 LIBS="$PYTHON_LDFLAGS $LIBS"
707 LIBS="$PYTHON_LDFLAGS"
710 PYTHON_LIBS="$PYTHON_LDFLAGS"
711 AC_SUBST(PYTHON_LIBS)
712 if test -n "$CPPFLAGS"; then
713 CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS"
715 CPPFLAGS="$PYTHON_CPPFLAGS"
717 if test "$PYTHON_LIBDIR" != "/usr/lib" -a "$PYTHON_LIBDIR" != "" -a "$PYTHON_LIBDIR" != "/usr/lib64"; then
718 ACX_RUNTIME_PATH_ADD([$PYTHON_LIBDIR])
721 PKG_CHECK_EXISTS(["python${PY_MAJOR_VERSION}"],
722 [PC_PY_DEPENDENCY="python${PY_MAJOR_VERSION}"],
723 [PC_PY_DEPENDENCY="python"])
724 AC_SUBST(PC_PY_DEPENDENCY)
728 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]))
729 if test "$enable_swig_version_check" = "yes"; then
734 AC_MSG_CHECKING(SWIG)
735 if test ! -x "$SWIG"; then
736 AC_MSG_ERROR([failed to find swig tool, install it, or do not build Python module and PyUnbound])
738 AC_DEFINE(HAVE_SWIG, 1, [Define if you have Swig libraries and header files.])
739 AC_SUBST(swig, "$SWIG")
740 AC_MSG_RESULT(present)
742 # If have Python & SWIG
744 if test x_$ub_with_pythonmod != x_no; then
745 AC_DEFINE(WITH_PYTHONMODULE, 1, [Define if you want Python module.])
746 WITH_PYTHONMODULE=yes
747 AC_SUBST(WITH_PYTHONMODULE)
748 PYTHONMOD_OBJ="pythonmod.lo pythonmod_utils.lo"
749 AC_SUBST(PYTHONMOD_OBJ)
750 PYTHONMOD_HEADER='$(srcdir)/pythonmod/pythonmod.h'
751 AC_SUBST(PYTHONMOD_HEADER)
752 PYTHONMOD_INSTALL=pythonmod-install
753 AC_SUBST(PYTHONMOD_INSTALL)
754 PYTHONMOD_UNINSTALL=pythonmod-uninstall
755 AC_SUBST(PYTHONMOD_UNINSTALL)
759 if test x_$ub_with_pyunbound != x_no; then
760 AC_DEFINE(WITH_PYUNBOUND, 1, [Define if you want PyUnbound.])
762 AC_SUBST(WITH_PYUNBOUND)
763 PYUNBOUND_OBJ="libunbound_wrap.lo"
764 AC_SUBST(PYUNBOUND_OBJ)
765 PYUNBOUND_TARGET="_unbound.la"
766 AC_SUBST(PYUNBOUND_TARGET)
767 PYUNBOUND_INSTALL=pyunbound-install
768 AC_SUBST(PYUNBOUND_INSTALL)
769 PYUNBOUND_UNINSTALL=pyunbound-uninstall
770 AC_SUBST(PYUNBOUND_UNINSTALL)
774 AC_MSG_RESULT([*** Python libraries not found, won't build PythonMod or PyUnbound ***])
780 if test "`uname`" = "NetBSD"; then
781 NETBSD_LINTFLAGS='"-D__RENAME(x)=" -D_NETINET_IN_H_'
782 AC_SUBST(NETBSD_LINTFLAGS)
785 if test "`uname -o`" = "GNU/Linux"; then
786 # splint cannot parse modern c99 header files
787 GCC_DOCKER_LINTFLAGS='-syntax'
788 AC_SUBST(GCC_DOCKER_LINTFLAGS)
790 CONFIG_DATE=`date +%Y%m%d`
791 AC_SUBST(CONFIG_DATE)
793 # Checks for libraries.
797 AC_ARG_WITH([nss], AS_HELP_STRING([--with-nss=path],[use libnss instead of openssl, installed at path.]),
800 AC_DEFINE(HAVE_NSS, 1, [Use libnss for crypto])
801 if test "$withval" != "" -a "$withval" != "yes"; then
802 CPPFLAGS="$CPPFLAGS -I$withval/include/nss3"
803 LDFLAGS="$LDFLAGS -L$withval/lib"
804 ACX_RUNTIME_PATH_ADD([$withval/lib])
805 CPPFLAGS="-I$withval/include/nspr4 $CPPFLAGS"
807 CPPFLAGS="$CPPFLAGS -I/usr/include/nss3"
808 CPPFLAGS="-I/usr/include/nspr4 $CPPFLAGS"
810 LIBS="$LIBS -lnss3 -lnspr4"
812 PC_CRYPTO_DEPENDENCY="nss nspr"
813 AC_SUBST(PC_CRYPTO_DEPENDENCY)
819 AC_ARG_WITH([nettle], AS_HELP_STRING([--with-nettle=path],[use libnettle as crypto library, installed at path.]),
822 AC_DEFINE(HAVE_NETTLE, 1, [Use libnettle for crypto])
823 AC_CHECK_HEADERS([nettle/dsa-compat.h],,, [AC_INCLUDES_DEFAULT])
824 if test "$withval" != "" -a "$withval" != "yes"; then
825 CPPFLAGS="$CPPFLAGS -I$withval/include/nettle"
826 LDFLAGS="$LDFLAGS -L$withval/lib"
827 ACX_RUNTIME_PATH_ADD([$withval/lib])
829 CPPFLAGS="$CPPFLAGS -I/usr/include/nettle"
831 LIBS="$LIBS -lhogweed -lnettle -lgmp"
833 PC_CRYPTO_DEPENDENCY="hogweed nettle"
834 AC_SUBST(PC_CRYPTO_DEPENDENCY)
839 if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then
844 PC_CRYPTO_DEPENDENCY=""
845 AC_SUBST(PC_CRYPTO_DEPENDENCY)
847 # check if -lcrypt32 is needed because CAPIENG needs that. (on windows)
850 AC_MSG_CHECKING([if libssl needs -lcrypt32])
851 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
852 int EVP_sha256(void);
860 LIBS="$LIBS -lcrypt32"
863 AC_MSG_CHECKING([for LibreSSL])
864 if grep VERSION_TEXT $ssldir_include/openssl/opensslv.h | grep "LibreSSL" >/dev/null; then
866 AC_DEFINE([HAVE_LIBRESSL], [1], [Define if we have LibreSSL])
867 # libressl provides these compat functions, but they may also be
868 # declared by the OS in libc. See if they have been declared.
869 AC_CHECK_DECLS([strlcpy,strlcat,arc4random,arc4random_uniform])
873 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])
874 AC_CHECK_FUNCS([OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup 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])
876 # these check_funcs need -lssl
879 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])
882 AC_CHECK_DECLS([SSL_COMP_get_compression_methods,sk_SSL_COMP_pop_free,SSL_CTX_set_ecdh_auto], [], [], [
884 #ifdef HAVE_OPENSSL_ERR_H
885 #include <openssl/err.h>
888 #ifdef HAVE_OPENSSL_RAND_H
889 #include <openssl/rand.h>
892 #ifdef HAVE_OPENSSL_CONF_H
893 #include <openssl/conf.h>
896 #ifdef HAVE_OPENSSL_ENGINE_H
897 #include <openssl/engine.h>
899 #include <openssl/ssl.h>
900 #include <openssl/evp.h>
903 if test "$ac_cv_func_HMAC_Init_ex" = "yes"; then
904 # check function return type.
905 AC_MSG_CHECKING(the return type of HMAC_Init_ex)
906 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
907 #ifdef HAVE_OPENSSL_ERR_H
908 #include <openssl/err.h>
911 #ifdef HAVE_OPENSSL_RAND_H
912 #include <openssl/rand.h>
915 #ifdef HAVE_OPENSSL_CONF_H
916 #include <openssl/conf.h>
919 #ifdef HAVE_OPENSSL_ENGINE_H
920 #include <openssl/engine.h>
922 #include <openssl/ssl.h>
923 #include <openssl/evp.h>
925 HMAC_CTX* hmac_ctx = NULL;
926 void* hmac_key = NULL;
927 const EVP_MD* digest = NULL;
928 int x = HMAC_Init_ex(hmac_ctx, hmac_key, 32, digest, NULL);
934 AC_DEFINE([HMAC_INIT_EX_RETURNS_VOID], 1, [If HMAC_Init_ex() returns void])
942 AC_ARG_WITH([libbsd], AS_HELP_STRING([--with-libbsd],[Use portable libbsd functions]), [
943 AC_CHECK_HEADERS([bsd/string.h bsd/stdlib.h],,, [AC_INCLUDES_DEFAULT])
944 if test "x$ac_cv_header_bsd_string_h" = xyes -a "x$ac_cv_header_bsd_stdlib_h" = xyes; then
945 for func in strlcpy strlcat arc4random arc4random_uniform reallocarray; do
946 AC_SEARCH_LIBS([$func], [bsd], [
947 AC_DEFINE(HAVE_LIBBSD, 1, [Use portable libbsd functions])
948 PC_LIBBSD_DEPENDENCY=libbsd
949 AC_SUBST(PC_LIBBSD_DEPENDENCY)
955 AC_ARG_ENABLE(sha1, AS_HELP_STRING([--disable-sha1],[Disable SHA1 RRSIG support, does not disable nsec3 support]))
956 case "$enable_sha1" in
960 AC_DEFINE([USE_SHA1], [1], [Define this to enable SHA1 support.])
965 AC_ARG_ENABLE(sha2, AS_HELP_STRING([--disable-sha2],[Disable SHA256 and SHA512 RRSIG support]))
966 case "$enable_sha2" in
970 AC_DEFINE([USE_SHA2], [1], [Define this to enable SHA256 and SHA512 support.])
974 AC_ARG_ENABLE(subnet, AS_HELP_STRING([--enable-subnet],[Enable client subnet]))
975 case "$enable_subnet" in
977 AC_DEFINE([CLIENT_SUBNET], [1], [Define this to enable client subnet option.])
978 SUBNET_OBJ="edns-subnet.lo subnetmod.lo addrtree.lo subnet-whitelist.lo"
980 SUBNET_HEADER='$(srcdir)/edns-subnet/subnetmod.h $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/edns-subnet/subnet-whitelist.h $(srcdir)/edns-subnet/addrtree.h'
981 AC_SUBST(SUBNET_HEADER)
987 # check whether gost also works
988 AC_DEFUN([AC_CHECK_GOST_WORKS],
989 [AC_REQUIRE([AC_PROG_CC])
990 AC_MSG_CHECKING([if GOST works])
991 if test c${cross_compiling} = cno; then
993 if test -n "$ssldir"; then
994 CFLAGS="$CFLAGS -Wl,-rpath,$ssldir_lib"
996 AC_RUN_IFELSE([AC_LANG_SOURCE([[
998 #include <openssl/ssl.h>
999 #include <openssl/evp.h>
1000 #include <openssl/engine.h>
1001 #include <openssl/conf.h>
1002 /* routine to load gost (from sldns) */
1003 int load_gost_id(void)
1005 static int gost_id = 0;
1006 const EVP_PKEY_ASN1_METHOD* meth;
1009 if(gost_id) return gost_id;
1011 /* see if configuration loaded gost implementation from other engine*/
1012 meth = EVP_PKEY_asn1_find_str(NULL, "gost2001", -1);
1014 EVP_PKEY_asn1_get0_info(&gost_id, NULL, NULL, NULL, NULL, meth);
1018 /* see if engine can be loaded already */
1019 e = ENGINE_by_id("gost");
1021 /* load it ourself, in case statically linked */
1022 ENGINE_load_builtin_engines();
1023 ENGINE_load_dynamic();
1024 e = ENGINE_by_id("gost");
1027 /* no gost engine in openssl */
1030 if(!ENGINE_set_default(e, ENGINE_METHOD_ALL)) {
1036 meth = EVP_PKEY_asn1_find_str(&e, "gost2001", -1);
1038 /* algo not found */
1043 EVP_PKEY_asn1_get0_info(&gost_id, NULL, NULL, NULL, NULL, meth);
1049 unsigned char digest[64]; /* its a 256-bit digest, so uses 32 bytes */
1050 const char* str = "Hello world";
1051 const unsigned char check[] = {
1052 0x40 , 0xed , 0xf8 , 0x56 , 0x5a , 0xc5 , 0x36 , 0xe1 ,
1053 0x33 , 0x7c , 0x7e , 0x87 , 0x62 , 0x1c , 0x42 , 0xe0 ,
1054 0x17 , 0x1b , 0x5e , 0xce , 0xa8 , 0x46 , 0x65 , 0x4d ,
1055 0x8d , 0x3e , 0x22 , 0x9b , 0xe1 , 0x30 , 0x19 , 0x9d
1057 OPENSSL_config(NULL);
1058 (void)load_gost_id();
1059 md = EVP_get_digestbyname("md_gost94");
1061 memset(digest, 0, sizeof(digest));
1062 ctx = EVP_MD_CTX_create();
1064 if(!EVP_DigestInit_ex(ctx, md, NULL)) return 3;
1065 if(!EVP_DigestUpdate(ctx, str, 10)) return 4;
1066 if(!EVP_DigestFinal_ex(ctx, digest, NULL)) return 5;
1067 /* uncomment to see the hash calculated.
1070 printf(" %2.2x", (int)digest[i]);
1073 if(memcmp(digest, check, sizeof(check)) != 0)
1077 ]])] , [eval "ac_cv_c_gost_works=yes"], [eval "ac_cv_c_gost_works=no"])
1080 eval "ac_cv_c_gost_works=maybe"
1082 AC_MSG_RESULT($ac_cv_c_gost_works)
1085 AC_ARG_ENABLE(gost, AS_HELP_STRING([--disable-gost],[Disable GOST support]))
1087 if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then
1088 case "$enable_gost" in
1092 AC_CHECK_FUNC(EVP_PKEY_set_type_str, [:],[AC_MSG_ERROR([OpenSSL 1.0.0 is needed for GOST support])])
1093 AC_CHECK_FUNC(EC_KEY_new, [], [AC_MSG_ERROR([OpenSSL does not support ECC, needed for GOST support])])
1095 if test "$ac_cv_c_gost_works" != no; then
1097 AC_DEFINE([USE_GOST], [1], [Define this to enable GOST support.])
1101 fi dnl !USE_NSS && !USE_NETTLE
1103 AC_ARG_ENABLE(ecdsa, AS_HELP_STRING([--disable-ecdsa],[Disable ECDSA support]))
1105 case "$enable_ecdsa" in
1109 if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then
1110 AC_CHECK_FUNC(ECDSA_sign, [], [AC_MSG_ERROR([OpenSSL does not support ECDSA: please upgrade or rerun with --disable-ecdsa])])
1111 AC_CHECK_FUNC(SHA384_Init, [], [AC_MSG_ERROR([OpenSSL does not support SHA384: please upgrade or rerun with --disable-ecdsa])])
1112 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
1113 #include <openssl/evp.h>
1115 # see if OPENSSL 1.0.0 or later (has EVP MD and Verify independency)
1116 AC_MSG_CHECKING([if openssl supports SHA2 and ECDSA with EVP])
1117 if grep OPENSSL_VERSION_TEXT $ssldir_include/openssl/opensslv.h | grep "OpenSSL" >/dev/null; then
1118 if grep OPENSSL_VERSION_NUMBER $ssldir_include/openssl/opensslv.h | grep 0x0 >/dev/null; then
1120 AC_DEFINE_UNQUOTED([USE_ECDSA_EVP_WORKAROUND], [1], [Define this to enable an EVP workaround for older openssl])
1122 AC_MSG_RESULT([yes])
1125 # not OpenSSL, thus likely LibreSSL, which supports it
1126 AC_MSG_RESULT([yes])
1129 # we now know we have ECDSA and the required curves.
1130 AC_DEFINE_UNQUOTED([USE_ECDSA], [1], [Define this to enable ECDSA support.])
1135 AC_ARG_ENABLE(dsa, AS_HELP_STRING([--disable-dsa],[Disable DSA support]))
1137 case "$enable_dsa" in
1139 # detect if DSA is supported, and turn it off if not.
1140 if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then
1141 AC_CHECK_FUNC(DSA_SIG_new, [
1142 AC_CHECK_TYPE(DSA_SIG*, [
1143 AC_DEFINE_UNQUOTED([USE_DSA], [1], [Define this to enable DSA support.])
1144 ], [if test "x$enable_dsa" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support DSA and you used --enable-dsa.])
1147 #ifdef HAVE_OPENSSL_ERR_H
1148 #include <openssl/err.h>
1151 #ifdef HAVE_OPENSSL_RAND_H
1152 #include <openssl/rand.h>
1155 #ifdef HAVE_OPENSSL_CONF_H
1156 #include <openssl/conf.h>
1159 #ifdef HAVE_OPENSSL_ENGINE_H
1160 #include <openssl/engine.h>
1163 ], [if test "x$enable_dsa" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support DSA and you used --enable-dsa.])
1166 AC_DEFINE_UNQUOTED([USE_DSA], [1], [Define this to enable DSA support.])
1170 # disable dsa by default, RFC 8624 section 3.1, validators MUST NOT
1171 # support DSA for DNSSEC Validation.
1175 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]))
1176 if test "$with_deprecate_rsa_1024" = "yes"; then
1177 AC_DEFINE([DEPRECATE_RSA_1024], [1], [Deprecate RSA 1024 bit length, makes that an unsupported key])
1180 AC_ARG_ENABLE(ed25519, AS_HELP_STRING([--disable-ed25519],[Disable ED25519 support]))
1182 case "$enable_ed25519" in
1186 if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then
1187 AC_CHECK_DECLS([NID_ED25519], [
1189 ], [ if test "x$enable_ed25519" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support ED25519 and you used --enable-ed25519.])
1190 fi ], [AC_INCLUDES_DEFAULT
1191 #include <openssl/evp.h>
1194 if test $USE_NETTLE = "yes"; then
1195 AC_CHECK_HEADERS([nettle/eddsa.h], use_ed25519="yes",, [AC_INCLUDES_DEFAULT])
1197 if test $use_ed25519 = "yes"; then
1198 AC_DEFINE_UNQUOTED([USE_ED25519], [1], [Define this to enable ED25519 support.])
1203 AC_ARG_ENABLE(ed448, AS_HELP_STRING([--disable-ed448],[Disable ED448 support]))
1205 case "$enable_ed448" in
1209 if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then
1210 AC_CHECK_DECLS([NID_ED448], [
1212 ], [ if test "x$enable_ed448" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support ED448 and you used --enable-ed448.])
1213 fi ], [AC_INCLUDES_DEFAULT
1214 #include <openssl/evp.h>
1217 if test $use_ed448 = "yes"; then
1218 AC_DEFINE_UNQUOTED([USE_ED448], [1], [Define this to enable ED448 support.])
1223 AC_ARG_ENABLE(event-api, AS_HELP_STRING([--enable-event-api],[Enable (experimental) pluggable event base libunbound API installed to unbound-event.h]))
1224 case "$enable_event_api" in
1226 AC_SUBST(UNBOUND_EVENT_INSTALL, [unbound-event-install])
1227 AC_SUBST(UNBOUND_EVENT_UNINSTALL, [unbound-event-uninstall])
1233 AC_ARG_ENABLE(tfo-client, AS_HELP_STRING([--enable-tfo-client],[Enable TCP Fast Open for client mode]))
1234 case "$enable_tfo_client" in
1237 linux*) AC_CHECK_DECL([MSG_FASTOPEN], [AC_MSG_WARN([Check the platform specific TFO kernel parameters are correctly configured to support client mode TFO])],
1238 [AC_MSG_ERROR([TCP Fast Open is not available for client mode: please rerun without --enable-tfo-client])],
1239 [AC_INCLUDES_DEFAULT
1240 #include <netinet/tcp.h>
1242 AC_DEFINE_UNQUOTED([USE_MSG_FASTOPEN], [1], [Define this to enable client TCP Fast Open.])
1244 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])],
1245 [AC_MSG_ERROR([TCP Fast Open is not available for client mode: please rerun without --enable-tfo-client])],
1246 [AC_INCLUDES_DEFAULT
1247 #include <sys/socket.h>
1249 AC_DEFINE_UNQUOTED([USE_OSX_MSG_FASTOPEN], [1], [Define this to enable client TCP Fast Open.])
1257 AC_ARG_ENABLE(tfo-server, AS_HELP_STRING([--enable-tfo-server],[Enable TCP Fast Open for server mode]))
1258 case "$enable_tfo_server" in
1260 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
1261 #include <netinet/tcp.h>
1263 AC_DEFINE_UNQUOTED([USE_TCP_FASTOPEN], [1], [Define this to enable server TCP Fast Open.])
1269 # check for libevent
1270 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.]),
1271 [ ],[ with_libevent="no" ])
1272 if test "x_$with_libevent" != x_no; then
1273 AC_DEFINE([USE_LIBEVENT], [1], [Define if you enable libevent])
1274 AC_MSG_CHECKING(for libevent)
1275 if test "x_$with_libevent" = x_ -o "x_$with_libevent" = x_yes; then
1276 with_libevent="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
1278 for dir in $with_libevent; do
1280 if test -f "$dir/include/event.h" -o -f "$dir/include/event2/event.h"; then
1281 found_libevent="yes"
1282 dnl assume /usr is in default path.
1283 if test "$thedir" != "/usr"; then
1284 CPPFLAGS="$CPPFLAGS -I$thedir/include"
1289 if test x_$found_libevent != x_yes; then
1290 if test -f "$dir/event.h" -a \( -f "$dir/libevent.la" -o -f "$dir/libev.la" \) ; then
1291 # libevent source directory
1292 AC_MSG_RESULT(found in $thedir)
1293 CPPFLAGS="$CPPFLAGS -I$thedir -I$thedir/include"
1295 BAK_LDFLAGS="$LDFLAGS"
1296 # remove evdns from linking
1297 mkdir build >/dev/null 2>&1
1298 mkdir build/libevent >/dev/null 2>&1
1299 mkdir build/libevent/.libs >/dev/null 2>&1
1300 ev_files_o=`ls $thedir/*.o | grep -v evdns\.o | grep -v bufferevent_openssl\.o`
1301 ev_files_lo=`ls $thedir/*.lo | grep -v evdns\.lo | grep -v bufferevent_openssl\.lo`
1302 ev_files_libso=`ls $thedir/.libs/*.o | grep -v evdns\.o | grep -v bufferevent_openssl\.o`
1303 cp $ev_files_o build/libevent
1304 cp $ev_files_lo build/libevent
1305 cp $ev_files_libso build/libevent/.libs
1306 LATE_LDFLAGS="build/libevent/*.lo -lm"
1307 LDFLAGS="build/libevent/*.o $LDFLAGS -lm"
1309 AC_MSG_ERROR([Cannot find the libevent library in $with_libevent
1310 You can restart ./configure --with-libevent=no to use a builtin alternative.
1311 Please note that this alternative is not as capable as libevent when using
1312 large outgoing port ranges. ])
1315 AC_MSG_RESULT(found in $thedir)
1316 dnl if event2 exists and no event lib in dir itself, use subdir
1317 if test ! -f $thedir/lib/libevent.a -a ! -f $thedir/lib/libevent.so -a -d "$thedir/lib/event2"; then
1318 LDFLAGS="$LDFLAGS -L$thedir/lib/event2"
1319 ACX_RUNTIME_PATH_ADD([$thedir/lib/event2])
1321 dnl assume /usr is in default path, do not add "".
1322 if test "$thedir" != "/usr" -a "$thedir" != ""; then
1323 LDFLAGS="$LDFLAGS -L$thedir/lib"
1324 ACX_RUNTIME_PATH_ADD([$thedir/lib])
1328 # check for library used by libevent after 1.3c
1329 AC_SEARCH_LIBS([clock_gettime], [rt])
1331 # is the event.h header libev or libevent?
1332 AC_CHECK_HEADERS([event.h],,, [AC_INCLUDES_DEFAULT])
1333 AC_CHECK_DECL(EV_VERSION_MAJOR, [
1334 AC_SEARCH_LIBS(event_set, [ev])
1336 AC_SEARCH_LIBS(event_set, [event])
1337 ],[AC_INCLUDES_DEFAULT
1340 AC_CHECK_FUNCS([event_base_free]) # only in libevent 1.2 and later
1341 AC_CHECK_FUNCS([event_base_once]) # only in libevent 1.4.1 and later
1342 AC_CHECK_FUNCS([event_base_new]) # only in libevent 1.4.1 and later
1343 AC_CHECK_FUNCS([event_base_get_method]) # only in libevent 1.4.3 and later
1344 AC_CHECK_FUNCS([ev_loop]) # only in libev. (tested on 3.51)
1345 AC_CHECK_FUNCS([ev_default_loop]) # only in libev. (tested on 4.00)
1346 AC_CHECK_FUNCS([event_assign]) # in libevent, for thread-safety
1347 AC_CHECK_DECLS([evsignal_assign], [], [], [AC_INCLUDES_DEFAULT
1351 # include "event2/event.h"
1354 PC_LIBEVENT_DEPENDENCY="libevent"
1355 AC_SUBST(PC_LIBEVENT_DEPENDENCY)
1356 if test -n "$BAK_LDFLAGS_SET"; then
1357 LDFLAGS="$BAK_LDFLAGS"
1360 AC_DEFINE(USE_MINI_EVENT, 1, [Define if you want to use internal select based events])
1363 # check for libexpat
1364 AC_ARG_WITH(libexpat, AS_HELP_STRING([--with-libexpat=path],[specify explicit path for libexpat.]),
1365 [ ],[ withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" ])
1366 AC_MSG_CHECKING(for libexpat)
1368 for dir in $withval ; do
1369 if test -f "$dir/include/expat.h"; then
1370 found_libexpat="yes"
1371 dnl assume /usr is in default path.
1372 if test "$dir" != "/usr"; then
1373 CPPFLAGS="$CPPFLAGS -I$dir/include"
1374 LDFLAGS="$LDFLAGS -L$dir/lib"
1376 AC_MSG_RESULT(found in $dir)
1380 if test x_$found_libexpat != x_yes; then
1381 AC_MSG_ERROR([Could not find libexpat, expat.h])
1383 AC_CHECK_HEADERS([expat.h],,, [AC_INCLUDES_DEFAULT])
1384 AC_CHECK_DECLS([XML_StopParser], [], [], [AC_INCLUDES_DEFAULT
1388 # hiredis (redis C client for cachedb)
1389 AC_ARG_WITH(libhiredis, AS_HELP_STRING([--with-libhiredis=path],[specify explicit path for libhiredis.]),
1390 [ ],[ withval="no" ])
1391 found_libhiredis="no"
1392 if test x_$withval = x_yes -o x_$withval != x_no; then
1393 AC_MSG_CHECKING(for libhiredis)
1394 if test x_$withval = x_ -o x_$withval = x_yes; then
1395 withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
1397 for dir in $withval ; do
1398 if test -f "$dir/include/hiredis/hiredis.h"; then
1399 found_libhiredis="yes"
1400 dnl assume /usr is in default path.
1401 if test "$dir" != "/usr"; then
1402 CPPFLAGS="$CPPFLAGS -I$dir/include"
1403 LDFLAGS="$LDFLAGS -L$dir/lib"
1405 AC_MSG_RESULT(found in $dir)
1406 AC_DEFINE([USE_REDIS], [1], [Define this to use hiredis client.])
1407 LIBS="$LIBS -lhiredis"
1411 if test x_$found_libhiredis != x_yes; then
1412 AC_MSG_ERROR([Could not find libhiredis, hiredis.h])
1414 AC_CHECK_HEADERS([hiredis/hiredis.h],,, [AC_INCLUDES_DEFAULT])
1415 AC_CHECK_DECLS([redisConnect], [], [], [AC_INCLUDES_DEFAULT
1416 #include <hiredis/hiredis.h>
1421 AC_ARG_WITH(libnghttp2, AS_HELP_STRING([--with-libnghttp2=path],[specify explicit path for libnghttp2.]),
1422 [ ],[ withval="no" ])
1423 found_libnghttp2="no"
1424 if test x_$withval = x_yes -o x_$withval != x_no; then
1425 AC_MSG_CHECKING(for libnghttp2)
1426 if test x_$withval = x_ -o x_$withval = x_yes; then
1427 withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
1429 for dir in $withval ; do
1430 if test -f "$dir/include/nghttp2/nghttp2.h"; then
1431 found_libnghttp2="yes"
1432 dnl assume /usr is in default path.
1433 if test "$dir" != "/usr"; then
1434 CPPFLAGS="$CPPFLAGS -I$dir/include"
1435 LDFLAGS="$LDFLAGS -L$dir/lib"
1437 AC_MSG_RESULT(found in $dir)
1438 AC_DEFINE([HAVE_NGHTTP2], [1], [Define this to use nghttp2 client.])
1439 LIBS="$LIBS -lnghttp2"
1443 if test x_$found_libnghttp2 != x_yes; then
1444 AC_MSG_ERROR([Could not find libnghttp2, nghttp2.h])
1446 AC_CHECK_HEADERS([nghttp2/nghttp2.h],,, [AC_INCLUDES_DEFAULT])
1447 AC_CHECK_DECLS([nghttp2_session_server_new], [], [], [AC_INCLUDES_DEFAULT
1448 #include <nghttp2/nghttp2.h>
1452 # set static linking for uninstalled libraries if requested
1455 AC_ARG_ENABLE(static-exe, AS_HELP_STRING([--enable-static-exe],[ enable to compile executables statically against (event) uninstalled libs, for debug purposes ]),
1457 if test x_$enable_static_exe = x_yes; then
1459 if test "$on_mingw" = yes; then
1460 staticexe="-all-static"
1461 # for static compile, include gdi32 and zlib here.
1462 if echo $LIBS | grep 'lgdi32' >/dev/null; then
1465 LIBS="$LIBS -lgdi32"
1468 LIBS="$LIBS -l:libssp.a"
1472 # set full static linking if requested
1473 AC_ARG_ENABLE(fully-static, AS_HELP_STRING([--enable-fully-static],[ enable to compile fully static ]),
1475 if test x_$enable_fully_static = x_yes; then
1476 staticexe="-all-static"
1477 if test "$on_mingw" = yes; then
1478 # for static compile, include gdi32 and zlib here.
1479 if echo $LIBS | grep 'lgdi32' >/dev/null; then
1482 LIBS="$LIBS -lgdi32"
1485 LIBS="$LIBS -l:libssp.a"
1489 # set lock checking if requested
1490 AC_ARG_ENABLE(lock_checks, AS_HELP_STRING([--enable-lock-checks],[ enable to check lock and unlock calls, for debug purposes ]),
1492 if test x_$enable_lock_checks = x_yes; then
1493 AC_DEFINE(ENABLE_LOCK_CHECKS, 1, [Define if you want to use debug lock checking (slow).])
1494 CHECKLOCK_OBJ="checklocks.lo"
1495 AC_SUBST(CHECKLOCK_OBJ)
1498 ACX_CHECK_GETADDRINFO_WITH_INCLUDES
1499 if test "$USE_WINSOCK" = 1; then
1500 AC_DEFINE(UB_ON_WINDOWS, 1, [Use win32 resources and API])
1501 AC_CHECK_HEADERS([iphlpapi.h],,, [AC_INCLUDES_DEFAULT
1502 #include <windows.h>
1504 AC_CHECK_TOOL(WINDRES, windres)
1505 LIBS="$LIBS -liphlpapi -lcrypt32"
1506 WINAPPS="unbound-service-install.exe unbound-service-remove.exe anchor-update.exe"
1508 WIN_DAEMON_SRC="winrc/win_svc.c winrc/w_inst.c"
1509 AC_SUBST(WIN_DAEMON_SRC)
1510 WIN_DAEMON_OBJ="win_svc.lo w_inst.lo"
1511 AC_SUBST(WIN_DAEMON_OBJ)
1512 WIN_DAEMON_OBJ_LINK="rsrc_unbound.o"
1513 AC_SUBST(WIN_DAEMON_OBJ_LINK)
1514 WIN_HOST_OBJ_LINK="rsrc_unbound_host.o"
1515 AC_SUBST(WIN_HOST_OBJ_LINK)
1516 WIN_UBANCHOR_OBJ_LINK="rsrc_unbound_anchor.o log.lo locks.lo"
1517 AC_SUBST(WIN_UBANCHOR_OBJ_LINK)
1518 WIN_CONTROL_OBJ_LINK="rsrc_unbound_control.o"
1519 AC_SUBST(WIN_CONTROL_OBJ_LINK)
1520 WIN_CHECKCONF_OBJ_LINK="rsrc_unbound_checkconf.o"
1521 AC_SUBST(WIN_CHECKCONF_OBJ_LINK)
1523 if test $ac_cv_func_getaddrinfo = no; then
1524 AC_LIBOBJ([fake-rfc2553])
1526 # check after getaddrinfo for its libraries
1527 ACX_FUNC_IOCTLSOCKET
1529 # see if daemon(3) exists, and if it is deprecated.
1530 AC_CHECK_FUNCS([daemon])
1531 if test $ac_cv_func_daemon = yes; then
1532 ACX_FUNC_DEPRECATED([daemon], [(void)daemon(0, 0);], [
1538 AC_CHECK_MEMBERS([struct sockaddr_un.sun_len],,,[
1540 #ifdef HAVE_SYS_UN_H
1544 AC_CHECK_MEMBERS([struct in_pktinfo.ipi_spec_dst],,,[
1546 #if HAVE_SYS_PARAM_H
1547 #include <sys/param.h>
1550 #ifdef HAVE_SYS_SOCKET_H
1551 #include <sys/socket.h>
1554 #ifdef HAVE_SYS_UIO_H
1555 #include <sys/uio.h>
1558 #ifdef HAVE_NETINET_IN_H
1559 #include <netinet/in.h>
1562 #ifdef HAVE_NETINET_TCP_H
1563 #include <netinet/tcp.h>
1566 #ifdef HAVE_ARPA_INET_H
1567 #include <arpa/inet.h>
1570 #ifdef HAVE_WINSOCK2_H
1571 #include <winsock2.h>
1574 #ifdef HAVE_WS2TCPIP_H
1575 #include <ws2tcpip.h>
1579 AC_MSG_CHECKING([for htobe64])
1580 AC_LINK_IFELSE([AC_LANG_PROGRAM([
1582 #ifdef HAVE_ENDIAN_H
1583 # include <endian.h>
1585 #ifdef HAVE_SYS_ENDIAN_H
1586 # include <sys/endian.h>
1588 ], [unsigned long long x = htobe64(0); printf("%u", (unsigned)x);])],
1590 AC_DEFINE(HAVE_HTOBE64, 1, [If we have htobe64]),
1593 AC_MSG_CHECKING([for be64toh])
1594 AC_LINK_IFELSE([AC_LANG_PROGRAM([
1596 #ifdef HAVE_ENDIAN_H
1597 # include <endian.h>
1599 #ifdef HAVE_SYS_ENDIAN_H
1600 # include <sys/endian.h>
1602 ], [unsigned long long x = be64toh(0); printf("%u", (unsigned)x);])],
1604 AC_DEFINE(HAVE_BE64TOH, 1, [If we have be64toh]),
1607 AC_SEARCH_LIBS([setusercontext], [util])
1608 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])
1609 AC_CHECK_FUNCS([setresuid],,[AC_CHECK_FUNCS([setreuid])])
1610 AC_CHECK_FUNCS([setresgid],,[AC_CHECK_FUNCS([setregid])])
1612 # check if setreuid en setregid fail, on MacOSX10.4(darwin8).
1613 if echo $host_os | grep darwin8 > /dev/null; then
1614 AC_DEFINE(DARWIN_BROKEN_SETREUID, 1, [Define this if on macOSX10.4-darwin8 and setreuid and setregid do not work])
1616 AC_CHECK_DECLS([inet_pton,inet_ntop], [], [], [
1618 #ifdef HAVE_NETINET_IN_H
1619 #include <netinet/in.h>
1622 #ifdef HAVE_NETINET_TCP_H
1623 #include <netinet/tcp.h>
1626 #ifdef HAVE_ARPA_INET_H
1627 #include <arpa/inet.h>
1630 #ifdef HAVE_WINSOCK2_H
1631 #include <winsock2.h>
1634 #ifdef HAVE_WS2TCPIP_H
1635 #include <ws2tcpip.h>
1638 AC_REPLACE_FUNCS(inet_aton)
1639 AC_REPLACE_FUNCS(inet_pton)
1640 AC_REPLACE_FUNCS(inet_ntop)
1641 AC_REPLACE_FUNCS(snprintf)
1642 # test if snprintf return the proper length
1643 if test "x$ac_cv_func_snprintf" = xyes; then
1644 if test c${cross_compiling} = cno; then
1645 AC_MSG_CHECKING([for correct snprintf return value])
1646 AC_RUN_IFELSE([AC_LANG_SOURCE(AC_INCLUDES_DEFAULT
1648 int main(void) { return !(snprintf(NULL, 0, "test") == 4); }
1649 ]])], [AC_MSG_RESULT(yes)], [
1651 AC_DEFINE([SNPRINTF_RET_BROKEN], [], [define if (v)snprintf does not return length needed, (but length used)])
1656 AC_REPLACE_FUNCS(strlcat)
1657 AC_REPLACE_FUNCS(strlcpy)
1658 AC_REPLACE_FUNCS(memmove)
1659 AC_REPLACE_FUNCS(gmtime_r)
1660 AC_REPLACE_FUNCS(isblank)
1661 AC_REPLACE_FUNCS(explicit_bzero)
1662 dnl without CTIME, ARC4-functions and without reallocarray.
1663 LIBOBJ_WITHOUT_CTIMEARC4="$LIBOBJS"
1664 AC_SUBST(LIBOBJ_WITHOUT_CTIMEARC4)
1665 AC_MSG_CHECKING([for reallocarray])
1666 AC_LINK_IFELSE([AC_LANG_SOURCE(AC_INCLUDES_DEFAULT
1668 #ifndef _OPENBSD_SOURCE
1669 #define _OPENBSD_SOURCE 1
1673 void* p = reallocarray(NULL, 10, 100);
1677 ]])], [AC_MSG_RESULT(yes)
1678 AC_DEFINE(HAVE_REALLOCARRAY, 1, [If we have reallocarray(3)])
1681 AC_LIBOBJ(reallocarray)
1683 AC_CHECK_DECLS([reallocarray])
1684 if test "$USE_NSS" = "no"; then
1685 AC_REPLACE_FUNCS(arc4random)
1686 AC_REPLACE_FUNCS(arc4random_uniform)
1687 if test "$ac_cv_func_arc4random" = "no"; then
1688 AC_LIBOBJ(arc4_lock)
1689 AC_CHECK_FUNCS([getentropy],,[
1690 if test "$USE_WINSOCK" = 1; then
1691 AC_LIBOBJ(getentropy_win)
1695 AC_LIBOBJ(getentropy_osx)
1697 *solaris*|*sunos*|SunOS)
1698 AC_LIBOBJ(getentropy_solaris)
1699 AC_CHECK_HEADERS([sys/sha2.h],, [
1700 AC_CHECK_FUNCS([SHA512_Update],,[
1703 ], [AC_INCLUDES_DEFAULT])
1704 if test "$ac_cv_header_sys_sha2_h" = "yes"; then
1705 # this lib needed for sha2 on solaris
1708 AC_SEARCH_LIBS([clock_gettime], [rt])
1711 AC_LIBOBJ(getentropy_freebsd)
1714 AC_LIBOBJ(getentropy_linux)
1715 AC_CHECK_FUNCS([SHA512_Update],,[
1716 AC_DEFINE([COMPAT_SHA512], [1], [Do sha512 definitions in config.h])
1719 AC_CHECK_HEADERS([sys/sysctl.h],,, [AC_INCLUDES_DEFAULT])
1720 AC_CHECK_FUNCS([getauxval])
1721 AC_SEARCH_LIBS([clock_gettime], [rt])
1728 LIBOBJ_WITHOUT_CTIME="$LIBOBJS"
1729 AC_SUBST(LIBOBJ_WITHOUT_CTIME)
1730 AC_REPLACE_FUNCS(ctime_r)
1731 AC_REPLACE_FUNCS(strsep)
1733 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]))
1734 case "$enable_allsymbols" in
1736 COMMON_OBJ_ALL_SYMBOLS=""
1738 EXTRALINK="libunbound.la"
1739 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])
1742 COMMON_OBJ_ALL_SYMBOLS='$(COMMON_OBJ)'
1743 UBSYMS='-export-symbols $(srcdir)/libunbound/ubsyms.def'
1747 AC_SUBST(COMMON_OBJ_ALL_SYMBOLS)
1750 if test x_$enable_lock_checks = x_yes; then
1751 UBSYMS="-export-symbols clubsyms.def"
1752 cp ${srcdir}/libunbound/ubsyms.def clubsyms.def
1753 echo lock_protect >> clubsyms.def
1754 echo lock_unprotect >> clubsyms.def
1755 echo lock_get_mem >> clubsyms.def
1756 echo checklock_start >> clubsyms.def
1757 echo checklock_stop >> clubsyms.def
1758 echo checklock_lock >> clubsyms.def
1759 echo checklock_unlock >> clubsyms.def
1760 echo checklock_init >> clubsyms.def
1761 echo checklock_thrcreate >> clubsyms.def
1762 echo checklock_thrjoin >> clubsyms.def
1765 # check for dnstap if requested
1766 dt_DNSTAP([$UNBOUND_RUN_DIR/dnstap.sock],
1768 AC_DEFINE([USE_DNSTAP], [1], [Define to 1 to enable dnstap support])
1769 AC_SUBST([ENABLE_DNSTAP], [1])
1771 AC_SUBST([opt_dnstap_socket_path])
1772 ACX_ESCAPE_BACKSLASH($opt_dnstap_socket_path, hdr_dnstap_socket_path)
1773 AC_DEFINE_UNQUOTED(DNSTAP_SOCKET_PATH,
1774 ["$hdr_dnstap_socket_path"], [default dnstap socket path])
1775 AC_SUBST(DNSTAP_SOCKET_PATH,["$hdr_dnstap_socket_path"])
1776 AC_SUBST(DNSTAP_SOCKET_TESTBIN,['unbound-dnstap-socket$(EXEEXT)'])
1777 AC_SUBST([DNSTAP_SRC], ["dnstap/dnstap.c dnstap/dnstap.pb-c.c dnstap/dnstap_fstrm.c dnstap/dtstream.c"])
1778 AC_SUBST([DNSTAP_OBJ], ["dnstap.lo dnstap.pb-c.lo dnstap_fstrm.lo dtstream.lo"])
1781 AC_SUBST([ENABLE_DNSTAP], [0])
1785 # check for dnscrypt if requested
1787 AC_DEFINE([USE_DNSCRYPT], [1], [Define to 1 to enable dnscrypt support])
1788 AC_SUBST([ENABLE_DNSCRYPT], [1])
1790 AC_SUBST([DNSCRYPT_SRC], ["dnscrypt/dnscrypt.c"])
1791 AC_SUBST([DNSCRYPT_OBJ], ["dnscrypt.lo"])
1794 AC_SUBST([ENABLE_DNSCRYPT], [0])
1798 # check for cachedb if requested
1799 AC_ARG_ENABLE(cachedb, AS_HELP_STRING([--enable-cachedb],[enable cachedb module that can use external cache storage]))
1800 # turn on cachedb when hiredis support is enabled.
1801 if test "$found_libhiredis" = "yes"; then enable_cachedb="yes"; fi
1802 case "$enable_cachedb" in
1804 AC_DEFINE([USE_CACHEDB], [1], [Define to 1 to use cachedb support])
1805 AC_SUBST([CACHEDB_SRC], ["cachedb/cachedb.c cachedb/redis.c"])
1806 AC_SUBST([CACHEDB_OBJ], ["cachedb.lo redis.lo"])
1813 # check for ipsecmod if requested
1814 AC_ARG_ENABLE(ipsecmod, AS_HELP_STRING([--enable-ipsecmod],[Enable ipsecmod module that facilitates opportunistic IPsec]))
1815 case "$enable_ipsecmod" in
1817 AC_DEFINE([USE_IPSECMOD], [1], [Define to 1 to use ipsecmod support.])
1818 IPSECMOD_OBJ="ipsecmod.lo ipsecmod-whitelist.lo"
1819 AC_SUBST(IPSECMOD_OBJ)
1820 IPSECMOD_HEADER='$(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/ipsecmod/ipsecmod-whitelist.h'
1821 AC_SUBST(IPSECMOD_HEADER)
1828 # check for ipset if requested
1829 AC_ARG_ENABLE(ipset, AS_HELP_STRING([--enable-ipset],[enable ipset module]))
1830 case "$enable_ipset" in
1832 AC_DEFINE([USE_IPSET], [1], [Define to 1 to use ipset support])
1833 IPSET_SRC="ipset/ipset.c"
1835 IPSET_OBJ="ipset.lo"
1839 AC_ARG_WITH(libmnl, AS_HELP_STRING([--with-libmnl=path],[specify explicit path for libmnl.]),
1840 [ ],[ withval="yes" ])
1842 AC_MSG_CHECKING(for libmnl)
1843 if test x_$withval = x_ -o x_$withval = x_yes; then
1844 withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
1846 for dir in $withval ; do
1847 if test -f "$dir/include/libmnl/libmnl.h"; then
1849 dnl assume /usr is in default path.
1850 if test "$dir" != "/usr"; then
1851 CPPFLAGS="$CPPFLAGS -I$dir/include"
1852 LDFLAGS="$LDFLAGS -L$dir/lib"
1854 AC_MSG_RESULT(found in $dir)
1859 if test x_$found_libmnl != x_yes; then
1860 AC_MSG_ERROR([Could not find libmnl, libmnl.h])
1867 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]))
1868 case "$enable_explicit_port_randomisation" in
1870 AC_DEFINE([DISABLE_EXPLICIT_PORT_RANDOMISATION], [1], [Define this to enable kernel based UDP source port randomization.])
1876 if echo "$host" | $GREP -i -e linux >/dev/null; then
1877 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.]))
1878 case "$enable_linux_ip_local_port_range" in
1880 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.])
1888 AC_MSG_CHECKING([if ${MAKE:-make} supports $< with implicit rule in scope])
1889 # on openBSD, the implicit rule make $< work.
1890 # on Solaris, it does not work ($? is changed sources, $^ lists dependencies).
1892 cat >conftest.make <<EOF
1895 conftest.lo foo.lo bla.lo:
1896 if test -f "\$<"; then touch \$@; fi
1900 if test -f "\$<"; then touch \$@; fi
1902 conftest.lo: conftest.dir/conftest.c
1905 touch conftest.dir/conftest.c
1906 rm -f conftest.lo conftest.c
1907 ${MAKE:-make} -f conftest.make >/dev/null
1908 rm -f conftest.make conftest.c conftest.dir/conftest.c
1910 if test ! -f conftest.lo; then
1912 SOURCEDETERMINE='echo "$^" | awk "-F " "{print \$$1;}" > .source'
1913 SOURCEFILE='`cat .source`'
1920 AC_SUBST(SOURCEDETERMINE)
1921 AC_SUBST(SOURCEFILE)
1923 # see if we want to build the library or everything
1924 ALLTARGET="alltargets"
1925 INSTALLTARGET="install-all"
1926 AC_ARG_WITH(libunbound-only, AS_HELP_STRING([--with-libunbound-only],[do not build daemon and tool programs]),
1928 if test "$withval" = "yes"; then
1930 INSTALLTARGET="install-lib"
1933 if test $ALLTARGET = "alltargets"; then
1934 if test $USE_NSS = "yes"; then
1935 AC_MSG_ERROR([--with-nss can only be used in combination with --with-libunbound-only.])
1937 if test $USE_NETTLE = "yes"; then
1938 AC_MSG_ERROR([--with-nettle can only be used in combination with --with-libunbound-only.])
1943 AC_SUBST(INSTALLTARGET)
1946 if test -n "$LATE_LDFLAGS"; then
1947 LDFLAGS="$LATE_LDFLAGS $LDFLAGS"
1949 # remove start spaces
1950 LDFLAGS=`echo "$LDFLAGS"|sed -e 's/^ *//'`
1951 LIBS=`echo "$LIBS"|sed -e 's/^ *//'`
1953 AC_DEFINE_UNQUOTED([MAXSYSLOGMSGLEN], [10240], [Define to the maximum message length to pass to syslog.])
1956 dnl this must be first AH_CONFIG, to define the flags before any includes.
1957 AHX_CONFIG_EXT_FLAGS
1961 #ifndef _OPENBSD_SOURCE
1962 #define _OPENBSD_SOURCE 1
1965 #ifndef UNBOUND_DEBUG
1971 /** Use small-ldns codebase */
1974 # define LDNS_BUILD_CONFIG_HAVE_SSL 1
1987 #ifdef HAVE_STDARG_H
1991 #ifdef HAVE_STDINT_H
1997 #if HAVE_SYS_PARAM_H
1998 #include <sys/param.h>
2001 #ifdef HAVE_SYS_SOCKET_H
2002 #include <sys/socket.h>
2005 #ifdef HAVE_SYS_UIO_H
2006 #include <sys/uio.h>
2009 #ifdef HAVE_NETINET_IN_H
2010 #include <netinet/in.h>
2013 #ifdef HAVE_NETINET_TCP_H
2014 #include <netinet/tcp.h>
2017 #ifdef HAVE_ARPA_INET_H
2018 #include <arpa/inet.h>
2021 #ifdef HAVE_WINSOCK2_H
2022 #include <winsock2.h>
2025 #ifdef HAVE_WS2TCPIP_H
2026 #include <ws2tcpip.h>
2030 #define ARG_LL "%ll"
2032 #define ARG_LL "%I64"
2036 #define AF_LOCAL AF_UNIX
2040 AHX_CONFIG_FORMAT_ATTRIBUTE
2041 AHX_CONFIG_UNUSED_ATTRIBUTE
2043 AHX_CONFIG_MAXHOSTNAMELEN
2044 #if !defined(HAVE_SNPRINTF) || defined(SNPRINTF_RET_BROKEN)
2045 #define snprintf snprintf_unbound
2046 #define vsnprintf vsnprintf_unbound
2048 int snprintf (char *str, size_t count, const char *fmt, ...);
2049 int vsnprintf (char *str, size_t count, const char *fmt, va_list arg);
2050 #endif /* HAVE_SNPRINTF or SNPRINTF_RET_BROKEN */
2051 AHX_CONFIG_INET_PTON(unbound)
2052 AHX_CONFIG_INET_NTOP(unbound)
2053 AHX_CONFIG_INET_ATON(unbound)
2054 AHX_CONFIG_MEMMOVE(unbound)
2055 AHX_CONFIG_STRLCAT(unbound)
2056 AHX_CONFIG_STRLCPY(unbound)
2057 AHX_CONFIG_GMTIME_R(unbound)
2058 AHX_CONFIG_REALLOCARRAY(unbound)
2059 AHX_CONFIG_W32_SLEEP
2060 AHX_CONFIG_W32_USLEEP
2061 AHX_CONFIG_W32_RANDOM
2062 AHX_CONFIG_W32_SRANDOM
2063 AHX_CONFIG_W32_FD_SET_T
2064 AHX_CONFIG_IPV6_MIN_MTU
2065 AHX_MEMCMP_BROKEN(unbound)
2068 #ifndef HAVE_CTIME_R
2069 #define ctime_r unbound_ctime_r
2070 char *ctime_r(const time_t *timep, char *buf);
2074 #define strsep unbound_strsep
2075 char *strsep(char **stringp, const char *delim);
2078 #ifndef HAVE_ISBLANK
2079 #define isblank unbound_isblank
2083 #ifndef HAVE_EXPLICIT_BZERO
2084 #define explicit_bzero unbound_explicit_bzero
2085 void explicit_bzero(void* buf, size_t len);
2088 #if defined(HAVE_INET_NTOP) && !HAVE_DECL_INET_NTOP
2089 const char *inet_ntop(int af, const void *src, char *dst, size_t size);
2092 #if defined(HAVE_INET_PTON) && !HAVE_DECL_INET_PTON
2093 int inet_pton(int af, const char* src, void* dst);
2096 #if !defined(HAVE_STRPTIME) || !defined(STRPTIME_WORKS)
2097 #define strptime unbound_strptime
2099 char *strptime(const char *s, const char *format, struct tm *tm);
2102 #if !HAVE_DECL_REALLOCARRAY
2103 void *reallocarray(void *ptr, size_t nmemb, size_t size);
2107 #include <bsd/string.h>
2108 #include <bsd/stdlib.h>
2111 #ifdef HAVE_LIBRESSL
2112 # if !HAVE_DECL_STRLCPY
2113 size_t strlcpy(char *dst, const char *src, size_t siz);
2115 # if !HAVE_DECL_STRLCAT
2116 size_t strlcat(char *dst, const char *src, size_t siz);
2118 # if !HAVE_DECL_ARC4RANDOM && defined(HAVE_ARC4RANDOM)
2119 uint32_t arc4random(void);
2121 # if !HAVE_DECL_ARC4RANDOM_UNIFORM && defined(HAVE_ARC4RANDOM_UNIFORM)
2122 uint32_t arc4random_uniform(uint32_t upper_bound);
2124 #endif /* HAVE_LIBRESSL */
2125 #ifndef HAVE_ARC4RANDOM
2126 int getentropy(void* buf, size_t len);
2127 uint32_t arc4random(void);
2128 void arc4random_buf(void* buf, size_t n);
2129 void _ARC4_LOCK(void);
2130 void _ARC4_UNLOCK(void);
2131 void _ARC4_LOCK_DESTROY(void);
2133 #ifndef HAVE_ARC4RANDOM_UNIFORM
2134 uint32_t arc4random_uniform(uint32_t upper_bound);
2136 #ifdef COMPAT_SHA512
2137 #ifndef SHA512_DIGEST_LENGTH
2138 #define SHA512_BLOCK_LENGTH 128
2139 #define SHA512_DIGEST_LENGTH 64
2140 #define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1)
2141 typedef struct _SHA512_CTX {
2143 uint64_t bitcount[2];
2144 uint8_t buffer[SHA512_BLOCK_LENGTH];
2146 #endif /* SHA512_DIGEST_LENGTH */
2147 void SHA512_Init(SHA512_CTX*);
2148 void SHA512_Update(SHA512_CTX*, void*, size_t);
2149 void SHA512_Final(uint8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*);
2150 unsigned char *SHA512(void* data, unsigned int data_len, unsigned char *digest);
2151 #endif /* COMPAT_SHA512 */
2155 #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))
2156 /* using version of libevent that is not threadsafe. */
2157 # define LIBEVENT_SIGNAL_PROBLEM 1
2160 #ifndef CHECKED_INET6
2161 # define CHECKED_INET6
2165 # define AF_INET6 28
2167 #endif /* CHECKED_INET6 */
2169 #ifndef HAVE_GETADDRINFO
2170 struct sockaddr_storage;
2171 #include "compat/fake-rfc2553.h"
2174 #ifdef UNBOUND_ALLOC_STATS
2175 # define malloc(s) unbound_stat_malloc_log(s, __FILE__, __LINE__, __func__)
2176 # define calloc(n,s) unbound_stat_calloc_log(n, s, __FILE__, __LINE__, __func__)
2177 # define free(p) unbound_stat_free_log(p, __FILE__, __LINE__, __func__)
2178 # define realloc(p,s) unbound_stat_realloc_log(p, s, __FILE__, __LINE__, __func__)
2179 void *unbound_stat_malloc(size_t size);
2180 void *unbound_stat_calloc(size_t nmemb, size_t size);
2181 void unbound_stat_free(void *ptr);
2182 void *unbound_stat_realloc(void *ptr, size_t size);
2183 void *unbound_stat_malloc_log(size_t size, const char* file, int line,
2185 void *unbound_stat_calloc_log(size_t nmemb, size_t size, const char* file,
2186 int line, const char* func);
2187 void unbound_stat_free_log(void *ptr, const char* file, int line,
2189 void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file,
2190 int line, const char* func);
2191 #elif defined(UNBOUND_ALLOC_LITE)
2192 # include "util/alloc.h"
2193 #endif /* UNBOUND_ALLOC_LITE and UNBOUND_ALLOC_STATS */
2195 /** default port for DNS traffic. */
2196 #define UNBOUND_DNS_PORT 53
2197 /** default port for DNS over TLS traffic. */
2198 #define UNBOUND_DNS_OVER_TLS_PORT 853
2199 /** default port for DNS over HTTPS traffic. */
2200 #define UNBOUND_DNS_OVER_HTTPS_PORT 443
2201 /** default port for unbound control traffic, registered port with IANA,
2202 ub-dns-control 8953/tcp unbound dns nameserver control */
2203 #define UNBOUND_CONTROL_PORT 8953
2204 /** the version of unbound-control that this software implements */
2205 #define UNBOUND_CONTROL_VERSION 1
2209 dnl if we build from source tree, the man pages need @date@ and @version@
2210 dnl if this is a distro tarball, that was already done by makedist.sh
2211 AC_SUBST(version, [VERSION_MAJOR.VERSION_MINOR.VERSION_MICRO])
2212 AC_SUBST(date, [`date +'%b %e, %Y'`])
2214 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])
2215 AC_CONFIG_HEADERS([config.h])