configure.in 134 KB
Newer Older
1
# Copyright (C) 1998-2016  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

Mark Andrews's avatar
Mark Andrews committed
7
8
9
10
11
12
13
14
15
16
17
18
19
# Copyright (C) 1998-2003  Internet Software Consortium.
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
David Lawrence's avatar
David Lawrence committed
20

21
dnl
22
AC_DIVERT_PUSH(1)dnl
23
esyscmd([sed -e 's/^/# /' -e '/Portions of this code/,$d' COPYRIGHT])dnl
24
AC_DIVERT_POP()dnl
David Lawrence's avatar
David Lawrence committed
25

Mark Andrews's avatar
9.11    
Mark Andrews committed
26
AC_INIT(BIND, [9.11], [bind9-bugs@isc.org], [], [https://www.isc.org/downloads/BIND/])
27
AC_PREREQ(2.59)
Bob Halley's avatar
Bob Halley committed
28
29

AC_CONFIG_HEADER(config.h)
30
AC_CONFIG_MACRO_DIR([libtool.m4])
Bob Halley's avatar
Bob Halley committed
31
32
33

AC_CANONICAL_HOST

34
AC_PROG_MAKE_SET
35
36
37
38
39
40
41
42
43
44
45
46
47

#
# 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

48
AC_PROG_LIBTOOL
49
AC_PROG_INSTALL
50
AC_PROG_LN_S
51
52
53
54

AC_SUBST(STD_CINCLUDES)
AC_SUBST(STD_CDEFINES)
AC_SUBST(STD_CWARNINGS)
55
AC_SUBST(CCOPT)
Evan Hunt's avatar
Evan Hunt committed
56
AC_SUBST(CCNOOPT)
Mark Andrews's avatar
Mark Andrews committed
57
AC_SUBST(BACKTRACECFLAGS)
58

59
60
61
62
63
64
65
66
67
68
69
70
# Warn if the user specified libbind, which is now deprecated
AC_ARG_ENABLE(libbind, [  --enable-libbind	  deprecated])

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

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

73
74
AC_ARG_ENABLE(warn_error, [  --enable-warn-error	  turn on -Werror when compiling])

75
AC_ARG_ENABLE(developer, [  --enable-developer      enable developer build settings])
76
77
case "$enable_developer" in
yes)
78
	STD_CDEFINES="$STD_CDEFINES -DISC_LIST_CHECKINIT=1"
79
	test "${enable_fixed_rrset+set}" = set || enable_fixed_rrset=yes
80
	test "${enable_querytrace+set}" = set || enable_querytrace=yes
81
82
83
	test "${with_atf+set}" = set || with_atf=yes
	test "${enable_filter_aaaa+set}" = set || enable_filter_aaaa=yes
	test "${with_dlz_filesystem+set}" = set || with_dlz_filesystem=yes
Evan Hunt's avatar
Evan Hunt committed
84
	test "${enable_symtable+set}" = set || enable_symtable=all
85
	test "${enable_warn_error+set}" = set || enable_warn_error=yes
86
	test "${enable_warn_shadow+set}" = set || enable_warn_shadow=yes
87
	test "${with_zlib+set}" = set || with_zlib=yes
88
89
	;;
esac
90

91
92
93
94
95
96
97
98
99
# American Fuzzy Lop
AC_ARG_ENABLE(afl, [  --enable-afl		  enable American Fuzzy Lop test harness [[default=no]]],
	     [AC_DEFINE([ENABLE_AFL], [1], [Define to enable American Fuzzy Lop test harness])])
case "$enable_afl" in
yes)
	LIBS="$LIBS -lpthread"
	;;
esac

100
101
#libseccomp sandboxing
AC_ARG_ENABLE(seccomp,
102
	AS_HELP_STRING([--enable-seccomp],[enable support for libseccomp system call filtering [default=no]]))
103
case "$enable_seccomp" in
104
	yes)
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
	case $host_os in
	linux*)
		;;
	*)
		AC_MSG_WARN([seccomp is not supported on non-linux platforms; disabling it])
		enable_seccomp=no
		;;
	esac
	AC_SEARCH_LIBS(seccomp_init, [seccomp])
	if test "$ac_cv_search_seccomp_init" = "-lseccomp" ; then
		AC_TRY_RUN([
		#include <stdio.h>
		#include <stdlib.h>
		#include <errno.h>
		#include <sys/prctl.h>
		#include <linux/seccomp.h>

		int main(void)
		{
			int ret;

			ret = prctl(PR_GET_SECCOMP, 0, 0, 0, 0);
			if (ret < 0) {
				switch (errno) {
				case ENOSYS:
					return 1;
				case EINVAL:
					return 1;
				default:
					return 1;
				}
			}
			ret = 
			prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, NULL, 0, 0);
			if (ret < 0) {
				switch (errno) {
				case EINVAL:
					return 1;
				case EFAULT:
					return 0;
				default:
					return 1;
			}
		}
	return 1;
	}
	]
	, AC_DEFINE([HAVE_LIBSECCOMP], 1, 
	[Define to use libseccomp system call filtering.])   
	, []
	)
	fi
		;;
158
	*)
159
160
161
		;;
esac

162
163
164
#
# 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
165
# AC_SUBST_FILE() substitutions in other files.
166
167
168
#
AC_CONFIG_FILES([make/rules make/includes])

David Lawrence's avatar
David Lawrence committed
169
170
171
172
173
AC_PATH_PROG(AR, ar)
ARFLAGS="cruv"
AC_SUBST(AR)
AC_SUBST(ARFLAGS)

174
175
176
177
178
# The POSIX ln(1) program.  Non-POSIX systems may substitute
# "copy" or something.
LN=ln
AC_SUBST(LN)

179
180
181
182
183
184
185
186
187
188
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
189
190
191
#
# Etags.
#
192
AC_PATH_PROGS(ETAGS, etags emacs-etags)
Andreas Gustafsson's avatar
Andreas Gustafsson committed
193

Bob Halley's avatar
Bob Halley committed
194
195
196
197
198
199
200
201
202
203
204
205
206
#
# 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
207
208
AC_SUBST(ETAGS)

209
210
#
# Perl is optional; it is used only by some of the system test scripts.
211
212
# 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.
213
214
215
216
#
AC_PATH_PROGS(PERL, perl5 perl)
AC_SUBST(PERL)

217
218
219
220
221
#
# 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,
222
[  --with-python=PATH      specify path to python interpreter],
223
224
    use_python="$withval", use_python="unspec")

225
python="python python3 python3.5 python3.4 python3.3 python3.2 python3.1 python3.0 python2 python2.7 python2.6 python2.5 python2.4"
Evan Hunt's avatar
Evan Hunt committed
226
227
228
229
230

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

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

233
234
case "$use_python" in
	no)
Evan Hunt's avatar
Evan Hunt committed
235
		AC_MSG_CHECKING([for python support])
236
237
238
239
240
		AC_MSG_RESULT(disabled)
		;;
	unspec|yes|*)
		case "$use_python" in
		unspec|yes|'')
Evan Hunt's avatar
Evan Hunt committed
241
242
243
			for p in $python
			do
				AC_PATH_PROGS(PYTHON, $p)
