configure.in 136 KB
Newer Older
1
# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
Tinderbox User's avatar
Tinderbox User committed
2
#
3 4 5
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
6 7 8
#
# See the COPYRIGHT file distributed with this work for additional
# information regarding copyright ownership.
9

10
dnl
11
AC_DIVERT_PUSH(1)dnl
12
esyscmd([sed -e 's/^/# /' -e '/Portions of this code/,$d' COPYRIGHT])dnl
13
AC_DIVERT_POP()dnl
David Lawrence's avatar
David Lawrence committed
14

15
AC_INIT(BIND, [9.13], [info@isc.org], [], [https://www.isc.org/downloads/BIND/])
16
AC_PREREQ(2.59)
Bob Halley's avatar
Bob Halley committed
17 18

AC_CONFIG_HEADER(config.h)
19
AC_CONFIG_MACRO_DIR([libtool.m4])
Bob Halley's avatar
Bob Halley committed
20 21 22

AC_CANONICAL_HOST

23
AC_PROG_MAKE_SET
24 25 26 27 28 29 30 31 32 33 34 35 36

#
# GNU libtool support
#
case $build_os in
sunos*)
    # Just set the maximum command line length for sunos as it otherwise
    # takes a exceptionally long time to work it out. Required for libtool.
     
    lt_cv_sys_max_cmd_len=4096;
    ;;
esac

37
AC_PROG_LIBTOOL
38
AC_PROG_INSTALL
39
AC_PROG_LN_S
40 41 42 43

AC_SUBST(STD_CINCLUDES)
AC_SUBST(STD_CDEFINES)
AC_SUBST(STD_CWARNINGS)
44
AC_SUBST(CCOPT)
Evan Hunt's avatar
Evan Hunt committed
45
AC_SUBST(CCNOOPT)
Mark Andrews's avatar
Mark Andrews committed
46
AC_SUBST(BACKTRACECFLAGS)
47

48
# Warn if the user specified libbind, which is now deprecated
49
AC_ARG_ENABLE(libbind, AS_HELP_STRING([--enable-libbind], [deprecated]))
50 51 52 53 54 55 56 57 58 59

case "$enable_libbind" in
	yes)
		AC_MSG_ERROR(['libbind' is no longer part of the BIND 9 distribution.
It is available from http://www.isc.org as a separate download.])
		;;
	no|'')
		;;
esac

60 61 62 63
AC_ARG_ENABLE(buffer_useinline,
	      AS_HELP_STRING([--enable-buffer-useinline],
		             [define ISC_BUFFER_USEINLINE when compiling
				[default=yes]]),
64 65 66 67 68 69 70
	      if test yes = "${enable}"
	      then
		      AC_DEFINE([ISC_BUFFER_USEINLINE], [1],
			        [Define if you want to use inline buffers])
	      fi,
	      AC_DEFINE([ISC_BUFFER_USEINLINE], [1]))

71 72 73
AC_ARG_ENABLE(warn_shadow,
	      AS_HELP_STRING([--enable-warn-shadow],
			     [turn on -Wshadow when compiling]))
74

75 76 77
AC_ARG_ENABLE(warn_error,
	      AS_HELP_STRING([--enable-warn-error],
			    [turn on -Werror when compiling]))
78

79 80 81
AC_ARG_ENABLE(developer,
	      AS_HELP_STRING([--enable-developer],
			     [enable developer build settings]))
82
XTARGETS=
83 84
case "$enable_developer" in
yes)
85
	STD_CDEFINES="$STD_CDEFINES -DISC_MEM_DEFAULTFILL=1 -DISC_LIST_CHECKINIT=1 -DNS_HOOKS_ENABLE=1"
86
	test "${enable_fixed_rrset+set}" = set || enable_fixed_rrset=yes
87
	test "${enable_querytrace+set}" = set || enable_querytrace=yes
88 89
	test "${with_atf+set}" = set || with_atf=yes
	test "${with_dlz_filesystem+set}" = set || with_dlz_filesystem=yes
Evan Hunt's avatar
Evan Hunt committed
90
	test "${enable_symtable+set}" = set || enable_symtable=all
91
	test "${enable_warn_error+set}" = set || enable_warn_error=yes
92
	test "${enable_warn_shadow+set}" = set || enable_warn_shadow=yes
93
	test "${with_zlib+set}" = set || with_zlib=yes
94
	XTARGETS='${XTARGETS}'
95 96
	;;
esac
97
AC_SUBST(XTARGETS)
98

99
# American Fuzzy Lop
100 101 102 103 104 105
AC_ARG_ENABLE(afl,
	      AS_HELP_STRING([--enable-afl],
			     [enable American Fuzzy Lop test harness
				[default=no]]),
	      [AC_DEFINE([ENABLE_AFL], [1],
			 [Define to enable American Fuzzy Lop test harness])])
106 107 108 109 110 111
case "$enable_afl" in
yes)
	LIBS="$LIBS -lpthread"
	;;
esac

112 113 114
#
# Make very sure that these are the first files processed by
# config.status, since we use the processed output as the input for
Francis Dupont's avatar
Francis Dupont committed
115
# AC_SUBST_FILE() substitutions in other files.
116 117 118
#
AC_CONFIG_FILES([make/rules make/includes])

David Lawrence's avatar
David Lawrence committed
119 120 121 122 123
AC_PATH_PROG(AR, ar)
ARFLAGS="cruv"
AC_SUBST(AR)
AC_SUBST(ARFLAGS)

124 125 126 127 128
# The POSIX ln(1) program.  Non-POSIX systems may substitute
# "copy" or something.
LN=ln
AC_SUBST(LN)

129 130 131 132 133 134 135 136 137 138
case "$AR" in
	"")
		AC_MSG_ERROR([
ar program not found.  Please fix your PATH to include the directory in
which ar resides, or set AR in the environment with the full path to ar.
])

		;;
esac

Bob Halley's avatar
Bob Halley committed
139 140 141
#
# Etags.
#
142
AC_PATH_PROGS(ETAGS, etags emacs-etags)
Andreas Gustafsson's avatar
Andreas Gustafsson committed
143

Bob Halley's avatar
Bob Halley committed
144 145 146 147 148 149 150 151 152 153 154 155 156
#
# Some systems, e.g. RH7, have the Exuberant Ctags etags instead of
# GNU emacs etags, and it requires the -L flag.
#
if test "X$ETAGS" != "X"; then
	AC_MSG_CHECKING(for Exuberant Ctags etags)
	if $ETAGS --version 2>&1 | grep 'Exuberant Ctags' >/dev/null 2>&1; then
		AC_MSG_RESULT(yes)
		ETAGS="$ETAGS -L"
	else
		AC_MSG_RESULT(no)
	fi
fi
157 158
AC_SUBST(ETAGS)

