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