Francis Dupont's avatar
Francis Dupont committed
244
				if test "X$PYTHON" = "X"; then
Evan Hunt's avatar
Evan Hunt committed
245
246
247
					continue;
				fi
				AC_MSG_CHECKING([python module 'argparse'])
Evan Hunt's avatar
Evan Hunt committed
248
249
250
251
252
253
254
255
256
257
258
259
				if ${PYTHON:-false} -c "$testargparse"; then
					AC_MSG_RESULT([found])
                                else
                                        AC_MSG_RESULT([not found])
                                        unset ac_cv_path_PYTHON
                                        unset PYTHON
                                        continue
				fi

				AC_MSG_CHECKING([python module 'ply'])
				if ${PYTHON:-false} -c "$testply"; then
					AC_MSG_RESULT([found])
Evan Hunt's avatar
Evan Hunt committed
260
					break
261
262
263
264
                                else
                                        AC_MSG_RESULT([not found])
                                        unset ac_cv_path_PYTHON
                                        unset PYTHON
Evan Hunt's avatar
Evan Hunt committed
265
266
				fi
			done
Francis Dupont's avatar
Francis Dupont committed
267
			if test "X$PYTHON" = "X"
Evan Hunt's avatar
Evan Hunt committed
268
269
270
271
272
273
274
275
276
277
278
			then
				AC_MSG_CHECKING([for python support])
				case "$use_python" in
				unspec)
					AC_MSG_RESULT(disabled)
					;;
				yes)
					AC_MSG_ERROR([missing python])
					;;
				esac
			fi
279
280
281
			;;
		*)
			case "$use_python" in
Evan Hunt's avatar
Evan Hunt committed
282
283
			/*)
				PYTHON="$use_python"
284
				;;
Evan Hunt's avatar
Evan Hunt committed
285
286
			*)
				AC_PATH_PROGS(PYTHON, $use_python)
287
288
				;;
			esac
Evan Hunt's avatar
Evan Hunt committed
289
			AC_MSG_CHECKING([python module 'argparse'])
Evan Hunt's avatar
Evan Hunt committed
290
291
292
293
294
295
296
297
			if ${PYTHON:-false} -c "$testargparse"; then
				AC_MSG_RESULT([found, using $PYTHON])
				break
			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
298
299
300
301
302
303
304
				AC_MSG_RESULT([found, using $PYTHON])
				break
			else
				AC_MSG_ERROR([not found])
			fi
			;;
		esac
305
306
307
308
		;;
esac

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

323
324
325
#
# Special processing of paths depending on whether --prefix,
# --sysconfdir or --localstatedir arguments were given.  What's
Mark Andrews's avatar
Mark Andrews committed
326
# desired is some compatibility with the way previous versions
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
# 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
#
343
case "$prefix" in
344
345
346
347
348
349
350
351
352
353
354
355
	NONE)
		case "$sysconfdir" in
			'${prefix}/etc')
				sysconfdir=/etc
				;;
		esac
		case "$localstatedir" in
			'${prefix}/var')
				localstatedir=/var
				;;
		esac
		;;
356
esac
Evan Hunt's avatar
Evan Hunt committed
357
358
expanded_sysconfdir=`eval echo $sysconfdir`
AC_SUBST(expanded_sysconfdir)
359

360
361
362
363
364
365
366
367
#
# 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.
#
368
369
case "$INSTALL" in
	/*)
370
371
372
373
374
375
376
377
378
379
380
381
382
383
		;;
	*)
		#
		# Not all systems have dirname.
		#
		changequote({, })
		ac_dir="`echo $INSTALL | sed 's%/[^/]*$%%'`"
		changequote([, ])

		ac_prog="`echo $INSTALL | sed 's%.*/%%'`"
		test "$ac_dir" = "$ac_prog" && ac_dir=.
		test -d "$ac_dir" && ac_dir="`(cd \"$ac_dir\" && pwd)`"
		INSTALL="$ac_dir/$ac_prog"
		;;
384
385
esac

386
387
388
389
390
391
392
393
#
# 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.
#
394
395
396
397
398
if test "X$CC" = "X" ; then
	case "$host" in
		*-dec-osf*)
			CC="cc"
			;;
399
		*-solaris*)
400
401
402
403
404
405
			# 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.
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
			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"
422
423
424
425
426
427
428
429
430
431
			;;
		*-hp-hpux*)
			CC="cc"
			;;
		mips-sgi-irix*)
			CC="cc"
			;;
	esac
fi

432
433
AC_PROG_CC

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

445
#
446
# OS dependent CC flags
447
448
#
case "$host" in
Francis Dupont's avatar
Francis Dupont committed
449
	# OSF 5.0: recv/send are only available with -D_POSIX_PII_SOCKET or
450
	# -D_XOPEN_SOURCE_EXTENDED.
451
452
453
454
	*-dec-osf*)
		STD_CDEFINES="$STD_CDEFINES -D_POSIX_PII_SOCKET"
		CPPFLAGS="$CPPFLAGS -D_POSIX_PII_SOCKET"
		;;
455
456
457
458
459
460
461
462
463
464
465
	#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__"
		;;
466
467
468
469
470
	# 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.
471
	*-linux* | *-kfreebsd*-gnu*)
472
473
474
		STD_CDEFINES="$STD_CDEFINES -D_GNU_SOURCE"
		CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
		;;
475
476
477
478
479
480
481
482
	#
	# 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"
	  ;;
483
484
esac

Evan Hunt's avatar
Evan Hunt committed
485
486
487
488
489
490
491
#
# 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

492
493
AC_HEADER_STDC

Mark Andrews's avatar
Mark Andrews committed
494
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,,,
495
496
497
498
[$ac_includes_default
#ifdef HAVE_SYS_PARAM_H
# include <sys/param.h>
#endif
499
500
501
#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
502
])
503
504
505

AC_C_CONST
AC_C_INLINE
506
AC_C_VOLATILE
Mark Andrews's avatar
Mark Andrews committed
507
AC_CHECK_FUNC(sysctlbyname, AC_DEFINE(HAVE_SYSCTLBYNAME))
508
AC_C_FLEXIBLE_ARRAY_MEMBER
509

Evan Hunt's avatar
Evan Hunt committed
510
511
512
513
514
#
# Check for the existence of mmap to enable the fast format zones
#
AC_CHECK_FUNCS(mmap)

515
516
517
518
519
520
#
# Older versions of HP/UX don't define seteuid() and setegid()
#
AC_CHECK_FUNCS(seteuid setresuid)
AC_CHECK_FUNCS(setegid setresgid)

521
522
523
# BSDI doesn't have ftello fseeko
AC_CHECK_FUNCS(ftello fseeko)

524
525
526
527
528
#
# 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
529
AC_TRY_COMPILE([
530
531
532
533
534
535
	static inline int foo1() {
		return 0;
	}

	static inline int foo2() {
		return foo1();
Evan Hunt's avatar
Evan Hunt committed
536
537
	}
	], [foo1();],
538
539
	[AC_MSG_RESULT(no)],
	[AC_MSG_RESULT(yes)
540
	 AC_DEFINE(inline, ,[Define to empty if your compiler does not support "static inline".])])