159 160
#
# Perl is optional; it is used only by some of the system test scripts.
161 162
# Note: the backtrace feature (see below) uses perl to build the symbol table,
# but it still compiles without perl, in which case an empty table will be used.
163 164 165 166
#
AC_PATH_PROGS(PERL, perl5 perl)
AC_SUBST(PERL)

167 168 169 170 171
#
# Python is also optional; it is used by the tools in bin/python.
# If python is unavailable, we simply don't build those.
#
AC_ARG_WITH(python,
172 173
	    AS_HELP_STRING([--with-python=PATH],
			   [specify path to python interpreter]),
174
    use_python="$withval", use_python="unspec")
175
AC_ARG_WITH(python-install-dir,
176
	    AS_HELP_STRING([--with-python-install-dir=PATH],
177 178
			   [installation directory for Python modules]),
	    use_python_install_dir="$withval", use_python_install_dir="unspec")
179

180
python="python python3 python3.5 python3.4 python3.3 python3.2 python2 python2.7"
Evan Hunt's avatar
Evan Hunt committed
181 182 183 184 185

testargparse='try: import argparse
except: exit(1)'

testply='try: from ply import *
Evan Hunt's avatar
Evan Hunt committed
186
except: exit(1)'
Evan Hunt's avatar
Evan Hunt committed
187

188 189 190
testdnspython='try: import dns.message
except: exit(1)'

191 192 193 194
testminvers='import sys
if (sys.version_info < (2,7)) or (sys.version_info < (3,2) and sys.version_info >= (3,0)):
   exit(1)'

195 196
case "$use_python" in
	no)
Evan Hunt's avatar
Evan Hunt committed
197
		AC_MSG_CHECKING([for python support])
198 199 200 201 202
		AC_MSG_RESULT(disabled)
		;;
	unspec|yes|*)
		case "$use_python" in
		unspec|yes|'')
Evan Hunt's avatar
Evan Hunt committed
203 204 205
			for p in $python
			do
				AC_PATH_PROGS(PYTHON, $p)
Francis Dupont's avatar
Francis Dupont committed
206
				if test "X$PYTHON" = "X"; then
Evan Hunt's avatar
Evan Hunt committed
207 208
					continue;
				fi
209 210 211
				AC_MSG_CHECKING([python2 version >= 2.7 or python3 version >= 3.2])
				if ${PYTHON:-false} -c "$testminvers"; then
					AC_MSG_RESULT([found])
212 213 214 215 216
				else
					AC_MSG_RESULT([not found])
					unset ac_cv_path_PYTHON
					unset PYTHON
					continue
217
				fi
Evan Hunt's avatar
Evan Hunt committed
218
				AC_MSG_CHECKING([python module 'argparse'])
Evan Hunt's avatar
Evan Hunt committed
219 220
				if ${PYTHON:-false} -c "$testargparse"; then
					AC_MSG_RESULT([found])
221 222 223 224 225
				else
					AC_MSG_RESULT([not found])
					unset ac_cv_path_PYTHON
					unset PYTHON
					continue
Evan Hunt's avatar
Evan Hunt committed
226 227 228 229 230
				fi

				AC_MSG_CHECKING([python module 'ply'])
				if ${PYTHON:-false} -c "$testply"; then
					AC_MSG_RESULT([found])
231 232 233 234 235 236 237 238 239 240
				else
					AC_MSG_RESULT([not found])
					unset ac_cv_path_PYTHON
					unset PYTHON
					continue
				fi

				AC_MSG_CHECKING([python module 'dnspython'])
				if ${PYTHON:-false} -c "$testdnspython"; then
					AC_MSG_RESULT([found])
Evan Hunt's avatar
Evan Hunt committed
241
					break
242 243 244 245
				else
					AC_MSG_RESULT([not found])
					unset ac_cv_path_PYTHON
					unset PYTHON
Evan Hunt's avatar
Evan Hunt committed
246 247
				fi
			done
248
			if test "X$PYTHON" != "X"
Evan Hunt's avatar
Evan Hunt committed
249
			then
250 251 252 253 254 255 256 257 258 259 260
				case "$use_python_install_dir" in
				unspec)
					PYTHON_INSTALL_DIR=""
					PYTHON_INSTALL_LIB=""
					;;
				*)
					PYTHON_INSTALL_DIR="$use_python_install_dir"
					PYTHON_INSTALL_LIB="--install-lib=$use_python_install_dir"
					;;
				esac
			else
Evan Hunt's avatar
Evan Hunt committed
261 262 263 264 265 266 267 268 269 270
				AC_MSG_CHECKING([for python support])
				case "$use_python" in
				unspec)
					AC_MSG_RESULT(disabled)
					;;
				yes)
					AC_MSG_ERROR([missing python])
					;;
				esac
			fi
271 272 273
			;;
		*)
			case "$use_python" in
