1dnl 2dnl Some global settings 3dnl 4 5sinclude(acx_nlnetlabs.m4) 6sinclude(dnstap/dnstap.m4) 7 8AC_INIT(NSD,4.2.4,nsd-bugs@nlnetlabs.nl) 9AC_CONFIG_HEADER([config.h]) 10 11CFLAGS="$CFLAGS" 12AC_AIX 13if test "$ac_cv_header_minix_config_h" = "yes"; then 14 AC_DEFINE(_NETBSD_SOURCE,1, [Enable for compile on Minix]) 15fi 16 17dnl 18dnl By default set $sysconfdir to /etc and $localstatedir to /var 19dnl 20case "$prefix" in 21 NONE) 22 case "$sysconfdir" in 23 '${prefix}/etc') 24 sysconfdir=/etc 25 ;; 26 esac 27 case "$localstatedir" in 28 '${prefix}/var') 29 localstatedir=/var 30 ;; 31 esac 32 ;; 33esac 34 35# 36# Determine configuration directory 37# 38configdir=$sysconfdir/nsd 39AC_ARG_WITH([configdir], 40 AC_HELP_STRING([--with-configdir=dir], [NSD configuration directory]), 41 [configdir=$withval]) 42AC_DEFINE_UNQUOTED(CONFIGDIR, ["`eval echo $configdir`"], [NSD config dir]) 43AC_SUBST(configdir) 44 45# 46# Determine configuration file 47nsd_conf_file=${configdir}/nsd.conf 48AC_ARG_WITH([nsd_conf_file], 49 AC_HELP_STRING([--with-nsd_conf_file=path], [Pathname to the NSD configuration file]), 50 [nsd_conf_file=$withval]) 51AC_SUBST(nsd_conf_file) 52# the eval is to evaluate shell expansion twice, once 53# for $nsd_conf_file and once for the ${prefix} within it. 54AC_DEFINE_UNQUOTED(CONFIGFILE, ["`eval echo $nsd_conf_file`"], [Pathname to the NSD configuration file]) 55 56# 57# Default logfile 58# 59logfile=${localstatedir}/log/nsd.log 60AC_ARG_WITH([logfile], 61 AC_HELP_STRING([--with-logfile=path], [Pathname to the default log file]), 62 [logfile=$withval]) 63AC_SUBST(logfile) 64 65# 66# Database directory 67# 68dbdir=${localstatedir}/db/nsd 69 70# 71# Determine the pidfile location. Check if /var/run exists, if so set pidfile 72# to /var/run/nsd.pid by default 73# 74if test -d ${localstatedir}/run; then 75 pidfile=${localstatedir}/run/nsd.pid 76else 77 pidfile=${dbdir}/nsd.pid 78fi 79AC_ARG_WITH([pidfile], 80 AC_HELP_STRING([--with-pidfile=path], [Pathname to the NSD pidfile]), 81 [pidfile=$withval]) 82AC_SUBST(pidfile) 83AC_DEFINE_UNQUOTED(PIDFILE, ["`eval echo $pidfile`"], [Pathname to the NSD pidfile]) 84 85# 86# Determine location of nsd.db 87# 88dbfile=${dbdir}/nsd.db 89AC_ARG_WITH([dbfile], 90 AC_HELP_STRING([--with-dbfile=path], [Pathname to the NSD database]), 91 [dbfile=$withval]) 92AC_SUBST(dbfile) 93AC_DEFINE_UNQUOTED(DBFILE, ["`eval echo $dbfile`"], [Pathname to the NSD database]) 94 95if test -n "$dbfile"; then 96 dbdir=`dirname $dbfile` 97fi 98AC_SUBST(dbdir) 99 100piddir=`dirname $pidfile` 101AC_SUBST(piddir) 102 103# 104# Determine the default directory for the zone files 105# 106zonesdir=$configdir 107AC_ARG_WITH([zonesdir], 108 AC_HELP_STRING([--with-zonesdir=dir], [NSD default location for zone files]), 109 [zonesdir=$withval]) 110AC_SUBST(zonesdir) 111AC_DEFINE_UNQUOTED(ZONESDIR, ["`eval echo $zonesdir`"], [NSD default location for zone files. Empty string or NULL to disable.]) 112 113# default xfrd file location. 114xfrdfile=${dbdir}/xfrd.state 115AC_ARG_WITH([xfrdfile], AC_HELP_STRING([--with-xfrdfile=path], 116 [Pathname to the NSD xfrd zone timer state file]), [xfrdfile=$withval]) 117AC_DEFINE_UNQUOTED(XFRDFILE, ["`eval echo $xfrdfile`"], [Pathname to the NSD xfrd zone timer state file.]) 118AC_SUBST(xfrdfile) 119 120# default zonelist file location. 121zonelistfile=${dbdir}/zone.list 122AC_ARG_WITH([zonelistfile], AC_HELP_STRING([--with-zonelistfile=path], 123 [Pathname to the NSD zone list file]), [zonelistfile=$withval]) 124AC_DEFINE_UNQUOTED(ZONELISTFILE, ["`eval echo $zonelistfile`"], [Pathname to the NSD zone list file.]) 125AC_SUBST(zonelistfile) 126 127# default xfr dir location. 128xfrdir="/tmp" 129AC_ARG_WITH([xfrdir], AC_HELP_STRING([--with-xfrdir=path], 130 [Pathname to where the NSD transfer dir is created]), [xfrdir=$withval]) 131AC_DEFINE_UNQUOTED(XFRDIR, ["`eval echo $xfrdir`"], [Pathname to where the NSD transfer dir is created.]) 132AC_SUBST(xfrdir) 133 134# nsd sbin location. tmpinstantiate execprefix with defaults if not yet done. 135if test "x${exec_prefix}" = "xNONE"; then 136 if test "x${prefix}" = "xNONE"; then exec_prefix="$ac_default_prefix" 137 else exec_prefix="${prefix}"; fi 138 nsd_start_path="`eval echo $sbindir`/nsd" 139 exec_prefix="NONE" 140else 141 nsd_start_path="`eval echo $sbindir`/nsd" 142fi 143AC_DEFINE_UNQUOTED(NSD_START_PATH, ["$nsd_start_path"], [Pathname to start nsd from nsd-control]) 144 145# 146# Determine default chroot directory 147# 148AC_ARG_WITH([chroot], 149 AC_HELP_STRING([--with-chroot=dir], [NSD default chroot directory]), 150 [ 151 chrootdir=$withval 152 AC_DEFINE_UNQUOTED(CHROOTDIR, ["`eval echo $chrootdir`"], [NSD default chroot directory]) 153 ]) 154AC_SUBST(chrootdir) 155 156# 157# Determine the user name to drop privileges to 158# 159user=nsd 160AC_ARG_WITH([user], 161 AC_HELP_STRING([--with-user=username], [User name or ID to answer the queries with]), 162 [user=$withval]) 163AC_SUBST(user) 164AC_DEFINE_UNQUOTED(USER, ["$user"], [the user name to drop privileges to]) 165 166# Checks for programs. 167AC_PROG_AWK 168AC_PROG_CC 169AC_PROG_LN_S 170AC_PROG_INSTALL 171AC_PROG_LEX 172AC_PROG_YACC 173 174if test "$LEX" != ":" -a "$LEX" != ""; then 175 # Check if lex defines yy_current_buffer, because 2.4.6 and older use it, 176 # but later could define it as a macro and then we should not redefine it. 177 AC_MSG_CHECKING(if lex defines yy_current_buffer) 178 cat <<EOF >conftest.lex 179%% 180EOF 181 $LEX -i -t conftest.lex >> conftest.c 182 if grep "^#define yy_current_buffer" conftest.c >/dev/null; then 183 AC_DEFINE_UNQUOTED(LEX_DEFINES_YY_CURRENT_BUFFER, 1, [If flex defines yy_current_buffer as a macro]) 184 AC_MSG_RESULT(yes) 185 else 186 AC_MSG_RESULT(no) 187 fi 188 rm -f conftest.lex conftest.c 189fi 190 191AC_DEFUN([AC_CHECK_FORMAT_ATTRIBUTE], 192[AC_REQUIRE([AC_PROG_CC]) 193AC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "format" attribute) 194AC_CACHE_VAL(ac_cv_c_format_attribute, 195[ac_cv_c_format_attribute=no 196AC_TRY_COMPILE( 197[#include <stdio.h> 198void f (char *format, ...) __attribute__ ((format (printf, 1, 2))); 199void (*pf) (char *format, ...) __attribute__ ((format (printf, 1, 2))); 200], [ 201 f ("%s", "str"); 202], 203[ac_cv_c_format_attribute="yes"], 204[ac_cv_c_format_attribute="no"]) 205]) 206 207AC_MSG_RESULT($ac_cv_c_format_attribute) 208if test $ac_cv_c_format_attribute = yes; then 209 AC_DEFINE(HAVE_ATTR_FORMAT, 1, [Whether the C compiler accepts the "format" attribute]) 210fi 211])dnl 212 213AC_DEFUN([AC_CHECK_UNUSED_ATTRIBUTE], 214[AC_REQUIRE([AC_PROG_CC]) 215AC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "unused" attribute) 216AC_CACHE_VAL(ac_cv_c_unused_attribute, 217[ac_cv_c_unused_attribute=no 218AC_TRY_COMPILE( 219[#include <stdio.h> 220void f (char *u __attribute__((unused))); 221], [ 222 f ("x"); 223], 224[ac_cv_c_unused_attribute="yes"], 225[ac_cv_c_unused_attribute="no"]) 226]) 227 228AC_MSG_RESULT($ac_cv_c_unused_attribute) 229if test $ac_cv_c_unused_attribute = yes; then 230 AC_DEFINE(HAVE_ATTR_UNUSED, 1, [Whether the C compiler accepts the "unused" attribute]) 231fi 232])dnl 233 234AC_DEFUN([CHECK_NORETURN_ATTRIBUTE], 235[AC_REQUIRE([AC_PROG_CC]) 236AC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "noreturn" attribute) 237AC_CACHE_VAL(ac_cv_c_noreturn_attribute, 238[ac_cv_c_noreturn_attribute=no 239AC_TRY_COMPILE( 240[ #include <stdio.h> 241__attribute__((noreturn)) void f(int x) { printf("%d", x); } 242], [ 243 f(1); 244], 245[ac_cv_c_noreturn_attribute="yes"], 246[ac_cv_c_noreturn_attribute="no"]) 247]) 248 249AC_MSG_RESULT($ac_cv_c_noreturn_attribute) 250if test $ac_cv_c_noreturn_attribute = yes; then 251 AC_DEFINE(HAVE_ATTR_NORETURN, 1, [Whether the C compiler accepts the "noreturn" attribute]) 252 AC_DEFINE(ATTR_NORETURN, [__attribute__((__noreturn__))], [apply the noreturn attribute to a function that exits the program]) 253fi 254])dnl End of CHECK_NORETURN_ATTRIBUTE 255 256AC_DEFUN([CHECK_COMPILER_FLAG], 257[ 258AC_REQUIRE([AC_PROG_CC]) 259AC_MSG_CHECKING(whether $CC supports -$1) 260cache=`echo $1 | sed 'y%.=/+-%___p_%'` 261AC_CACHE_VAL(cv_prog_cc_flag_$cache, 262[ 263echo 'void f(){}' >conftest.c 264if test -z "`$CC -$1 -c conftest.c 2>&1`"; then 265eval "cv_prog_cc_flag_$cache=yes" 266else 267eval "cv_prog_cc_flag_$cache=no" 268fi 269rm -f conftest* 270]) 271if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then 272AC_MSG_RESULT(yes) 273: 274$2 275else 276AC_MSG_RESULT(no) 277: 278$3 279fi 280]) 281 282AC_DEFUN([AC_CHECK_CTIME_R], 283[AC_REQUIRE([AC_PROG_CC]) 284AC_MSG_CHECKING(whether ctime_r works with two arguments) 285AC_CACHE_VAL(ac_cv_c_ctime_c, 286[ac_cv_c_ctime_c=no 287AC_TRY_COMPILE( 288[#include <time.h> 289void testing (void) { time_t clock; char current_time[40]; ctime_r(&clock, current_time); }], 290[ 291 testing(); 292], 293[ac_cv_c_ctime_c="yes"], 294[ac_cv_c_ctime_c="no"]) 295]) 296 297AC_MSG_RESULT($ac_cv_c_ctime_c) 298if test $ac_cv_c_ctime_c = no; then 299 CPPFLAGS="$CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS" 300fi 301])dnl 302 303AC_CANONICAL_HOST 304 305case "${host_os}" in 306 *netbsd*) 307 # NetBSD needs -D_OPENBSD_SOURCE for reallocarray 308 CPPFLAGS="$CPPFLAGS -D_OPENBSD_SOURCE";; 309esac 310 311# Checks for typedefs, structures, and compiler characteristics. 312# allow user to override the -g -O2 flags. 313if test "x$CFLAGS" = "x" ; then 314 ACX_CHECK_COMPILER_FLAG(g, [CFLAGS="$CFLAGS -g"]) 315 # we do not use O3 because it causes miscompilations. 316 ACX_CHECK_COMPILER_FLAG(O2, [CFLAGS="$CFLAGS -O2"]) 317 ACX_CHECK_FLTO 318 ACX_CHECK_PIE 319 ACX_CHECK_RELRO_NOW 320fi 321AC_C_CONST 322AC_C_INLINE 323AC_TYPE_UID_T 324AC_TYPE_PID_T 325AC_TYPE_SIZE_T 326AC_TYPE_OFF_T 327 328AC_CHECK_FORMAT_ATTRIBUTE 329AC_CHECK_UNUSED_ATTRIBUTE 330CHECK_NORETURN_ATTRIBUTE 331ACX_CHECK_MEMCMP_SIGNED 332AC_CHECK_CTIME_R 333 334# Checks for libraries. 335 336# Check for SSL, original taken from 337# http://www.gnu.org/software/ac-archive/htmldoc/check_ssl.html and 338# modified for NSD. 339AC_DEFUN([CHECK_SSL], [ 340 AC_ARG_WITH(ssl, AC_HELP_STRING([--with-ssl=pathname], 341 [enable SSL (will check /usr/local/ssl 342 /usr/lib/ssl /usr/ssl /usr/pkg /usr/sfw /usr/local /usr)]),[ 343 ],[ 344 withval="yes" 345 ]) 346 if test x_$withval != x_no; then 347 AC_MSG_CHECKING(for SSL) 348 if test x_$withval = x_ -o x_$withval = x_yes; then 349 withval="/usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/sfw /usr/local /usr" 350 fi 351 for dir in $withval; do 352 ssldir="$dir" 353 if test -f "$dir/include/openssl/ssl.h"; then 354 found_ssl="yes"; 355 AC_DEFINE_UNQUOTED([HAVE_SSL], [], [Define if you have the SSL libraries installed.]) 356 if test x_$ssldir != x_/usr; then 357 CPPFLAGS="$CPPFLAGS -I$ssldir/include"; 358 fi 359 break; 360 fi 361 done 362 if test x_$found_ssl != x_yes; then 363 AC_MSG_ERROR(Cannot find the SSL libraries in $withval) 364 else 365 AC_MSG_RESULT(found in $ssldir) 366 HAVE_SSL=yes 367 if test x_$ssldir != x_/usr; then 368 LDFLAGS="$LDFLAGS -Wl,-R$ssldir/lib -L$ssldir/lib"; 369 fi 370 fi 371 AC_SUBST(HAVE_SSL) 372 fi 373])dnl 374 375# check for libevent 376AC_ARG_WITH(libevent, AC_HELP_STRING([--with-libevent=pathname], 377 [use libevent (will check /usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr or you can specify an explicit path), useful when the zone count is high.]), 378 [ ],[ withval="yes" ]) 379if test x_$withval = x_yes -o x_$withval != x_no; then 380 AC_MSG_CHECKING(for libevent) 381 if test x_$withval = x_ -o x_$withval = x_yes; then 382 withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" 383 fi 384 for dir in $withval; do 385 thedir="$dir" 386 if test -f "$dir/include/event.h" -o -f "$dir/include/event2/event.h"; then 387 found_libevent="yes" 388 dnl assume /usr is in default path. 389 if test "$thedir" != "/usr"; then 390 CPPFLAGS="$CPPFLAGS -I$thedir/include" 391 fi 392 break; 393 fi 394 done 395 if test x_$found_libevent != x_yes; then 396 if test -f "$dir/event.h" -a \( -f "$dir/libevent.la" -o -f "$dir/libev.la" \) ; then 397 # libevent source directory 398 AC_MSG_RESULT(found in $thedir) 399 CPPFLAGS="$CPPFLAGS -I$thedir -I$thedir/include" 400 # remove evdns from linking 401 ev_files_o=`ls $thedir/*.o | grep -v evdns\.o | grep -v bufferevent_openssl\.o` 402 cp $ev_files_o . 403 LDFLAGS="$ev_files_o $LDFLAGS -lm" 404 else 405 AC_MSG_ERROR([Cannot find the libevent library. 406You can restart ./configure --with-libevent=no to use a builtin alternative.]) 407 fi 408 else 409 AC_MSG_RESULT(found in $thedir) 410 dnl if event2 exists and no event lib in dir itself, use subdir 411 if test ! -f $thedir/lib/libevent.a -a ! -f $thedir/lib/libevent.so -a -d "$thedir/lib/event2"; then 412 LDFLAGS="$LDFLAGS -Wl,-R$thedir/lib -L$thedir/lib/event2" 413 ACX_RUNTIME_PATH_ADD([$thedir/lib/event2]) 414 else 415 dnl assume /usr is in default path, do not add "". 416 if test "$thedir" != "/usr" -a "$thedir" != ""; then 417 LDFLAGS="$LDFLAGS -Wl,-R$thedir/lib -L$thedir/lib" 418 ACX_RUNTIME_PATH_ADD([$thedir/lib]) 419 fi 420 fi 421 fi 422 # check for library used by libevent after 1.3c 423 AC_SEARCH_LIBS([clock_gettime], [rt]) 424 425 # is the event.h header libev or libevent? 426 AC_CHECK_HEADERS([event.h],,, [AC_INCLUDES_DEFAULT]) 427 AC_CHECK_DECL(EV_VERSION_MAJOR, [ 428 AC_SEARCH_LIBS(event_set, [ev]) 429 ],[ 430 AC_SEARCH_LIBS(event_set, [event]) 431 ],[AC_INCLUDES_DEFAULT 432#include <event.h> 433 ]) 434 AC_CHECK_FUNCS([event_base_free]) # only in libevent 1.2 and later 435 AC_CHECK_FUNCS([event_base_once]) # only in libevent 1.4.1 and later 436 AC_CHECK_FUNCS([event_base_new]) # only in libevent 1.4.1 and later 437 AC_CHECK_FUNCS([event_base_get_method]) # only in libevent 1.4.3 and later 438 AC_CHECK_FUNCS([ev_loop]) # only in libev. (tested on 3.51) 439 AC_CHECK_FUNCS([ev_default_loop]) # only in libev. (tested on 4.00) 440else 441 AC_DEFINE(USE_MINI_EVENT, 1, [Define if you want to use internal select based events]) 442fi 443 444# Checks for header files. 445AC_HEADER_STDC 446AC_HEADER_SYS_WAIT 447AC_CHECK_HEADERS([time.h arpa/inet.h signal.h string.h strings.h fcntl.h limits.h netinet/in.h netinet/tcp.h stddef.h sys/param.h sys/socket.h sys/un.h syslog.h unistd.h sys/select.h stdarg.h stdint.h netdb.h sys/bitypes.h tcpd.h glob.h grp.h endian.h login_cap.h]) 448 449AC_DEFUN([CHECK_VALIST_DEF], 450[ 451AC_REQUIRE([AC_PROG_CC]) 452AC_MSG_CHECKING(for double definition of struct va_list) 453AC_CACHE_VAL(ac_cv_c_va_list_def, 454[ 455cat >conftest.c <<EOF 456#include <stdio.h> 457#include <stdarg.h> 458int foo(void); 459EOF 460if test -z "`$CC -Werror -D_XOPEN_SOURCE=600 -c conftest.c 2>&1`"; then 461eval "ac_cv_c_va_list_def=no" 462else 463eval "ac_cv_c_va_list_def=yes" 464fi 465rm -f conftest* 466]) 467if test $ac_cv_c_va_list_def = yes; then 468AC_MSG_RESULT(yes) 469: 470AC_DEFINE_UNQUOTED([HAVE_VA_LIST_DOUBLE_DEF], [], [Define this if you have double va_list definitions.]) 471else 472AC_MSG_RESULT(no) 473: 474 475fi 476]) 477 478CHECK_VALIST_DEF 479 480AC_DEFUN([AC_CHECK_STRPTIME], 481[AC_REQUIRE([AC_PROG_CC]) 482AC_MSG_CHECKING(whether strptime needs defines) 483AC_CACHE_VAL(ac_cv_c_strptime_needs_defs, 484[ 485cat >conftest.c <<EOF 486#include <time.h> 487int testing (void) { struct tm t; const char *timestr="201201"; return strptime(timestr, "%Y%m", &t) != 0; } 488EOF 489if test -z "`$CC -Wall -Werror -c conftest.c 2>&1`"; then 490eval "ac_cv_c_strptime_needs_defs=no" 491else 492eval "ac_cv_c_strptime_needs_defs=yes" 493fi 494rm -f conftest* 495]) 496 497AC_MSG_RESULT($ac_cv_c_strptime_needs_defs) 498if test $ac_cv_c_strptime_needs_defs = yes; then 499AC_DEFINE_UNQUOTED([STRPTIME_NEEDS_DEFINES], 1, [strptime is available from time.h with some defines.]) 500fi 501])dnl 502 503AC_CHECK_STRPTIME 504 505# check wether strptime also works 506AC_DEFUN([AC_CHECK_STRPTIME_WORKS], 507[AC_REQUIRE([AC_PROG_CC]) 508AC_MSG_CHECKING(whether strptime works) 509if test c${cross_compiling} = cno; then 510AC_RUN_IFELSE([AC_LANG_SOURCE([[ 511#define _XOPEN_SOURCE 600 512#include <time.h> 513int main(void) { struct tm tm; char *res; 514res = strptime("20070207111842", "%Y%m%d%H%M%S", &tm); 515if (!res) return 1; return 0; } 516]])] , [eval "ac_cv_c_strptime_works=yes"], [eval "ac_cv_c_strptime_works=no"]) 517else 518eval "ac_cv_c_strptime_works=maybe" 519fi 520AC_MSG_RESULT($ac_cv_c_strptime_works) 521if test $ac_cv_c_strptime_works = no; then 522AC_LIBOBJ(strptime) 523else 524AC_DEFINE_UNQUOTED([STRPTIME_WORKS], 1, [use default strptime.]) 525fi 526])dnl 527 528AC_SEARCH_LIBS(inet_pton, [nsl]) 529AC_SEARCH_LIBS(socket, [socket]) 530 531AC_CHECK_STRPTIME_WORKS 532ACX_CHECK_NONBLOCKING_BROKEN 533ACX_MKDIR_ONE_ARG 534 535# set -I. and -Isrcdir 536if test -n "$CPPFLAGS"; then 537 CPPFLAGS="$CPPFLAGS -I." 538else 539 CPPFLAGS="-I." 540fi 541if test "$srcdir" != "."; then 542 CPPFLAGS="$CPPFLAGS -I$srcdir" 543 if test -f $srcdir/config.h; then 544 AC_ERROR([$srcdir/config.h is in the way, please remove it]) 545 fi 546fi 547 548dnl LIBGTOP_CHECK_TYPE 549dnl Stolen from Gnome's anjuta 550dnl Improved version of AC_CHECK_TYPE which takes into account 551dnl that we need to #include some other header files on some 552dnl systems to get some types. 553 554dnl AC_LIBGTOP_CHECK_TYPE(TYPE, DEFAULT) 555AC_DEFUN([AC_LIBGTOP_CHECK_TYPE], 556[AC_REQUIRE([AC_HEADER_STDC])dnl 557AC_MSG_CHECKING(for $1) 558AC_CACHE_VAL(ac_cv_type_$1, 559[AC_EGREP_CPP(dnl 560changequote(<<,>>)dnl 561<<(^|[^a-zA-Z_0-9])$1[^a-zA-Z_0-9]>>dnl 562changequote([,]), [ 563#include <sys/types.h> 564#if STDC_HEADERS 565#include <stdlib.h> 566#include <stddef.h> 567#endif 568 569#ifdef HAVE_STDINT_H 570#include <stdint.h> 571#endif 572 573#ifdef HAVE_SYS_SOCKET_H 574#include <sys/socket.h> 575#endif 576 577#ifdef HAVE_ARPA_INET_H 578#include <arpa/inet.h> 579#endif 580 581#ifdef HAVE_SIGNAL_H 582#include <signal.h> 583#endif 584 585/* For Tru64 */ 586#ifdef HAVE_SYS_BITYPES_H 587#include <sys/bitypes.h> 588#endif 589], ac_cv_type_$1=yes, ac_cv_type_$1=no)])dnl 590AC_MSG_RESULT($ac_cv_type_$1) 591if test $ac_cv_type_$1 = no; then 592 AC_DEFINE($1, $2, Define "$1" to "$2" if "$1" is missing) 593fi 594]) 595 596AC_LIBGTOP_CHECK_TYPE(int8_t, char) 597AC_LIBGTOP_CHECK_TYPE(int16_t, short) 598AC_LIBGTOP_CHECK_TYPE(int32_t, int) 599AC_LIBGTOP_CHECK_TYPE(int64_t, long long) 600AC_LIBGTOP_CHECK_TYPE(uint8_t, unsigned char) 601AC_LIBGTOP_CHECK_TYPE(uint16_t, unsigned short) 602AC_LIBGTOP_CHECK_TYPE(uint32_t, unsigned int) 603AC_LIBGTOP_CHECK_TYPE(uint64_t, unsigned long long) 604AC_LIBGTOP_CHECK_TYPE(socklen_t, int) 605AC_LIBGTOP_CHECK_TYPE(sig_atomic_t, int) 606AC_LIBGTOP_CHECK_TYPE(ssize_t, int) 607AC_LIBGTOP_CHECK_TYPE(suseconds_t, time_t) 608 609AC_CHECK_TYPE(in_addr_t, [], [AC_DEFINE([in_addr_t], [uint32_t], [in_addr_t])], [ 610#if HAVE_SYS_TYPES_H 611# include <sys/types.h> 612#endif 613#if HAVE_NETINET_IN_H 614# include <netinet/in.h> 615#endif]) 616ACX_CHECK_SS_FAMILY 617AC_CHECK_MEMBERS([struct stat.st_mtimensec, struct stat.st_mtim.tv_nsec]) 618AC_CHECK_MEMBERS([struct sockaddr_un.sun_len],,,[ 619AC_INCLUDES_DEFAULT 620#ifdef HAVE_SYS_UN_H 621#include <sys/un.h> 622#endif 623]) 624 625# Checks for library functions. 626AC_FUNC_CHOWN 627AC_FUNC_FORK 628AC_FUNC_MALLOC 629AC_TYPE_SIGNAL 630AC_FUNC_FSEEKO 631AC_SYS_LARGEFILE 632AC_CHECK_SIZEOF(void*) 633AC_CHECK_SIZEOF(off_t) 634AC_CHECK_FUNCS([arc4random arc4random_uniform]) 635AC_SEARCH_LIBS([setusercontext],[util],[AC_CHECK_HEADERS([login_cap.h])]) 636AC_CHECK_FUNCS([tzset alarm chroot dup2 endpwent gethostname memset memcpy pwrite socket strcasecmp strchr strdup strerror strncasecmp strtol writev getaddrinfo getnameinfo freeaddrinfo gai_strerror sigaction sigprocmask strptime strftime localtime_r setusercontext glob initgroups setresuid setreuid setresgid setregid getpwnam mmap ppoll clock_gettime accept4]) 637 638AC_CHECK_TYPE([struct mmsghdr], AC_DEFINE(HAVE_MMSGHDR, 1, [If sys/socket.h has a struct mmsghdr.]), [], [ 639AC_INCLUDES_DEFAULT 640#include <sys/socket.h> 641]) 642 643AC_ARG_ENABLE(recvmmsg, AC_HELP_STRING([--enable-recvmmsg], [Enable recvmmsg and sendmmsg compilation, faster but some kernel versions may have implementation problems for IPv6])) 644case "$enable_recvmmsg" in 645 yes) 646 AC_CHECK_FUNC([recvmmsg], [ 647AC_RUN_IFELSE([AC_LANG_SOURCE([[ 648#include <sys/socket.h> 649#include <errno.h> 650int main(void) 651{ 652 int s = socket(AF_INET, SOCK_DGRAM, 0); 653 int r = recvmmsg(s, 0, 0, 0, 0) == -1 && errno == ENOSYS; 654 close(s); 655 return r; 656} 657]])], [ 658AC_DEFINE([HAVE_RECVMMSG], [1], [Define if recvmmsg is implemented])], [ 659], [ 660AC_DEFINE([HAVE_RECVMMSG], [1], [Define if recvmmsg exists])] 661)]) 662 AC_CHECK_FUNC([sendmmsg], [ 663AC_RUN_IFELSE([AC_LANG_SOURCE([[ 664#include <sys/socket.h> 665#include <errno.h> 666int main(void) 667{ 668 int s = socket(AF_INET, SOCK_DGRAM, 0); 669 int r = sendmmsg(s, 0, 0, 0) == -1 && errno == ENOSYS; 670 close(s); 671 return r; 672} 673]])], [ 674AC_DEFINE([HAVE_SENDMMSG], [1], [Define if sendmmsg is implemented])], [ 675], [ 676AC_DEFINE([HAVE_SENDMMSG], [1], [Define if sendmmsg exists])] 677)]) 678 679 ;; 680 no|*) 681 ;; 682esac 683 684# check if setreuid en setregid fail, on MacOSX10.4(darwin8). 685if echo $target_os | grep darwin8 > /dev/null; then 686 AC_DEFINE(DARWIN_BROKEN_SETREUID, 1, [Define this if on macOSX10.4-darwin8 and setreuid and setregid do not work]) 687fi 688 689# 690# Checking for missing functions we can replace 691# 692AC_REPLACE_FUNCS(basename) 693AC_REPLACE_FUNCS(inet_aton) 694AC_REPLACE_FUNCS(inet_pton) 695AC_REPLACE_FUNCS(inet_ntop) 696AC_REPLACE_FUNCS(snprintf) 697AC_REPLACE_FUNCS(strlcat) 698AC_REPLACE_FUNCS(strlcpy) 699AC_REPLACE_FUNCS(strptime) 700AC_REPLACE_FUNCS(b64_pton) 701AC_REPLACE_FUNCS(b64_ntop) 702AC_REPLACE_FUNCS(pselect) 703AC_REPLACE_FUNCS(memmove) 704AC_MSG_CHECKING([for reallocarray]) 705AC_LINK_IFELSE([AC_LANG_SOURCE(AC_INCLUDES_DEFAULT 706[[ 707#ifndef _OPENBSD_SOURCE 708#define _OPENBSD_SOURCE 1 709#endif 710#include <stdlib.h> 711int main(void) { 712 void* p = reallocarray(NULL, 10, 100); 713 free(p); 714 return 0; 715} 716]])], [AC_MSG_RESULT(yes) 717 AC_DEFINE(HAVE_REALLOCARRAY, 1, [If we have reallocarray(3)]) 718], [ 719 AC_MSG_RESULT(no) 720 AC_LIBOBJ(reallocarray) 721]) 722 723AC_MSG_CHECKING(for pselect prototype in sys/select.h) 724AC_EGREP_HEADER([[^a-zA-Z_]*pselect[^a-zA-Z_]], sys/select.h, AC_DEFINE(HAVE_PSELECT_PROTO, 1, 725 [if sys/select.h provides pselect prototype]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) 726 727AC_MSG_CHECKING(for ctime_r prototype in time.h) 728AC_EGREP_HEADER([[^a-zA-Z_]*ctime_r[^a-zA-Z_]], time.h, AC_DEFINE(HAVE_CTIME_R_PROTO, 1, 729 [if time.h provides ctime_r prototype]) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) 730 731AC_CHECK_TYPE([struct timespec], AC_DEFINE(HAVE_STRUCT_TIMESPEC, 1, [If time.h has a struct timespec (for pselect).]), [], [ 732AC_INCLUDES_DEFAULT 733#ifdef HAVE_SIGNAL_H 734#include <signal.h> 735#endif 736#ifdef HAVE_TIME_H 737#include <time.h> 738#endif 739]) 740 741dnl 742dnl Some random defines's 743dnl 744AC_DEFINE_UNQUOTED([IDENTITY], ["unidentified server"], [Define to the default nsd identity.]) 745AC_DEFINE_UNQUOTED([VERSION], [PACKAGE_STRING], [Define to the NSD version to answer version.server query.]) 746AC_DEFINE_UNQUOTED([TCP_BACKLOG], [256], [Define to the backlog to be used with listen.]) 747AC_DEFINE_UNQUOTED([TCP_PORT], ["53"], [Define to the default tcp port.]) 748AC_DEFINE_UNQUOTED([TCP_MAX_MESSAGE_LEN], [65535], [Define to the default maximum message length.]) 749AC_DEFINE_UNQUOTED([UDP_PORT], ["53"], [Define to the default udp port.]) 750AC_DEFINE_UNQUOTED([UDP_MAX_MESSAGE_LEN], [512], [Define to the default maximum udp message length.]) 751AC_DEFINE_UNQUOTED([EDNS_MAX_MESSAGE_LEN], [4096], [Define to the default maximum message length with EDNS.]) 752AC_DEFINE_UNQUOTED([TLS_PORT], ["853"], [Define to the default DNS over TLS port.]) 753AC_DEFINE_UNQUOTED([MAXSYSLOGMSGLEN], [512], [Define to the maximum message length to pass to syslog.]) 754AC_DEFINE_UNQUOTED([NSD_CONTROL_PORT], [8952], [Define to the default nsd-control port.]) 755AC_DEFINE_UNQUOTED([NSD_CONTROL_VERSION], [1], [Define to nsd-control proto version.]) 756 757dnl 758dnl Determine the syslog facility to use 759dnl 760facility=LOG_DAEMON 761AC_ARG_WITH([facility], 762 AC_HELP_STRING([--with-facility=name], [Syslog default facility (LOG_DAEMON)]), 763 [facility=$withval]) 764AC_DEFINE_UNQUOTED([FACILITY], $facility, [Define to the default facility for syslog.]) 765 766dnl 767dnl Determine the default tcp timeout 768dnl 769tcp_timeout=120 770AC_ARG_WITH([tcp_timeout], 771 AC_HELP_STRING([--with-tcp-timeout=number], [Limit the default tcp timeout]), 772 [tcp_timeout=$withval]) 773AC_DEFINE_UNQUOTED([TCP_TIMEOUT], $tcp_timeout, [Define to the default tcp timeout.]) 774 775dnl 776dnl Features 777dnl 778AC_ARG_ENABLE(root-server, AC_HELP_STRING([--enable-root-server], [Configure NSD as a root server])) 779case "$enable_root_server" in 780 yes) 781 AC_DEFINE_UNQUOTED([ROOT_SERVER], [], [Define this to configure as a root server.]) 782 ;; 783 no|*) 784 ;; 785esac 786 787AC_ARG_ENABLE(ipv6, AC_HELP_STRING([--disable-ipv6], [Disables IPv6 support])) 788case "$enable_ipv6" in 789 no) 790 ;; 791 yes|*) 792 AC_DEFINE_UNQUOTED([INET6], [], [Define this to enable IPv6 support.]) 793 ;; 794esac 795 796AC_ARG_ENABLE(bind8-stats, AC_HELP_STRING([--enable-bind8-stats], [Enables BIND8 like NSTATS & XSTATS and statistics in nsd-control])) 797 798case "$enable_bind8_stats" in 799 yes|'') 800 AC_DEFINE_UNQUOTED([BIND8_STATS], [], [Define this to enable BIND8 like NSTATS & XSTATS.]) 801 ;; 802 no|*) 803 ;; 804esac 805 806AC_ARG_ENABLE(zone-stats, AC_HELP_STRING([--enable-zone-stats], [Enable per-zone statistics gathering (needs --enable-bind8-stats)])) 807case "$enable_zone_stats" in 808 yes) 809 AC_DEFINE_UNQUOTED([USE_ZONE_STATS], [], [Define this to enable per-zone statistics gathering.]) 810 AC_DEFINE_UNQUOTED([BIND8_STATS], [], [Define this to enable BIND8 like NSTATS & XSTATS.]) 811 ;; 812 no|''|*) 813 ;; 814esac 815 816AC_ARG_ENABLE(checking, AC_HELP_STRING([--enable-checking], [Enable internal runtime checks])) 817case "$enable_checking" in 818 yes) 819 CHECK_COMPILER_FLAG(W, [ CFLAGS="$CFLAGS -W" ]) 820 CHECK_COMPILER_FLAG(Wall, [ CFLAGS="$CFLAGS -Wall" ]) 821 CHECK_COMPILER_FLAG(Wextra, [ CFLAGS="$CFLAGS -Wextra" ]) 822 CHECK_COMPILER_FLAG(Wdeclaration-after-statement, [ CFLAGS="$CFLAGS -Wdeclaration-after-statement" ]) 823 ;; 824 no|*) 825 AC_DEFINE([NDEBUG], [], [Undefine this to enable internal runtime checks.]) 826 ;; 827esac 828 829AC_ARG_ENABLE(memclean, AC_HELP_STRING([--enable-memclean], [Cleanup memory (at exit) for eg. valgrind, memcheck])) 830if test "$enable_memclean" = "yes"; then AC_DEFINE_UNQUOTED([MEMCLEAN], [1], [Define this to cleanup memory at exit (eg. for valgrind, etc.)]) 831fi 832 833AC_ARG_ENABLE(ratelimit, AC_HELP_STRING([--enable-ratelimit], [Enable rate limiting])) 834case "$enable_ratelimit" in 835 yes) 836 AC_DEFINE_UNQUOTED([RATELIMIT], [], [Define this to enable rate limiting.]) 837 dnl causes awk to not match the exclusion start marker. 838 ratelimit="xx" 839 ;; 840 no|*) 841 ratelimit="" 842 ;; 843esac 844AC_SUBST(ratelimit) 845 846AC_ARG_ENABLE(ratelimit-default-is-off, AC_HELP_STRING([--enable-ratelimit-default-is-off], [Enable this to set default of ratelimit to off (enable in nsd.conf), otherwise ratelimit is enabled by default if --enable-ratelimit is enabled])) 847case "$enable_ratelimit_default_is_off" in 848 yes) 849 AC_DEFINE_UNQUOTED([RATELIMIT_DEFAULT_OFF], [], [Define this to set ratelimit to off by default.]) 850 ratelimit_default="off" 851 ;; 852 no|*) 853 ratelimit_default="on" 854 ;; 855esac 856AC_SUBST(ratelimit_default) 857 858# we need SSL for TSIG (and maybe also for NSEC3). 859CHECK_SSL 860if test x$HAVE_SSL = x"yes"; then 861 ACX_LIB_SSL 862 863 # Check for -pthread 864 BAKLIBS="$LIBS" 865 LIBS="-lcrypto $LIBS" 866 AC_TRY_LINK([], [ 867 int HMAC_Update(void); 868 (void)HMAC_Update(); 869 ], [],[ 870 dnl so link fails for HMAC_Update, try with -pthread. 871 BAKCFLAGS="$CFLAGS" 872 CFLAGS="$CFLAGS -pthread" 873 AC_MSG_CHECKING([if libcrypto needs -pthread]) 874 AC_TRY_LINK_FUNC([HMAC_Update], [ 875 AC_MSG_RESULT([yes]) 876 ] , [ 877 AC_MSG_RESULT([no]) 878 dnl restore the nonpthread value 879 CFLAGS="$BAKCFLAGS" 880 ]) 881 ]) 882 LIBS="$BAKLIBS" 883 884 if test -n "$ssldir"; then 885 AC_CHECK_LIB(crypto, HMAC_Update,, [ 886 AC_MSG_ERROR([OpenSSL found in $ssldir, but version 0.9.7 or higher is required]) 887 ]) 888 fi 889 SSL_LIBS="-lssl" 890 AC_SUBST(SSL_LIBS) 891 AC_CHECK_HEADERS([openssl/ssl.h openssl/err.h openssl/rand.h openssl/ocsp.h],,, [AC_INCLUDES_DEFAULT]) 892 AC_CHECK_FUNCS([HMAC_CTX_reset HMAC_CTX_new EVP_cleanup ERR_load_crypto_strings OPENSSL_init_crypto SSL_CTX_set_security_level CRYPTO_memcmp EC_KEY_new_by_curve_name]) 893 AC_CHECK_DECLS([SSL_CTX_set_ecdh_auto,SSL_CTX_set_tmp_ecdh], [], [], [ 894AC_INCLUDES_DEFAULT 895#ifdef HAVE_OPENSSL_ERR_H 896#include <openssl/err.h> 897#endif 898 899#ifdef HAVE_OPENSSL_RAND_H 900#include <openssl/rand.h> 901#endif 902 903#ifdef HAVE_OPENSSL_CONF_H 904#include <openssl/conf.h> 905#endif 906 907#ifdef HAVE_OPENSSL_ENGINE_H 908#include <openssl/engine.h> 909#endif 910#include <openssl/ssl.h> 911#include <openssl/evp.h> 912]) 913 914 915 BAKLIBS="$LIBS" 916 LIBS="-lssl $LIBS" 917 AC_CHECK_FUNCS([OPENSSL_init_ssl]) 918 LIBS="$BAKLIBS" 919 920else 921 AC_MSG_WARN([No SSL, therefore remote-control is disabled]) 922 AC_MSG_WARN([No SSL, therefore TLS is disabled]) 923fi 924 925AC_ARG_ENABLE(nsec3, AC_HELP_STRING([--disable-nsec3], [Disable NSEC3 support])) 926case "$enable_nsec3" in 927 no) 928 ;; 929 yes) 930 AC_DEFINE_UNQUOTED([NSEC3], [], [Define this to enable NSEC3 support.]) 931 ;; 932 *) 933 if test x$HAVE_SSL = x"yes"; then 934 AC_DEFINE_UNQUOTED([NSEC3], [], [Define this to enable NSEC3 support.]) 935 else 936 AC_MSG_WARN([No SSL, therefore NSEC3 is disabled]) 937 fi 938 ;; 939esac 940 941AC_ARG_ENABLE(minimal-responses, AC_HELP_STRING([--disable-minimal-responses], [Disable response minimization. More truncation.])) 942case "$enable_minimal_responses" in 943 no) 944 ;; 945 yes|*) 946 AC_DEFINE_UNQUOTED([MINIMAL_RESPONSES], [], [Define this to enable response minimalization to reduce truncation.]) 947 ;; 948esac 949 950AC_ARG_ENABLE(mmap, AC_HELP_STRING([--enable-mmap], [Use mmap instead of malloc. Experimental.])) 951case "$enable_mmap" in 952 yes) 953 AC_CHECK_HEADERS([sys/mman.h]) 954 AC_LIBGTOP_CHECK_TYPE(uintptr_t, void*) 955 AC_CHECK_FUNCS([mmap munmap]) 956 AC_DEFINE_UNQUOTED([USE_MMAP_ALLOC], [], [Define this to enable mmap instead of malloc. Experimental.]) 957 ;; 958 no|*) 959 ;; 960esac 961 962AC_ARG_ENABLE(radix-tree, AC_HELP_STRING([--disable-radix-tree], [You can disable the radix tree and use the red-black tree for the main lookups, the red-black tree uses less memory, but uses some more CPU.])) 963case "$enable_radix_tree" in 964 no) 965 ;; 966 yes|*) 967 AC_DEFINE_UNQUOTED([USE_RADIX_TREE], [], [Define this to configure to use the radix tree.]) 968 ;; 969esac 970 971AC_ARG_ENABLE(packed, AC_HELP_STRING([--enable-packed], [Enable packed structure alignment, uses less memory, but unaligned reads.])) 972case "$enable_packed" in 973 yes) 974 AC_DEFINE_UNQUOTED([PACKED_STRUCTS], [], [Define this to use packed structure alignment.]) 975 ACX_CHECK_COMPILER_FLAG(Wno-address-of-packed-member, [CFLAGS="$CFLAGS -Wno-address-of-packed-member"]) 976 ;; 977 no|*) 978 ;; 979esac 980 981# check for dnstap if requested 982dt_DNSTAP([${localstatedir}/run/nsd-dnstap.sock], 983 [ 984 AC_DEFINE([USE_DNSTAP], [1], [Define to 1 to enable dnstap support]) 985 AC_SUBST([ENABLE_DNSTAP], [1]) 986 987 AC_SUBST([opt_dnstap_socket_path]) 988 ACX_ESCAPE_BACKSLASH($opt_dnstap_socket_path, hdr_dnstap_socket_path) 989 AC_DEFINE_UNQUOTED(DNSTAP_SOCKET_PATH, 990 ["$hdr_dnstap_socket_path"], [default dnstap socket path]) 991 992 AC_SUBST([DNSTAP_SRC], ["dnstap/dnstap.c dnstap/dnstap.pb-c.c dnstap/dnstap_collector.c"]) 993 AC_SUBST([DNSTAP_OBJ], ["dnstap.o dnstap_collector.o dnstap.pb-c.o"]) 994 dnstap_config="dnstap/dnstap_config.h" 995 ], 996 [ 997 AC_SUBST([ENABLE_DNSTAP], [0]) 998 ] 999) 1000 1001# Include systemd.m4 - begin 1002sinclude(systemd.m4) 1003# Include systemd.m4 - end 1004 1005AC_ARG_ENABLE(tcp-fastopen, AC_HELP_STRING([--enable-tcp-fastopen], [Enable TCP Fast Open])) 1006case "$enable_tcp_fastopen" in 1007 yes) 1008 AC_CHECK_DECL([TCP_FASTOPEN], [], [AC_MSG_ERROR([TCP Fast Open is not available: please rerun without --enable-tcp-fastopen])], [AC_INCLUDES_DEFAULT 1009#include <netinet/tcp.h> 1010 ]) 1011 AC_DEFINE_UNQUOTED([USE_TCP_FASTOPEN], [1], [Define this to enable TCP fast open.]) 1012 ;; 1013 no|*) 1014 ;; 1015esac 1016 1017AH_BOTTOM([ 1018/* define before includes as it specifies what standard to use. */ 1019#if (defined(HAVE_PSELECT) && !defined (HAVE_PSELECT_PROTO)) \ 1020 || !defined (HAVE_CTIME_R_PROTO) \ 1021 || defined (STRPTIME_NEEDS_DEFINES) 1022# ifndef _XOPEN_SOURCE 1023# define _XOPEN_SOURCE 600 1024# endif 1025# ifndef _POSIX_C_SOURCE 1026# define _POSIX_C_SOURCE 200112 1027# endif 1028# ifndef _BSD_SOURCE 1029# define _BSD_SOURCE 1 1030# endif 1031# ifndef _OPENBSD_SOURCE 1032# define _OPENBSD_SOURCE 1 1033# endif 1034# ifndef _DEFAULT_SOURCE 1035# define _DEFAULT_SOURCE 1 1036# endif 1037# ifndef __EXTENSIONS__ 1038# define __EXTENSIONS__ 1 1039# endif 1040# ifndef _STDC_C99 1041# define _STDC_C99 1 1042# endif 1043# ifndef _ALL_SOURCE 1044# define _ALL_SOURCE 1 1045# endif 1046#endif 1047]) 1048 1049AH_BOTTOM([ 1050#ifdef HAVE_VA_LIST_DOUBLE_DEF 1051/* workaround double va_list definition on some platforms */ 1052# ifndef _VA_LIST_DEFINED 1053# define _VA_LIST_DEFINED 1054# endif 1055#endif 1056]) 1057 1058AH_BOTTOM([ 1059#include <sys/types.h> 1060#if STDC_HEADERS 1061#include <stdlib.h> 1062#include <stddef.h> 1063#endif 1064 1065#ifdef HAVE_TIME_H 1066#include <time.h> 1067#endif 1068 1069#ifdef HAVE_STDINT_H 1070#include <stdint.h> 1071#endif 1072 1073#ifdef HAVE_SYS_SOCKET_H 1074#include <sys/socket.h> 1075#endif 1076 1077#ifdef HAVE_NETINET_IN_H 1078#include <netinet/in.h> 1079#endif 1080 1081#ifdef HAVE_NETINET_TCP_H 1082#include <netinet/tcp.h> 1083#endif 1084 1085#ifdef HAVE_ARPA_INET_H 1086#include <arpa/inet.h> 1087#endif 1088 1089/* For Tru64 */ 1090#ifdef HAVE_SYS_BITYPES_H 1091#include <sys/bitypes.h> 1092#endif 1093]) 1094 1095AH_BOTTOM([ 1096#ifdef HAVE_ATTR_FORMAT 1097#define ATTR_FORMAT(archetype, string_index, first_to_check) \ 1098 __attribute__ ((format (archetype, string_index, first_to_check))) 1099#else /* !HAVE_ATTR_FORMAT */ 1100#define ATTR_FORMAT(archetype, string_index, first_to_check) /* empty */ 1101#endif /* !HAVE_ATTR_FORMAT */ 1102#if defined(__cplusplus) 1103#define ATTR_UNUSED(x) 1104#elif defined(HAVE_ATTR_UNUSED) 1105#define ATTR_UNUSED(x) x __attribute__((unused)) 1106#else /* !HAVE_ATTR_UNUSED */ 1107#define ATTR_UNUSED(x) x 1108#endif /* !HAVE_ATTR_UNUSED */ 1109]) 1110 1111AH_BOTTOM([ 1112#ifndef IPV6_MIN_MTU 1113#define IPV6_MIN_MTU 1280 1114#endif /* IPV6_MIN_MTU */ 1115 1116#ifndef AF_INET6 1117#define AF_INET6 28 1118#endif /* AF_INET6 */ 1119]) 1120 1121if test $ac_cv_func_getaddrinfo = no; then 1122AC_LIBOBJ([fake-rfc2553]) 1123fi 1124 1125AH_BOTTOM([ 1126/* maximum nesting of included files */ 1127#define MAXINCLUDES 10 1128]) 1129 1130AH_BOTTOM([ 1131#ifndef HAVE_B64_NTOP 1132int b64_ntop(uint8_t const *src, size_t srclength, 1133 char *target, size_t targsize); 1134#endif /* !HAVE_B64_NTOP */ 1135#ifndef HAVE_B64_PTON 1136int b64_pton(char const *src, uint8_t *target, size_t targsize); 1137#endif /* !HAVE_B64_PTON */ 1138#ifndef HAVE_FSEEKO 1139#define fseeko fseek 1140#define ftello ftell 1141#endif /* HAVE_FSEEKO */ 1142#ifndef HAVE_SNPRINTF 1143#include <stdarg.h> 1144int snprintf (char *str, size_t count, const char *fmt, ...); 1145int vsnprintf (char *str, size_t count, const char *fmt, va_list arg); 1146#endif /* HAVE_SNPRINTF */ 1147#ifndef HAVE_INET_PTON 1148int inet_pton(int af, const char* src, void* dst); 1149#endif /* HAVE_INET_PTON */ 1150#ifndef HAVE_INET_NTOP 1151const char *inet_ntop(int af, const void *src, char *dst, size_t size); 1152#endif 1153#ifndef HAVE_INET_ATON 1154int inet_aton(const char *cp, struct in_addr *addr); 1155#endif 1156#ifndef HAVE_MEMMOVE 1157void *memmove(void *dest, const void *src, size_t n); 1158#endif 1159#ifndef HAVE_STRLCAT 1160size_t strlcat(char *dst, const char *src, size_t siz); 1161#endif 1162#ifndef HAVE_STRLCPY 1163size_t strlcpy(char *dst, const char *src, size_t siz); 1164#endif 1165#ifndef HAVE_REALLOCARRAY 1166void* reallocarray(void *ptr, size_t nmemb, size_t size); 1167#endif 1168#ifndef HAVE_GETADDRINFO 1169#include "compat/fake-rfc2553.h" 1170#endif 1171#ifndef HAVE_STRPTIME 1172#define HAVE_STRPTIME 1 1173char *strptime(const char *s, const char *format, struct tm *tm); 1174#endif 1175#ifndef STRPTIME_WORKS 1176#define STRPTIME_WORKS 1 1177char *nsd_strptime(const char *s, const char *format, struct tm *tm); 1178#define strptime(a,b,c) nsd_strptime((a),(b),(c)) 1179#endif 1180]) 1181AH_BOTTOM( 1182AHX_MEMCMP_BROKEN(nsd) 1183AHX_CONFIG_MAXHOSTNAMELEN 1184) 1185AH_BOTTOM([ 1186 1187/* provide timespec def if not available */ 1188#ifndef CONFIG_DEFINES 1189#define CONFIG_DEFINES 1190#ifndef HAVE_STRUCT_TIMESPEC 1191#ifndef __timespec_defined 1192#define __timespec_defined 1 1193 struct timespec { 1194 long tv_sec; /* seconds */ 1195 long tv_nsec; /* nanoseconds */ 1196 }; 1197#endif /* !__timespec_defined */ 1198#endif /* !HAVE_STRUCT_TIMESPEC */ 1199#endif /* !CONFIG_DEFINES */ 1200 1201#ifdef PACKED_STRUCTS 1202#define ATTR_PACKED __attribute__((packed)) 1203#else 1204#define ATTR_PACKED 1205#endif 1206]) 1207 1208# big fat warning 1209if test "$enable_checking" = "yes"; then 1210 echo "************************************************" 1211 echo "* You have activated \"--enable-checking\" *" 1212 echo "* *" 1213 echo "* This will instruct NSD to be stricter *" 1214 echo "* when validating its input. This could lead *" 1215 echo "* to a reduced service level. *" 1216 echo "* *" 1217 echo "************************************************" 1218fi 1219 1220AC_CONFIG_FILES([Makefile $dnstap_config]) 1221AC_OUTPUT 1222