541

542
AC_TYPE_SIZE_T
Mark Andrews's avatar
Mark Andrews committed
543
AC_CHECK_TYPE(ssize_t, int)
544
AC_CHECK_TYPE(uintptr_t,unsigned long)
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
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)
562
AC_HEADER_TIME
Mark Andrews's avatar
Mark Andrews committed
563
564
565
566
567
568
569
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)
570

571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
#
# 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)
         AC_DEFINE(HAVE_UNAME)],
        [AC_MSG_RESULT(no)
         AC_MSG_WARN([uname is not correctly supported])])

Francis Dupont's avatar
Francis Dupont committed
590
591
592
593
594
595
596
597
598
599
#
# 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"
600
		ISC_PLATFORM_NORETURN_POST="#define ISC_PLATFORM_NORETURN_POST"])
Francis Dupont's avatar
Francis Dupont committed
601
602
603
AC_SUBST(ISC_PLATFORM_NORETURN_PRE)
AC_SUBST(ISC_PLATFORM_NORETURN_POST)

604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
#
# 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)

624
625
626
#
# check if we have kqueue
#
627
628
629
630
AC_ARG_ENABLE(kqueue,
	[  --enable-kqueue         use BSD kqueue when available [[default=yes]]],
	      want_kqueue="$enableval",  want_kqueue="yes")
case $want_kqueue in
631
yes)
632
633
634
635
636
637
638
639
640
	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
641
642
643
644
645
646
647
648
	;;
*)
	ISC_PLATFORM_HAVEKQUEUE="#undef ISC_PLATFORM_HAVEKQUEUE"
	;;
esac
AC_SUBST(ISC_PLATFORM_HAVEKQUEUE)

#
649
650
# 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.
651
#
652
AC_ARG_ENABLE(epoll,
653
654
[  --enable-epoll          use Linux epoll when available [[default=auto]]],
	      want_epoll="$enableval",  want_epoll="auto")
655
case $want_epoll in
656
auto)
657
658
659
660
661
662
663
664
665
666
667
668
	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)
669
670
	ISC_PLATFORM_HAVEEPOLL="#undef ISC_PLATFORM_HAVEEPOLL"],
	[AC_MSG_RESULT(no)
671
	ISC_PLATFORM_HAVEEPOLL="#undef ISC_PLATFORM_HAVEEPOLL"])
672
	;;
673
674
675
yes)
	ISC_PLATFORM_HAVEEPOLL="#define ISC_PLATFORM_HAVEEPOLL 1"
	;;
676
677
678
679
680
681
682
683
684
*)
	ISC_PLATFORM_HAVEEPOLL="#undef ISC_PLATFORM_HAVEEPOLL"
	;;
esac
AC_SUBST(ISC_PLATFORM_HAVEEPOLL)

#
# check if we support /dev/poll
#
685
686
687
688
689
AC_ARG_ENABLE(devpoll,
	[  --enable-devpoll        use /dev/poll when available [[default=yes]]],
	      want_devpoll="$enableval",  want_devpoll="yes")
case $want_devpoll in
yes)
690
	AC_CHECK_HEADERS(sys/devpoll.h devpoll.h,
691
692
693
694
695
696
697
698
699
	ISC_PLATFORM_HAVEDEVPOLL="#define ISC_PLATFORM_HAVEDEVPOLL 1"
	,
	ISC_PLATFORM_HAVEDEVPOLL="#undef ISC_PLATFORM_HAVEDEVPOLL"
	)
	;;
*)
	ISC_PLATFORM_HAVEDEVPOLL="#undef ISC_PLATFORM_HAVEDEVPOLL"
	;;
esac
700
AC_SUBST(ISC_PLATFORM_HAVEDEVPOLL)
701

702
703
704
705
706
#
# check if we need to #include sys/select.h explicitly
#
case $ac_cv_header_unistd_h in
yes)
707
AC_MSG_CHECKING(if unistd.h or sys/types.h defines fd_set)
708
AC_TRY_COMPILE([
709
#include <sys/types.h> /* Ultrix */
710
711
712
713
714
715
#include <unistd.h>],
[fd_set read_set; return (0);],
	[AC_MSG_RESULT(yes)
	 ISC_PLATFORM_NEEDSYSSELECTH="#undef ISC_PLATFORM_NEEDSYSSELECTH"
	 LWRES_PLATFORM_NEEDSYSSELECTH="#undef LWRES_PLATFORM_NEEDSYSSELECTH"],
	[AC_MSG_RESULT(no)
716
	case $ac_cv_header_sys_select_h in
717
	yes)
718
	 ISC_PLATFORM_NEEDSYSSELECTH="#define ISC_PLATFORM_NEEDSYSSELECTH 1"
719
720
721
722
723
724
725
726
727
	 LWRES_PLATFORM_NEEDSYSSELECTH="#define LWRES_PLATFORM_NEEDSYSSELECTH 1"
		;;
	no)
		AC_MSG_ERROR([need either working unistd.h or sys/select.h])
		;;
	esac
	])
	;;
no)
728
	case $ac_cv_header_sys_select_h in
729
	yes)
730
	     ISC_PLATFORM_NEEDSYSSELECTH="#define ISC_PLATFORM_NEEDSYSSELECTH 1"
731
732
733
734
735
736
737
738
739
740
741
	     LWRES_PLATFORM_NEEDSYSSELECTH="#define LWRES_PLATFORM_NEEDSYSSELECTH 1"
		;;
	no)
		AC_MSG_ERROR([need either unistd.h or sys/select.h])
		;;
	esac
	;;
esac
AC_SUBST(ISC_PLATFORM_NEEDSYSSELECTH)
AC_SUBST(LWRES_PLATFORM_NEEDSYSSELECTH)

742
743
744
745
746
#
# Find the machine's endian flavor.
#
AC_C_BIGENDIAN

Michael Graff's avatar
Michael Graff committed
747
#
Evan Hunt's avatar
Evan Hunt committed
748
# GeoIP support?
Michael Graff's avatar
Michael Graff committed
749
#
Evan Hunt's avatar
Evan Hunt committed
750
751
752
753
754
GEOIPLINKSRCS=
GEOIPLINKOBJS=
AC_ARG_WITH(geoip,
[  --with-geoip=PATH       Build with GeoIP support (yes|no|path)],
    use_geoip="$withval", use_geoip="no")
Michael Graff's avatar
Michael Graff committed
755

Evan Hunt's avatar
Evan Hunt committed
756
if test "$use_geoip" = "yes"
757
then
758
	for d in /usr /usr/local /opt/local
759
	do
Evan Hunt's avatar
Evan Hunt committed
760
		if test -f $d/include/GeoIP.h
761
		then
Evan Hunt's avatar
Evan Hunt committed
762
			use_geoip=$d
763
764
765
766
			break
		fi
	done
fi
Evan Hunt's avatar
Evan Hunt committed
767
768
769
770
771

case "$use_geoip" in
	no|'')
		AC_MSG_CHECKING([for GeoIP support])
		AC_MSG_RESULT([disabled])