Evan Hunt's avatar
Evan Hunt committed
274 275
			/*)
				PYTHON="$use_python"
276
				;;
Evan Hunt's avatar
Evan Hunt committed
277 278
			*)
				AC_PATH_PROGS(PYTHON, $use_python)
279 280
				;;
			esac
281 282 283 284 285 286
			AC_MSG_CHECKING([python2 version >= 2.7 or python3 version >= 3.2])
			if ${PYTHON:-false} -c "$testminvers"; then
				AC_MSG_RESULT([found])
			else
				AC_MSG_ERROR([not found])
			fi
Evan Hunt's avatar
Evan Hunt committed
287
			AC_MSG_CHECKING([python module 'argparse'])
Evan Hunt's avatar
Evan Hunt committed
288 289 290 291 292 293 294
			if ${PYTHON:-false} -c "$testargparse"; then
				AC_MSG_RESULT([found, using $PYTHON])
			else
				AC_MSG_ERROR([not found])
			fi
			AC_MSG_CHECKING([python module 'ply'])
			if ${PYTHON:-false} -c "$testply"; then
Evan Hunt's avatar
Evan Hunt committed
295 296 297 298 299 300
				AC_MSG_RESULT([found, using $PYTHON])
			else
				AC_MSG_ERROR([not found])
			fi
			;;
		esac
301 302 303 304
		;;
esac

PYTHON_TOOLS=''
305
CHECKDS=''
Evan Hunt's avatar
Evan Hunt committed
306
COVERAGE=''
Evan Hunt's avatar
Evan Hunt committed
307
KEYMGR=''
308
if test "X$PYTHON" != "X"; then
309
	PYTHON_TOOLS=python
310
	CHECKDS=checkds
Evan Hunt's avatar
Evan Hunt committed
311
	COVERAGE=coverage
Evan Hunt's avatar
Evan Hunt committed
312
	KEYMGR=keymgr
313
fi
314
AC_SUBST(CHECKDS)
Evan Hunt's avatar
Evan Hunt committed
315
AC_SUBST(COVERAGE)
Evan Hunt's avatar
Evan Hunt committed
316
AC_SUBST(KEYMGR)
317
AC_SUBST(PYTHON_TOOLS)
318 319
AC_SUBST(PYTHON_INSTALL_DIR)
AC_SUBST(PYTHON_INSTALL_LIB)
320

321 322 323
#
# Special processing of paths depending on whether --prefix,
# --sysconfdir or --localstatedir arguments were given.  What's
Mark Andrews's avatar
Mark Andrews committed
324
# desired is some compatibility with the way previous versions
325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340
# of BIND built; they defaulted to /usr/local for most parts of
# the installation, but named.boot/named.conf was in /etc
# and named.pid was in /var/run.
#
# So ... if none of --prefix, --sysconfdir or --localstatedir are
# specified, set things up that way.  If --prefix is given, use
# it for sysconfdir and localstatedir the way configure normally
# would.  To change the prefix for everything but leave named.conf
# in /etc or named.pid in /var/run, then do this the usual configure way:
# ./configure --prefix=/somewhere --sysconfdir=/etc
# ./configure --prefix=/somewhere --localstatedir=/var
#
# To put named.conf and named.pid in /usr/local with everything else,
# set the prefix explicitly to /usr/local even though that's the default:
# ./configure --prefix=/usr/local
#
341
case "$prefix" in
342 343 344 345 346 347 348 349 350 351 352 353
	NONE)
		case "$sysconfdir" in
			'${prefix}/etc')
				sysconfdir=/etc
				;;
		esac
		case "$localstatedir" in
			'${prefix}/var')
				localstatedir=/var
				;;
		esac
		;;
354
esac
Evan Hunt's avatar
Evan Hunt committed
355 356
expanded_sysconfdir=`eval echo $sysconfdir`
AC_SUBST(expanded_sysconfdir)
357

358 359 360 361 362 363 364 365
#
# Make sure INSTALL uses an absolute path, else it will be wrong in all
# Makefiles, since they use make/rules.in and INSTALL will be adjusted by
# configure based on the location of the file where it is substituted.
# Since in BIND9 INSTALL is only substituted into make/rules.in, an immediate
# subdirectory of install-sh, This relative path will be wrong for all
# directories more than one level down from install-sh.
#
366 367
case "$INSTALL" in
	/*)
368 369 370 371 372 373 374 375 376 377
		;;
	*)
		#
		# Not all systems have dirname.
		#
		changequote({, })
		ac_dir="`echo $INSTALL | sed 's%/[^/]*$%%'`"
		changequote([, ])

		ac_prog="`echo $INSTALL | sed 's%.*/%%'`"
378
		test "X$ac_dir" = "X$ac_prog" && ac_dir=.
379 380 381
		test -d "$ac_dir" && ac_dir="`(cd \"$ac_dir\" && pwd)`"
		INSTALL="$ac_dir/$ac_prog"
		;;
382 383
esac

384 385 386 387 388 389 390 391
#
# On these hosts, we really want to use cc, not gcc, even if it is
# found.  The gcc that these systems have will not correctly handle
# pthreads.
#
# However, if the user sets $CC to be something, let that override
# our change.
#
392 393 394 395 396
if test "X$CC" = "X" ; then
	case "$host" in
		*-dec-osf*)
			CC="cc"
			;;
397
		*-solaris*)
398 399 400 401 402 403
			# Use Sun's cc if it is available, but watch
			# out for /usr/ucb/cc; it will never be the right
			# compiler to use.
			#
			# If setting CC here fails, the AC_PROG_CC done
			# below might still find gcc.
404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419
			IFS="${IFS=	}"; ac_save_ifs="$IFS"; IFS=":"
			for ac_dir in $PATH; do
				test -z "$ac_dir" && ac_dir=.
				case "$ac_dir" in
				/usr/ucb)
					# exclude
					;;
				*)
					if test -f "$ac_dir/cc"; then
						CC="$ac_dir/cc"
						break
					fi
					;;
				esac
			done
			IFS="$ac_save_ifs"
420 421 422 423 424 425 426 427 428 429
			;;
		*-hp-hpux*)
			CC="cc"
			;;
		mips-sgi-irix*)
			CC="cc"
			;;
	esac
fi

430 431
AC_PROG_CC

432 433 434 435 436
#
# gcc's optimiser is broken at -02 for ultrasparc
#
if test "$ac_env_CFLAGS_set" != set -a "X$GCC" = "Xyes"; then
	case "$host" in
437
	sparc-*)
438 439 440 441 442
		CCFLAGS="-g -O1"
		;;
	esac
fi

443
#
444
# OS dependent CC flags
445 446
#
case "$host" in
Francis Dupont's avatar
Francis Dupont committed
447
	# OSF 5.0: recv/send are only available with -D_POSIX_PII_SOCKET or
448
	# -D_XOPEN_SOURCE_EXTENDED.
449 450 451 452
	*-dec-osf*)
		STD_CDEFINES="$STD_CDEFINES -D_POSIX_PII_SOCKET"
		CPPFLAGS="$CPPFLAGS -D_POSIX_PII_SOCKET"
		;;
453 454 455 456 457 458 459 460 461 462 463
	#HP-UX: need -D_XOPEN_SOURCE_EXTENDED and -lxnet for CMSG macros
	*-hp-hpux*)
		STD_CDEFINES="$STD_CDEFINES -D_XOPEN_SOURCE_EXTENDED"
		CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED"
		LIBS="-lxnet $LIBS"
		;;
	# Solaris: need -D_XPG4_2 and -D__EXTENSIONS__ for CMSG macros
	*-solaris*)
		STD_CDEFINES="$STD_CDEFINES -D_XPG4_2 -D__EXTENSIONS__"
		CPPFLAGS="$CPPFLAGS -D_XPG4_2 -D__EXTENSIONS__"
		;;
464 465 466 467 468
	# POSIX doesn't include the IPv6 Advanced Socket API and glibc hides
	# parts of the IPv6 Advanced Socket API as a result.  This is stupid
	# as it breaks how the two halves (Basic and Advanced) of the IPv6
	# Socket API were designed to be used but we have to live with it.
	# Define _GNU_SOURCE to pull in the IPv6 Advanced Socket API.
469
	*-linux* | *-kfreebsd*-gnu*)
470 471 472
		STD_CDEFINES="$STD_CDEFINES -D_GNU_SOURCE"
		CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
		;;
473 474 475 476 477 478 479 480
	#
	# Starting with OSX 10.7 (Lion) we must choose which IPv6 API to use.
	# Setting this is sufficient to select the correct behavior for BIND 9.
	#
	*-darwin*)
	  STD_CDEFINES="$STD_CDEFINES -D__APPLE_USE_RFC_3542"
	  CPPFLAGS="$CPPFLAGS -D__APPLE_USE_RFC_3542"
	  ;;
