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