772
		;;
773
	*)
Evan Hunt's avatar
Evan Hunt committed
774
		if test -d "$use_geoip" -o -L "$use_geoip"
775
		then
Evan Hunt's avatar
Evan Hunt committed
776
777
			CFLAGS="$CFLAGS -I$use_geoip/include"
			CPPFLAGS="$CPPFLAGS -I$use_geoip/include"
778
			LIBS="$LIBS -L$use_geoip/lib"
Evan Hunt's avatar
Evan Hunt committed
779
780
781
782
			case "$host_os" in
				netbsd*|openbsd*|solaris*)
					LIBS="$LIBS -Wl,-rpath=$use_geoip/lib"
					;;
783
			esac
Evan Hunt's avatar
Evan Hunt committed
784
		elif test "$use_geoip" = "yes"
785
		then
Evan Hunt's avatar
Evan Hunt committed
786
787
788
			AC_MSG_ERROR([GeoIP path not found])
		else
			AC_MSG_ERROR([GeoIP path $use_geoip does not exist])
789
		fi
Evan Hunt's avatar
Evan Hunt committed
790
791
792
		AC_CHECK_HEADER(GeoIP.h, [],
			[AC_MSG_ERROR([GeoIP header file not found])]
		)
793
794
		AC_SEARCH_LIBS(GeoIP_id_by_addr_gl, GeoIP, [],
			[AC_MSG_ERROR([suitable GeoIP library not found])]
Evan Hunt's avatar
Evan Hunt committed
795
796
797
798
		)
		AC_SEARCH_LIBS(fabsf, m, [],
			[AC_MSG_ERROR([Math library not found])]
		)
799
		AC_DEFINE(HAVE_GEOIP, 1, Build with GeoIP support)
Evan Hunt's avatar
Evan Hunt committed
800
801
802
803
		GEOIPLINKSRCS='${GEOIPLINKSRCS}'
		GEOIPLINKOBJS='${GEOIPLINKOBJS}'
		AC_MSG_CHECKING([for GeoIP support])
		AC_MSG_RESULT([yes])
804

Evan Hunt's avatar
Evan Hunt committed
805
806
807
808
809
810
811
812
813
814
815
		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])
816
				AC_DEFINE(HAVE_GEOIP_V6, 1, Build with GeoIP Country IPv6 support)
Evan Hunt's avatar
Evan Hunt committed
817
818
819
			],
			[AC_MSG_RESULT([no])]
		)
820

Evan Hunt's avatar
Evan Hunt committed
821
822
823
824
825
826
827
828
		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;
829
				int i = GEOIP_CITY_EDITION_REV0_V6;
Evan Hunt's avatar
Evan Hunt committed
830
831
832
833
				GeoIP_record_by_ipnum_v6(NULL, in6);
			])],
			[
				AC_MSG_RESULT([yes])
834
				AC_DEFINE(HAVE_GEOIP_CITY_V6, 1, Build with GeoIP City IPv6 support)
Evan Hunt's avatar
Evan Hunt committed
835
836
			],
			[AC_MSG_RESULT([no])]
837
		)
Evan Hunt's avatar
Evan Hunt committed
838
		;;
839
esac
Evan Hunt's avatar
Evan Hunt committed
840
841
AC_SUBST(GEOIPLINKSRCS)
AC_SUBST(GEOIPLINKOBJS)
842

Evan Hunt's avatar
Evan Hunt committed
843
844
845
846
AC_MSG_CHECKING(for GSSAPI library)
AC_ARG_WITH(gssapi,
[  --with-gssapi=PATH      Specify path for system-supplied GSSAPI [[default=yes]]],
    use_gssapi="$withval", use_gssapi="yes")
847

Evan Hunt's avatar
Evan Hunt committed
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
# 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.
if test "$use_gssapi" = "yes"
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 \
869
			-f $d/include/krb5.h
Evan Hunt's avatar
Evan Hunt committed
870
871
		then
			if test -f $d/include/gssapi/gssapi.h -o \
872
				-f $d/include/gssapi.h
Evan Hunt's avatar
Evan Hunt committed
873
874
875
876
877
878
879
880
881
			then
				use_gssapi=$d
				break
			fi
		fi
		use_gssapi="no"
	    done
	fi
fi
882

Evan Hunt's avatar
Evan Hunt committed
883
884
885
886
887
888
889
890
891
892
893
894
895
896
case "$use_gssapi" in
	no)
		AC_MSG_RESULT(disabled)
		USE_GSSAPI=''
		;;
	yes)
		AC_MSG_ERROR([--with-gssapi must specify a path])
		;;
	*)
		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,
897
898
		    [ISC_PLATFORM_GSSAPIHEADER="#define ISC_PLATFORM_GSSAPIHEADER <$ac_header>"
		     gssapi_hack="#include <$ac_header>"])
899

Evan Hunt's avatar
Evan Hunt committed
900
901
902
		if test "$ISC_PLATFORM_GSSAPIHEADER" = ""; then
		    AC_MSG_ERROR([gssapi.h not found])
		fi
903

Evan Hunt's avatar
Evan Hunt committed
904
		AC_CHECK_HEADERS(gssapi_krb5.h gssapi/gssapi_krb5.h,
905
906
		    [ISC_PLATFORM_GSSAPI_KRB5_HEADER="#define ISC_PLATFORM_GSSAPI_KRB5_HEADER <$ac_header>"
		     gssapi_krb5_hack="#include <$ac_header>"])
907

Evan Hunt's avatar
Evan Hunt committed
908
		AC_CHECK_HEADERS(krb5.h krb5/krb5.h kerberosv5/krb5.h,
909
910
		    [ISC_PLATFORM_KRB5HEADER="#define ISC_PLATFORM_KRB5HEADER <$ac_header>"
		    krb5_hack="#include <$ac_header>"])
Evan Hunt's avatar
Evan Hunt committed
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943

		if test "$ISC_PLATFORM_KRB5HEADER" = ""; then
		    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" \
		    "-lgssapi -lkrb5 -lcrypto -lcrypt -lasn1 -lroken -lcom_err" \
944
		    "-lgssapi -lkrb5 -lgssapi_krb5 -lcrypto -lcrypt -lasn1 -lroken -lcom_err" \
Evan Hunt's avatar
Evan Hunt committed
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
		    "-lgssapi -lkrb5 -lhx509 -lcrypto -lcrypt -lasn1 -lroken -lcom_err" \
		    "-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.
		    if test "$use_gssapi" = "/usr"
		    then
			    LIBS="$TRY_LIBS"
		    else
			    LIBS="-L$use_gssapi/lib $TRY_LIBS"
		    fi
		    AC_MSG_CHECKING(linking as $TRY_LIBS)
960
961
962
963
964
		    AC_TRY_LINK([
#include <sys/types.h>
$gssapi_hack
$gssapi_krb5_hack
$krb5_hack
965
966
967
968
				] , [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
969
970
971
972
973
974
975
				gssapi_linked=yes, gssapi_linked=no)
		    case $gssapi_linked in
		    yes) AC_MSG_RESULT(yes); break ;;
		    no)  AC_MSG_RESULT(no) ;;
		    esac
		done

