1#                                               -*- Autoconf -*-
2# Process this file with autoconf to produce a configure script.
3#
4# Copyright (c) 2009-2015, The Trusted Domain Project.  All rights reserved.
5#
6
7#
8# Setup
9#
10AC_PREREQ(2.61)
11
12#
13# Package version
14#
15m4_define([VERSION_RELEASE], 2)
16m4_define([VERSION_MAJOR_REV], 10)
17m4_define([VERSION_MINOR_REV], 3)
18m4_define([VERSION_PATCH], 0)
19
20#
21# Library version
22# 	- bump "current" and reset "revision" with API changes
23# 	- bump "revision" with internal source code changes
24#
25m4_define([LIBVERSION_CURRENT], 10)
26m4_define([LIBVERSION_REVISION], 3)
27m4_define([LIBVERSION_AGE], 0)
28
29#
30# Autotools setup
31#
32AC_INIT([OpenDKIM],
33        [VERSION_RELEASE.VERSION_MAJOR_REV.VERSION_MINOR_REV],
34        [bugs@opendkim.org])
35
36AC_CONFIG_AUX_DIR([build-aux])
37AM_INIT_AUTOMAKE(
38  1.11.1
39  dnl Automake version before 1.13 (when the serial-tests option was
40  dnl still the default) still defined the badly obsolete macro
41  dnl 'AM_PROG_INSTALL'.
42  m4_ifndef([AM_PROG_INSTALL], [serial-tests])
43)
44AC_CONFIG_HEADERS([build-config.h])
45
46AC_CONFIG_MACRO_DIR([m4])
47
48#
49# Hexadecimal version, for use in generating dkim.h
50#
51HEX_VERSION=$(printf %08x $(( ((VERSION_RELEASE << 8 | VERSION_MAJOR_REV) << 8 | VERSION_MINOR_REV) << 8| VERSION_PATCH )))
52AC_SUBST([HEX_VERSION])
53
54#
55# library version, passed to libtool
56#
57LIBOPENDKIM_VERSION_INFO=$(printf %d:%d:%d LIBVERSION_CURRENT LIBVERSION_REVISION LIBVERSION_AGE)
58AC_SUBST([LIBOPENDKIM_VERSION_INFO])
59
60#
61# Checks for programs
62#
63AC_PROG_CC
64AC_PROG_CC_C99
65AM_PROG_CC_C_O
66AC_PROG_LIBTOOL
67
68PKG_PROG_PKG_CONFIG
69
70#
71# Check for how to compile threaded stuff
72#
73AX_PTHREAD
74
75#
76# save outer values
77#
78outer_CFLAGS="$CFLAGS"
79outer_CPPFLAGS="$CPPFLAGS"
80outer_LDFLAGS="$LDFLAGS"
81outer_LIBS="$LIBS"
82
83#
84# Checks for libraries
85#
86saved_LIBS="$LIBS"
87LIBS=""
88AC_SEARCH_LIBS(inet_addr, nsl)
89LIBNSL_LIBS="$LIBS"
90LIBS="$saved_LIBS"
91AC_SUBST([LIBNSL_LIBS])
92
93saved_LIBS="$LIBS"
94LIBS=""
95AC_SEARCH_LIBS(dlopen, dl)
96LIBDL_LIBS="$LIBS"
97LIBS="$saved_LIBS"
98AC_SUBST([LIBDL_LIBS])
99
100AC_SEARCH_LIBS(socket, socket)
101AC_SEARCH_LIBS(inet_aton, resolv)
102AC_SEARCH_LIBS(inet_pton, resolv,
103               AC_DEFINE(HAVE_INET_PTON, 1,
104                         [Define to 1 if you have the `inet_pton()' function.]))
105AC_SEARCH_LIBS(inet_ntop, resolv nsl,
106               AC_DEFINE(HAVE_INET_NTOP, 1,
107                        [Define to 1 if you have the `inet_ntop()' function.]))
108AC_SEARCH_LIBS(getaddrinfo, resolv,
109               AC_DEFINE(HAVE_GETADDRINFO, 1,
110                         [Define to 1 if you have the `getaddrinfo()' function.]))
111AC_SEARCH_LIBS(res_ninit, resolv,
112               AC_DEFINE(HAVE_RES_NINIT, 1,
113                         [Define to 1 if you have the `res_ninit()' function.]))
114AC_SEARCH_LIBS(res_sertservers, resolv bind,
115               AC_DEFINE(HAVE_RES_SETSERVERS, 1,
116                         [Define to 1 if you have the `res_setservers()' function.]))
117AC_SEARCH_LIBS(getopt_long, iberty,
118               AC_DEFINE(HAVE_GETOPT_LONG, 1,
119                         [Define to 1 if you have the `getopt_long()' function.]))
120
121AC_HEADER_RESOLV
122
123#
124# Check for types
125#
126
127AC_CHECK_TYPES([useconds_t])
128
129#
130# See if libopendkim will need -lresolv
131#
132dnscheck='
133#include "confdefs.h"
134#include <sys/types.h>
135#include <netinet/in.h>
136#include <arpa/nameser.h>
137#include <resolv.h>
138int main() {
139res_mkquery (0, 0, 0, 0, 0, 0, 0, 0, 0);
140dn_expand (0, 0, 0, 0, 0);
141dn_skipname (0, 0);
142dn_comp (0, 0, 0, 0, 0);
143return 0;
144}'
145AC_MSG_CHECKING([whether the resolver works without -lresolv])
146LIBRESOLV=
147AC_LINK_IFELSE([AC_LANG_SOURCE([
148$dnscheck
149])] , [
150	AC_MSG_RESULT(yes)
151] , [
152	AC_MSG_RESULT(no)
153	AC_MSG_CHECKING([whether the resolver works with -lresolv])
154	saved_LIBS="$LIBS"
155	LIBS="$outer_LIBS -lresolv"
156	AC_LINK_IFELSE([AC_LANG_SOURCE([
157$dnscheck
158	])] , [
159		AC_MSG_RESULT(yes)
160		LIBRESOLV=-lresolv
161	] , [
162		AC_MSG_RESULT(no)
163		AC_MSG_ERROR([need workable resolver library])
164	])
165	LIBS="$saved_LIBS"
166])
167AC_SUBST([LIBRESOLV])
168
169#
170# Checks for header files
171#
172AC_CHECK_HEADERS([arpa/inet.h fcntl.h limits.h iso/limits_iso.h netdb.h netinet/in.h paths.h stdlib.h string.h sys/file.h sys/param.h sys/socket.h sys/time.h syslog.h unistd.h stdint.h])
173
174#
175# Checks for typedefs, structures, and compiler characteristics.
176#
177AC_HEADER_STDBOOL
178AC_TYPE_UID_T
179AC_TYPE_MODE_T
180AC_TYPE_OFF_T
181AC_TYPE_PID_T
182AC_TYPE_SIZE_T
183AC_TYPE_SSIZE_T
184AC_TYPE_UINT16_T
185AC_TYPE_UINT32_T
186AC_TYPE_UINT64_T
187
188#
189# Checks for library functions.
190#
191AC_FUNC_FORK
192AC_FUNC_GETGROUPS
193AC_FUNC_MALLOC
194AC_FUNC_MKTIME
195AC_FUNC_REALLOC
196
197AC_CHECK_FUNCS([dup2 endpwent getcwd gethostname gethostbyname getaddrinfo gethostbyname2 gettimeofday isascii memchr memmove memset regcomp select socket strcasecmp strchr strdup strerror strncasecmp strrchr strstr strtol strtoul strtoull realpath strsep])
198
199bsdstrl_h_found="no"
200strl_found="no"
201libstrl_found="no"
202strl_h_found="no"
203
204AC_CHECK_HEADERS([bsd/string.h], [bsdstrl_h_found="yes"])
205
206AC_CHECK_FUNCS([strlcat strlcpy], [strl_found="yes"],
207               [
208		saved_LIBS="$LIBS"
209		LIBS="$outer_LIBS"
210		AC_SEARCH_LIBS([strlcat],
211		               [bsd strl],
212		               [libstrl_found="yes"],
213		               [strl_found="no"])
214		AC_SEARCH_LIBS([strlcpy],
215		               [bsd strl],
216		               [libstrl_found="yes"],
217		               [strl_found="no"])
218		STRL_LIBS="$LIBS"
219		LIBS="$saved_LIBS"
220               ])
221
222if test x"$libstrl_found" = x"yes"
223then
224	LIBS="$LIBS $STRL_LIBS"
225fi
226
227# we need something above to have worked
228if test x"$strl_found" != x"yes" -a x"$libstrl_found" != x"yes"
229then
230	AC_MSG_ERROR(no strlcpy/strlcat found)
231fi
232
233AC_CHECK_HEADERS([strl.h], [strl_h_found="yes"])
234if test x"$strl_h_found" != x"yes"
235then
236	strldirs="/usr/local/include /usr/include"
237
238	for d in $strldirs
239	do
240		AC_MSG_CHECKING([for strl.h in $d/strl])
241		if test -f $d/strl/strl.h
242		then
243			unset ac_cv_header_strl_h
244			saved_CPPFLAGS="$CPPFLAGS"
245			CPPFLAGS="$CPPFLAGS -I$d/strl"
246			AC_CHECK_HEADERS([strl.h], [strl_h_found="yes"])
247			CPPFLAGS="$saved_CPPFLAGS"
248		fi
249
250		if test x"$strl_h_found" = x"yes"
251		then
252			CPPFLAGS="$CPPFLAGS -I$d/strl"
253			break
254		fi
255	done
256fi
257
258# we need to include <strl.h> if an installed strl.h was found and no
259# bsd/string.h was found
260if test x"$strl_h_found" = x"yes" -a x"$bsdstrl_h_found" = x"no"
261then
262	AC_DEFINE([USE_STRL_H], 1,
263	          [Define to 1 if you need to include <strl.h> to get the `strlcat()' and `strlcpy()' functions.])
264fi
265
266if test x"$bsdstrl_h_found" = x"yes"
267then
268	AC_DEFINE([USE_BSD_H], 1,
269	          [Define to 1 if you need to include <bsd/string.h> to get the `strlcat()' and `strlcpy()' functions.])
270fi
271
272#
273# Checks for structure members
274#
275AC_CHECK_MEMBER([struct sockaddr_un.sun_len],
276                AC_DEFINE([HAVE_SUN_LEN],
277                          [1],
278                          [Define if sockaddr_un has a sun_len member]),
279                [],
280                [[#include <sys/un.h>]])
281
282AC_CHECK_MEMBER([struct sockaddr_in.sin_len],
283                AC_DEFINE([HAVE_SIN_LEN],
284                          [1],
285                          [Define if sockaddr_in has a sin_len member]),
286                [],
287                [[#include <netinet/in.h>]])
288
289AC_CHECK_MEMBER([struct sockaddr_in6.sin6_len],
290                AC_DEFINE([HAVE_SIN6_LEN],
291                          [1],
292                          [Define if sockaddr_in6 has a sin6_len member]),
293                [],
294                [[#include <netinet/in.h>]])
295
296#
297# Library feature string and macros
298#
299LIBOPENDKIM_FEATURE_STRING="libopendkim $PACKAGE_VERSION:"
300
301AC_DEFUN([TR_UP], [m4_translit([AS_TR_SH([$1])], [a-z], [A-Z])])
302
303AC_DEFUN([FEATURE],
304         [notincluded="(Not enabled for this installation.)"
305          AC_ARG_ENABLE($1, AS_HELP_STRING(--enable-$1, $2),
306                        AS_IF([test "x$enable_]$1[" = "xyes"],
307                              [
308				AC_SUBST(TR_UP($1)[_MANNOTICE], "")
309				AC_DEFINE(TR_UP($1), 1, [enable $1 feature])
310			      ],
311			      [
312				AC_SUBST(TR_UP($1)[_MANNOTICE], $notincluded)
313			      ]),
314                        AC_SUBST(TR_UP($1)[_MANNOTICE], $notincluded))
315         ])
316
317AC_DEFUN([LIB_FEATURE],
318         [FEATURE($1, $2)
319          AS_IF([test "x$enable_]$1[" = "xyes"],
320	        [
321			LIBOPENDKIM_FEATURE_STRING="$LIBOPENDKIM_FEATURE_STRING $1"
322		])
323         ])
324
325AC_DEFUN([FFR_FEATURE],
326         [experimentalnotincluded="(Experimental feature not enabled for this installation.)"
327          AC_ARG_ENABLE($1, AS_HELP_STRING(--enable-$1, $2),
328                        AS_IF([test "x$enable_]$1[" = "xyes"],
329                              [
330				AC_DEFINE([_FFR_]TR_UP($1), 1,
331				          [enable $1 feature])
332				AC_SUBST(TR_UP($1)[_MANNOTICE],
333				         "(Note: Feature is experimental.)")
334                              ],
335                              [
336				AC_SUBST(TR_UP($1)[_MANNOTICE],
337				         $experimentalnotincluded)
338                              ]),
339                        AC_SUBST(TR_UP($1)[_MANNOTICE],
340                                 $experimentalnotincluded))
341         ])
342
343AC_DEFUN([LIB_FFR_FEATURE],
344         [FFR_FEATURE($1, $2)
345          AS_IF([test "x$enable_]$1[" = "xyes"],
346                [
347			LIBOPENDKIM_FEATURE_STRING="$LIBOPENDKIM_FEATURE_STRING $1"
348		])
349         ])
350
351#
352# opendkim
353#
354FEATURE([popauth], [enable POP-before-SMTP support])
355
356FEATURE([poll], [use poll() instead of select()])
357
358FFR_FEATURE([atps], [experimental Authorized Third Party Signers checks])
359LIB_FFR_FEATURE([atps], [experimental Authorized Third Party Signers checks])
360AM_CONDITIONAL([ATPS], [test x"$enable_atps" = x"yes"])
361
362FFR_FEATURE([db_handle_pools], [experimental database handle pools])
363
364FFR_FEATURE([diffheaders], [compare signed and verified headers when possible])
365LIB_FFR_FEATURE([diffheaders],
366                [compare signed and verified headers when possible])
367
368FFR_FEATURE([identity_header], [special header to set identity])
369
370FFR_FEATURE([ldap_caching], [LDAP query piggybacking and caching])
371
372FFR_FEATURE([postgresql_reconnect_hack],
373            [hack to overcome PostgreSQL connection error detection bug])
374
375FFR_FEATURE([rate_limit], [support for DKIM-based rate limiting])
376
377FFR_FEATURE([replace_rules], [support for string substitution when signing])
378AM_CONDITIONAL([REPLACE_RULES], [test x"$enable_replace_rules" = x"yes"])
379
380FFR_FEATURE([reprrd],
381            [support for experimental reputation checks using RRD])
382AM_CONDITIONAL([REPRRD], [test x"$enable_reprrd" = x"yes"])
383AC_CHECK_PROG([hasrrdtool], [rrdtool], [yes])
384if test x"$enable_reprrd" = x"yes" -a x"$hasrrdtool" != x"yes"
385then
386	AC_MSG_ERROR([--enable-reprrd requires rrdtool binary, not found])
387fi
388
389FFR_FEATURE([reputation],
390            [support for experimental reputation checks])
391if test x"$enable_reputation" = x"yes"
392then
393	AC_SEARCH_LIBS([ceil], [m])
394fi
395AM_CONDITIONAL([REPUTE], [test x"$enable_reputation" = x"yes"])
396
397FFR_FEATURE([resign],
398            [support for one-step re-signing])
399
400FFR_FEATURE([sender_macro], [macro to determine sender])
401
402FFR_FEATURE([socketdb], [arbitrary socket data sets])
403
404FFR_FEATURE([stats], [stats recording and reporting])
405AM_CONDITIONAL([STATS], [test x"$enable_stats" = x"yes"])
406FFR_FEATURE([statsext], [extended stats recording and reporting])
407
408FFR_FEATURE([rbl], [Realtime Blacklist query support])
409AM_CONDITIONAL([RBL], [test x"$enable_rbl" = x"yes"])
410
411FFR_FEATURE([vbr], [Vouch-By-Reference support])
412AM_CONDITIONAL([VBR], [test x"$enable_vbr" = x"yes"])
413
414if test x"$enable_statsext" = x"yes" -a x"$enable_stats" != x"yes"
415then
416	AC_MSG_ERROR([--enable-statsext requires --enable-stats])
417fi
418
419FFR_FEATURE([default_sender], [default sender address])
420
421# sendmail command
422
423AC_PATH_PROG([SENDMAIL_PATH], [sendmail], [/usr/sbin/sendmail],
424             [/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/lib:$PATH])
425AC_DEFINE_UNQUOTED([SENDMAIL_PATH], "$ac_cv_path_SENDMAIL_PATH",
426                   [The path the the sendmail executable for report sending])
427AC_SUBST([SENDMAIL_PATH])
428
429#
430# use rpath at load time?
431#
432
433AC_ARG_ENABLE(
434	[rpath],
435	AS_HELP_STRING([--enable-rpath],
436	               [include library load paths in binaries]),
437	,
438	enable_rpath="yes")
439AM_CONDITIONAL([RPATH], [test x"$enable_rpath" = x"yes"])
440if test x"$enable_rpath" != x"yes"
441then
442	AC_MSG_RESULT([Suppressing -rpath use by libtool])
443	hardcode_libdir_flag_spec=" -D__LIBTOOL_NO_RPATH__ "
444	chmod 0755 libtool
445fi
446
447#
448# test coverage/profiling stuff
449#
450AC_ARG_ENABLE([codecoverage],
451	AS_HELP_STRING([--enable-codecoverage],
452	               [include code coverage/profiling code]))
453if test x"$enable_codecoverage" = x"yes"
454then
455	# gcc can do all of them; Solaris cc can only do gprof
456	AC_CHECK_PROG([hasgcc], [gcc], [yes])
457	AC_CHECK_PROG([hascc], [cc], [yes])
458	if test x"$hasgcc" != x"yes" -a x"$hascc" = x"yes"
459	then
460		if test x`cc -V 2>&1 | grep -c "Sun C"` = x"1"
461		then
462			hassuncc="yes"
463		fi
464	fi
465
466	# figure out which profiling system to use
467	AC_CHECK_PROG([hasgprof], [gprof], [yes])
468	AC_ARG_WITH(gprof,
469		AS_HELP_STRING(--with-gprof, profiling with gprof),
470		hasgprof="$withval")
471	if test x"$hasgcc" = x"yes"
472	then
473		AC_CHECK_PROG([hasgcov], [gcov], [yes])
474		AC_ARG_WITH(gcov,
475			AS_HELP_STRING(--with-gcov, profiling with gcov),
476			hasgcov="$withval")
477		AC_CHECK_PROG([haslcov], [lcov], [yes])
478		AC_ARG_WITH(lcov,
479			AS_HELP_STRING(--with-lcov, profiling with lcov),
480			haslcov="$withval")
481	fi
482
483	# bail if none
484	if test x"$hasgprof" != x"yes" -a \
485		x"$hasgcov" != x"yes" -a \
486		x"$haslcov" != x"yes"
487	then
488		AC_MSG_ERROR([no supported test coverage packages found])
489	fi
490
491	# see if there's a libgcov (OpenBSD doesn't have one)
492	if test x"$hasgcov" = x"yes" -a x"$haslcov" != x"yes"
493	then
494		saved_LIBS="$LIBS"
495		LIBS="$outer_LIBS"
496		AC_SEARCH_LIBS([__gcov_init], [gcov])
497		GCOV_LIBS="$LIBS"
498		LIBS="$saved_LIBS"
499	fi
500
501	COV_CFLAGS=""
502	COV_LDFLAGS=""
503	COV_LIBADD=""
504
505	# sun profiling
506	if test x"$hasgprof" = x"yes" -a \
507	        x"$hasgcov" != x"yes" -a \
508	        x"$hassuncc" = x"yes"
509	then
510		COV_CFLAGS="-g -xpg"
511		COV_LDFLAGS="-g -xpg"
512	# non-sun profiling
513	elif test x"$hasgprof" = x"yes" -a \
514		x"$hasgcov" != x"yes" -a \
515		x"$hassuncc" != x"yes"
516	then
517		COV_CFLAGS="-g -pg"
518		COV_LDFLAGS="-g -pg"
519	# gcov profiling
520	elif test x"$hasgcov" = x"yes"
521	then
522		COV_CFLAGS="-g -fprofile-arcs -ftest-coverage"
523		COV_LIBADD="$GCOV_LIBS"
524	fi
525
526	AC_SUBST(COV_CFLAGS)
527	AC_SUBST(COV_LDFLAGS)
528	AC_SUBST(COV_LIBADD)
529fi
530
531# see if profiling-enabled binaries generate profile output with the
532# standard name "gmon.out" or "<file>.gmon"
533
534gprof_gmon_out="unknown"
535if test x"$hasgprof" = x"yes"
536then
537	gprofcheck='
538int main() {
539	long x;
540
541	x = random();
542}'
543	AC_MSG_CHECKING([names of profiling output files])
544
545	saved_CFLAGS="$CFLAGS"
546	saved_LDFLAGS="$LDFLAGS"
547
548	CFLAGS="$CFLAGS $COV_CFLAGS"
549	LDFLAGS="$LDFLAGS $COV_LDFLAGS"
550
551	AC_RUN_IFELSE([AC_LANG_SOURCE([$gprofcheck])],
552	              [	if test -f "gmon.out"
553			then
554				gprof_gmon_out="yes"
555				rm -f gmon.out
556				AC_MSG_RESULT(gmon.out)
557			else
558				gprof_gmon_out="no"
559				rm -f *.gmon
560				AC_MSG_RESULT([<binary>.gmon])
561			fi
562	              ],
563	              [AC_MSG_RESULT(unknown)])
564
565	CFLAGS="$saved_CFLAGS"
566	LDFLAGS="$saved_LDFLAGS"
567fi
568
569AM_CONDITIONAL(LCOV, test x"$haslcov" = x"yes" -a x"$hasgcov" = x"yes")
570AM_CONDITIONAL(GCOV, test x"$hasgcov" = x"yes")
571AM_CONDITIONAL(GCOV_ONLY, test x"$hasgcov" = x"yes" -a x"$haslcov" != x"yes")
572AM_CONDITIONAL(GPROF, test x"$hasgprof" = x"yes" -a x"$hasgcov" != x"yes")
573AM_CONDITIONAL(GPROF_FILENAMES, test x"$gprof_gmon_out" = x"no")
574
575#
576# opendkim
577#
578AC_ARG_ENABLE([filter],
579              AS_HELP_STRING([--disable-filter],
580                             [do not compile the opendkim filter]),
581              [enable_filter=$enableval],
582              [enable_filter=yes])
583AM_CONDITIONAL([BUILD_FILTER], [test x"$enable_filter" != x"no"])
584
585#
586# libopendkim
587#
588LIB_FEATURE([query_cache], [local key caching])
589
590#
591# Conditional stuff
592#
593AC_ARG_ENABLE([allsymbols],
594              AS_HELP_STRING([--enable-allsymbols],
595                             [export internal-use symbols for better test coverage]))
596AM_CONDITIONAL(ALL_SYMBOLS, [test x"$enable_allsymbols" = x"yes"])
597
598# the AM_CONDITIONAL and AC_DEFINE for USE_ARLIB are farther below,
599# after the Darwin checks
600
601AC_ARG_ENABLE([debug],
602              AS_HELP_STRING([--enable-debug],
603	                     [produce debugging binaries and libraries]),
604              AS_IF([test "x$enable_debug" = x"yes"],
605		[
606			LIBOPENDKIM_FEATURE_STRING="$LIBOPENDKIM_FEATURE_STRING debug"
607			[[CFLAGS=`echo $CFLAGS | sed 's/ -O[1-9s]*//g'`]]
608		])
609)
610
611AM_CONDITIONAL([DEBUG], [test x"$enable_debug" = x"yes"])
612
613#
614# gnutls
615#
616
617AC_ARG_WITH([gnutls],
618            AS_HELP_STRING([--with-gnutls],
619                           [location of GnuTLS includes and library]),
620            [gtpath="$withval"], [gtpath="no"])
621
622gnutls_found="no"
623
624if test \( x"$gtpath" = x"auto" -o x"$gtpath" = x"yes" \) -a x"$PKG_CONFIG" != x""
625then
626	PKG_CHECK_MODULES([GNUTLS], [gnutls >= 2.11.7],
627	                  [gnutls_found="pkg-config"],
628	                  [gnutls_found="auto"
629	                   AC_MSG_WARN([pkg-config for GnuTLS not found, trying manual search...])
630	                  ])
631elif test x"$gtpath" != x"no"
632then
633	AC_MSG_NOTICE([checking for GnuTLS library and includes in $gtpath])
634
635	saved_CFLAGS="$CFLAGS"
636	saved_CPPFLAGS="$CPPFLAGS"
637	saved_LDFLAGS="$LDFLAGS"
638	saved_LIBS="$LIBS"
639
640	LIBS="$outer_LIBS -lgnutls $saved_LIBS"
641	CPPFLAGS="-I$gtpath/include $saved_CPPFLAGS"
642	CFLAGS="$saved_CFLAGS"
643	LDFLAGS="-L$gtpath/lib $saved_LDFLAGS"
644
645	AC_CHECK_HEADERS([gnutls/gnutls.h], ,
646                         AC_MSG_ERROR([required GnuTLS header not found]))
647
648	AC_SEARCH_LIBS([gnutls_global_init], [gnutls], ,
649                       AC_MSG_ERROR([libgnutls not found]),
650	               [-lnettle -lgmp -ldl])
651
652	LIBCRYPTO_CPPFLAGS="-I$gtpath/include"
653	LIBCRYPTO_LIBDIRS="-L$gtpath/lib"
654	LIBCRYPTO_LIBS="-lgnutls"
655
656	CFLAGS="$saved_CFLAGS"
657	CPPFLAGS="$saved_CPPFLAGS"
658	LDFLAGS="$saved_LDFLAGS"
659	LIBS="$saved_LIBS"
660
661	gnutls_found="yes"
662fi
663
664if test x"$gnutls_found" = x"pkg-config"
665then
666	LIBCRYPTO_CPPFLAGS="$GNUTLS_CFLAGS"
667	LIBCRYPTO_LDFLAGS=""
668	LIBCRYPTO_LIBS="$GNUTLS_LIBS"
669	gnutls_found="yes"
670fi
671
672if test x"$gtpath" = x"yes" -a x"$gnutls_found" = x"auto"
673then
674	gcdirs="/usr/local /usr"
675
676	for d in $gcdirs
677	do
678		AC_MSG_NOTICE([checking for GnuTLS library and includes in $d])
679
680		saved_CFLAGS="$CFLAGS"
681		saved_CPPFLAGS="$CPPFLAGS"
682		saved_LDFLAGS="$LDFLAGS"
683		saved_LIBS="$LIBS"
684
685		LIBS="$outer_LIBS -lgnutls $saved_LIBS"
686		CPPFLAGS="-I$d/include $saved_CPPFLAGS"
687		CFLAGS="$saved_CFLAGS"
688		LDFLAGS="$outer_LDFLAGS -L$d/lib $saved_LDFLAGS"
689
690		gnutls_h_found="no"
691		gnutls_lib_found="no"
692
693		AC_CHECK_HEADERS([gnutls/gnutls.h], gnutls_h_found="yes")
694		AC_SEARCH_LIBS([gnutls_global_init], [gnutls],
695		               gnutls_lib_found="yes", , [-lnettle -lgmp])
696
697		CFLAGS="$saved_CFLAGS"
698		CPPFLAGS="$saved_CPPFLAGS"
699		LDFLAGS="$saved_LDFLAGS"
700		LIBS="$saved_LIBS"
701
702		if test x"$gnutls_h_found" = x"yes" -a \
703		        x"$gnutls_lib_found" = x"yes"
704		then
705			LIBCRYPTO_CPPFLAGS="-I$d/include"
706			LIBCRYPTO_LIBDIRS="-L$d/lib"
707			LIBCRYPTO_LIBS="-lgnutls"
708			gnutls_found="yes"
709			AC_MSG_NOTICE(libgnutls found in $d)
710			break
711		else
712			AC_MSG_NOTICE(not found in $d)
713		fi
714	done
715
716	if test x"$gnutls_found" != x"yes"
717	then
718		AC_MSG_ERROR([GnuTLS not found])
719	fi
720fi
721
722if test x"$gnutls_found" = x"yes"
723then
724	AC_DEFINE(USE_GNUTLS, 1,
725                  [Define to 1 to use libgnutls instead of OpenSSL.])
726
727	saved_CPPFLAGS="$CPPFLAGS"
728	CPPFLAGS="$LIBCRYPTO_CPPFLAGS $saved_CPPFLAGS"
729
730	versioncheck='
731		#include <gnutls/gnutls.h>
732
733		#if GNUTLS_VERSION_NUMBER < 0x020b07
734		# error GnuTLS 2.11.7 or later required
735		#endif
736		int main()
737		{
738			return 0;
739		}'
740
741	AC_MSG_CHECKING([your GnuTLS version])
742	AC_LINK_IFELSE([AC_LANG_SOURCE([$versioncheck])],
743	               AC_MSG_RESULT(ok),
744	               AC_MSG_FAILURE([GnuTLS must be at least version 2.11.7]))
745
746	sha256check='
747		#include <gnutls/gnutls.h>
748		int main()
749		{
750			int x = GNUTLS_DIG_SHA256;
751		}'
752
753	AC_MSG_CHECKING([whether your GnuTLS supports SHA256])
754	AC_LINK_IFELSE([AC_LANG_SOURCE([$sha256check])],
755	               AC_MSG_RESULT(yes)
756                       AC_DEFINE([HAVE_SHA256], 1,
757 	                         [Define to 1 if your crypto library has SHA256 support]),
758	               AC_MSG_WARN([SHA256 is required for DKIM but is not
759	                            supported with your version of GnuTLS]))
760
761	CPPFLAGS="$saved_CPPFLAGS"
762fi
763
764AM_CONDITIONAL([USE_GNUTLS], [test x"$gnutls_found" = x"yes"])
765
766#
767# OpenSSL
768#
769
770AC_ARG_WITH([openssl],
771            AS_HELP_STRING([--with-openssl],
772                           [location of OpenSSL includes and library]),
773                           [sslpath="$withval"], [sslpath="auto"])
774
775openssl_found="no"
776
777if test x"$gnutls_found" = x"yes"
778then
779	sslpath="skip"
780	openssl_found="skip"
781fi
782
783if test \( "$sslpath" = "auto" -o x"$sslpath" = x"yes" \) -a x"$PKG_CONFIG" != x""
784then
785	PKG_CHECK_MODULES([LIBCRYPTO], [openssl >= 0.9.7],
786	                  [openssl_found="yes"],
787	                  [openssl_found="no"
788	                   AC_MSG_WARN([pkg-config for openssl not found, trying manual search...])
789	                  ])
790elif test "$sslpath" != "auto" -a x"$sslpath" != x"yes"
791then
792	AC_MSG_CHECKING([for OpenSSL includes])
793	if test -f $sslpath/include/openssl/opensslv.h
794	then
795		LIBCRYPTO_CPPFLAGS="-I$sslpath/include"
796		LIBCRYPTO_CFLAGS=""
797		LIBCRYPTO_LIBDIRS="-L$sslpath/lib"
798		LIBCRYPTO_LIBS="-lssl -lcrypto"
799		openssl_found=yes
800		AC_MSG_RESULT([$sslpath])
801	else
802		AC_MSG_RESULT([no])
803	fi
804fi
805
806if test x"$openssl_found" = x"no"
807then
808	AC_MSG_CHECKING([for OpenSSL library and includes])
809	ssldirs="/usr/local/ssl /usr/local /usr/sfw /opt/local /usr"
810	if test "$sslpath" = "auto" -o "$sslpath" = "yes"
811	then
812		for d in $ssldirs
813		do
814			if test -f $d/include/openssl/opensslv.h
815			then
816				sslpath=$d
817				openssl_found=yes
818				break
819			fi
820		done
821	fi
822	case "$sslpath" in
823		no)
824			AC_MSG_ERROR([OpenSSL is required])
825			;;
826		auto)
827			AC_MSG_ERROR([OpenSSL not found])
828			;;
829		*/*)
830			AC_MSG_RESULT([$sslpath])
831			;;
832		*)
833			AC_MSG_ERROR([OpenSSL not found])
834			;;
835	esac
836        LIBCRYPTO_CPPFLAGS="-I$sslpath/include"
837        LIBCRYPTO_CFLAGS=""
838        LIBCRYPTO_LIBDIRS="-L$sslpath/lib"
839        LIBCRYPTO_LIBS="-lssl -lcrypto"
840fi
841
842if test x"$openssl_found" = x"yes"
843then
844	saved_CFLAGS="$CFLAGS"
845	saved_CPPFLAGS="$CPPFLAGS"
846	saved_LDFLAGS="$LDFLAGS"
847	saved_LIBS="$LIBS"
848
849	LIBS="$outer_LIBS $LIBCRYPTO_LIBS $saved_LIBS"
850	CPPFLAGS="$LIBCRYPTO_CPPFLAGS $saved_CPPFLAGS"
851	CFLAGS="$LIBCRYPTO_CFLAGS $saved_CFLAGS"
852	LDFLAGS="$outer_LDFLAGS $LIBCRYPTO_LIBDIRS $saved_LDFLAGS"
853
854	AC_CHECK_HEADERS([openssl/bio.h openssl/conf.h openssl/crypto.h openssl/err.h openssl/evp.h openssl/md5.h openssl/opensslv.h openssl/pem.h openssl/rsa.h openssl/sha.h openssl/ssl.h], ,
855                 	AC_MSG_ERROR([required OpenSSL header not found]))
856
857	# -ldl is needed to assist with compilation of static openssl libraries.
858	# It appears to need dl for opening engine plugins. It fails at load
859	# time It also fails to build on FreeBSD if enabled by default.
860	AC_SEARCH_LIBS([ERR_peek_error], [crypto], ,
861	               AC_MSG_ERROR([libcrypto not found]))
862
863
864	AC_LINK_IFELSE(
865		       [AC_LANG_PROGRAM([[#include <openssl/ssl.h>]],
866					[[SSL_library_init();]])],
867					[od_have_ossl="yes";],
868					[od_have_ossl="no";])
869	if test x"$od_have_ossl" = x"no"
870	then
871		if test x"$enable_shared" = x"yes"
872		then
873			AC_MSG_ERROR([Cannot build shared opendkim
874			              against static openssl libraries.
875			              Configure with --disable-shared
876			              to get this working or obtain a
877			              shared libssl library for
878			              opendkim to use.])
879		fi
880
881		LIBCRYPTO_LIBS="$LIBCRYPTO_LIBS -ldl"
882		AC_SEARCH_LIBS([SSL_library_init], [ssl], ,
883		               AC_MSG_ERROR([libssl not found]), [-ldl])
884	fi
885
886	AC_CHECK_DECL([SHA256_DIGEST_LENGTH],
887                      AC_DEFINE([HAVE_SHA256], 1,
888 	                        [Define to 1 if your crypto library has SHA256 support]),
889	              AC_MSG_WARN([SHA256 is required for DKIM but is not
890	                           supported with your version of OpenSSL]),
891	              [
892#include <sys/types.h>
893#include <openssl/sha.h>])
894
895	CFLAGS="$saved_CFLAGS"
896	CPPFLAGS="$saved_CPPFLAGS"
897	LDFLAGS="$saved_LDFLAGS"
898	LIBS="$saved_LIBS"
899fi
900
901AC_SUBST(LIBCRYPTO_CFLAGS)
902AC_SUBST(LIBCRYPTO_CPPFLAGS)
903AC_SUBST(LIBCRYPTO_LIBDIRS)
904AC_SUBST(LIBCRYPTO_LIBS)
905
906#
907# libmilter
908#
909AC_MSG_CHECKING([for milter library and includes])
910AC_ARG_WITH([milter],
911            AS_HELP_STRING([--with-milter],
912                           [location of milter includes and library]),
913            [milterpath="$withval"], [milterpath="auto"])
914
915if test x"$enable_filter" = x"no"
916then
917	milterpath="no"
918fi
919
920if test "$milterpath" = "auto" -o "$milterpath" = "yes"
921then
922	milterdirs="/usr/local /opt/local /usr"
923	for d in $milterdirs
924	do
925		if test -f $d/include/libmilter/mfapi.h
926		then
927			milterpath=$d
928			break
929		fi
930	done
931fi
932case "$milterpath" in
933	no)
934		if test x"$enable_filter" = x"yes"
935		then
936			AC_MSG_ERROR([milter is required])
937		fi
938		AC_MSG_RESULT(disabled)
939		;;
940	auto)
941		AC_MSG_ERROR([milter not found])
942		;;
943	*/*)
944		if ! test -f $milterpath/include/libmilter/mfapi.h
945		then
946			AC_MSG_ERROR([milter includes not found at $milterpath])
947		fi
948		AC_MSG_RESULT([$milterpath])
949		;;
950	*)
951		AC_MSG_ERROR([milter not found])
952		;;
953esac
954
955LIBMILTER_INCDIRS=""
956LIBMILTER_LIBDIRS=""
957LIBMILTER_LIBS=""
958
959if test x"$milterpath" != x"no"
960then
961	LIBMILTER_INCDIRS="-I$milterpath/include"
962
963	saved_CC="$CC"
964	saved_CFLAGS="$CFLAGS"
965	saved_CPPFLAGS="$CPPFLAGS"
966	saved_LDFLAGS="$LDFLAGS"
967	saved_LIBS="$LIBS"
968
969	CC="$PTHREAD_CC"
970	LIBS="$outer_LIBS $PTHREAD_LIBS $saved_LIBS"
971	CPPFLAGS="$LIBMILTER_INCDIRS $saved_CPPFLAGS"
972	CFLAGS="$PTHREAD_CFLAGS $saved_CFLAGS"
973	LDFLAGS="$outer_LDFLAGS $PTHREAD_CFLAGS $saved_LDFLAGS"
974
975	breakloop="no"
976	for d in lib lib64 lib/libmilter
977	do
978		unset ac_cv_search_smfi_register
979		LDFLAGS="$outer_LDFLAGS $PTHREAD_CFLAGS -L$milterpath/$d $saved_LDFLAGS"
980		AC_SEARCH_LIBS([smfi_register], [milter],
981		               [
982		               	LIBMILTER_LIBDIRS="-L$milterpath/$d"
983		               	LIBMILTER_LIBS="-lmilter"
984		               	breakloop="yes"
985		               ])
986
987		AC_CHECK_FUNC([smfi_insheader],
988			      AC_DEFINE([HAVE_SMFI_INSHEADER], 1,
989					[Define if libmilter has smfi_insheader()]))
990
991		AC_CHECK_FUNC([smfi_opensocket],
992			      AC_DEFINE([HAVE_SMFI_OPENSOCKET], 1,
993					[Define if libmilter has smfi_opensocket()]))
994
995		AC_CHECK_FUNC([smfi_progress],
996			      AC_DEFINE([HAVE_SMFI_PROGRESS], 1,
997					[Define if libmilter has smfi_progress()]))
998
999		AC_CHECK_FUNC([smfi_setsymlist],
1000			      AC_DEFINE([HAVE_SMFI_SETSYMLIST], 1,
1001					[Define if libmilter has smfi_setsymlist()]))
1002
1003		AC_CHECK_FUNC([smfi_version],
1004			      AC_DEFINE([HAVE_SMFI_VERSION], 1,
1005					[Define if libmilter has smfi_version()]))
1006
1007		if test x"$breakloop" = x"yes"
1008		then
1009			break
1010		fi
1011	done
1012	if test x"$LIBMILTER_LIBDIRS" = x""
1013	then
1014		AC_MSG_ERROR([libmilter not found])
1015	fi
1016
1017	CC="$saved_CC"
1018	CPPFLAGS="$saved_CPPFLAGS"
1019	CFLAGS="$saved_CFLAGS"
1020	LDFLAGS="$saved_LDFLAGS"
1021	LIBS="$saved_LIBS"
1022fi
1023
1024AC_SUBST(LIBMILTER_INCDIRS)
1025AC_SUBST(LIBMILTER_LIBDIRS)
1026AC_SUBST(LIBMILTER_LIBS)
1027
1028#
1029# librrd
1030#
1031AC_ARG_WITH([librrd],
1032            AS_HELP_STRING([--with-librrd],
1033                           [location of librrd includes and library]),
1034            [librrdpath="$withval"], [librrdpath="no"])
1035
1036librrd_found="no"
1037if test x"$enable_reprrd" = x"yes" -a x"$librrdpath" = x"no"
1038then
1039	librrdpath="auto"
1040fi
1041
1042if test \( x"$librrdpath" = x"auto" -o x"$librrdpath" = x"yes" \) -a x"$PKG_CONFIG" != x""
1043then
1044	PKG_CHECK_MODULES([RRDTOOL], [librrd],
1045	                  [
1046                          	librrd_found="yes"
1047	                  ],
1048	                  [
1049	                  	AC_MSG_WARN([pkg-config for rrdtool not found, trying manual search...])
1050	                  ])
1051fi
1052
1053if test \( x"$librrdpath" = x"auto" -o x"$librrdpath" = x"yes" \) -a x"$librrd_found" = x"no"
1054then
1055	AC_MSG_CHECKING([for librrd])
1056
1057	librrddirs="/usr /usr/local"
1058	for d in $librrddirs
1059	do
1060		if test -f $d/include/rrd.h
1061		then
1062			librrdpath=$d
1063			AC_MSG_RESULT($d)
1064			RRDTOOL_CFLAGS="-I$librrdpath/include"
1065			RRDTOOL_LIBS="-L$librrdpath/lib -lrrd"
1066			librrd_found="yes"
1067			break
1068		fi
1069	done
1070	if test x"$RRDTOOL_LIBS" = x""
1071	then
1072		AC_MSG_ERROR([not found])
1073	fi
1074elif test x"$librrdpath" != x"no" -a x"$librrd_found" = x"no"
1075then
1076	AC_MSG_CHECKING([for librrd])
1077	if test -f $librrdpath/include/rrd.h
1078	then
1079		AC_MSG_RESULT([$librrdpath])
1080		RRDTOOL_CFLAGS="-I$librrdpath/include"
1081		RRDTOOL_LIBS="-L$librrdpath/lib -lrrd"
1082		librrd_found="yes"
1083	else
1084		AC_MSG_ERROR([not found at $librrdpath])
1085	fi
1086fi
1087
1088if test x"$librrdpath" = x"no" -o x"$librrd_found" = x"no"
1089then
1090	RRDTOOL_CFLAGS=""
1091	RRDTOOL_LIBS=""
1092	AC_SUBST([LIBRRD_MANNOTICE],
1093	         "(Not enabled for this installation.)" )
1094else
1095	AC_DEFINE([USE_RRD], 1,
1096	          [use RRD library])
1097	AC_SUBST([LIBRRD_MANNOTICE], "" )
1098fi
1099
1100AM_CONDITIONAL(USE_RRD, test x"$librrdpath" != x"no")
1101AC_SUBST(RRDTOOL_CFLAGS)
1102AC_SUBST(RRDTOOL_LIBS)
1103
1104#
1105# libmemcached
1106#
1107AC_ARG_WITH([libmemcached],
1108            AS_HELP_STRING([--with-libmemcached],
1109                           [location of libmemcached includes and library]),
1110            [libmcdpath="$withval"], [libmcdpath="no"])
1111
1112libmemcache_found="no"
1113
1114if test \( x"$libmcdpath" = x"auto" -o x"$libmcdpath" = x"yes" \) -a x"$PKG_CONFIG" != x""
1115then
1116	PKG_CHECK_MODULES([LIBMEMCACHED], [libmemcached >= 0.36],
1117	                  [
1118                          	libmemcache_found="yes"
1119	                  	LIBMEMCACHED_INCDIRS="$LIBMEMCACHED_CFLAGS"
1120	                  ],
1121	                  [
1122	                  	AC_MSG_WARN([pkg-config for libmemcached not found, trying manual search...])
1123	                  ])
1124fi
1125
1126if test \( x"$libmcdpath" = x"auto" -o x"$libmcdpath" = x"yes" \) -a x"$libmemcache_found" = x"no"
1127then
1128	AC_MSG_CHECKING([for libmemcached])
1129
1130	libmcddirs="/usr /usr/local"
1131	for d in $libmcddirs
1132	do
1133		if test -f $d/include/libmemcached/memcached.h
1134		then
1135			libmcdpath=$d
1136			AC_MSG_RESULT($d)
1137			LIBMEMCACHED_INCDIRS="-I$libmcdpath/include"
1138			LIBMEMCACHED_LIBDIRS="-L$libmcdpath/lib"
1139			LIBMEMCACHED_LIBS="-lmemcached"
1140			libmemcache_found="yes"
1141			break
1142		fi
1143	done
1144	if test x"$LIBMEMCACHED_LIBS" = x""
1145	then
1146		AC_MSG_ERROR([not found])
1147	fi
1148elif test x"$libmcdpath" != x"no" -a x"$libmemcache_found" = x"no"
1149then
1150	AC_MSG_CHECKING([for libmemcached])
1151	if test -f $libmcdpath/include/libmemcached/memcached.h
1152	then
1153		AC_MSG_RESULT([$libmcdpath])
1154		LIBMEMCACHED_INCDIRS="-I$libmcdpath/include"
1155		LIBMEMCACHED_LIBDIRS="-L$libmcdpath/lib"
1156		LIBMEMCACHED_LIBS="-lmemcached"
1157		libmemcache_found="yes"
1158	else
1159		AC_MSG_ERROR([not found at $libmcdpath])
1160	fi
1161fi
1162
1163# confirm memcached_return_t is defined
1164if test x"$libmemcache_found" = x"yes"
1165then
1166	saved_CPPFLAGS=$CPPFLAGS
1167	CPPFLAGS="$CPPFLAGS $LIBMEMCACHED_INCDIRS"
1168	AC_MSG_CHECKING([for memcached_return_t])
1169	AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1170#include <libmemcached/memcached.h>
1171
1172int
1173main()
1174{
1175	memcached_return_t x;
1176
1177	return 0;
1178}
1179		])],
1180		AC_MSG_RESULT([ok]),
1181		AC_MSG_ERROR([libmemcached version 0.36 or later required]))
1182fi
1183
1184if test x"$libmcdpath" = x"no" -o x"$libmemcache_found" = x"no"
1185then
1186	LIBMEMCACHED_INCDIRS=""
1187	LIBMEMCACHED_LIBDIRS=""
1188	LIBMEMCACHED_LIBS=""
1189	AC_SUBST([LIBMEMCACHED_MANNOTICE],
1190	         "(Not enabled for this installation.)" )
1191else
1192	AC_DEFINE([USE_LIBMEMCACHED], 1,
1193	          [use memcache query library])
1194	AC_SUBST([LIBMEMCACHED_MANNOTICE], "" )
1195fi
1196
1197AM_CONDITIONAL(USE_LIBMEMCACHED, test x"$libmcdpath" != x"no")
1198AC_SUBST(LIBMEMCACHED_INCDIRS)
1199AC_SUBST(LIBMEMCACHED_LIBDIRS)
1200AC_SUBST(LIBMEMCACHED_LIBS)
1201
1202#
1203# libunbound
1204#
1205AC_ARG_WITH([unbound],
1206            AS_HELP_STRING([--with-unbound],
1207                           [location of Unbound includes and library]),
1208            [unboundpath="$withval"], [unboundpath="no"])
1209
1210if test x"$unboundpath" = x"yes"
1211then
1212	AC_MSG_CHECKING([for libunbound])
1213
1214	unbounddirs="/usr /usr/local"
1215	for d in $unbounddirs
1216	do
1217		if test -f $d/include/unbound.h
1218		then
1219			unboundpath=$d
1220			AC_MSG_RESULT($d)
1221			LIBUNBOUND_INCDIRS="-I$unboundpath/include"
1222			LIBUNBOUND_LIBDIRS="-L$unboundpath/lib"
1223			LIBUNBOUND_LIBS="-lunbound"
1224			break
1225		fi
1226	done
1227	if test x"$LIBUNBOUND_LIBS" = x""
1228	then
1229		AC_MSG_ERROR([not found])
1230	fi
1231elif test x"$unboundpath" = x"no"
1232then
1233	LIBUNBOUND_INCDIRS=""
1234	LIBUNBOUND_LIBDIRS=""
1235	LIBUNBOUND_LIBS=""
1236else
1237	AC_MSG_CHECKING([for libunbound])
1238	if test -f $unboundpath/include/unbound.h
1239	then
1240		AC_MSG_RESULT([$unboundpath])
1241		LIBUNBOUND_INCDIRS="-I$unboundpath/include"
1242		LIBUNBOUND_LIBDIRS="-L$unboundpath/lib"
1243		LIBUNBOUND_LIBS="-lunbound"
1244	else
1245		AC_MSG_ERROR([not found at $unboundpath])
1246	fi
1247fi
1248
1249if test x"$unboundpath" = x"no"
1250then
1251	AC_SUBST([UNBOUND_MANNOTICE], "(Not enabled for this installation.)" )
1252else
1253	AC_DEFINE([USE_UNBOUND], 1,
1254	          [use unbound DNSSEC library for DNS])
1255	AC_SUBST([UNBOUND_MANNOTICE], "" )
1256fi
1257
1258AM_CONDITIONAL(USE_UNBOUND, test x"$unboundpath" != x"no")
1259AC_SUBST(LIBUNBOUND_INCDIRS)
1260AC_SUBST(LIBUNBOUND_LIBDIRS)
1261AC_SUBST(LIBUNBOUND_LIBS)
1262
1263# unbound also needs ldns
1264AC_ARG_WITH([ldns],
1265            AS_HELP_STRING([--with-ldns],
1266                           [location of ldns includes and library]),
1267            [ldnspath="$withval"], [ldnspath="no"])
1268
1269LIBLDNS_LIBS=""
1270LIBLDNS_LIBDIRS=""
1271
1272if test x"$ldnspath" = x"yes"
1273then
1274	ldns_found="no"
1275
1276	ldnsdirs="/usr /usr/local"
1277	for d in $ldnsdirs
1278	do
1279		unset ac_cv_search_ldns_rr_new
1280		saved_LDFLAGS="$LDFLAGS"
1281		saved_LIBS="$LIBS"
1282		LDFLAGS="$outer_LDFLAGS -L$d/lib $LDFLAGS"
1283		LIBS="$outer_LIBS"
1284		AC_SEARCH_LIBS([ldns_rr_new], [ldns], ldns_found="yes")
1285		LDFLAGS="$saved_LDFLAGS"
1286		LIBS="$saved_LIBS"
1287
1288		if test x"$ldns_found" = x"yes"
1289		then
1290			LIBLDNS_LIBDIRS="-L$d/lib"
1291			LIBLDNS_LIBS="-lldns"
1292			break
1293		fi
1294	done
1295	if test x"$LIBLDNS_LIBS" = x""
1296	then
1297		AC_MSG_ERROR([libldns not found])
1298	fi
1299elif test x"$ldnspath" != x"no"
1300then
1301	ldns_found="no"
1302	saved_LDFLAGS="$LDFLAGS"
1303	saved_LIBS="$LIBS"
1304	LDFLAGS="$outer_LDFLAGS -L$d/lib $LDFLAGS"
1305	LIBS="$outer_LIBS"
1306	AC_SEARCH_LIBS([ldns_rr_new], [ldns], ldns_found="yes")
1307	LDFLAGS="$saved_LDFLAGS"
1308	LIBS="$saved_LIBS"
1309
1310	if test x"$ldns_found" = x"yes"
1311	then
1312		LIBLDNS_LIBDIRS="-L$d/lib"
1313		LIBLDNS_LIBS="-lldns"
1314		break
1315	else
1316		AC_MSG_ERROR(libldns not found in $d)
1317	fi
1318fi
1319
1320AC_SUBST(LIBLDNS_LIBDIRS)
1321AC_SUBST(LIBLDNS_LIBS)
1322
1323# unbound may also need libevent
1324AC_ARG_WITH([libevent],
1325            AS_HELP_STRING([--with-libevent],
1326                           [location of libevent includes and library]),
1327            [libeventpath="$withval"], [libeventpath="no"])
1328
1329LIBEVENT_LIBS=""
1330LIBEVENT_LIBDIRS=""
1331
1332if test x"$libevent" = x"yes"
1333then
1334	libevent_found="no"
1335
1336	libeventdirs="/usr /usr/local"
1337	for d in $libeventdirs
1338	do
1339		unset ac_cv_search_libevent_rr_new
1340		saved_LDFLAGS="$LDFLAGS"
1341		saved_LIBS="$LIBS"
1342		LDFLAGS="$outer_LDFLAGS -L$d/lib $LDFLAGS"
1343		LIBS="$outer_LIBS"
1344		AC_SEARCH_LIBS([evutil_vsnprintf], [event], libevent_found="yes")
1345		LDFLAGS="$saved_LDFLAGS"
1346		LIBS="$saved_LIBS"
1347
1348		if test x"$libevent_found" = x"yes"
1349		then
1350			LIBEVENT_LIBDIRS="-L$d/lib"
1351			LIBEVENT_LIBS="-levent"
1352			break
1353		fi
1354	done
1355	if test x"$LIBEVENT_LIBS" = x""
1356	then
1357		AC_MSG_ERROR([libevent not found])
1358	fi
1359elif test x"$libeventpath" != x"no"
1360then
1361	libevent_found="no"
1362	saved_LDFLAGS="$LDFLAGS"
1363	saved_LIBS="$LIBS"
1364	LDFLAGS="$outer_LDFLAGS -L$d/lib $LDFLAGS"
1365	LIBS="$outer_LIBS"
1366	AC_SEARCH_LIBS([evutil_vsnprintf], [event], libevent_found="yes")
1367	LDFLAGS="$saved_LDFLAGS"
1368	LIBS="$saved_LIBS"
1369
1370	if test x"$libevent_found" = x"yes"
1371	then
1372		LIBEVENT_LIBDIRS="-L$d/lib"
1373		LIBEVENT_LIBS="-levent"
1374		break
1375	else
1376		AC_MSG_ERROR(libevent not found in $d)
1377	fi
1378fi
1379
1380AC_SUBST(LIBEVENT_LIBDIRS)
1381AC_SUBST(LIBEVENT_LIBS)
1382
1383#
1384# libtre
1385#
1386AC_ARG_WITH([tre],
1387            AS_HELP_STRING([--with-tre],
1388	                   [location of TRE includes and library]),
1389            [trepath="$withval"], [trepath="auto"])
1390
1391tre_found="no"
1392LIBTRE_CPPFLAGS=""
1393LIBTRE_LIBS=""
1394
1395if test x"$enable_diffheaders" != x"yes"
1396then
1397	trepath="no"
1398fi
1399
1400if test \(  x"$trepath" = x"auto" -o x"$trepath" = x"yes" \) -a x"$PKG_CONFIG" != x""
1401then
1402        PKG_CHECK_MODULES([LIBTRE], [tre >= 0.8.0], [tre_found="yes"],
1403	[
1404        	PKG_CHECK_MODULES([LIBTRE], [tre >= 0.7.5],
1405		[
1406			tre_found="yes"
1407			AC_DEFINE([TRE_PRE_080], 1,
1408			          [version of libtre is older than 0.8.0])
1409		],[
1410		        tre_found="no"
1411        		AC_MSG_WARN([pkg-config for libtre >= 0.7.5 not found,
1412		             trying manual search...])
1413		])
1414
1415        ])
1416fi
1417
1418if test x"$tre_found" = x"no" -a x"$trepath" != x"no"
1419then
1420	AC_MSG_CHECKING([for libtre])
1421        if test x"$trepath" != x"auto" -a x"$trepath" != x"yes"
1422        then
1423                if test -f "$trepath/include/tre/tre.h"
1424                then
1425			tre_found="yes"
1426                        AC_MSG_RESULT($trepath)
1427                        LIBTRE_CPPFLAGS="-I$trepath/include"
1428                        LIBTRE_LIBS="-L$trepath/lib -ltre"
1429		elif test -f "$trepath/include/tre/regex.h"
1430		then
1431			tre_found="yes"
1432                        AC_MSG_RESULT([$trepath (old version)])
1433			AC_DEFINE([TRE_PRE_080], 1,
1434			          [version of libtre is older than 0.8.0])
1435                        LIBTRE_CPPFLAGS="-I$trepath/include"
1436                        LIBTRE_LIBS="-L$trepath/lib -ltre"
1437                else
1438                        AC_MSG_ERROR("not found at $trepath")
1439                fi
1440	else
1441		tredirs="/usr /usr/local"
1442		for d in $tredirs
1443		do
1444			if test -f $d/include/tre/tre.h
1445			then
1446				trepath=$d
1447				tre_found="yes"
1448				AC_MSG_RESULT($d)
1449				LIBTRE_CPPFLAGS="-I$trepath/include"
1450				LIBTRE_LIBS="-L$trepath/lib -ltre"
1451				break
1452			elif test -f $d/include/tre/regex.h
1453			then
1454				trepath=$d
1455				tre_found="yes"
1456				AC_MSG_RESULT([$d (old version)])
1457				AC_DEFINE([TRE_PRE_080], 1,
1458				          [version of libtre is older than 0.8.0])
1459				LIBTRE_CPPFLAGS="-I$trepath/include"
1460				LIBTRE_LIBS="-L$trepath/lib -ltre"
1461				break
1462			fi
1463		done
1464		if test x"$tre_found" != x"yes"
1465		then
1466			AC_MSG_RESULT([not found])
1467			AC_MSG_ERROR([cannot use diffheaders without TRE
1468			              library])
1469		fi
1470	fi
1471fi
1472
1473if test x"$enable_diffheaders" = x"yes" -a x"$tre_found" = x"yes"
1474then
1475	AC_DEFINE([USE_TRE], 1, [tre regex library found])
1476fi
1477
1478AM_CONDITIONAL([USE_TRE], [test x"$tre_found" != x"no"])
1479AC_SUBST([LIBTRE_CPPFLAGS])
1480AC_SUBST([LIBTRE_LIBS])
1481
1482#
1483# liblua
1484#
1485AC_ARG_WITH([lua],
1486            AS_HELP_STRING([--with-lua],
1487                           [location of Lua includes and library]),
1488            [luapath="$withval"], [luapath="no"])
1489
1490LIBLUA_INCDIRS=""
1491LIBLUA_LIBDIRS=""
1492LIBLUA_LIBS=""
1493lua_found="no"
1494
1495if test \(  x"$luapath" = x"auto" -o x"$luapath" = x"yes" \) -a x"$PKG_CONFIG" != x""
1496then
1497        PKG_CHECK_MODULES([LIBLUA], [lua5.1],
1498	                  [
1499				lua_found="yes"
1500				LIBLUA_INCDIRS="$LIBLUA_CFLAGS"
1501	                  ],
1502			  [AC_MSG_WARN([pkg-config for Lua not found, trying manual search...])])
1503fi
1504
1505if test \( x"$luapath" = x"yes" -o x"$luapath" = x"auto" \) -a x"$lua_found" = x"no"
1506then
1507	AC_MSG_CHECKING([for Lua])
1508	luadirs="/usr /usr/local"
1509	for d in $luadirs
1510	do
1511		if test -f $d/include/lua51/lua.h
1512		then
1513			AC_MSG_RESULT($d)
1514			LIBLUA_INCDIRS="-I$d/include/lua51"
1515			LIBLUA_LIBDIRS="-L$d/lib/lua51"
1516			LIBLUA_LIBS="-llua -lm"
1517			AC_SEARCH_LIBS([dlopen], [dl])
1518			AC_DEFINE([USE_LUA], 1,
1519			          [support for Lua scripting])
1520			AC_SUBST([LUA_MANNOTICE], "")
1521			lua_found="yes"
1522			break
1523		elif test -f $d/include/lua52/lua.h
1524		then
1525			AC_MSG_RESULT($d)
1526			LIBLUA_INCDIRS="-I$d/include/lua52"
1527			LIBLUA_LIBDIRS="-L$d/lib/lua52"
1528			LIBLUA_LIBS="-llua -lm"
1529			AC_SEARCH_LIBS([dlopen], [dl])
1530			AC_DEFINE([USE_LUA], 1,
1531			          [support for Lua scripting])
1532			AC_SUBST([LUA_MANNOTICE], "")
1533			lua_found="yes"
1534			break
1535		elif test -f $d/include/lua5.1/lua.h
1536		then
1537			AC_MSG_RESULT($d)
1538			LIBLUA_INCDIRS="-I$d/include/lua5.1"
1539			LIBLUA_LIBDIRS="-L$d/lib"
1540			LIBLUA_LIBS="-llua5.1 -lm"
1541			AC_SEARCH_LIBS([dlopen], [dl])
1542			AC_DEFINE([USE_LUA], 1,
1543			          [support for Lua scripting])
1544			AC_SUBST([LUA_MANNOTICE], "")
1545			lua_found="yes"
1546			break
1547		elif test -f $d/include/lua5.2/lua.h
1548		then
1549			AC_MSG_RESULT($d)
1550			LIBLUA_INCDIRS="-I$d/include/lua5.2"
1551			LIBLUA_LIBDIRS="-L$d/lib"
1552			LIBLUA_LIBS="-llua5.2 -lm"
1553			AC_SEARCH_LIBS([dlopen], [dl])
1554			AC_DEFINE([USE_LUA], 1,
1555			          [support for Lua scripting])
1556			AC_SUBST([LUA_MANNOTICE], "")
1557			lua_found="yes"
1558			break
1559		elif test -f $d/include/lua.h
1560		then
1561			AC_MSG_RESULT($d)
1562			LIBLUA_INCDIRS="-I$d/include"
1563			LIBLUA_LIBDIRS="-L$d/lib"
1564			LIBLUA_LIBS="-llua -lm"
1565			AC_SEARCH_LIBS([dlopen], [dl])
1566			lua_found="yes"
1567			break
1568		fi
1569	done
1570	if test x"$LIBLUA_LIBS" = x""
1571	then
1572		LIBLUA_INCDIRS=""
1573		LIBLUA_LIBDIRS=""
1574		LIBLUA_LIBS=""
1575		AC_MSG_ERROR(not found)
1576	else
1577		lua_found="yes"
1578	fi
1579fi
1580
1581if test x"$luapath" != x"yes" -a x"$luapath" != x"auto" -a x"$luapath" != x"no"
1582then
1583	AC_MSG_CHECKING([for Lua])
1584	if test -f $luapath/include/lua51/lua.h
1585	then
1586		AC_MSG_RESULT($luapath)
1587		LIBLUA_INCDIRS="-I$luapath/include/lua51"
1588		LIBLUA_LIBDIRS="-L$luapath/lib/lua51"
1589		LIBLUA_LIBS="-llua -lm"
1590		AC_SEARCH_LIBS([dlopen], [dl])
1591		lua_found="yes"
1592	elif test -f $luapath/include/lua52/lua.h
1593	then
1594		AC_MSG_RESULT($luapath)
1595		LIBLUA_INCDIRS="-I$luapath/include/lua52"
1596		LIBLUA_LIBDIRS="-L$luapath/lib/lua52"
1597		LIBLUA_LIBS="-llua -lm"
1598		AC_SEARCH_LIBS([dlopen], [dl])
1599		lua_found="yes"
1600	elif test -f $luapath/include/lua5.1/lua.h
1601	then
1602		AC_MSG_RESULT($luapath)
1603		LIBLUA_INCDIRS="-I$luapath/include/lua5.1"
1604		LIBLUA_LIBDIRS="-L$luapath/lib"
1605		LIBLUA_LIBS="-llua5.1 -lm"
1606		AC_SEARCH_LIBS([dlopen], [dl])
1607		lua_found="yes"
1608	elif test -f $luapath/include/lua5.2/lua.h
1609	then
1610		AC_MSG_RESULT($luapath)
1611		LIBLUA_INCDIRS="-I$luapath/include/lua5.2"
1612		LIBLUA_LIBDIRS="-L$luapath/lib"
1613		LIBLUA_LIBS="-llua5.2 -lm"
1614		AC_SEARCH_LIBS([dlopen], [dl])
1615		lua_found="yes"
1616	elif test -f $luapath/include/lua.h
1617	then
1618		AC_MSG_RESULT($luapath)
1619		LIBLUA_INCDIRS="-I$luapath/include"
1620		LIBLUA_LIBDIRS="-L$luapath/lib"
1621		LIBLUA_LIBS="-llua -lm"
1622		AC_SEARCH_LIBS([dlopen], [dl])
1623		lua_found="yes"
1624	else
1625		AC_MSG_ERROR(not found at $luapath)
1626	fi
1627fi
1628
1629if test x"$lua_found" = x"yes"
1630then
1631	saved_CPPFLAGS="$CPPFLAGS"
1632	CPPFLAGS="$outer_CPPFLAGS $LIBLUA_INCDIRS"
1633	AC_MSG_CHECKING([Lua version])
1634	AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1635#include <lua.h>
1636
1637#if !defined(LUA_VERSION_NUM) || LUA_VERSION_NUM < 501
1638# error Lua version 5.1 or later is required
1639#endif
1640
1641int
1642main()
1643{
1644	return 0;
1645}
1646				])],
1647				AC_MSG_RESULT([ok]),
1648				AC_MSG_ERROR([Lua version 5.1 or later required]))
1649	CPPFLAGS="$saved_CPPFLAGS"
1650	AC_DEFINE([USE_LUA], 1, [support for Lua scripting])
1651	AC_SUBST([LUA_MANNOTICE], "")
1652else
1653	AC_SUBST([LUA_MANNOTICE], "(Not enabled for this installation.)")
1654fi
1655
1656AM_CONDITIONAL(LUA, test x"$lua_found" = x"yes")
1657AC_SUBST(LIBLUA_INCDIRS)
1658AC_SUBST(LIBLUA_LIBDIRS)
1659AC_SUBST(LIBLUA_LIBS)
1660
1661if test x"$enable_lua_only_signing" = x"yes" -a x"$lua_found" != x"yes"
1662then
1663	AC_MSG_ERROR([--enable-lua_only_signing requires Lua support])
1664fi
1665
1666if test x"$enable_statsext" = x"yes" -a x"$lua_found" != x"yes"
1667then
1668	AC_MSG_ERROR([--enable-statsext requires Lua support])
1669fi
1670
1671if test x"$enable_rbl" = x"yes" -a x"$lua_found" != x"yes"
1672then
1673	AC_MSG_ERROR([--enable-rbl requires Lua support])
1674fi
1675
1676AC_ARG_WITH([sql-backend],
1677            AS_HELP_STRING([--with-sql-backend],
1678                           [selection of SQL backend in use]),
1679            [SQL_BACKEND="$withval"], [SQL_BACKEND="mysql"])
1680AC_SUBST(SQL_BACKEND)
1681AC_DEFINE_UNQUOTED(SQL_BACKEND, "$SQL_BACKEND", [default SQL back-end])
1682
1683#
1684# libodbx
1685#
1686AC_ARG_WITH([odbx],
1687            AS_HELP_STRING([--with-odbx],
1688                           [location of OpenDBX includes and library]),
1689            [odbxpath="$withval"], [odbxpath="no"])
1690
1691odbx_found="no"
1692LIBODBX_CPPFLAGS=""
1693LIBODBX_CFLAGS=""
1694LIBODBX_LDFLAGS=""
1695LIBODBX_LIBS=""
1696
1697if test \( x"$odbxpath" = x"auto" -o x"$odbxpath" = x"yes" \) -a \
1698	x"$PKG_CONFIG" != x""
1699then
1700        PKG_CHECK_MODULES([LIBODBX], [opendbx >= 1.3.7], [odbx_found="yes"],
1701	[
1702	        odbx_found="no"
1703        	AC_MSG_WARN([pkg-config for libodbx not found, trying manual
1704		            search...])
1705        ])
1706fi
1707
1708if test x"$odbxpath" != x"no" -a x"$odbx_found" = x"no"
1709then
1710	saved_LDFLAGS="$LDFLAGS"
1711	saved_LIBS="$LIBS"
1712	if test x"$odbxpath" != x"auto" -a x"$odbxpath" != x"yes"
1713	then
1714		if test -f $odbxpath/include/odbx.h
1715		then
1716			LDFLAGS="$outer_LDFLAGS -L$odbxpath/lib"
1717			LIBS="$outer_LIBS"
1718			AC_SEARCH_LIBS(odbx_result_finish, opendbx,
1719			[
1720			        odbx_found="yes"
1721				LIBODBX_CPPFLAGS="-I$odbxpath/include"
1722				LIBODBX_LDFLAGS="-L$odbxpath/lib"
1723				LIBODBX_LIBS="$LIBS"
1724			],
1725			[
1726				AC_MSG_ERROR([opendbx not at least v1.3.7 at $odbxpath])
1727			],
1728			[-ldl])
1729		else
1730			AC_MSG_ERROR([opendbx not found at $odbxpath])
1731		fi
1732	else
1733		odbxdirs="/usr /usr/local"
1734		for d in $odbxdirs
1735		do
1736			if test -f $d/include/odbx.h
1737			then
1738				LDFLAGS="$outer_LDFLAGS -L$d/lib"
1739				LIBS="$outer_LIBS"
1740				AC_SEARCH_LIBS(odbx_result_finish, opendbx,
1741				[
1742					odbxpath=$d
1743			        	odbx_found="yes"
1744					LIBODBX_CPPFLAGS="-I$d/include"
1745					LIBODBX_LDFLAGS="-L$d/lib"
1746					LIBODBX_LIBS="$LIBS"
1747					break
1748				],[
1749					AC_MSG_ERROR([opendbx not at least v1.3.7 at $d])
1750				],
1751				[-ldl]
1752				)
1753			fi
1754		done
1755		if test x"$odbx_found" != x"yes"
1756		then
1757			AC_MSG_ERROR([opendbx not found])
1758		fi
1759	fi
1760	LDFLAGS="$saved_LDFLAGS"
1761	LIBS="$saved_LIBS"
1762fi
1763if test x"$odbx_found" = x"yes"
1764then
1765	AC_DEFINE([USE_ODBX], 1, [ODBX support for datasets enabled])
1766else
1767	if test x"$enable_stats" = x"yes"
1768	then
1769		AC_MSG_WARN([opendbx is needed to import statistics into a SQL database - disabling opendkim-importstats and opendkim-spam])
1770	fi
1771fi
1772AM_CONDITIONAL(USE_ODBX, test x"$odbx_found" = x"yes")
1773AC_SUBST(LIBODBX_CPPFLAGS)
1774AC_SUBST(LIBODBX_CFLAGS)
1775AC_SUBST(LIBODBX_LDFLAGS)
1776AC_SUBST(LIBODBX_LIBS)
1777
1778#
1779# OpenLDAP
1780#
1781AC_ARG_WITH([openldap],
1782            AS_HELP_STRING([--with-openldap],
1783                           [location of OpenLDAP includes and library]),
1784            [ldappath="$withval"], [ldappath="no"])
1785
1786ldap_found="no"
1787OPENLDAP_CPPFLAGS=""
1788OPENLDAP_LIBS=""
1789
1790if test \( x"$ldappath" = x"auto" -o x"$ldappath" = x"yes" \) -a \
1791	x"$PKG_CONFIG" != x""
1792then
1793        PKG_CHECK_MODULES([OPENLDAP], [openldap >= 2.0.0],
1794	[
1795		ldap_found="yes"
1796		OPENLDAP_CPPFLAGS="$OPENLDAP_CFLAGS"
1797	],
1798	[
1799	        ldap_found="no"
1800        	AC_MSG_WARN([pkg-config for openldap not found, trying manual
1801		            search...])
1802        ])
1803fi
1804
1805if test x"$ldappath" != x"no" -a x"$ldap_found" = x"no"
1806then
1807	AC_MSG_CHECKING([for OpenLDAP])
1808	if test x"$ldappath" != x"auto" -a x"$ldappath" != x"yes"
1809	then
1810		if test -f $ldappath/include/ldap.h
1811		then
1812			AC_MSG_RESULT($ldappath)
1813		        ldap_found="yes"
1814			OPENLDAP_CPPFLAGS="-I$ldappath/include"
1815			OPENLDAP_LIBS="-L$ldappath/lib -lldap -llber"
1816		else
1817			AC_MSG_ERROR(not found at $ldappath)
1818		fi
1819	else
1820		ldapdirs="/usr /usr/local"
1821		for d in $ldapdirs
1822		do
1823			if test -f $d/include/ldap.h
1824			then
1825				ldappath=$d
1826				AC_MSG_RESULT($d)
1827		        	ldap_found="yes"
1828				OPENLDAP_CPPFLAGS="-I$ldappath/include"
1829				OPENLDAP_LIBS="-L$ldappath/lib -lldap -llber"
1830				break
1831			fi
1832		done
1833	fi
1834	if test x"$ldap_found" != x"yes"
1835	then
1836		AC_MSG_RESULT([no])
1837	fi
1838fi
1839if test x"$ldap_found" = x"yes"
1840then
1841	saved_CPPFLAGS="$CPPFLAGS"
1842	CPPFLAGS="$outer_CPPFLAGS $OPENLDAP_CPPFLAGS"
1843	AC_MSG_CHECKING([OpenLDAP version])
1844	AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1845#include <ldap.h>
1846
1847#if !defined(LDAP_API_VERSION) || LDAP_API_VERSION < 2004
1848# error OpenLDAP version 2.1.3 or later is required
1849#endif
1850
1851int
1852main()
1853{
1854	return 0;
1855}
1856				])],
1857				AC_MSG_RESULT([ok]),
1858				AC_MSG_ERROR([OpenLDAP version 2.1.3 or later required]))
1859	CPPFLAGS="$saved_CPPFLAGS"
1860	AC_DEFINE([USE_LDAP], 1, [OpenLDAP support for datasets enabled])
1861fi
1862AM_CONDITIONAL(USE_LDAP, test x"$ldap_found" = x"yes")
1863AC_SUBST(OPENLDAP_CPPFLAGS)
1864AC_SUBST(OPENLDAP_LIBS)
1865
1866#
1867# SASL
1868#
1869AC_ARG_WITH([sasl],
1870            AS_HELP_STRING([--with-sasl],
1871                           [location of SASL includes]),
1872            [saslpath="$withval"], [saslpath="auto"])
1873if test x"$ldap_found" != x"yes"
1874then
1875	# disable sasl if we don't have ldap
1876	saslpath="no"
1877fi
1878
1879sasl_found="no"
1880if test \( x"$saslpath" = x"auto" -o x"$saslpath" = x"yes" \) -a \
1881	x"$PKG_CONFIG" != x""
1882then
1883        PKG_CHECK_MODULES([SASL], [cyrussasl >= 2.1.0],
1884	[
1885		sasl_found="yes"
1886		SASL_CPPFLAGS="$SASL_CFLAGS"
1887	],
1888	[
1889	        sasl_found="no"
1890        	AC_MSG_WARN([pkg-config for cyrussasl not found, trying manual
1891		            search...])
1892        ])
1893fi
1894
1895if test x"$saslpath" != x"no" -a x"$sasl_found" = x"no"
1896then
1897	AC_MSG_CHECKING([for SASL])
1898	if test x"$saslpath" != x"auto" -a x"$saslpath" != x"yes"
1899	then
1900		if test -f $saslpath/include/sasl/sasl.h
1901		then
1902			AC_MSG_RESULT($saslpath)
1903		        sasl_found="yes"
1904			SASL_CPPFLAGS="-I$saslpath/include"
1905		else
1906			AC_MSG_ERROR(not found at $saslpath)
1907		fi
1908	else
1909		sasldirs="/usr /usr/local"
1910		for d in $sasldirs
1911		do
1912			if test -f $d/include/sasl/sasl.h
1913			then
1914				saslpath=$d
1915				AC_MSG_RESULT($d)
1916		        	sasl_found="yes"
1917				SASL_CPPFLAGS="-I$saslpath/include"
1918				break
1919			fi
1920		done
1921	fi
1922	if test x"$sasl_found" != x"yes"
1923	then
1924		AC_MSG_RESULT([no])
1925	fi
1926fi
1927if test x"$sasl_found" = x"yes"
1928then
1929	AC_DEFINE([USE_SASL], 1, [SASL support available])
1930fi
1931AM_CONDITIONAL(USE_SASL, test x"$sasl_found" = x"yes")
1932AC_SUBST(SASL_CPPFLAGS)
1933
1934#
1935# libmdb
1936#
1937AC_ARG_WITH([lmdb],
1938            AS_HELP_STRING([--with-lmdb],
1939                           [location of OpenLDAP MDB includes and library]),
1940            [mdbpath="$withval"], [mdbpath="no"])
1941
1942mdb_found="no"
1943LIBMDB_CPPFLAGS=""
1944LIBMDB_LIBS=""
1945
1946if test x"$mdbpath" != x"no" -a x"$mdb_found" = x"no"
1947then
1948	saved_ldflags="$LDFLAGS"
1949	saved_cflags="$CFLAGS"
1950	CFLAGS="$outer_CFLAGS -pthread"
1951	if test x"$mdbpath" != x"auto" -a x"$mdbpath" != x"yes"
1952	then
1953		if test -f $mdbpath/include/lmdb.h
1954		then
1955			LDFLAGS="$outer_LDFLAGS -L$mdbpath/lib $STRL_LIBS"
1956			AC_CHECK_LIB(lmdb, mdb_env_open,
1957			[
1958			        mdb_found="yes"
1959				LIBMDB_CPPFLAGS="-I$mdbpath/include"
1960				LIBMDB_LIBS="-L$mdbpath/lib -llmdb"
1961			],
1962			[
1963				AC_MSG_ERROR([lmdb not valid at $mdbpath])
1964			]
1965			)
1966		else
1967			AC_MSG_ERROR([lmdb not found at $mdbpath])
1968		fi
1969	else
1970		mdbdirs="/usr /usr/local"
1971		for d in $mdbdirs
1972		do
1973			if test -f $d/include/lmdb.h
1974			then
1975				LDFLAGS="$outer_LDFLAGS -L$d/lib $STRL_LIBS"
1976				AC_CHECK_LIB(lmdb, mdb_env_open,
1977				[
1978					mdbpath=$d
1979			        	mdb_found="yes"
1980					LIBMDB_CPPFLAGS="-I$mdbpath/include"
1981					LIBMDB_LIBS="-L$mdbpath/lib -llmdb"
1982					break
1983				]
1984				)
1985			fi
1986		done
1987		if test x"$mdb_found" != x"yes"
1988		then
1989			AC_MSG_ERROR([lmdb not found])
1990		fi
1991	fi
1992	LDFLAGS="$saved_ldflags"
1993	CFLAGS="$saved_cflags"
1994fi
1995if test x"$mdb_found" = x"yes"
1996then
1997	AC_DEFINE([USE_MDB], 1, [OpenLDAP MDB support for datasets enabled])
1998fi
1999AM_CONDITIONAL(USE_MDB, test x"$mdb_found" = x"yes")
2000AC_SUBST(LIBMDB_CPPFLAGS)
2001AC_SUBST(LIBMDB_LIBS)
2002
2003#
2004#
2005# libcurl, required by reputation
2006#
2007AC_ARG_WITH([libcurl],
2008            AS_HELP_STRING([--with-libcurl],
2009                           [location of CURL includes and library]),
2010            [curlpath="$withval"], [curlpath="auto"])
2011
2012CURL_CPPFLAGS=""
2013CURL_LDFLAGS=""
2014CURL_LIBS=""
2015
2016if test x"$enable_reputation" != x"yes" -a \
2017        x"$curlpath" = x"auto"
2018then
2019	curlpath="no"
2020fi
2021
2022curl_found="no"
2023if test \( x"$curlpath" = x"auto" -o x"$curlpath" = x"yes" \) -a \
2024	x"$PKG_CONFIG" != x""
2025then
2026        PKG_CHECK_MODULES([CURL], [libcurl >= 7.12.0],
2027	[
2028		curl_found="yes"
2029		CURL_CPPFLAGS="$CURL_CFLAGS"
2030	],
2031	[
2032	        curl_found="no"
2033        	AC_MSG_WARN([pkg-config for curl not found, trying manual
2034		            search...])
2035        ])
2036fi
2037
2038if test x"$curlpath" != x"no" -a x"$curl_found" = x"no"
2039then
2040	AC_MSG_CHECKING([for CURL])
2041	if test x"$curlpath" != x"auto" -a x"$curlpath" != x"yes"
2042	then
2043		if test -f $curlpath/include/curl/curl.h
2044		then
2045			AC_MSG_RESULT($curlpath)
2046		        curl_found="yes"
2047			CURL_CPPFLAGS="-I$curlpath/include"
2048			CURL_LDFLAGS="$outer_LDFLAGS -L$curlpath/lib"
2049			CURL_LIBS="-lcurl"
2050		else
2051			AC_MSG_ERROR(not found at $curlpath)
2052		fi
2053	else
2054		curldirs="/usr /usr/local"
2055		for d in $curldirs
2056		do
2057			if test -f $d/include/curl/curl.h
2058			then
2059				curlpath=$d
2060				AC_MSG_RESULT($d)
2061		        	curl_found="yes"
2062				CURL_CPPFLAGS="-I$curlpath/include"
2063				CURL_LDFLAGS="$outer_LDFLAGS -L$curlpath/lib"
2064				CURL_LIBS="-lcurl"
2065				break
2066			fi
2067		done
2068	fi
2069	if test x"$curl_found" != x"yes"
2070	then
2071		AC_MSG_RESULT([no])
2072	fi
2073fi
2074
2075if test x"$curl_found" = x"yes"
2076then
2077	saved_CPPFLAGS="$CPPFLAGS"
2078	saved_LDFLAGS="$LDFLAGS"
2079	saved_LIBS="$LIBS"
2080	CPPFLAGS="$CPPFLAGS $CURL_CPPFLAGS"
2081	LDFLAGS="$LDFLAGS $CURL_LDFLAGS"
2082	LIBS="$LIBS $CURL_LIBS"
2083	AC_CHECK_FUNC([curl_easy_strerror],
2084		      AC_DEFINE([HAVE_CURL_EASY_STRERROR], 1,
2085				[Define if libcurl has curl_easy_strerror()]))
2086	CPPFLAGS="$saved_CPPFLAGS"
2087	LDFLAGS="$saved_LDFLAGS"
2088	LIBS="$saved_LIBS"
2089	AC_SUBST([LIBCURL_MANNOTICE], "")
2090else
2091	AC_SUBST([LIBCURL_MANNOTICE],
2092	         "(Not enabled for this installation.)" )
2093fi
2094
2095AC_SUBST(CURL_CPPFLAGS)
2096AC_SUBST(CURL_LDFLAGS)
2097AC_SUBST(CURL_LIBS)
2098
2099if test x"$enable_reputation" = x"yes" -a \
2100        x"$curl_found" != x"yes"
2101then
2102	AC_MSG_ERROR([reputation requires curl])
2103fi
2104
2105#
2106# reputation requires libjansson
2107#
2108
2109AC_ARG_WITH([libjansson],
2110            AS_HELP_STRING([--with-libjansson],
2111                           [location of jansson includes and library]),
2112            [janssonpath="$withval"], [janssonpath="auto"])
2113
2114LIBJANSSON_CPPFLAGS=""
2115LIBJANSSON_LDFLAGS=""
2116LIBJANSSON_LIBS=""
2117
2118# if reputation is disabled, we don't need it
2119if test x"$enable_reputation" != x"yes" -a \
2120        x"$janssonpath" = x"auto"
2121then
2122	janssonpath="no"
2123fi
2124
2125jansson_found="no"
2126if test \( x"$janssonpath" = x"auto" -o x"$janssonpath" = x"yes" \) -a \
2127	x"$PKG_CONFIG" != x""
2128then
2129        PKG_CHECK_MODULES([LIBJANSSON], [jansson >= 2.2.1],
2130	[
2131		jansson_found="yes"
2132		LIBJANSSON_CPPFLAGS="$LIBJANSSON_CFLAGS"
2133		LIBJANSSON_LIBS="$LIBJANSSON_LIBS"
2134	],
2135	[
2136	        jansson_found="no"
2137        	AC_MSG_WARN([pkg-config for libjansson not found, trying manual
2138		            search...])
2139        ])
2140fi
2141
2142if test x"$janssonpath" != x"no" -a x"$jansson_found" = x"no"
2143then
2144	AC_MSG_CHECKING([for libjansson])
2145	if test x"$janssonpath" != x"auto" -a x"$janssonpath" != x"yes"
2146	then
2147		if test -f $janssonpath/include/jansson.h
2148		then
2149			AC_MSG_RESULT($janssonpath)
2150		        jansson_found="yes"
2151			LIBJANSSON_CPPFLAGS="-I$janssonpath/include"
2152			LIBJANSSON_LDFLAGS="-L$janssonpath/lib"
2153			LIBJANSSON_LIBS="-ljansson"
2154		else
2155			AC_MSG_ERROR(not found at $janssonpath)
2156		fi
2157	else
2158		janssondirs="/usr /usr/local"
2159		for d in $janssondirs
2160		do
2161			if test -f $d/include/jansson.h
2162			then
2163				janssonpath=$d
2164				AC_MSG_RESULT($d)
2165		        	jansson_found="yes"
2166				LIBJANSSON_CPPFLAGS="-I$janssonpath/include"
2167				LIBJANSSON_LDFLAGS="-L$janssonpath/lib"
2168				LIBJANSSON_LIBS="-ljansson"
2169				break
2170			fi
2171		done
2172	fi
2173	if test x"$jansson_found" != x"yes"
2174	then
2175		AC_MSG_RESULT([no])
2176	fi
2177fi
2178AC_SUBST(LIBJANSSON_CPPFLAGS)
2179AC_SUBST(LIBJANSSON_LDFLAGS)
2180AC_SUBST(LIBJANSSON_LIBS)
2181AM_CONDITIONAL(JANSSON, test x"$LIBJANSSON_LIBS" != x"")
2182
2183if test x"$enable_reputation" = x"yes" -a \
2184           x"$jansson_found" != x"yes"
2185then
2186	AC_MSG_ERROR([reputation requires libjansson])
2187fi
2188
2189if test x"$jansson_found" == x"yes"
2190then
2191	AC_DEFINE(USE_JANSSON, 1, [use libjansson to parse REPUTE replies])
2192fi
2193
2194#
2195# libdb
2196#
2197
2198AC_ARG_WITH([db-incdir],
2199            AS_HELP_STRING([--with-db-incdir],
2200                           [location of BerkeleyDB includes]),
2201            [bdb_incdir="$withval"], [bdb_incdir=""])
2202
2203AC_ARG_WITH([db-libdir],
2204            AS_HELP_STRING([--with-db-libdir],
2205                           [location of BerkeleyDB library]),
2206            [bdb_libdir="$withval"], [bdb_libdir=""])
2207
2208AC_ARG_WITH([db-lib],
2209            AS_HELP_STRING([--with-db-lib],
2210                           [name of BerkeleyDB library]),
2211            [bdb_lib="$withval"], [bdb_lib="db"])
2212
2213AC_ARG_WITH([db],
2214            AS_HELP_STRING([--with-db],
2215                           [location of BerkeleyDB includes and library]),
2216            [bdb="$withval"], [bdb="auto"])
2217
2218LIBDB_INCDIRS=""
2219LIBDB_LIBDIRS=""
2220LIBDB_LIBS=""
2221
2222# was --with-db given with "yes" or a path?
2223bdbrequested="no"
2224if test x"$bdb" != x"no" -a x"$bdb" != x"auto"
2225then
2226	bdbrequested="yes"
2227fi
2228if test x"$bdb_incdir" != x"" -o x"$bdb_libdir" != x"" -o x"$bdb_lib" != x"db"
2229then
2230	bdbrequested="yes"
2231fi
2232
2233rep_needs_bdb="no"
2234if test x"$enable_reputation" = x"yes" -a x"$mdb_found" = x"no"
2235then
2236	rep_needs_bdb="yes"
2237fi
2238
2239AM_CONDITIONAL(USE_DB_OPENDKIM,
2240               test x"$enable_popauth" = x"yes" -o \
2241	            x"$rep_needs_bdb" = x"yes" -o \
2242	            x"$enable_ldap_caching" = x"yes" -o \
2243                    x"$bdbrequested" = x"yes")
2244AM_CONDITIONAL(USE_DB_LIBOPENDKIM, test x"$enable_query_cache" = x"yes")
2245
2246# Is DB required based on --enables?
2247if test x"$USE_DB_OPENDKIM_TRUE" = x"" -o \
2248	x"$USE_DB_LIBOPENDKIM_TRUE" = x""
2249then
2250	bdbrequired="yes"
2251else
2252	bdbrequired="no"
2253fi
2254
2255# If --with-db wasn't specified and the --enables demand it, force "yes"
2256if test x"$bdb" = x"auto"
2257then
2258	if test x"$bdbrequired" = x"yes"
2259	then
2260		bdb="yes"
2261	else
2262		bdb="no"
2263	fi
2264fi
2265
2266if test x"$bdb" != x"yes" -a x"$bdb" != x"no"
2267then
2268	bdb_incdir=$bdb/include
2269	bdb_libdir=$bdb/lib
2270	bdb="yes"
2271fi
2272
2273if test x"$bdb" = x"yes"
2274then
2275	bdbdirs="/usr/local/BerkeleyDB /usr/local /usr"
2276	libdbfound="no"
2277
2278	# look for db.h
2279	AC_MSG_CHECKING([for BerkeleyDB db.h])
2280	if test x"$bdb_incdir" = x""
2281	then
2282		for d in $bdbdirs
2283		do
2284			if test -f $d/include/db.h
2285			then
2286				bdb_incdir=$d/include
2287				AC_MSG_RESULT($bdb_incdir)
2288				break
2289			fi
2290		done
2291
2292		if test x"$bdb_incdir" = x""
2293		then
2294			AC_MSG_ERROR([not found])
2295		fi
2296	elif ! test -f $bdb_incdir/db.h
2297	then
2298		AC_MSG_ERROR([not found in $bdb_incdir])
2299	else
2300		AC_MSG_RESULT([$bdb_incdir])
2301	fi
2302
2303	# See if we can find a library by looking for db_create(), then
2304	# db_open(), then dbopen().
2305	#
2306	# This can cause compilation problems if for example a db.h
2307	# and a libdb are found that aren't the same version, but it's
2308	# worth a shot in general.
2309	if test x"$bdb_libdir" = x""
2310	then
2311		for d in $bdbdirs
2312		do
2313			saved_LDFLAGS="$LDFLAGS"
2314			saved_CPPFLAGS="$CPPFLAGS"
2315			saved_LIBS="$LIBS"
2316			LDFLAGS="$LDFLAGS -L$d/lib"
2317			CPPFLAGS="$CPPFLAGS -I$bdb_incdir"
2318			LIBS="$outer_LIBS"
2319			if test x"$libdbfound" = x"no"
2320			then
2321				AC_SEARCH_LIBS([db_create], $bdb_lib,
2322				               [libdbfound="yes"])
2323				bdb_libdir=$d/lib
2324			fi
2325			if test x"$libdbfound" = x"no"
2326			then
2327				AC_SEARCH_LIBS([db_open], $bdb_lib,
2328				               [libdbfound="yes"])
2329				bdb_libdir=$d/lib
2330			fi
2331			if test x"$libdbfound" = x"no"
2332			then
2333				AC_SEARCH_LIBS([dbopen], $bdb_lib,
2334				               [libdbfound="yes"])
2335				bdb_libdir=$d/lib
2336			fi
2337
2338			LDFLAGS="$saved_LDFLAGS"
2339			CPPFLAGS="$saved_CPPFLAGS"
2340			LIBS="$saved_LIBS"
2341		done
2342	else
2343		saved_LDFLAGS="$LDFLAGS"
2344		saved_CPPFLAGS="$CPPFLAGS"
2345		saved_LIBS="$LIBS"
2346		LDFLAGS="$LDFLAGS -L$bdb_libdir"
2347		CPPFLAGS="$CPPFLAGS -I$bdb_incdir"
2348		LIBS="$outer_LIBS"
2349		if test x"$libdbfound" = x"no"
2350		then
2351			AC_SEARCH_LIBS([db_create], $bdb_lib,
2352			               [libdbfound="yes"])
2353		fi
2354		if test x"$libdbfound" = x"no"
2355		then
2356			AC_SEARCH_LIBS([db_open], $bdb_lib,
2357			               [libdbfound="yes"])
2358		fi
2359		if test x"$libdbfound" = x"no"
2360		then
2361			AC_SEARCH_LIBS([dbopen], $bdb_lib,
2362			               [libdbfound="yes"])
2363		fi
2364
2365		LDFLAGS="$saved_LDFLAGS"
2366		CPPFLAGS="$saved_CPPFLAGS"
2367		LIBS="$saved_LIBS"
2368	fi
2369
2370	if test x"$libdbfound" = x"no"
2371	then
2372		AC_MSG_ERROR([cannot find db_create, db_open or dbopen])
2373	fi
2374
2375	if test x"$bdb_incdir" != x""
2376	then
2377		LIBDB_INCDIRS="-I$bdb_incdir"
2378	fi
2379	if test x"$bdb_libdir" != x""
2380	then
2381		LIBDB_LIBDIRS="-L$bdb_libdir"
2382		LIBDB_LIBS="-l$bdb_lib"
2383	fi
2384
2385	AC_DEFINE(USE_DB, 1,
2386	          [enable support for SleepyCat/Berkeley DB libraries])
2387elif test x"$bdb" = x"no"
2388then
2389	AC_MSG_CHECKING([for BerkeleyDB])
2390	if test x"$bdbrequired" = x"yes"
2391	then
2392		AC_MSG_ERROR([disabled but required by requested features])
2393	fi
2394	AC_MSG_RESULT([not required or disabled])
2395	LIBDB_INCDIRS=""
2396	LIBDB_LIBDIRS=""
2397	LIBDB_LIBS=""
2398fi
2399
2400if test x"$unboundpath" != x"no" -a x"$bdbrequired" = x"yes"
2401then
2402	saved_LDFLAGS="$LDFLAGS"
2403	saved_CPPFLAGS="$CPPFLAGS"
2404	LDFLAGS="$LDFLAGS $LIBDB_LIBDIRS $LIBUNBOUND_LIBDIRS"
2405	CPPFLAGS="$CPPFLAGS $LIBDB_INCDIRS $LIBUNBOUND_INCDIRS"
2406	AC_CHECK_LIB([db], [log_file],
2407		AC_CHECK_LIB([unbound], [log_file],
2408			AC_MSG_ERROR([Cannot enable feature requiring BerkeleyDB with libunbound - both have log_file defined.  Please use newer BerkeleyDB version])
2409		)
2410	)
2411	LDFLAGS="$saved_LDFLAGS"
2412	CPPFLAGS="$saved_CPPFLAGS"
2413fi
2414AC_SUBST(LIBDB_INCDIRS)
2415AC_SUBST(LIBDB_LIBDIRS)
2416AC_SUBST(LIBDB_LIBS)
2417
2418LIBOPENDKIM_LIBS="$LIBCRYPTO_LIBS $LIBTRE_LIBS $LIBRESOLV"
2419# This (below) is just for the pkg-config file opendkim.pc.in
2420LIBOPENDKIM_LIBS_PKG="$LIBOPENDKIM_LIBS"
2421LIBOPENDKIM_INC="$LIBCRYPTO_CPPFLAGS $LIBCRYPTO_CFLAGS $LIBTRE_CPPFLAGS"
2422
2423if test x"$USE_DB_LIBOPENDKIM_TRUE" = x""
2424then
2425	LIBOPENDKIM_INC="$LIBOPENDKIM_INC $LIBDB_INCDIRS"
2426	LIBOPENDKIM_LIBS_PKG="$LIBOPENDKIM_LIBS_PKG $LIBDB_LIBS"
2427	LIBOPENDKIM_LIBS="$LIBOPENDKIM_LIBS $LIBDB_LIBS"
2428fi
2429
2430AC_SUBST(LIBOPENDKIM_LIBS)
2431AC_SUBST(LIBOPENDKIM_LIBS_PKG)
2432AC_SUBST(LIBOPENDKIM_INC)
2433
2434AC_DEFINE_UNQUOTED([LIBOPENDKIM_FEATURE_STRING], "$LIBOPENDKIM_FEATURE_STRING",
2435                   [Feature string for printing])
2436
2437#
2438# setup for testing
2439#
2440
2441AC_ARG_ENABLE([live-testing],
2442              AS_HELP_STRING([--disable-live-testing],
2443                             [disable tests that require Internet access]),
2444              [live_tests="$enable_live_testing"], [live_tests="yes"])
2445AM_CONDITIONAL(LIVE_TESTS, test x"$live_tests" = x"yes")
2446
2447#
2448# specify test socket
2449#
2450
2451AC_ARG_WITH([test-socket],
2452            AS_HELP_STRING([--with-test-socket],
2453                           [specify socket to use for all tests]),
2454            [testsocket="$withval"], [testsocket=""])
2455AM_CONDITIONAL(TEST_SOCKET, test x"$testsocket" != x"")
2456if test x"$testsocket" != x""
2457then
2458	TESTSOCKET=$testsocket
2459	AC_SUBST(TESTSOCKET)
2460fi
2461
2462#
2463# Platform Specific Configuration
2464#
2465AC_CANONICAL_HOST
2466case "$host" in
2467	*-darwin*)
2468		CPPFLAGS="$CPPFLAGS -DBIND_8_COMPAT -DDARWIN"
2469		if test x"$unboundpath" = x"no"
2470		then
2471			AC_MSG_ERROR("unbound required on Darwin")
2472		fi
2473		;;
2474esac
2475
2476#
2477# Determine domainname for sample configs
2478#
2479AC_ARG_WITH([domain],
2480            AS_HELP_STRING([--with-domain],
2481                           [name of the domain for signing - sets this in sample configuration files]),
2482            [
2483                 DOMAIN="$withval"
2484	    ],[
2485                 AC_PATH_PROG(domainname, domainname)
2486	         AS_IF([test x"$domainname" != x""],
2487	         	[DOMAIN=`$domainname`],
2488		 )
2489		 AS_IF([test x"$DOMAIN" = x"" -o x"$DOMAIN" = x"(none)" ],
2490	         		[DOMAIN=example.com]
2491		 )
2492	    ]
2493	    )
2494
2495AC_SUBST([DOMAIN])
2496
2497AC_ARG_WITH([erlang],
2498            AS_HELP_STRING([--with-erlang],
2499                           [location of Erlang includes and library]),
2500            [erlpath="$withval"], [erlpath="no"])
2501
2502LIBERL_INCDIRS=""
2503LIBERL_LIBDIRS=""
2504LIBERL_LIBS=""
2505erl_found="no"
2506
2507if test \( x"$erlpath" = x"yes" -o x"$erlpath" = x"auto" \)
2508then
2509	AC_MSG_CHECKING([for Erlang])
2510	b=`erl -noshell -eval 'io:format("~s~n", [[code:lib_dir()]]).' -s erlang halt`
2511	erlbase=`ls -d $b/erl_interface-* | tail -n1`
2512	AC_MSG_RESULT($erlbase)
2513	LIBERL_INCDIRS="-I$erlbase/include"
2514	LIBERL_LIBDIRS="-L$erlbase/lib"
2515	LIBERL_LIBS="-pthread -lerl_interface -lei"
2516	AC_DEFINE([USE_ERLANG], 1, [support for erlang access])
2517	erl_found="yes"
2518fi
2519
2520if test x"$erlpath" != x"yes" -a x"$erlpath" != x"auto" -a x"$erlpath" != x"no"
2521then
2522	AC_MSG_CHECKING([for Erlang])
2523	if test -f $erlpath/include/ei.h
2524	then
2525		AC_MSG_RESULT($erlpath)
2526		LIBERL_INCDIRS="-I$erlpath/include"
2527		LIBERL_LIBDIRS="-L$erlpath/lib"
2528		LIBERL_LIBS="-pthread -lerl_interface -lei"
2529		erl_found="yes"
2530	else
2531		AC_MSG_ERROR(not found at $erlpath)
2532	fi
2533fi
2534
2535if test x"$erl_found" = x"yes"
2536then
2537	saved_CPPFLAGS="$CPPFLAGS"
2538	CPPFLAGS="$outer_CPPFLAGS $LIBERL_INCDIRS"
2539	AC_DEFINE([USE_ERLANG], 1, [support for Erlang access])
2540	AC_SUBST([LIBERL_MANNOTICE], "")
2541else
2542	AC_SUBST([LIBERL_MANNOTICE], "(Not enabled for this installation.)")
2543fi
2544
2545AM_CONDITIONAL(ERLANG, test x"$erl_found" = x"yes")
2546AC_SUBST(LIBERL_INCDIRS)
2547AC_SUBST(LIBERL_LIBDIRS)
2548AC_SUBST(LIBERL_LIBS)
2549
2550#
2551# final command line tweaks
2552#
2553
2554CPPFLAGS="$CPPFLAGS -DCONFIG_BASE=\\\"$sysconfdir\\\""
2555
2556test "x$prefix" = xNONE && prefix=$ac_default_prefix
2557SYSCONFDIR=`eval echo "$sysconfdir"`
2558AC_SUBST([SYSCONFDIR])
2559
2560#
2561# for contrib/spec/opendkim.spec.in
2562#
2563
2564installbin="no"
2565specconfig=""
2566specrequires=""
2567specbuildrequires=""
2568
2569if test x"$enable_reputation" = x"yes"
2570then
2571	specconfig="$specconfig --enable-reputation"
2572	specrequires="$specrequires libcurl"
2573	specbuildrequires="$specbuildrequires libcurl-devel jansson-devel"
2574fi
2575
2576if test x"$enable_stats" = x"yes"
2577then
2578	specconfig="$specconfig --enable-stats --with-odbx"
2579	specrequires="$specrequires libdb opendbx"
2580	specbuildrequires="$specbuildrequires libdb-devel opendbx-devel"
2581fi
2582
2583if test x"$jansson_found" = x"yes"
2584then
2585	# autobuild
2586	installbin="yes"
2587	specconfig="$specconfig --with-libjansson=$janssonpath"
2588fi
2589
2590# opendkim-spam
2591if test x"$enable_stats" = x"yes" -a x"$odbx_found" = x"yes"
2592then
2593	installbin="yes"
2594	specconfig="$specconfig --enable-stats --with-odbx=$odbxpath"
2595fi
2596
2597# miltertest
2598if test x"$lua_found" = x"yes"
2599then
2600	installbin="yes"
2601	specconfig="$specconfig --with-lua=$luapath"
2602	specrequries="$specrequires lua"
2603	specbuildrequries="$specbuildrequires lua-devel"
2604fi
2605
2606SPECBINDIR=""
2607if test x"$installbin" = x"yes"
2608then
2609	SPECBINDIR="%{_bindir}/*"
2610fi
2611
2612SPECCONFIGURE="$specconfig"
2613
2614if test x"$specrequires" = x""
2615then
2616	SPECREQUIRES=""
2617else
2618	SPECREQUIRES="Requires:$specrequires"
2619fi
2620
2621if test x"$specbuildrequires" = x""
2622then
2623	SPECBUILDREQUIRES=""
2624else
2625	SPECBUILDREQUIRES="BuildRequires:$specbuildrequires"
2626fi
2627
2628AC_SUBST(SPECBINDIR)
2629AC_SUBST(SPECCONFIGURE)
2630AC_SUBST(SPECREQUIRES)
2631AC_SUBST(SPECBUILDREQUIRES)
2632
2633#
2634# Finish up
2635#
2636AC_OUTPUT([	Makefile
2637		docs/Makefile
2638		autobuild/Makefile
2639		contrib/Makefile
2640			contrib/convert/Makefile
2641			contrib/docs/Makefile
2642			contrib/init/Makefile
2643			contrib/init/generic/Makefile
2644			contrib/init/redhat/Makefile
2645			contrib/init/redhat/opendkim
2646			contrib/init/redhat/opendkim-default-keygen
2647			contrib/init/solaris/Makefile
2648			contrib/ldap/Makefile
2649			contrib/lua/Makefile
2650			contrib/patches/Makefile
2651			contrib/repute/Makefile
2652			contrib/spec/Makefile
2653			contrib/spec/opendkim.spec
2654			contrib/stats/Makefile
2655			contrib/systemd/Makefile
2656			contrib/systemd/opendkim.service
2657		libopendkim/opendkim.pc libopendkim/Makefile
2658		libopendkim/docs/Makefile
2659		libopendkim/tests/Makefile
2660		librbl/rbl.pc librbl/Makefile
2661		libut/ut.pc libut/Makefile
2662		libvbr/vbr.pc libvbr/Makefile
2663		miltertest/Makefile
2664		opendkim/Makefile opendkim/opendkim.8 opendkim/opendkim-genkey
2665			opendkim/opendkim-genkey.8 opendkim/opendkim-genzone.8
2666			opendkim/opendkim-lua.3
2667			opendkim/opendkim-testkey.8 opendkim/opendkim-stats.8
2668			opendkim/opendkim-testmsg.8 opendkim/opendkim.conf.5
2669			opendkim/opendkim.conf.simple
2670			opendkim/opendkim.conf.simple-verify
2671			opendkim/opendkim-atpszone.8 opendkim/opendkim-spam.1
2672		opendkim/tests/Makefile
2673		stats/Makefile stats/opendkim-importstats.8
2674			stats/opendkim-expire
2675			stats/opendkim-expire.8
2676			stats/opendkim-gengraphs
2677			stats/opendkim-gengraphs.8
2678			stats/opendkim-genstats
2679			stats/opendkim-genstats.8
2680			stats/opendkim-reportstats
2681		reprrd/Makefile
2682			reprrd/opendkim-reprrdimport
2683			reprrd/opendkim-reprrdimport.8
2684			reprrd/reprrd.pc
2685		reputation/Makefile
2686			reputation/opendkim-genrates
2687			reputation/opendkim-genrates.8
2688			reputation/opendkim-modtotals
2689			reputation/opendkim-modtotals.8
2690			reputation/opendkim-rephistory
2691			reputation/opendkim-rephistory.8
2692			reputation/repute.pc
2693])
2694