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