976
977
		CPPFLAGS="$saved_cppflags"

Evan Hunt's avatar
Evan Hunt committed
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
		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.
		#
		if test "$use_gssapi" = "/usr" -a \
			-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"
		;;
1028
esac
1029

Evan Hunt's avatar
Evan Hunt committed
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
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)
DNS_CRYPTO_LIBS="$DNS_GSSAPI_LIBS $DNS_CRYPTO_LIBS"

1040
#
Evan Hunt's avatar
Evan Hunt committed
1041
# Applications linking with libdns also need to link with these libraries.
1042
1043
#

Evan Hunt's avatar
Evan Hunt committed
1044
AC_SUBST(DNS_CRYPTO_LIBS)
1045

Francis Dupont's avatar
Francis Dupont committed
1046
#
Evan Hunt's avatar
Evan Hunt committed
1047
# was --with-randomdev specified?
Francis Dupont's avatar
Francis Dupont committed
1048
#
Evan Hunt's avatar
Evan Hunt committed
1049
1050
1051
1052
AC_MSG_CHECKING(for random device)
AC_ARG_WITH(randomdev,
[  --with-randomdev=PATH   Specify path for random device],
    use_randomdev="$withval", use_randomdev="unspec")
Francis Dupont's avatar
Francis Dupont committed
1053

Evan Hunt's avatar
Evan Hunt committed
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
case "$use_randomdev" in
	unspec)
		case "$cross_compiling" in
		yes)
			AC_MSG_RESULT(unspecified)
			AC_MSG_ERROR([ need --with-randomdev=PATH or --with-randomdev=no])
		esac
		case "$host" in
			*-openbsd*)
				devrandom=/dev/arandom
				;;
			*)
				devrandom=/dev/random
				;;
		esac
		AC_MSG_RESULT($devrandom)
		AC_CHECK_FILE($devrandom,
			      AC_DEFINE_UNQUOTED(PATH_RANDOMDEV,
						 "$devrandom"),)
			      
		;;
Francis Dupont's avatar
Francis Dupont committed
1075
	yes)
Evan Hunt's avatar
Evan Hunt committed
1076
		AC_MSG_ERROR([--with-randomdev must specify a path])
Francis Dupont's avatar
Francis Dupont committed
1077
1078
		;;
	no)
Evan Hunt's avatar
Evan Hunt committed
1079
1080
1081
1082
1083
		AC_MSG_RESULT(disabled)
		;;
	*)
		AC_DEFINE_UNQUOTED(PATH_RANDOMDEV, "$use_randomdev")
		AC_MSG_RESULT(using "$use_randomdev")
Francis Dupont's avatar
Francis Dupont committed
1084
1085
1086
		;;
esac

Francis Dupont's avatar
Francis Dupont committed
1087
#
Evan Hunt's avatar
Evan Hunt committed
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
# 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
1102
#
1103
1104
# Do we have arc4random(), etc ? arc4random_addrandom() has been removed
# from OpenBSD 5.5 onwards.
Francis Dupont's avatar
Francis Dupont committed
1105
#
Evan Hunt's avatar
Evan Hunt committed
1106
AC_CHECK_FUNC(arc4random, AC_DEFINE(HAVE_ARC4RANDOM))
1107
AC_CHECK_FUNC(arc4random_addrandom, AC_DEFINE(HAVE_ARC4RANDOM_ADDRANDOM))
Francis Dupont's avatar
Francis Dupont committed
1108

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

Evan Hunt's avatar
Evan Hunt committed
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
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
if $use_threads
then
	if test "X$GCC" = "Xyes"; then
		case "$host" in
		*-freebsd*)
			CC="$CC -pthread"
			CCOPT="$CCOPT -pthread"
			CCNOOPT="$CCNOOPT -pthread"
			STD_CDEFINES="$STD_CDEFINES -D_THREAD_SAFE"
			;;
		*-openbsd*)
			CC="$CC -pthread"
			CCOPT="$CCOPT -pthread"
			CCNOOPT="$CCNOOPT -pthread"
			;;
		*-solaris*)
			LIBS="$LIBS -lthread"
			;;
		*-ibm-aix*)
			STD_CDEFINES="$STD_CDEFINES -D_THREAD_SAFE"
			;;
		esac
	else
		case $host in
		*-dec-osf*)
			CC="$CC -pthread"
			CCOPT="$CCOPT -pthread"
			CCNOOPT="$CCNOOPT -pthread"
			;;
		*-solaris*)
			CC="$CC -mt"
			CCOPT="$CCOPT -mt"
			CCNOOPT="$CCNOOPT -mt"
			;;
		*-ibm-aix*)
			STD_CDEFINES="$STD_CDEFINES -D_THREAD_SAFE"
			;;
		*-sco-sysv*uw*|*-*-sysv*UnixWare*)
			CC="$CC -Kthread"
			CCOPT="$CCOPT -Kthread"
			CCNOOPT="$CCNOOPT -Kthread"
			;;
		*-*-sysv*OpenUNIX*)
			CC="$CC -Kpthread"
			CCOPT="$CCOPT -Kpthread"
			CCNOOPT="$CCNOOPT -Kpthread"
			;;
		esac
	fi
	ALWAYS_DEFINES="-D_REENTRANT"
	ISC_PLATFORM_USETHREADS="#define ISC_PLATFORM_USETHREADS 1"
	THREADOPTOBJS='${THREADOPTOBJS}'
	THREADOPTSRCS='${THREADOPTSRCS}'
	thread_dir=pthreads
	#
	# We'd like to use sigwait() too
	#
	AC_CHECK_FUNC(sigwait,
		      AC_DEFINE(HAVE_SIGWAIT),
		      AC_CHECK_LIB(c, sigwait,
		      AC_DEFINE(HAVE_SIGWAIT),
		      AC_CHECK_LIB(pthread, sigwait,
				   AC_DEFINE(HAVE_SIGWAIT),
				   AC_CHECK_LIB(pthread, _Psigwait,
						AC_DEFINE(HAVE_SIGWAIT),))))
Francis Dupont's avatar
Francis Dupont committed
1176

Evan Hunt's avatar
Evan Hunt committed
1177
1178
	AC_CHECK_FUNC(pthread_attr_getstacksize,
		      AC_DEFINE(HAVE_PTHREAD_ATTR_GETSTACKSIZE),)
Francis Dupont's avatar
Francis Dupont committed
1179

Evan Hunt's avatar
Evan Hunt committed
1180
1181
	AC_CHECK_FUNC(pthread_attr_setstacksize,
		      AC_DEFINE(HAVE_PTHREAD_ATTR_SETSTACKSIZE),)
Evan Hunt's avatar
Evan Hunt committed
1182