481 482
esac

Evan Hunt's avatar
Evan Hunt committed
483 484 485 486 487 488 489
#
# CCNOOPT defaults to -O0 on gcc and disables optimization when is last
#
if test "X$CCNOOPT" = "X" -a "X$GCC" = "Xyes"; then
	CCNOOPT="-O0"
fi

490 491
AC_HEADER_STDC

Mark Andrews's avatar
Mark Andrews committed
492
AC_CHECK_HEADERS(fcntl.h regex.h sys/time.h unistd.h sys/mman.h sys/sockio.h sys/select.h sys/param.h sys/sysctl.h net/if6.h sys/socket.h net/route.h linux/netlink.h linux/rtnetlink.h,,,
493 494 495 496
[$ac_includes_default
#ifdef HAVE_SYS_PARAM_H
# include <sys/param.h>
#endif
497 498 499
#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
500
])
501

502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540
#
# Check for thread local storage
#
AC_CHECK_HEADERS([threads.h],
		 [
		     AC_MSG_CHECKING([for C11 Thread-Local Storage using thread_local])
		     AC_COMPILE_IFELSE(
			 [AC_LANG_PROGRAM(
			      [
				  #include <threads.h>
			      ],[
				  static thread_local int tls = 0;
				  return (tls);
			      ])
			 ],[
			     AC_MSG_RESULT([yes])
			     AC_DEFINE([HAVE_THREAD_LOCAL],[1],[Define if thread_local keyword is available])
			     AC_DEFINE([HAVE_TLS],[1],[Define if Thread-Local Storage is available])
			 ],[
			     AC_MSG_RESULT([no])
			 ])
		 ],[
		     AC_MSG_CHECKING([for Thread-Local Storage using __thread])
		     AC_COMPILE_IFELSE(
			 [AC_LANG_PROGRAM(
			      [
			      ],[
				  static __thread int tls = 0;
				  return (tls);
			      ])
			 ],[
			     AC_MSG_RESULT([yes])
			     AC_DEFINE([HAVE___THREAD],[1],[Define if __thread keyword is available])
			     AC_DEFINE([HAVE_TLS],[1],[Define if Thread-Local Storage is available])
			 ],[
			     AC_MSG_RESULT([no])
			 ])
		 ])

541 542
AC_C_CONST
AC_C_INLINE
543
AC_C_VOLATILE
Mark Andrews's avatar
Mark Andrews committed
544
AC_CHECK_FUNC(sysctlbyname, AC_DEFINE(HAVE_SYSCTLBYNAME))
545
AC_C_FLEXIBLE_ARRAY_MEMBER
546

Evan Hunt's avatar
Evan Hunt committed
547 548 549 550 551
#
# Check for the existence of mmap to enable the fast format zones
#
AC_CHECK_FUNCS(mmap)

552 553 554 555 556 557
#
# Older versions of HP/UX don't define seteuid() and setegid()
#
AC_CHECK_FUNCS(seteuid setresuid)
AC_CHECK_FUNCS(setegid setresgid)

558 559 560 561 562
#
# UnixWare 7.1.1 with the feature supplement to the UDK compiler
# is reported to not support "static inline" (RT #1212).
#
AC_MSG_CHECKING(for static inline breakage)
Evan Hunt's avatar
Evan Hunt committed
563
AC_TRY_COMPILE([
564 565 566 567 568 569
	static inline int foo1() {
		return 0;
	}

	static inline int foo2() {
		return foo1();
Evan Hunt's avatar
Evan Hunt committed
570 571
	}
	], [foo1();],
572 573
	[AC_MSG_RESULT(no)],
	[AC_MSG_RESULT(yes)
574
	 AC_DEFINE(inline, ,[Define to empty if your compiler does not support "static inline".])])
575

576
AC_TYPE_SIZE_T
Mark Andrews's avatar
Mark Andrews committed
577
AC_CHECK_TYPE(ssize_t, int)
578
AC_CHECK_TYPE(uintptr_t,unsigned long)
579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595
AC_CHECK_TYPE(socklen_t,
[AC_DEFINE(ISC_SOCKADDR_LEN_T, socklen_t)],
[
AC_TRY_COMPILE(
[
#include <sys/types.h>
#include <sys/socket.h>
int getsockname(int, struct sockaddr *, size_t *);
],[],
[AC_DEFINE(ISC_SOCKADDR_LEN_T, size_t)],
[AC_DEFINE(ISC_SOCKADDR_LEN_T, int)])
],
[
#include <sys/types.h>
#include <sys/socket.h>
])
AC_SUBST(ISC_SOCKADDR_LEN_T)
596
AC_HEADER_TIME
Mark Andrews's avatar
Mark Andrews committed
597 598 599 600 601 602 603
AC_MSG_CHECKING(for long long)
AC_TRY_COMPILE([],[long long i = 0; return (0);],
	[AC_MSG_RESULT(yes)
		ISC_PLATFORM_HAVELONGLONG="#define ISC_PLATFORM_HAVELONGLONG 1"],
	[AC_MSG_RESULT(no)
		ISC_PLATFORM_HAVELONGLONG="#undef ISC_PLATFORM_HAVELONGLONG"])
AC_SUBST(ISC_PLATFORM_HAVELONGLONG)
604

605 606 607 608 609 610 611 612 613 614 615 616 617 618 619
#
# check for uname library routine
#
AC_MSG_CHECKING(for uname)
AC_TRY_COMPILE([
#include <sys/utsname.h>
#include <stdio.h>
],
[
struct utsname uts;
uname(&uts);
printf("running on %s %s %s for %s\n",
       uts.sysname, uts.release, uts.version, uts.machine);
],
	[AC_MSG_RESULT(yes)
620 621 622
	 AC_DEFINE(HAVE_UNAME)],
	[AC_MSG_RESULT(no)
	 AC_MSG_WARN([uname is not correctly supported])])
623

Francis Dupont's avatar
Francis Dupont committed
624 625 626 627 628 629 630 631 632 633
#
# check for GCC noreturn attribute
#
AC_MSG_CHECKING(for GCC noreturn attribute)
AC_TRY_COMPILE([],[void foo() __attribute__((noreturn));],
	[AC_MSG_RESULT(yes)
		ISC_PLATFORM_NORETURN_PRE="#define ISC_PLATFORM_NORETURN_PRE"
		ISC_PLATFORM_NORETURN_POST="#define ISC_PLATFORM_NORETURN_POST __attribute__((noreturn))"],
	[AC_MSG_RESULT(no)
		ISC_PLATFORM_NORETURN_PRE="#define ISC_PLATFORM_NORETURN_PRE"
634
		ISC_PLATFORM_NORETURN_POST="#define ISC_PLATFORM_NORETURN_POST"])
