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