1183
        AC_ARG_WITH(locktype,
1184
                [  --with-locktype=ARG     Specify mutex lock type (adaptive or standard)],
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
                locktype="$withval", locktype="adaptive")

        case "$locktype" in
                adaptive)
                        AC_MSG_CHECKING([for PTHREAD_MUTEX_ADAPTIVE_NP])

                        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
                          #define _GNU_SOURCE
                          #include <pthread.h>
                        ]], [[
                          return (PTHREAD_MUTEX_ADAPTIVE_NP);
                        ]])],
                        [ AC_MSG_RESULT(using adaptive lock type)
                          AC_DEFINE([HAVE_PTHREAD_MUTEX_ADAPTIVE_NP], 1,
                                    [Support for PTHREAD_MUTEX_ADAPTIVE_NP]) ],
                        [ AC_MSG_RESULT(using standard lock type) ])
                        ;;
                standard)
                        AC_MSG_RESULT(using standard lock type)
                        ;;
                *)
                        AC_MSG_ERROR([You must specify "adaptive" or "standard" for --with-locktype.])
                        ;;
        esac

Evan Hunt's avatar
Evan Hunt committed
1210
	AC_CHECK_HEADERS(sched.h)
Evan Hunt's avatar
Evan Hunt committed
1211

Evan Hunt's avatar
Evan Hunt committed
1212
1213
1214
	case "$host" in
	*solaris-*)
		AC_CHECK_LIB(rt, sched_yield)
Evan Hunt's avatar
Evan Hunt committed
1215
		;;
Evan Hunt's avatar
Evan Hunt committed
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
	esac

	AC_CHECK_FUNCS(sched_yield pthread_yield pthread_yield_np)

	#
	# Additional OS-specific issues related to pthreads and sigwait.
	#
	case "$host" in
		#
		# One more place to look for sigwait.
		#
		*-freebsd*)
			AC_CHECK_LIB(c_r, sigwait, AC_DEFINE(HAVE_SIGWAIT),)
			case $host in
			*-freebsd5.[[012]]|*-freebsd5.[[012]].*);;
			*-freebsd5.[[3456789]]|*-freebsd5.[[3456789]].*)
				AC_DEFINE(NEED_PTHREAD_SCOPE_SYSTEM)
				;;
			*-freebsd6.*)
				AC_DEFINE(NEED_PTHREAD_SCOPE_SYSTEM)
				;;
Evan Hunt's avatar
Evan Hunt committed
1237
			esac
Evan Hunt's avatar
Evan Hunt committed
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
			;;
		#
		# BSDI 3.0 through 4.0.1 needs pthread_init() to be
		# called before certain pthreads calls.	 This is deprecated
		# in BSD/OS 4.1.
		#
		*-bsdi3.*|*-bsdi4.0*)
			AC_DEFINE(NEED_PTHREAD_INIT)
			;;
		#
		# LinuxThreads requires some changes to the way we
		# deal with signals.
		#
		*-linux*)
			AC_DEFINE(HAVE_LINUXTHREADS)
			;;
		#
		# Ensure the right sigwait() semantics on Solaris and make
		# sure we call pthread_setconcurrency.
		#
		*-solaris*)
			AC_DEFINE(_POSIX_PTHREAD_SEMANTICS)
			AC_CHECK_FUNC(pthread_setconcurrency,
				      AC_DEFINE(CALL_PTHREAD_SETCONCURRENCY))
			;;
		#
		# UnixWare does things its own way.
		#
		*-sco-sysv*uw*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*)
			AC_DEFINE(HAVE_UNIXWARE_SIGWAIT)
			;;
	esac

	#
	# Look for sysconf to allow detection of the number of processors.
	#
	AC_CHECK_FUNC(sysconf, AC_DEFINE(HAVE_SYSCONF),)

else
	ISC_PLATFORM_USETHREADS="#undef ISC_PLATFORM_USETHREADS"
	thread_dir=nothreads
	THREADOPTOBJS=""
	THREADOPTSRCS=""
	ALWAYS_DEFINES=""
fi

AC_SUBST(ALWAYS_DEFINES)
AC_SUBST(ISC_PLATFORM_USETHREADS)
AC_SUBST(THREADOPTOBJS)
AC_SUBST(THREADOPTSRCS)
ISC_THREAD_DIR=$thread_dir
AC_SUBST(ISC_THREAD_DIR)
Evan Hunt's avatar
Evan Hunt committed
1290

1291
AC_MSG_CHECKING(for libtool)
1292
1293
1294
1295
1296
1297
AC_ARG_WITH(libtool,
	    [  --with-libtool          use GNU libtool],
	    use_libtool="$withval", use_libtool="no")

case $use_libtool in
	yes)
1298
		AC_MSG_RESULT(yes)
1299
1300
1301
1302
1303
1304
1305
		AM_PROG_LIBTOOL
		O=lo
		A=la
		LIBTOOL_MKDEP_SED='s;\.o;\.lo;'
		LIBTOOL_MODE_COMPILE='--mode=compile --tag=CC'
		LIBTOOL_MODE_INSTALL='--mode=install --tag=CC'
		LIBTOOL_MODE_LINK='--mode=link --tag=CC'
1306
		INSTALL_LIBRARY='${INSTALL_PROGRAM}'
1307
1308
1309
1310
1311
1312
1313
1314
1315
		case "$host" in
		*) LIBTOOL_ALLOW_UNDEFINED= ;;
		esac
		case "$host" in
		*-ibm-aix*) LIBTOOL_IN_MAIN="-Wl,-bI:T_testlist.imp" ;;
		*) LIBTOOL_IN_MAIN= ;;
		esac;
		;;
	*)
1316
		AC_MSG_RESULT(no)
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
		O=o
		A=a
		LIBTOOL=
		AC_SUBST(LIBTOOL)
		LIBTOOL_MKDEP_SED=
		LIBTOOL_MODE_COMPILE=
		LIBTOOL_MODE_INSTALL=
		LIBTOOL_MODE_LINK=
		LIBTOOL_ALLOW_UNDEFINED=
		LIBTOOL_IN_MAIN=
1327
		INSTALL_LIBRARY='${INSTALL_DATA}'
1328
1329
		;;
esac
1330
AC_SUBST(INSTALL_LIBRARY)
1331

Evan Hunt's avatar
Evan Hunt committed
1332
1333
1334
1335
1336
1337
1338
#
# was --enable-native-pkcs11 specified?
#  (note it implies both --without-openssl and --with-pkcs11)
#
AC_ARG_ENABLE(native-pkcs11,
	[  --enable-native-pkcs11  use native PKCS11 for all crypto [[default=no]]],
	want_native_pkcs11="$enableval", want_native_pkcs11="no")
Evan Hunt's avatar
Evan Hunt committed
1339

Evan Hunt's avatar
Evan Hunt committed
1340
1341
1342
1343
1344
1345
1346
#
# was --with-openssl specified?
#
AC_ARG_WITH(openssl,
[  --with-openssl[=PATH]     Build with OpenSSL [yes|no|path].
			  (Crypto is required for DNSSEC)],
    use_openssl="$withval", use_openssl="auto")
Evan Hunt's avatar
Evan Hunt committed
1347

Evan Hunt's avatar
Evan Hunt committed
1348
1349
1350
1351
1352
#
# was --with-pkcs11 specified?
#
AC_ARG_WITH(pkcs11,
[  --with-pkcs11[=PATH]      Build with PKCS11 support [yes|no|path]
1353
			  (PATH is for the PKCS11 provider)],
Evan Hunt's avatar
Evan Hunt committed
1354
   use_pkcs11="$withval", use_pkcs11="auto")
