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