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