1355

1356
1357
1358
1359
1360
1361
1362
1363
#
# were --with-ecdsa, --with-gost, --with-aes specified
#
AC_ARG_WITH(ecdsa, [  --with-ecdsa            Crypto ECDSA],
	    with_ecdsa="$withval", with_ecdsa="auto")
AC_ARG_WITH(gost, [  --with-gost             Crypto GOST [yes|no|raw|asn1].],
	    with_gost="$withval", with_gost="auto")
AC_ARG_WITH(aes, [  --with-aes              Crypto AES],
1364
	    with_aes="$withval", with_aes="checkcc")
1365
1366
1367
1368
1369
1370

#
# was --enable-openssl-hash specified?
#
AC_ARG_ENABLE(openssl-hash,
	[  --enable-openssl-hash   use OpenSSL for hash functions [[default=no]]],
1371
	want_openssl_hash="$enableval", want_openssl_hash="checkcc")
1372
1373

#
1374
# Client Cookie algorithm choice
1375
#
1376
1377
1378
AC_ARG_WITH(cc-alg,
	[  --with-cc-alg=ALG      choose the algorithm for Client Cookie [[aes|sha1|sha256]]],
	with_cc_alg="$withval", with_cc_alg="auto")
1379

1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
case $with_cc_alg in
	*1)
		with_cc_alg="sha1"
		;;
	*2*)
		with_cc_alg="sha256"
		;;
	auto)
		if test "$with_aes" != "no"
		then
			with_aes="yes"
		fi
		;;
	*)
		with_cc_alg="aes"
		if test "$with_aes" != "no"
		then
			with_aes="yes"
		fi
		;;
1400
esac
1401
if test "with_aes" = "checkcc"
1402
1403
1404
1405
1406
1407
then
	with_aes="no"
fi

AC_MSG_CHECKING(for OpenSSL library)
OPENSSL_WARNING=
Evan Hunt's avatar
Evan Hunt committed
1408
openssldirs="/usr /usr/local /usr/local/ssl /usr/pkg /usr/sfw"
1409
1410
1411
1412
1413
1414
if test "$want_native_pkcs11" = "yes"
then
	use_openssl="native_pkcs11"
	AC_MSG_RESULT(use of native PKCS11 instead)
fi

Evan Hunt's avatar
Evan Hunt committed
1415
if test "$use_openssl" = "auto"
1416
then
1417
1418
1419
1420
1421
1422
1423
1424
	for d in $openssldirs
	do
		if test -f $d/include/openssl/opensslv.h
		then
			use_openssl=$d
			break
		fi
	done
1425
fi
Evan Hunt's avatar
Evan Hunt committed
1426
1427
OPENSSL_ECDSA=""
OPENSSL_GOST=""
1428
1429
1430
1431
1432
1433
1434
1435
gosttype="raw"
case "$with_gost" in
	raw)
		with_gost="yes"
		;;
	asn1)
		AC_DEFINE(PREFER_GOSTASN1, 1,
			  [Define if GOST private keys are encoded in ASN.1.])
1436
		gosttype="asn1"
1437
1438
1439
1440
1441
1442
1443
1444
1445
		with_gost="yes"
		;;
	auto|yes|no)
		;;
	*)
		AC_MSG_ERROR(unknown GOST private key encoding)
		;;
esac

Evan Hunt's avatar
Evan Hunt committed
1446
1447
1448
1449
case "$use_openssl" in
	native_pkcs11)
		AC_MSG_RESULT(disabled because of native PKCS11)
		DST_OPENSSL_INC=""
1450
		CRYPTO="-DPKCS11CRYPTO"
Evan Hunt's avatar
Evan Hunt committed
1451
1452
1453
1454
1455
		OPENSSLGOSTLINKOBJS=""
		OPENSSLGOSTLINKSRS=""
		OPENSSLLINKOBJS=""
		OPENSSLLINKSRCS=""
		;;
1456
	no)
Evan Hunt's avatar
Evan Hunt committed
1457
1458
1459
1460
1461
1462
1463
		AC_MSG_RESULT(no)
		DST_OPENSSL_INC=""
		CRYPTO=""
		OPENSSLGOSTLINKOBJS=""
		OPENSSLGOSTLINKSRS=""
		OPENSSLLINKOBJS=""
		OPENSSLLINKSRCS=""
1464
		;;
Evan Hunt's avatar
Evan Hunt committed
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
	auto)
		DST_OPENSSL_INC=""
		CRYPTO=""
		OPENSSLGOSTLINKOBJS=""
		OPENSSLGOSTLINKSRS=""
		OPENSSLLINKOBJS=""
		OPENSSLLINKSRCS=""
		AC_MSG_ERROR(
[OpenSSL was not found in any of $openssldirs; use --with-openssl=/path
If you don't want OpenSSL, use --without-openssl])
1475
1476
		;;
	*)
1477
1478
1479
1480
1481
		if test "$want_native_pkcs11" = "yes"
		then
                        AC_MSG_RESULT()
			AC_MSG_ERROR([OpenSSL and native PKCS11 cannot be used together.])
		fi
Evan Hunt's avatar
Evan Hunt committed
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
		if test "$use_openssl" = "yes"
		then
			# User did not specify a path - guess it
			for d in $openssldirs
			do
				if test -f $d/include/openssl/opensslv.h
				then
					use_openssl=$d
					break
				fi
			done
			if test "$use_openssl" = "yes"
			then
				AC_MSG_RESULT(not found)
				AC_MSG_ERROR(
[OpenSSL was not found in any of $openssldirs; use --with-openssl=/path])
			fi
		elif ! test -f "$use_openssl"/include/openssl/opensslv.h
		then
			AC_MSG_ERROR(["$use_openssl/include/openssl/opensslv.h" not found])
		fi
		CRYPTO='-DOPENSSL'
		if test "$use_openssl" = "/usr"
		then
			DST_OPENSSL_INC=""
1507
			DST_OPENSSL_LIBS="-lcrypto"
Evan Hunt's avatar
Evan Hunt committed
1508
1509
1510
1511
		else
			DST_OPENSSL_INC="-I$use_openssl/include"
			case $host in
			*-solaris*)
1512
				DST_OPENSSL_LIBS="-L$use_openssl/lib -R$use_openssl/lib -lcrypto"
Evan Hunt's avatar
Evan Hunt committed
1513
1514
				;;
			*-hp-hpux*)
1515
				DST_OPENSSL_LIBS="-L$use_openssl/lib -Wl,+b: -lcrypto"
Evan Hunt's avatar
Evan Hunt committed
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
				;;
			*-apple-darwin*)
				#
				# Apple's ld seaches for serially for dynamic
				# then static libraries.  This means you can't
				# use -L to override dynamic system libraries
				# with static ones when linking.  Instead
				# we specify a absolute path.
				#
				if test -f "$use_openssl/lib/libcrypto.dylib"
				then