Francis Dupont's avatar
Francis Dupont committed
635 636 637
AC_SUBST(ISC_PLATFORM_NORETURN_PRE)
AC_SUBST(ISC_PLATFORM_NORETURN_POST)

638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657
#
# check if we have lifconf
#
AC_MSG_CHECKING(for struct lifconf)
AC_TRY_COMPILE([
#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>
],
[
struct lifconf lifconf;
lifconf.lifc_len = 0;
]
,
	[AC_MSG_RESULT(yes)
		ISC_PLATFORM_HAVELIFCONF="#define ISC_PLATFORM_HAVELIFCONF 1"],
	[AC_MSG_RESULT(no)
		ISC_PLATFORM_HAVELIFCONF="#undef ISC_PLATFORM_HAVELIFCONF"])
AC_SUBST(ISC_PLATFORM_HAVELIFCONF)

658 659 660
#
# check if we have kqueue
#
661
AC_ARG_ENABLE(kqueue,
662 663
	      AS_HELP_STRING([--enable-kqueue],
			     [use BSD kqueue when available [default=yes]]),
664 665
	      want_kqueue="$enableval",  want_kqueue="yes")
case $want_kqueue in
666
yes)
667 668 669 670 671 672 673 674 675
	AC_CHECK_FUNC(kqueue, ac_cv_have_kqueue=yes, ac_cv_have_kqueue=no)
	case $ac_cv_have_kqueue in
	yes)
		ISC_PLATFORM_HAVEKQUEUE="#define ISC_PLATFORM_HAVEKQUEUE 1"
		;;
	*)
		ISC_PLATFORM_HAVEKQUEUE="#undef ISC_PLATFORM_HAVEKQUEUE"
		;;
	esac
676 677 678 679 680 681 682 683
	;;
*)
	ISC_PLATFORM_HAVEKQUEUE="#undef ISC_PLATFORM_HAVEKQUEUE"
	;;
esac
AC_SUBST(ISC_PLATFORM_HAVEKQUEUE)

#
684 685
# check if we have epoll.  Linux kernel 2.4 has epoll_create() which fails,
# so we need to try running the code, not just test its existence.
686
#
687
AC_ARG_ENABLE(epoll,
688 689
	      AS_HELP_STRING([--enable-epoll],
			     [use Linux epoll when available [default=auto]]),
690
	      want_epoll="$enableval",  want_epoll="auto")
691
case $want_epoll in
692
auto)
693 694 695 696 697 698 699 700 701 702 703 704
	AC_MSG_CHECKING(epoll support)
	AC_TRY_RUN([
#include <sys/epoll.h>
int main() {
	if (epoll_create(1) < 0)
		return (1);
	return (0);
}
],
	[AC_MSG_RESULT(yes)
	ISC_PLATFORM_HAVEEPOLL="#define ISC_PLATFORM_HAVEEPOLL 1"],
	[AC_MSG_RESULT(no)
705 706
	ISC_PLATFORM_HAVEEPOLL="#undef ISC_PLATFORM_HAVEEPOLL"],
	[AC_MSG_RESULT(no)
707
	ISC_PLATFORM_HAVEEPOLL="#undef ISC_PLATFORM_HAVEEPOLL"])
708
	;;
709 710 711
yes)
	ISC_PLATFORM_HAVEEPOLL="#define ISC_PLATFORM_HAVEEPOLL 1"
	;;
712 713 714 715 716 717 718 719 720
*)
	ISC_PLATFORM_HAVEEPOLL="#undef ISC_PLATFORM_HAVEEPOLL"
	;;
esac
AC_SUBST(ISC_PLATFORM_HAVEEPOLL)

#
# check if we support /dev/poll
#
721
AC_ARG_ENABLE(devpoll,
722 723
	      AS_HELP_STRING([--enable-devpoll],
			     [use /dev/poll when available [default=yes]]),
724 725 726
	      want_devpoll="$enableval",  want_devpoll="yes")
case $want_devpoll in
yes)
727
	AC_CHECK_HEADERS(sys/devpoll.h devpoll.h,
728 729 730 731 732 733 734 735 736
	ISC_PLATFORM_HAVEDEVPOLL="#define ISC_PLATFORM_HAVEDEVPOLL 1"
	,
	ISC_PLATFORM_HAVEDEVPOLL="#undef ISC_PLATFORM_HAVEDEVPOLL"
	)
	;;
*)
	ISC_PLATFORM_HAVEDEVPOLL="#undef ISC_PLATFORM_HAVEDEVPOLL"
	;;
esac
737
AC_SUBST(ISC_PLATFORM_HAVEDEVPOLL)
738

739 740 741 742 743
#
# check if we need to #include sys/select.h explicitly
#
case $ac_cv_header_unistd_h in
yes)
744
AC_MSG_CHECKING(if unistd.h or sys/types.h defines fd_set)
745
AC_TRY_COMPILE([
746
#include <sys/types.h> /* Ultrix */
747 748 749
#include <unistd.h>],
[fd_set read_set; return (0);],
	[AC_MSG_RESULT(yes)
750
	 ISC_PLATFORM_NEEDSYSSELECTH="#undef ISC_PLATFORM_NEEDSYSSELECTH"],
751
	[AC_MSG_RESULT(no)
752
	case $ac_cv_header_sys_select_h in
753
	yes)
754
	 ISC_PLATFORM_NEEDSYSSELECTH="#define ISC_PLATFORM_NEEDSYSSELECTH 1"
755 756 757 758 759 760 761 762
		;;
	no)
		AC_MSG_ERROR([need either working unistd.h or sys/select.h])
		;;
	esac
	])
	;;
no)
763
	case $ac_cv_header_sys_select_h in
764
	yes)
765
	     ISC_PLATFORM_NEEDSYSSELECTH="#define ISC_PLATFORM_NEEDSYSSELECTH 1"
766 767 768 769 770 771 772 773 774
		;;
	no)
		AC_MSG_ERROR([need either unistd.h or sys/select.h])
		;;
	esac
	;;
esac
AC_SUBST(ISC_PLATFORM_NEEDSYSSELECTH)

775 776 777 778 779
#
# Find the machine's endian flavor.
#
AC_C_BIGENDIAN

Michael Graff's avatar
Michael Graff committed
780
#
Evan Hunt's avatar
Evan Hunt committed
781
# GeoIP support?
Michael Graff's avatar
Michael Graff committed
782
#
Evan Hunt's avatar
Evan Hunt committed
783 784 785
GEOIPLINKSRCS=
GEOIPLINKOBJS=
AC_ARG_WITH(geoip,
786 787
	    AS_HELP_STRING([--with-geoip=PATH],
			   [Build with GeoIP support (yes|no|path)]),
Evan Hunt's avatar
Evan Hunt committed
788
    use_geoip="$withval", use_geoip="no")
