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