1527
					DST_OPENSSL_LIBS="-L$use_openssl/lib -lcrypto"
Evan Hunt's avatar
Evan Hunt committed
1528
				else
1529
					DST_OPENSSL_LIBS="$use_openssl/lib/libcrypto.a"
Evan Hunt's avatar
Evan Hunt committed
1530
1531
1532
				fi
				;;
			*)
1533
				DST_OPENSSL_LIBS="-L$use_openssl/lib -lcrypto"
Evan Hunt's avatar
Evan Hunt committed
1534
1535
1536
1537
1538
1539
1540
1541
1542
				;;
			esac
		fi
		AC_MSG_RESULT(using OpenSSL from $use_openssl/lib and $use_openssl/include)

		saved_cc="$CC"
		saved_cflags="$CFLAGS"
		saved_libs="$LIBS"
		CFLAGS="$CFLAGS $DST_OPENSSL_INC"
1543
		LIBS="$LIBS $DST_OPENSSL_LIBS"
Evan Hunt's avatar
Evan Hunt committed
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
		AC_MSG_CHECKING(whether linking with OpenSSL works)
		AC_TRY_RUN([
#include <openssl/err.h>
int main() {
	ERR_clear_error();
	return (0);
}
],
		[AC_MSG_RESULT(yes)],
		[AC_MSG_RESULT(no)
		 AC_MSG_ERROR(Could not run test program using OpenSSL from
$use_openssl/lib and $use_openssl/include.
Please check the argument to --with-openssl and your
shared library configuration (e.g., LD_LIBRARY_PATH).)],
		[AC_MSG_RESULT(assuming it does work on target platform)])

		AC_MSG_CHECKING(whether linking with OpenSSL requires -ldl)
		AC_TRY_LINK([
1562
1563
1564
#include <openssl/err.h>
#include <openssl/dso.h>
],
Evan Hunt's avatar
Evan Hunt committed
1565
1566
1567
1568
1569
[ DSO_METHOD_dlfcn(); ],
		[AC_MSG_RESULT(no)],
		[LIBS="$LIBS -ldl"
		AC_TRY_LINK([
#include <openssl/err.h>
1570
#include <openssl/dso.h>
Evan Hunt's avatar
Evan Hunt committed
1571
1572
],[ DSO_METHOD_dlfcn(); ],
		[AC_MSG_RESULT(yes)
1573
		DST_OPENSSL_LIBS="$DST_OPENSSL_LIBS -ldl"
Evan Hunt's avatar
Evan Hunt committed
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
		],
		 [AC_MSG_RESULT(unknown)
		 AC_MSG_ERROR(OpenSSL has unsupported dynamic loading)],
		[AC_MSG_RESULT(assuming it does work on target platform)])
		],
		[AC_MSG_RESULT(assuming it does work on target platform)]
		)
		 
AC_ARG_ENABLE(openssl-version-check,
[AC_HELP_STRING([--enable-openssl-version-check],
1584
	[check OpenSSL version @<:@default=yes@:>@])])
Evan Hunt's avatar
Evan Hunt committed
1585
1586
1587
1588
1589
1590
1591
1592
1593
case "$enable_openssl_version_check" in
yes|'')
		AC_MSG_CHECKING(OpenSSL library version)
		AC_TRY_RUN([
#include <stdio.h>
#include <openssl/opensslv.h>
int main() {
	if ((OPENSSL_VERSION_NUMBER >= 0x009070cfL &&
	     OPENSSL_VERSION_NUMBER < 0x00908000L) ||
1594
	     (OPENSSL_VERSION_NUMBER >= 0x0090804fL &&
1595
1596
	     OPENSSL_VERSION_NUMBER < 0x10002000L) ||
	     OPENSSL_VERSION_NUMBER >= 0x1000205fL)
Evan Hunt's avatar
Evan Hunt committed
1597
1598
1599
1600
		return (0);
	printf("\n\nFound   OPENSSL_VERSION_NUMBER %#010x\n",
		OPENSSL_VERSION_NUMBER);
	printf("Require OPENSSL_VERSION_NUMBER 0x009070cf or greater (0.9.7l)\n"
1601
1602
1603
1604
	       "Require OPENSSL_VERSION_NUMBER 0x0090804f or greater (0.9.8d)\n"
	       "Require OPENSSL_VERSION_NUMBER 0x1000000f or greater (1.0.0)\n"
	       "Require OPENSSL_VERSION_NUMBER 0x1000100f or greater (1.0.1)\n"
	       "Require OPENSSL_VERSION_NUMBER 0x1000205f or greater (1.0.2e)\n\n");
Evan Hunt's avatar
Evan Hunt committed
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
	return (1);
}
		],
		[AC_MSG_RESULT(ok)],
		[AC_MSG_RESULT(not compatible)
		 OPENSSL_WARNING=yes
		],
		[AC_MSG_RESULT(assuming target platform has compatible version)])
;;
no)
	AC_MSG_RESULT(Skipped OpenSSL version check)
;;
esac

1619
1620
1621
1622
1623
1624
1625
1626
	AC_MSG_CHECKING(for OpenSSL DSA support)
	if test -f $use_openssl/include/openssl/dsa.h
	then
		AC_DEFINE(HAVE_OPENSSL_DSA)
		AC_MSG_RESULT(yes)
	else
		AC_MSG_RESULT(no)
	fi
1627

1628
	AC_CHECK_FUNCS(EVP_sha256 EVP_sha384 EVP_sha512)
1629

1630
1631
1632
	AC_MSG_CHECKING(for OpenSSL ECDSA support)
	have_ecdsa=""
	AC_TRY_RUN([
Evan Hunt's avatar
Evan Hunt committed
1633
1634
1635
1636
#include <openssl/ecdsa.h>
#include <openssl/objects.h>
int main() {
	EC_KEY *ec256, *ec384;
1637

Evan Hunt's avatar
Evan Hunt committed
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
#if !defined(HAVE_EVP_SHA256) || !defined(HAVE_EVP_SHA384)
	return (1);
#endif
	ec256 = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
	ec384 = EC_KEY_new_by_curve_name(NID_secp384r1);
	if (ec256 == NULL || ec384 == NULL)
		return (2);
	return (0);
}
],
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
	[AC_MSG_RESULT(yes)
	have_ecdsa="yes"],
	[AC_MSG_RESULT(no)
	have_ecdsa="no"],
	[AC_MSG_RESULT(using --with-ecdsa)])
	case "$with_ecdsa" in
	yes)
	    case "$have_ecdsa" in
	    no)  AC_MSG_ERROR([ecdsa not supported]) ;;
	    *)  have_ecdsa=yes ;;
	    esac
	    ;;
	no)
	    have_ecdsa=no ;;
	*)
	    case "$have_ecdsa" in
	    yes|no) ;;
	    *) AC_MSG_ERROR([need --with-ecdsa=[[yes or no]]]) ;;
	    esac
	    ;;
	esac
	case $have_ecdsa in
	yes)
		OPENSSL_ECDSA="yes"
		AC_DEFINE(HAVE_OPENSSL_ECDSA, 1,
			  [Define if your OpenSSL version supports ECDSA.])