Michael Graff's avatar
Michael Graff committed
789

790
if test "yes" = "$use_geoip"
791
then
792
	for d in /usr /usr/local /opt/local
793
	do
Evan Hunt's avatar
Evan Hunt committed
794
		if test -f $d/include/GeoIP.h
795
		then
Evan Hunt's avatar
Evan Hunt committed
796
			use_geoip=$d
797 798 799 800
			break
		fi
	done
fi
Evan Hunt's avatar
Evan Hunt committed
801 802 803 804 805

case "$use_geoip" in
	no|'')
		AC_MSG_CHECKING([for GeoIP support])
		AC_MSG_RESULT([disabled])
806
		;;
807
	*)
Evan Hunt's avatar
Evan Hunt committed
808
		if test -d "$use_geoip" -o -L "$use_geoip"
809
		then
Evan Hunt's avatar
Evan Hunt committed
810 811
			CFLAGS="$CFLAGS -I$use_geoip/include"
			CPPFLAGS="$CPPFLAGS -I$use_geoip/include"
812
			LIBS="$LIBS -L$use_geoip/lib"
Evan Hunt's avatar
Evan Hunt committed
813 814 815 816
			case "$host_os" in
				netbsd*|openbsd*|solaris*)
					LIBS="$LIBS -Wl,-rpath=$use_geoip/lib"
					;;
817
			esac
818
		elif test "yes" = "$use_geoip"
819
		then
Evan Hunt's avatar
Evan Hunt committed
820 821 822
			AC_MSG_ERROR([GeoIP path not found])
		else
			AC_MSG_ERROR([GeoIP path $use_geoip does not exist])
823
		fi
Evan Hunt's avatar
Evan Hunt committed
824 825 826
		AC_CHECK_HEADER(GeoIP.h, [],
			[AC_MSG_ERROR([GeoIP header file not found])]
		)
827 828
		AC_SEARCH_LIBS(GeoIP_id_by_addr_gl, GeoIP, [],
			[AC_MSG_ERROR([suitable GeoIP library not found])]
Evan Hunt's avatar
Evan Hunt committed
829 830 831 832
		)
		AC_SEARCH_LIBS(fabsf, m, [],
			[AC_MSG_ERROR([Math library not found])]
		)
833
		AC_DEFINE(HAVE_GEOIP, 1, Build with GeoIP support)
Evan Hunt's avatar
Evan Hunt committed
834 835 836 837
		GEOIPLINKSRCS='${GEOIPLINKSRCS}'
		GEOIPLINKOBJS='${GEOIPLINKOBJS}'
		AC_MSG_CHECKING([for GeoIP support])
		AC_MSG_RESULT([yes])
838

Evan Hunt's avatar
Evan Hunt committed
839 840 841 842 843 844 845 846 847 848 849
		AC_MSG_CHECKING([for GeoIP Country IPv6 support])
		AC_COMPILE_IFELSE(
			[AC_LANG_PROGRAM([
				#include <GeoIP.h>
				#include <netinet/in.h>
			], [
				struct in6_addr in6;
				GeoIP_country_name_by_ipnum_v6(NULL, in6);
			])],
			[
				AC_MSG_RESULT([yes])
850
				AC_DEFINE(HAVE_GEOIP_V6, 1, Build with GeoIP Country IPv6 support)
Evan Hunt's avatar
Evan Hunt committed
851 852 853
			],
			[AC_MSG_RESULT([no])]
		)
854

Evan Hunt's avatar
Evan Hunt committed
855 856 857 858 859 860 861 862
		AC_MSG_CHECKING([for GeoIP City IPv6 support])
		AC_COMPILE_IFELSE(
			[AC_LANG_PROGRAM([
				#include <GeoIP.h>
				#include <GeoIPCity.h>
				#include <netinet/in.h>
			], [
				struct in6_addr in6;
863
				int i = GEOIP_CITY_EDITION_REV0_V6;
Evan Hunt's avatar
Evan Hunt committed
864 865 866 867
				GeoIP_record_by_ipnum_v6(NULL, in6);
			])],
			[
				AC_MSG_RESULT([yes])
868
				AC_DEFINE(HAVE_GEOIP_CITY_V6, 1, Build with GeoIP City IPv6 support)
Evan Hunt's avatar
Evan Hunt committed
869 870
			],
			[AC_MSG_RESULT([no])]
871
		)
Evan Hunt's avatar
Evan Hunt committed
872
		;;
873
esac
Evan Hunt's avatar
Evan Hunt committed
874 875
AC_SUBST(GEOIPLINKSRCS)
AC_SUBST(GEOIPLINKOBJS)
876

Evan Hunt's avatar
Evan Hunt committed
877 878
AC_MSG_CHECKING(for GSSAPI library)
AC_ARG_WITH(gssapi,
879 880 881 882
	    AS_HELP_STRING([--with-gssapi=[PATH|[/path/]krb5-config]],
			   [Specify path for system-supplied GSSAPI
				[default=yes]]),
	    use_gssapi="$withval", use_gssapi="yes")
883

884 885 886 887 888
# first try using krb5-config, if that does not work then fall back to "yes" method.

case "$use_gssapi" in
*/krb5-config|krb5-config)
    AC_MSG_RESULT(trying $use_gssapi)
889
    if test krb5-config = "$use_gssapi"
890 891 892 893 894 895 896 897 898 899 900
    then
	AC_PATH_PROG(KRB5_CONFIG, $use_gssapi)
    else
	KRB5_CONFIG="$use_gssapi"
    fi
    gssapi_cflags=`$KRB5_CONFIG --cflags gssapi`
    gssapi_libs=`$KRB5_CONFIG --libs gssapi`
    saved_cppflags="$CPPFLAGS"
    CPPFLAGS="$gssapi_cflags $CPPFLAGS"
    AC_CHECK_HEADERS(gssapi.h gssapi/gssapi.h,
	[ISC_PLATFORM_GSSAPIHEADER="#define ISC_PLATFORM_GSSAPIHEADER <$ac_header>"])
901
    if test "" = "$ISC_PLATFORM_GSSAPIHEADER"; then
902 903 904 905 906 907
	AC_MSG_RESULT([krb5-config: gssapi.h not found])
	CPPFLAGS="$saved_cppflags"
	use_gssapi="yes"
    else
	AC_CHECK_HEADERS(krb5/krb5.h krb5.h,
	    [ISC_PLATFORM_KRB5HEADER="#define ISC_PLATFORM_KRB5HEADER <$ac_header>"])
908
	if test "" = "$ISC_PLATFORM_KRB5HEADER"; then
