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