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