909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927
	    AC_MSG_RESULT([krb5-config: krb5.h not found])
	    CPPFLAGS="$saved_cppflags"
	    use_gssapi="yes"
	else
	    CPPFLAGS="$saved_cppflags"
	    saved_libs="$LIBS"
	    LIBS=$gssapi_libs
	    AC_MSG_CHECKING([krb5-config linking as $LIBS])
	    AC_TRY_LINK( , [gss_acquire_cred();krb5_init_context()],
		gssapi_linked=yes, gssapi_linked=no)
	    case $gssapi_linked in
		yes) AC_MSG_RESULT([krb5-config: linked]);;
		no)  AC_MSG_RESULT([krb5-config: could not determine proper GSSAPI linkage])
		    use_gssapi="yes"
		    ;;
	    esac
	    LIBS=$saved_libs
	fi
    fi
928
    if test "yes" = "$use_gssapi"; then
929 930 931 932 933
	AC_MSG_CHECKING([for GSSAPI library, non krb5-config method])
    fi
    ;;
esac

934 935 936 937 938 939 940 941 942
case "$host" in
*darwin*)
	if test "yes" = "$use_gssapi"
	then
		use_gssapi=framework
	fi
	;;
esac

Evan Hunt's avatar
Evan Hunt committed
943 944 945 946 947 948
# gssapi is just the framework, we really require kerberos v5, so
# look for those headers (the gssapi headers must be there, too)
# The problem with this implementation is that it doesn't allow
# for the specification of gssapi and krb5 headers in different locations,
# which probably ought to be fixed although fixing might raise the issue of
# trying to build with incompatible versions of gssapi and krb5.
949
if test "yes" = "$use_gssapi"
Evan Hunt's avatar
Evan Hunt committed
950 951 952 953 954 955 956 957 958 959 960 961 962 963
then
	# first, deal with the obvious
	if test \( -f /usr/include/kerberosv5/krb5.h -o \
		   -f /usr/include/krb5/krb5.h -o \
		   -f /usr/include/krb5.h \)   -a \
		\( -f /usr/include/gssapi.h -o \
		   -f /usr/include/gssapi/gssapi.h \)
	then
		use_gssapi=/usr
	else
	    krb5dirs="/usr/local /usr/local/krb5 /usr/local/kerberosv5 /usr/local/kerberos /usr/pkg /usr/krb5 /usr/kerberosv5 /usr/kerberos /usr"
	    for d in $krb5dirs
	    do
		if test -f $d/include/gssapi/gssapi_krb5.h -o \
964
			-f $d/include/krb5.h
Evan Hunt's avatar
Evan Hunt committed
965 966
		then
			if test -f $d/include/gssapi/gssapi.h -o \
967
				-f $d/include/gssapi.h
Evan Hunt's avatar
Evan Hunt committed
968 969 970 971 972 973 974 975 976
			then
				use_gssapi=$d
				break
			fi
		fi
		use_gssapi="no"
	    done
	fi
fi
977

Evan Hunt's avatar
Evan Hunt committed
978 979 980 981 982 983 984 985
case "$use_gssapi" in
	no)
		AC_MSG_RESULT(disabled)
		USE_GSSAPI=''
		;;
	yes)
		AC_MSG_ERROR([--with-gssapi must specify a path])
		;;
986 987 988 989 990
	*/krb5-config|krb5-config)
		USE_GSSAPI='-DGSSAPI'
		DST_GSSAPI_INC="$gssapi_cflags"
		DNS_GSSAPI_LIBS="$gssapi_libs"
		;;
991 992 993 994 995 996 997 998
	framework)
		USE_GSSAPI='-DGSSAPI'
		ISC_PLATFORM_GSSAPIHEADER="#define ISC_PLATFORM_GSSAPIHEADER <Kerberos/Kerberos.h>"
		ISC_PLATFORM_KRB5HEADER="#define ISC_PLATFORM_KRB5HEADER <Kerberos/Kerberos.h>"
		DNS_GSSAPI_LIBS="-framework Kerberos"
		AC_MSG_RESULT(framework)
		;;
		
Evan Hunt's avatar
Evan Hunt committed
999 1000 1001 1002 1003 1004
	*)
		AC_MSG_RESULT(looking in $use_gssapi/lib)
		USE_GSSAPI='-DGSSAPI'
		saved_cppflags="$CPPFLAGS"
		CPPFLAGS="-I$use_gssapi/include $CPPFLAGS"
		AC_CHECK_HEADERS(gssapi.h gssapi/gssapi.h,
1005 1006
		    [ISC_PLATFORM_GSSAPIHEADER="#define ISC_PLATFORM_GSSAPIHEADER <$ac_header>"
		     gssapi_hack="#include <$ac_header>"])
1007

1008
		if test "" = "$ISC_PLATFORM_GSSAPIHEADER"; then
Evan Hunt's avatar
Evan Hunt committed
1009 1010
		    AC_MSG_ERROR([gssapi.h not found])
		fi
1011

Evan Hunt's avatar
Evan Hunt committed
1012
		AC_CHECK_HEADERS(gssapi_krb5.h gssapi/gssapi_krb5.h,
1013 1014
		    [ISC_PLATFORM_GSSAPI_KRB5_HEADER="#define ISC_PLATFORM_GSSAPI_KRB5_HEADER <$ac_header>"
		     gssapi_krb5_hack="#include <$ac_header>"])
1015

Evan Hunt's avatar
Evan Hunt committed
1016
		AC_CHECK_HEADERS(krb5.h krb5/krb5.h kerberosv5/krb5.h,
1017 1018
		    [ISC_PLATFORM_KRB5HEADER="#define ISC_PLATFORM_KRB5HEADER <$ac_header>"
		    krb5_hack="#include <$ac_header>"])
Evan Hunt's avatar
Evan Hunt committed
1019

1020
		if test "" = "$ISC_PLATFORM_KRB5HEADER"; then
Evan Hunt's avatar
Evan Hunt committed
1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050
		    AC_MSG_ERROR([krb5.h not found])
		fi

		#
		# XXXDCL This probably doesn't work right on all systems.
		# It will need to be worked on as problems become evident.
		#
		# Essentially the problems here relate to two different
		# areas.  The first area is building with either KTH
		# or MIT Kerberos, particularly when both are present on
		# the machine.  The other is static versus dynamic linking.
		#
		# On the KTH vs MIT issue, Both have libkrb5 that can mess
		# up the works if one implementation ends up trying to
		# use the other's krb.  This is unfortunately a situation
		# that very easily arises.
		#
		# Dynamic linking when the dependency information is built
		# into MIT's libgssapi_krb5 or KTH's libgssapi magically makes
		# all such problems go away, but when that setup is not
		# present, because either the dynamic libraries lack
		# dependencies or static linking is being done, then the
		# problems start to show up.
		saved_libs="$LIBS"
		for TRY_LIBS in \
		    "-lgssapi_krb5" \
		    "-lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err" \
		    "-lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err -lresolv" \
		    "-lgssapi" \
		    "-lgssapi -lkrb5 -ldes -lcrypt -lasn1 -lroken -lcom_err" \
1051 1052 1053
		    "-lgssapi -lkrb5 -lcrypt -lasn1 -lroken -lcom_err" \
		    "-lgssapi -lkrb5 -lgssapi_krb5 -lcrypt -lasn1 -lroken -lcom_err" \
		    "-lgssapi -lkrb5 -lhx509 -lcrypt -lasn1 -lroken -lcom_err" \
Evan Hunt's avatar
Evan Hunt committed
1054 1055 1056 1057 1058 1059 1060
		    "-lgss -lkrb5"
		do
		    # Note that this does not include $saved_libs, because
		    # on FreeBSD machines this configure script has added
		    # -L/usr/local/lib to LIBS, which can make the
		    # -lgssapi_krb5 test succeed with shared libraries even
		    # when you are trying to build with KTH in /usr/lib.
1061
		    if test "/usr" = "$use_gssapi"
Evan Hunt's avatar
Evan Hunt committed
1062
		    then
1063
			    LIBS="$TRY_LIBS $ISC_OPENSSL_LIBS"
Evan Hunt's avatar
Evan Hunt committed
1064
		    else
1065
			    LIBS="-L$use_gssapi/lib $TRY_LIBS $ISC_OPENSSL_LIBS"
Evan Hunt's avatar
Evan Hunt committed
1066 1067
		    fi
		    AC_MSG_CHECKING(linking as $TRY_LIBS)
1068 1069 1070 1071 1072
		    AC_TRY_LINK([
#include <sys/types.h>
$gssapi_hack
$gssapi_krb5_hack
$krb5_hack
1073 1074 1075 1076
				] , [gss_acquire_cred(NULL, NULL, 0, NULL, 0, NULL, NULL, NULL);krb5_init_context(NULL);
#if defined(HAVE_GSSAPI_KRB5_H) || defined(HAVE_GSSAPI_GSSAPI_KRB5_H)
gsskrb5_register_acceptor_identity(NULL);
#endif],
Evan Hunt's avatar
Evan Hunt committed
1077 1078 1079 1080 1081 1082 1083
				gssapi_linked=yes, gssapi_linked=no)
		    case $gssapi_linked in
		    yes) AC_MSG_RESULT(yes); break ;;
		    no)  AC_MSG_RESULT(no) ;;
		    esac
		done

1084 1085
		CPPFLAGS="$saved_cppflags"

Evan Hunt's avatar
Evan Hunt committed
1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098
		case $gssapi_linked in
		no) AC_MSG_ERROR(could not determine proper GSSAPI linkage) ;;
		esac

		#
		# XXXDCL Major kludge.  Tries to cope with KTH in /usr/lib
		# but MIT in /usr/local/lib and trying to build with KTH.
		# /usr/local/lib can end up earlier on the link lines.
		# Like most kludges, this one is not only inelegant it
		# is also likely to be the wrong thing to do at least as
		# many times as it is the right thing.  Something better
		# needs to be done.
		#
1099
		if test "/usr" = "$use_gssapi" -a \
Evan Hunt's avatar
Evan Hunt committed
1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135
			-f /usr/local/lib/libkrb5.a; then
		    FIX_KTH_VS_MIT=yes
		fi

		case "$FIX_KTH_VS_MIT" in
		yes)
		    case "$enable_static_linking" in
		    yes) gssapi_lib_suffix=".a"  ;;
		    *)   gssapi_lib_suffix=".so" ;;
		    esac

		    for lib in $LIBS; do
			case $lib in
			-L*)
			    ;;
			-l*)
			    new_lib=`echo $lib |
				     sed -e s%^-l%$use_gssapi/lib/lib% \
					 -e s%$%$gssapi_lib_suffix%`
			    NEW_LIBS="$NEW_LIBS $new_lib"
			    ;;
			*)
			   AC_MSG_ERROR([KTH vs MIT Kerberos confusion!])
			    ;;
			esac
		    done
		    LIBS="$NEW_LIBS"
		    ;;
		esac

		DST_GSSAPI_INC="-I$use_gssapi/include"
		DNS_GSSAPI_LIBS="$LIBS"

		AC_MSG_RESULT(using GSSAPI from $use_gssapi/lib and $use_gssapi/include)
		LIBS="$saved_libs"
		;;
1136
esac
1137

Evan Hunt's avatar
Evan Hunt committed
1138 1139 1140 1141 1142 1143 1144 1145
AC_SUBST(ISC_PLATFORM_HAVEGSSAPI)
AC_SUBST(ISC_PLATFORM_GSSAPIHEADER)
AC_SUBST(ISC_PLATFORM_GSSAPI_KRB5_HEADER)
AC_SUBST(ISC_PLATFORM_KRB5HEADER)

AC_SUBST(USE_GSSAPI)
AC_SUBST(DST_GSSAPI_INC)
AC_SUBST(DNS_GSSAPI_LIBS)
1146
DNS_CRYPTO_LIBS="$DNS_GSSAPI_LIBS"
Evan Hunt's avatar
Evan Hunt committed
1147

1148
#
Evan Hunt's avatar
Evan Hunt committed
1149
# Applications linking with libdns also need to link with these libraries.
1150 1151
#

Evan Hunt's avatar
Evan Hunt committed
1152
AC_SUBST(DNS_CRYPTO_LIBS)
1153

1154
# XXXOND: Change this to deterministic DSA generation
Francis Dupont's avatar
Francis Dupont committed
1155
#
Evan Hunt's avatar
Evan Hunt committed
1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169
# Only check dsa signature generation on these platforms when performing
# system tests.
#
CHECK_DSA=0
if grep "#define PATH_RANDOMDEV " confdefs.h > /dev/null
then
	case "$host" in
	*darwin*|*freebsd*)
		CHECK_DSA=1
		;;
	esac
fi
AC_SUBST(CHECK_DSA)

Francis Dupont's avatar
Francis Dupont committed
1170
#
1171
# Do we have arc4random(), etc ?
Francis Dupont's avatar
Francis Dupont committed
1172
#
1173
AC_CHECK_FUNCS(arc4random arc4random_buf arc4random_uniform getrandom)
Francis Dupont's avatar
Francis Dupont committed
1174

Evan Hunt's avatar
Evan Hunt committed
1175
sinclude(config.threads.in)dnl
Francis Dupont's avatar
Francis Dupont committed
1176

Evan Hunt's avatar
Evan Hunt committed
1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231