]> Pileus Git - ~andy/fetchmail/blob - configure.ac
Remove even more cruft.
[~andy/fetchmail] / configure.ac
1 dnl Autoconfigure input file for fetchmail
2 #
3 # Fetchmail automatic configuration support
4 #
5 # Eric S. Raymond <esr@thyrsus.com>
6 # 2004 - 2010 Matthias Andree <matthias.andree@gmx.de>
7 #
8 dnl Process this file with autoconf to produce a configure script.
9 dnl
10
11 dnl XXX - if bumping version here, check fetchmail.man, too!
12 AC_INIT([fetchmail],[6.4.0-alpha1],[fetchmail-devel@lists.berlios.de])
13 AC_CONFIG_SRCDIR([fetchmail.h])
14 AC_CONFIG_HEADERS([config.h])
15 AC_CONFIG_LIBOBJ_DIR([.])
16
17 AC_CANONICAL_HOST
18
19 dnl automake options are in Makefile.am
20 AC_PREREQ(2.60)
21 dnl 2.60 required for AC_USE_SYSTEM_EXTENSIONS
22 AM_INIT_AUTOMAKE
23
24 dnl python is optional
25 #
26 # you can pass PYTHON=: in environment or on the command line
27 # to disable python detection and continue without building/installing
28 # fetchmail.conf -- be sure to check README.packaging, too!
29 #
30 AM_PATH_PYTHON(2.0,,AC_MSG_WARN([Disabling fetchmailconf: python 2.0 or greater not found]))
31 AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != :])
32
33 AC_PROG_AWK
34 AC_PROG_CC
35 AM_PROG_CC_C_O
36 AC_PROG_CPP                     dnl Later checks need this.
37 AC_PROG_INSTALL
38 AM_PROG_LEX
39 AC_PROG_MAKE_SET
40 AC_PROG_RANLIB
41 AC_PROG_YACC
42
43 AC_USE_SYSTEM_EXTENSIONS
44
45 dnl check for b0rked Solaris (and other shells) and find one that works
46 AC_MSG_CHECKING(for a working shell...)
47 for i in /usr/xpg6/bin/sh /usr/xpg4/bin/sh /usr/ccs/bin/sh /bin/sh /usr/bin/sh /bin/ksh /bin/bash /usr/local/bin/bash ; do
48     $i -c 'if ! false ; then echo $(echo ok) ; fi' >config.$$ 2>/dev/null
49     j=`cat config.$$`
50     rm -f config.$$
51     if test "x$j" = "xok" ; then
52         SHELL=$i
53         AC_SUBST(SHELL)
54         break
55     fi
56 done
57 AC_MSG_RESULT($SHELL)
58 if test "x$SHELL" = "x" ; then
59     AC_MSG_ERROR(no SUS compliant shell found - on Solaris, install SUNWxcu4)
60 fi
61
62
63 AC_TYPE_SIZE_T
64 AC_TYPE_PID_T
65 AC_CHECK_HEADERS([arpa/nameser.h md5.h])
66
67 AC_CHECK_HEADERS([resolv.h],,,[
68 #include <sys/types.h>
69 #ifdef HAVE_NETINET_IN_H
70 #include <netinet/in.h>
71 #endif
72 #ifdef HAVE_ARPA_NAMESER_H
73 #include <arpa/nameser.h>
74 #endif
75 ])
76
77 AC_CHECK_DECLS([h_errno],,,[
78         AC_INCLUDES_DEFAULT
79         #ifdef HAVE_NETDB_H
80         #include <netdb.h>
81         #endif
82 ])
83
84 AC_C_CONST                      dnl getopt needs this.
85
86 # Check for OS special cases
87 case $host_os in
88 darwin*)
89     AC_MSG_NOTICE(found Darwin - Adding -DBIND_8_COMPAT to CFLAGS)
90     CPPFLAGS="$CPPFLAGS -DBIND_8_COMPAT"
91     ;;
92 # Check for FreeBSD special case: more libs needed
93 freebsd*)
94     AC_MSG_NOTICE(found FreeBSD - Adding -lkvm -lcom_err to standard libraries)
95     LIBS="$LIBS -lkvm -lcom_err"
96     ;;
97 esac
98
99 AC_CACHE_SAVE
100
101 dnl i18n
102 AM_GNU_GETTEXT([external], [need-ngettext])
103 AM_GNU_GETTEXT_VERSION([0.17])
104 dnl end i18n
105
106 # Under sysV68, socket and friends are provided by the C library.
107 # -linet does not provide socket, but causes multiple definition
108 # errors at link-time.  It is thus better to only use the C library.
109 # So don't add -linet to the link list unless it's necessary
110 AC_CHECK_FUNC(socket,
111     AC_MSG_RESULT(using libc's socket),
112     AC_CHECK_LIB(socket,socket)
113     AC_CHECK_LIB(inet,socket))
114
115 # The condition in this test copes with the presence of inet_addr in libc6.
116 AC_CHECK_FUNC(inet_addr,
117     AC_MSG_RESULT(using libc's inet_addr),
118     AC_CHECK_LIB(nsl,inet_addr))
119
120 AC_REPLACE_FUNCS([stpcpy strlcpy strlcat])
121
122 have_md5=no
123 if test "$ac_cv_header_md5_h" != no ; then
124     AC_SEARCH_LIBS(MD5Init, [md], [have_md5=yes])
125 fi
126
127 if test "$have_md5" != yes ; then
128     AC_LIBSOURCE(md5c.c)
129     EXTRAOBJ="$EXTRAOBJ md5c.\$(OBJEXT)"
130 fi
131
132 AC_CHECK_FUNC(getopt_long, [],
133               [AC_LIBSOURCES([getopt.c, getopt1.c])
134                EXTRAOBJ="$EXTRAOBJ getopt.\$(OBJEXT) getopt1.\$(OBJEXT)"])
135
136 AC_SUBST(EXTRAOBJ)
137
138 AC_CHECK_FUNCS(vsyslog inet_aton)
139
140 dnl INET6 is used by KAME/getnameinfo
141 AC_CACHE_CHECK(for AF_INET6/PF_INET6,ac_cv_inet6,
142 AC_COMPILE_IFELSE([
143   AC_LANG_PROGRAM([[
144     #ifdef HAVE_SYS_TYPES_H
145     #include <sys/types.h>
146     #endif
147     #ifdef HAVE_SYS_SOCKET_H
148     #include <sys/socket.h>
149     #endif
150   ]],[[
151     int foo = AF_INET6;
152     int bar = PF_INET6;
153   ]])],
154   ac_cv_inet6=yes , ac_cv_inet6=no
155 ))
156 if test "x$ac_cv_inet6" = xyes
157 then
158     AC_DEFINE(INET6,1,Define to 1 if your system defines AF_INET6 and PF_INET6.)
159 fi
160
161 # Under Red Hat 4.0 (and many other Linuxes) -lresolv is seriously flaky
162 # and breaks gethostbyname(2).  It's better to use the bind stuff in the C
163 # library.  So don't add -lresolv to the link list unless it's necessary
164 # (It will be necessary when using GNU libc6).
165 old_LIBS="$LIBS"
166 for lib in '' -lresolv; do
167     if test -z "$lib"; then
168        AC_MSG_CHECKING([for res_search in libc])
169     else
170        AC_MSG_CHECKING([for res_search in $lib])
171     fi
172     LIBS="$old_LIBS $lib"
173     AC_LINK_IFELSE([AC_LANG_PROGRAM([[
174 #include <sys/types.h>
175 #ifdef HAVE_NETINET_IN_H
176 #include <netinet/in.h>
177 #endif
178 #ifdef HAVE_ARPA_NAMESER_H
179 #include <arpa/nameser.h>
180 #endif
181 #ifdef HAVE_RESOLV_H
182 #include <resolv.h>
183 #endif
184 extern int res_search();
185 ]], [[res_search(0, 0, 0, 0, 0); dn_skipname(0,0);]])],
186     [AC_MSG_RESULT([found])
187      AC_DEFINE(HAVE_RES_SEARCH, [1],
188                [Define to 1 if you have the 'res_search' and 'dn_skipname' functions.])
189      break], [AC_MSG_RESULT([not found])])
190      LIBS=$old_LIBS
191 done
192
193 dnl Check for libcrypt -- it may live in libc or libcrypt, as on IRIX
194 AC_CHECK_FUNC(crypt, , AC_CHECK_LIB(crypt,crypt))
195
196 dnl Check for usable void pointer type
197 AC_MSG_CHECKING(use of void pointer type)
198 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[char *p;
199     void *xmalloc();
200     p = (char *) xmalloc(1);
201    ]])],[AC_DEFINE(HAVE_VOIDPOINTER,1,[Define if your C compiler allows void * as a function result]) AC_MSG_RESULT(yes)],[AC_MSG_RESULT(no)])
202
203 dnl Check for ANSI volatile
204 AC_C_VOLATILE
205
206 dnl Check out the wait reality.  We have to assume sys/wait.h is present.
207 AC_CHECK_FUNCS(waitpid wait3)
208 AC_MSG_CHECKING(for union wait);
209 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
210 #include <sys/wait.h>]], [[union wait status; int pid; pid = wait (&status);
211 #ifdef WEXITSTATUS
212 /* Some POSIXoid systems have both the new-style macros and the old
213    union wait type, and they do not work together.  If union wait
214    conflicts with WEXITSTATUS et al, we do not want to use it at all.  */
215 if (WEXITSTATUS (status) != 0) pid = -1;
216 #endif
217 #ifdef HAVE_WAITPID
218 /* Make sure union wait works with waitpid.  */
219 pid = waitpid (-1, &status, 0);
220 #endif
221 ]])],[AC_DEFINE(HAVE_UNION_WAIT,1,Define if 'union wait' is the type of the first arg to wait functions.) AC_MSG_RESULT(yes)],[AC_MSG_RESULT(no)])
222
223 AC_MSG_CHECKING(sys_siglist declaration in signal.h or unistd.h)
224 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <signal.h>
225 /* NetBSD declares sys_siglist in <unistd.h>.  */
226 #include <unistd.h>
227 ]], [[char *msg = *(sys_siglist + 1);]])],[AC_DEFINE(SYS_SIGLIST_DECLARED,1,[Define if 'sys_siglist' is declared by <signal.h>.]) AC_MSG_RESULT(yes)],[AC_MSG_RESULT(no)])
228
229 # Find the right directory to put the root-mode PID file in
230 for dir in "/var/run" "/etc"
231 do
232         if test -d $dir 
233         then
234                 break;
235         fi
236 done
237 AC_MSG_RESULT(root-mode pid file will go in $dir)
238 AC_DEFINE_UNQUOTED(PID_DIR, "$dir", directory for PID lock files)
239
240 # We may have a fallback MDA available in case the socket open to the 
241 # local SMTP listener fails.  Best to use procmail for this, as we know
242 # it won't try delivering through local SMTP and cause a mail loop.
243 # Sendmail without the -t option to use the message headers will work too,
244 # not just for sendmail itself but for workalikes like exim.
245 #
246 # Note1: A disadvantage of using procmail is that local alias expansion
247 # according to /etc/aliases won't get done if we fall back.  This doesn't
248 # matter in single-drop mode.
249 #
250 # Note2: it would be a very bad idea to use any MDA that doesn't return
251 # a refuse-to-deliver status on disk- or process-table-full
252 # conditions; mail could get lost that way.  Sendmail and all of the MDAs
253 # like exim that might be lurking under a sendmail alias) do the right 
254 # thing in this circumstance.  Matthias Andree warns that procmail does
255 # not.  
256 #
257 # Note3: Defalt value of fallback is now off.  Matthias writes:
258 #
259 # 1. there is no way to predict when the fallback is used. With some MTAs
260 #    (such as those limiting load average), outer circumstances can cause
261 #    the fallback to kick in.
262
263 # 2. the fallback changes fetchmail behaviour in unpredictable ways. It's
264 #    not only about alias expansion, .forwards to special filters won't
265 #    work, mail may end up in a different place (users claim "mail loss"
266 #    for that).
267
268 # 3. The claim procmail did the right thing with its exit codes is plain
269 #    wrong. I've seen procmail exit with code 1 when it should have exited
270 #    with code 75, like, configuration errors. Procmail is a dangerous
271 #    beast and is best replaced by maildrop.
272
273 # 4. if multiple choices exist (like procmail and maildrop), fetchmail
274 #    cannot tell which one it should choose. Say, your MTA is configured
275 #    to use maildrop to deliver to user's mailboxes, if fetchmail then
276 #    chooses procmail, this is plain wrong.
277 #
278
279 AC_PATH_PROG(procmail, procmail, "", $PATH:/usr/sbin)
280 AC_PATH_PROG(sendmail, sendmail, "", $PATH:/usr/sbin:/usr/lib)
281 AC_PATH_PROG(maildrop, maildrop, "", $PATH:/usr/local/bin)
282
283 ###     use option --disable-fallback to disable fallback MDA
284 ###     use option --enable-fallback=procmail or 
285 ###                --enable-fallback=sendmail to select
286 AC_ARG_ENABLE(fallback,
287         [  --enable-fallback=procmail    enable procmail as fallback
288   --enable-fallback=sendmail    enable /usr/sbin/sendmail as fallback
289   --enable-fallback=maildrop    enable maildrop as fallback
290   --enable-fallback=no          disable fallback],,[enable_fallback=no])
291
292 case "$enable_fallback" in
293         sendmail)       if test -z "$sendmail" ; then 
294                                 AC_MSG_ERROR([Sendmail selected as fallback, but not found])
295                                 #not reached
296                         fi
297                         AC_DEFINE_UNQUOTED(FALLBACK_MDA, "$sendmail -i %T", Fallback MTA to use if defined)
298                         AC_MSG_NOTICE(Will use $sendmail as fallback MDA.)
299                         ;;
300         procmail)       if test -z "$procmail" ; then
301                                 AC_MSG_ERROR([procmail selected as fallback, but not found])
302                                 #not reached
303                         fi
304                         AC_DEFINE_UNQUOTED(FALLBACK_MDA, "$procmail -d %T")
305                         AC_MSG_NOTICE(Will use $procmail as fallback MDA.)
306                         ;;
307         maildrop)       if test -z "$maildrop" ; then
308                                 AC_MSG_ERROR([maildrop selected as fallback, but not found])
309                                 #not reached
310                         fi
311                         AC_DEFINE_UNQUOTED(FALLBACK_MDA, "$maildrop -d %T")
312                         AC_MSG_NOTICE(Will use $maildrop as fallback MDA.)
313                         ;;
314         no|unset)       AC_MSG_NOTICE(Will not use a fallback MDA.)
315                         ;;
316         auto|yes|set)   if test -n "$sendmail" ; then
317                                 AC_DEFINE_UNQUOTED(FALLBACK_MDA,"$sendmail -i %T")
318                                 AC_MSG_NOTICE(Will use $sendmail as fallback MDA.)
319                         else
320                                 AC_MSG_WARN(No fallback MDA available.  procmail and maildrop are not eligible)
321                                 AC_MSG_WARN(for automatic fallback MDA configuration for reliability reasons.)
322                         fi
323                         ;;
324         *)              AC_MSG_ERROR([unkown value for --enable-fallback given: $enable_fallback])
325                         #notreached
326                         ;;
327 esac
328
329 AC_CHECK_SIZEOF(short)
330 AC_CHECK_SIZEOF(int)
331 AC_CHECK_SIZEOF(long)
332
333 ###     use option --disable-POP3 to omit the POP3 support
334 AC_ARG_ENABLE(POP3,
335         [  --disable-POP3          don't compile in POP3 protocol support],
336         [with_POP3=$enableval],
337         [with_POP3=yes])
338 test "$with_POP3" = "yes" && AC_DEFINE(POP3_ENABLE,1,Define if you want POP3 support compiled in)
339 AM_CONDITIONAL(POP3_ENABLE, test "$with_POP3" = yes)
340
341 ###     use option --disable-IMAP to omit the IMAP support
342 AC_ARG_ENABLE(IMAP,
343         [  --disable-IMAP          don't compile in IMAP protocol support],
344         [with_IMAP=$enableval],
345         [with_IMAP=yes])
346 test "$with_IMAP" = "yes" && AC_DEFINE(IMAP_ENABLE,1,Define if you want IMAP support compiled in)
347 AM_CONDITIONAL(IMAP_ENABLE, test "$with_IMAP" = yes)
348
349 ###     use option --disable-ETRN to omit the ETRN support
350 AC_ARG_ENABLE(ETRN,
351         [  --disable-ETRN          don't compile in ETRN protocol support],
352         [with_ETRN=$enableval],
353         [with_ETRN=yes])
354 test "$with_ETRN" = "yes" && AC_DEFINE(ETRN_ENABLE,1,Define if you want ETRN support compiled in.)
355 AM_CONDITIONAL(ETRN_ENABLE, test "$with_ETRN" = yes)
356
357 ###     use option --disable-ODMR to omit the ODMR support
358 AC_ARG_ENABLE(ODMR,
359         [  --disable-ODMR          don't compile in ODMR protocol support],
360         [with_ODMR=$enableval],
361         [with_ODMR=yes])
362 test "$with_ODMR" = "yes" && AC_DEFINE(ODMR_ENABLE,1,Define if you want ODMR support compiled in)
363 AM_CONDITIONAL(ODMR_ENABLE, test "$with_ODMR" = yes)
364
365 ###     use option --enable-RPA to compile in the RPA support
366 AC_ARG_ENABLE(RPA,
367         [  --enable-RPA            compile in RPA protocol support],
368         [with_RPA=$enableval],
369         [with_RPA=no])
370 test "$with_RPA" = "yes" && AC_DEFINE(RPA_ENABLE,1,Define if you want RPA support compiled in)
371 AM_CONDITIONAL(RPA_ENABLE, test "$with_RPA" = yes)
372
373 ###     use option --enable-NTLM to compile in the NTLM support
374 AC_ARG_ENABLE(NTLM,
375         [  --enable-NTLM           compile in NTLM authentication support],
376         [with_NTLM=$enableval],
377         [with_NTLM=no])
378 test "$with_NTLM" = "yes" && AC_DEFINE(NTLM_ENABLE,1,Define if you want NTLM authentication)
379 AM_CONDITIONAL(NTLM_ENABLE, test "$with_NTLM" = yes)
380
381 ###     use option --enable-SDPS to compile in the SDPS support
382 AC_ARG_ENABLE(SDPS,
383         [  --enable-SDPS           compile in SDPS protocol support],
384         [with_SDPS=$enableval],
385         [with_SDPS=no])
386 if test "$with_SDPS" = yes ; then
387    if test "$with_POP3" != yes ; then
388        AC_MSG_WARN([SDPS cannot be enabled with POP3 disabled. Disabling SDPS.])
389        with_SDPS=no
390    else
391        AC_DEFINE(SDPS_ENABLE,1,Define if you want SDPS support compiled in)
392    fi
393 fi
394 if test "$with_POP3" != yes && test "$with_IMAP"  != yes ; then
395     AC_MSG_ERROR([You must enable at least one of POP3 and IMAP.])
396 fi
397
398 AC_CACHE_SAVE
399
400 ###     use option --enable-opie to compile in the OPIE support
401 AC_ARG_ENABLE(opie,
402         [  --enable-opie           support OTP through the OPIE library],
403         [ AC_CHECK_HEADER(opie.h,, [AC_MSG_ERROR(cannot find <opie.h>, which is required for OPIE support.)])
404           AC_CHECK_LIB(opie,opiegenerator,, [AC_MSG_ERROR(cannot find libopie, which is required for OPIE support.)])
405           with_opie=$enableval],
406         [with_opie=no])
407 test "$with_opie" = "yes" && AC_DEFINE(OPIE_ENABLE,1,Define if you want OPIE support compiled in)
408
409 dnl Mostly stolen from gnulib's getaddrinfo.m4
410 AC_SEARCH_LIBS(getaddrinfo, [nsl socket])
411 AC_CACHE_CHECK([for getaddrinfo],[fm_cv_getaddrinfo],[
412   AC_TRY_LINK([
413 #include <sys/types.h>
414 #ifdef HAVE_SYS_SOCKET_H
415 #include <sys/socket.h>
416 #endif
417 #ifdef HAVE_NETDB_H
418 #include <netdb.h>
419 #endif
420   ], [getaddrinfo(0, 0, 0, 0);],
421     [ fm_cv_getaddrinfo=yes],
422     [ fm_cv_getaddrinfo=no ])
423 ])
424
425 if test x"$fm_cv_getaddrinfo" = "xyes"; then  
426      AC_DEFINE(HAVE_GETADDRINFO, 1,
427       [Define to 1 if you have the getaddrinfo function.])
428 fi
429
430 AC_CACHE_CHECK([for getnameinfo],[fm_cv_getnameinfo],[
431   AC_TRY_LINK([
432 #include <sys/types.h>
433 #ifdef HAVE_SYS_SOCKET_H
434 #include <sys/socket.h>
435 #endif
436 #ifdef HAVE_NETDB_H
437 #include <netdb.h>
438 #endif
439 #ifndef NULL
440 #define NULL 0
441 #endif
442   ], [getnameinfo(NULL,0, NULL,0, NULL, 0, 0);],
443     [ fm_cv_getnameinfo=yes],
444     [ fm_cv_getnameinfo=no ])
445 ])
446 if test $fm_cv_getnameinfo = yes ; then
447     AC_DEFINE(HAVE_GETNAMEINFO,1,[Define to 1 if your system has getnameinfo()])
448 fi
449
450 AM_CONDITIONAL(NEED_GETADDRINFO, test "$fm_cv_getaddrinfo" != yes)
451 AM_CONDITIONAL(NEED_GETNAMEINFO, test "$fm_cv_getnameinfo"   != yes)
452
453 AC_CHECK_FUNCS(inet_ntop)
454 dnl Check if getaddrinfo is async-signal-safe - most implementations aren't
455 if test "$fm_cv_getaddrinfo" = yes ; then
456     AC_MSG_CHECKING(if your getaddrinfo is async-signal-safe)
457     gai_ts=no
458     dnl we have getaddrinfo() - check if the OS is known to have a async-signal-safe implementation
459     case $host_os in
460         darwin9*)                               gai_ts=yes ;;
461         linux*)                                 gai_ts=yes ;;
462         freebsd5.5|freebsd6*|freebsd7*)         gai_ts=yes ;;
463         solaris2.8|solaris2.9|solaris2.10)      gai_ts=yes ;;
464     esac
465     AC_MSG_RESULT($gai_ts)
466     if test $gai_ts = yes ; then
467         AC_DEFINE(GETADDRINFO_ASYNCSAFE, 1, [define to 1 if you know your getaddrinfo function is async-signal-safe])
468     fi
469 fi
470
471 # This version of the Kerberos 4 and 5 options addresses the follwing issues:
472
473 # * Build correctly under Heimdal kerberos if it is compiled with db2 and
474 #   OpenSSL support (Debian's is)
475 # * Build the kerberos.c stuff (KPOP) only for kerberosIV, to avoid breakage.
476 #   I don't know if this is 100% correct, but now at least IMAP and POP3
477 #   behave the same way regarding kerberosV.
478 # * Build without any fuss for both kerberosIV and V at the same time.
479 # * Move all the kerberos header mess to kerberos.h, and #include that
480 #   in driver.c and kerberos.c.
481
482 # Tested using the Heimdal Kerberos V libs, Kungliga Tekniska Högskolan (the
483 # Royal Institute of Technology in Stockholm, Sweden)'s kerberos IV libs, and
484 # the MIT reference implementation of KerberosV (all as packaged in Debian).
485
486 ###    use option --with-kerberos5=DIR to point at a Kerberos 5 directory
487 ### make sure --with-ssl is run before --with-kerberos* !
488 AC_ARG_WITH(kerberos5,
489        [  --with-kerberos5=DIR    point fetchmail compilation at a Kerberos 5 directory],
490 [
491 if test "$with_kerberos5" != "no"
492 then
493 # Check for a OpenBSD special case
494 if test "$with_kerberos5" = "yes" && ( test `uname` = "OpenBSD" )
495 then
496   AS_MESSAGE(checking kerberosV for OpenBSD...)
497   AC_DEFINE(HEIMDAL,1,Define if you have HEIMDAL kerberos 5)
498   AC_DEFINE(KERBEROS_V5,1,Define if you have Kerberos V5)
499   CFLAGS="$CFLAGS -I/usr/include/kerberosV"
500   LIBS="$LIBS -lasn1 -lkrb5 -lcom_err -lkafs"
501 elif krb5-config 2> /dev/null >/dev/null ; then
502   krb5_prefix=`krb5-config --prefix krb5`
503   AC_MSG_RESULT([krb5-config points to kerberosV under $krb5_prefix])
504   if test -f ${krb5_prefix}/include/et/com_err.h && \
505    ! test -f ${krb5_prefix}/include/com_err.h  ; then
506     CFLAGS="$CFLAGS -I${krb5_prefix}/include/et"
507   fi
508   unset krb5_prefix
509   CFLAGS="$CFLAGS `krb5-config --cflags krb5`"
510   LIBS="$LIBS `krb5-config --libs krb5`"
511   AC_DEFINE(KERBEROS_V5)
512 else
513   if test "$with_kerberos5" != "yes" 
514   then
515       LDFLAGS="$LDFLAGS -L${with_kerberos5}/lib"
516       searchdirs="$with_kerberos5"
517   else
518       searchdirs="/usr/kerberos /usr/local/krb5 /usr/athena /usr"
519   fi
520   with_kerberos5=
521   for dir in $searchdirs
522   do AC_MSG_CHECKING([for Kerberos V in $dir])
523      if test -f "$dir/include/krb5.h" || test -f "$dir/include/krb5/krb5.h"
524      then
525         if test -d "$dir/include/krb5" ; then CPPFLAGS="$CPPFLAGS -I$dir/include/krb5" ; fi
526         ac_krblibs=
527         if test -f "$dir/include/roken.h" || test -f "$dir/include/krb5/roken.h"
528         then
529            ac_krblibs="-lasn1 -lroken -lcom_err"
530            AC_MSG_RESULT([Heimdal found])
531           dnl Attempt to detect if we need to -ldb2 to link Heimdal
532           dnl we assume we do if it is available
533            AC_CHECK_LIB(db2, db_open, ac_krblibs="$ac_krblibs -ldb2", [],
534                 ${LDFLAGS})
535            AC_CHECK_LIB(des, des_string_to_key, libk5crypto=-ldes,
536               AC_CHECK_LIB(crypto, MD5_Init, [],
537                 AC_MSG_ERROR([DES libraries not found. Try adding --with-ssl to enable OpenSSL support]),
538                 ${LDFLAGS} ${ac_krblibs}),
539            ${LDFLAGS} ${ac_krblibs})
540            AC_DEFINE(HEIMDAL)
541         else
542           AC_MSG_RESULT([found])
543           ac_krblibs="-lcom_err"
544            AC_CHECK_LIB(crypto,
545              krb5_des_string_to_key,
546              libk5crypto=-lcrypto,
547                 AC_CHECK_LIB(k5crypto,
548                    krb5_des_string_to_key,
549                    libk5crypto=-lk5crypto,
550                       AC_MSG_ERROR([Kerberos 5 DES libraries not found]),
551                    ${LDFLAGS} ${ac_krblibs}),
552                  ${LDFLAGS} ${ac_krblibs})
553         fi
554         AC_CHECK_LIB(krb5, krb5_init_context,[],
555            continue,
556            ${LDFLAGS} ${ac_krblibs})
557         AC_DEFINE(KERBEROS_V5)
558         test "$dir" != "/usr" && CFLAGS="$CFLAGS -I$dir/include"
559         LDFLAGS="$LDFLAGS -L$dir/lib"
560        LIBS="$LIBS $ac_krblibs $libk5crypto"
561         with_kerberos5=$dir
562         break
563      else
564         AC_MSG_RESULT([not found])
565      fi
566   done
567   if test -z "$with_kerberos5" ; then
568      AC_MSG_ERROR([Kerberos 5 libraries not found])
569   fi
570 fi
571 fi
572 ]) dnl --with-kerberos5=DIR
573
574 ###    use option --with-kerberos=DIR to point at a Kerberos 4 directory
575 KERBEROS_V4=0
576 AC_ARG_WITH(kerberos,
577        [  --with-kerberos=DIR     point fetchmail compilation at a Kerberos 4 directory],
578 [
579 if test "$with_kerberos" != "no"
580 then
581     AC_MSG_WARN([Kerberos IV support is obsolete. Use --with-kerberos5 if possible.])
582 # Check for a NetBSD/OpenBSD special case
583 if test "$with_kerberos" = "yes" && ( test `uname` = "NetBSD" || test `uname` = "OpenBSD" )
584 then
585   AS_MESSAGE(checking kerberosIV for `uname`...)
586   KERBEROS_V4=1
587   CFLAGS="$CFLAGS -I/usr/include/kerberosIV"
588   case `uname` in
589       NetBSD)  LIBS="$LIBS -lkrb -ldes -lroken -lcom_err" ;;
590       OpenBSD) LIBS="$LIBS -lkrb -ldes" ;;
591   esac
592 elif krb4-config 2> /dev/null >/dev/null ; then
593   krb4_prefix=`krb4-config --prefix`
594   AC_MSG_RESULT([krb4-config points to kerberosIV under $krb4_prefix])
595   unset krb4_prefix
596   CFLAGS="$CFLAGS `krb4-config --cflags`"
597   LIBS="$LIBS `krb4-config --libs`"
598   KERBEROS_V4=1
599 elif krb5-config 2> /dev/null >/dev/null ; then
600   krb4_prefix=`krb5-config --prefix krb4`
601   AC_MSG_RESULT([krb5-config points to kerberosIV under $krb4_prefix])
602   if test -f ${krb4_prefix}/include/kerberosIV/krb.h ; then
603     AC_DEFINE(KERBEROS_V4_V5,1,Define if you have Kerberos V4 headers under a kerberosIV directory)
604   fi
605   unset krb4_prefix
606   CFLAGS="$CFLAGS `krb5-config --cflags krb4`"
607   LIBS="$LIBS `krb5-config --libs krb4`"
608   KERBEROS_V4=1
609 else
610   #we need to detect when we're building under a kerberosV compatibility
611   #layer, btw...
612   if test "$with_kerberos" != "yes" ; then
613      searchdirs="$with_kerberos"
614   else
615      searchdirs="$with_kerberos5 /usr/kerberos /usr/kerberosIV /usr/athena /usr"
616   fi
617   with_kerberos=
618   ac_saveLDFLAGS="$LDFLAGS"
619   for dir in $searchdirs
620   do
621      AC_MSG_CHECKING([for Kerberos IV in $dir])
622      if test -f "$dir/include/krb.h" || test -f "$dir/include/krb4.h" \
623             || test -f "$dir/include/kerberosIV/krb.h"
624      then
625         AC_MSG_RESULT([found])
626      else
627         AC_MSG_RESULT([not found])
628        continue
629      fi
630      #Find libs
631      if test -f "$with_kerberos5/roken.h" ; then
632        AC_CHECK_LIB(45, krb_mk_req)
633      fi
634      LDFLAGS="-L$dir/lib $ac_saveLDFLAGS"
635      if test `uname` = "FreeBSD"; then
636         AC_SEARCH_LIBS(_ossl_old_des_string_to_key, [des425 des crypto], [], continue)
637      else
638         AC_SEARCH_LIBS(des_string_to_key, [crypto], [], continue)
639      fi
640      AC_SEARCH_LIBS(krb_realmofhost, [krb4 krb], [], continue)
641      with_kerberos="$dir"
642      if test -f "$dir/include/kerberosIV/krb.h" ; then
643         dir="$dir/include/kerberosIV"
644      else
645        dir="$dir/include"
646      fi
647      KERBEROS_V4=1
648      test -f "$with_kerberos5/roken.h" && AC_DEFINE(HEIMDAL)
649      test "$dir" != "/usr/include" && CFLAGS="$CFLAGS -I$dir"
650      LDFLAGS="$LDFLAGS -L$with_kerberos/lib"
651      break
652   done
653   if test -z "$with_kerberos" ; then
654      AC_MSG_ERROR([Kerberos 4 libraries not found])
655   fi
656   LDFLAGS="$ac_saveLDFLAGS"
657 fi
658 fi
659 ]) dnl --with-kerberos=DIR
660 if test "$KERBEROS_V4" = 1 ; then
661     AC_DEFINE(KERBEROS_V4,1,Define if you have Kerberos V4)
662 fi
663 AM_CONDITIONAL(KERBEROS_V4_ENABLE, test "$KERBEROS_V4" = 1)
664
665 ###     use option --with-ssl to compile in the SSL support
666 AC_ARG_WITH(ssl,
667         [  --with-ssl=[DIR]        enable SSL support using libraries in DIR],
668         [with_ssl=$withval],
669         [with_ssl=no])
670 test "$with_ssl" != "no" && AC_DEFINE(SSL_ENABLE,1,Define if you want SSL support compiled in)
671
672 if test "$with_ssl" = "yes"
673 then
674     #   User didn't specify an SSL location.  Let's look at some common
675     #   directories where SSL has been found in the past and try and auto
676     #   configure for SSL.  OpenSSL determination will be made later.
677     #   This will screw up if an OpenSSL install is located in a later
678     #   directory than an older SSLeay install, but the user should fix that
679     #   anyways and he can override on the configure line.
680     #   Just testing for directories is not sufficient, /usr exists on
681     #   all systems!
682     for ac_dir in \
683       /usr/local/ssl \
684       /usr/local \
685       /usr/ssl \
686       /usr \
687       /local/ssl \
688       /opt/ssl \
689       /opt/csw \
690       ; \
691     do
692         if test -r "$ac_dir/include/openssl/ssl.h" ; then
693             with_ssl=$ac_dir
694             break;
695         fi
696     done
697 fi
698
699 if test -n "$with_ssl" -a "$with_ssl" != "no"
700 then
701   # With the autoconfigure above, the only time this is going to be
702   # true is going to be when we could not find the headers.  If they
703   # are not in system standard locations, we are going to be broken.
704   if test "$with_ssl" = "yes"
705   then
706     # Let's just define the standard location for the SSLeay root
707     with_ssl="/usr/local/ssl"
708   fi
709   if test -r $with_ssl/include/openssl/ssl.h
710   then
711     ### ssl.h found under openssl.  Use openssl configuration preferentially,
712     AC_MSG_NOTICE(Enabling OpenSSL support in $with_ssl.)
713     test "$with_ssl" != "/usr" && CFLAGS="$CFLAGS -I$with_ssl/include"
714     ### In Red Hat 9, this file includes a reference to <krb5.h>, so we
715     ### force the Kerberos direcory onto the include path so it will build.
716     CFLAGS="$CFLAGS -I/usr/kerberos/include"
717     ### OpenBSD comes with ssl headers
718   else
719     AC_MSG_ERROR([SSL support enabled, but OpenSSL not found])
720   fi
721   LDFLAGS="$LDFLAGS -L$with_ssl/lib"
722   LIBS="$LIBS -lssl -lcrypto"
723   dnl check if -ldl is needed
724   AC_MSG_CHECKING([for additional library dependencies of SSL])
725   found=0
726   save_LIBS="$LIBS"
727   for i in "" "-ldl" ; do
728       LIBS="$LDFLAGS $save_LIBS $i"
729       AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <openssl/ssl.h>],[SSL_library_init()])],[found=1; break])
730   done
731   if test $found = 0 ; then
732       AC_MSG_RESULT([error])
733       AC_MSG_ERROR([cannot link with SSL - check config.log])
734   fi
735   LIBS="$save_LIBS $i"
736   if test "$i" = "" ; then i="(none)" ; fi
737   AC_MSG_RESULT($i)
738   dnl XXX FIXME: use pkg-config if available!
739   AC_DEFINE(SSL_ENABLE)
740 else
741   AC_MSG_NOTICE(Disabling SSL support.)
742 fi
743
744 ###     use option --with-socks=DIR to point at SOCKS library
745 AC_ARG_WITH(socks,
746         [  --with-socks[=DIR]      add built-in SOCKS firewall access],
747 [
748 if test "$with_socks" != no
749 then
750     if test "$with_socks" != yes
751     then
752         LDFLAGS="$LDFLAGS -L$with_socks"
753     else
754         AC_CHECK_LIB(socks, Rconnect,,
755                AC_MSG_ERROR([could not find libsocks which is needed for built-in SOCKS support]))
756     fi
757     AC_DEFINE(HAVE_SOCKS,1,Define if you want built-in SOCKS support)
758     CFLAGS="$CFLAGS -Dconnect=Rconnect -Dgetsockname=Rgetsockname -Dbind=Rbind -Daccept=Raccept -Dlisten=Rlisten -Dselect=Rselect"
759     LIBS="-lsocks $LIBS"
760 fi])
761
762 ###     use option --with-socks5=DIR to point at SOCKS library
763 AC_ARG_WITH(socks5,
764         [  --with-socks5[=DIR]     add built-in SOCKS5 firewall access],
765 [
766 if test "$with_socks5" != no
767 then
768   if test "$with_socks5" != yes
769   then
770     LDFLAGS="$LDFLAGS -L$with_socks5"
771   fi
772   ac_savedLDFLAGS="$LDFLAGS"
773   LDFLAGS="$LDFLAGS $LDFLAGS"
774   AC_CHECK_LIB(socks5, SOCKSconnect,,
775         AC_MSG_ERROR([could not find libsocks5 which is needed for built-in SOCKS5 support]))
776   AC_DEFINE(HAVE_SOCKS)
777   CFLAGS="$CFLAGS -Dconnect=SOCKSconnect -Dgetsockname=SOCKSgetsockname -Dbind=SOCKSbind -Daccept=SOCKSaccept -Dlisten=SOCKSlisten -Dselect=SOCKSselect -Drecvfrom=SOCKSrecvfrom -Dsendto=SOCKSsendto -Drecv=SOCKSrecv -Dsend=SOCKSsend -Dread=SOCKSread -Dwrite=SOCKSwrite -Drresvport=SOCKSrresvport -Dshutdown=SOCKSshutdown -Dlisten=SOCKSlisten -Dclose=SOCKSclose -Ddup=SOCKSdup -Ddup2=SOCKSdup2 -Dgethostbyname=SOCKSgethostbyname"
778   AC_CHECK_FUNC(SOCKSfclose, [CFLAGS="$CFLAGS -Dfclose=SOCKSfclose"])
779   LDFLAGS="$ac_savedLDFLAGS"
780 fi])
781
782 dnl for libesmtp/ modules:
783 ACX_WHICH_GETHOSTBYNAME_R
784
785 ###     use option --with-hesiod=DIR to point at a HESIOD directory
786 AC_ma_SEARCH_PACKAGE(hesiod, hesiod_getmailhost, /usr/athena /usr /usr/local,hesiod, hesiod.h)
787
788 ###     use option --with-gssapi=DIR to compile in GSSAPI support
789 AC_ARG_WITH(gssapi,
790         [  --with-gssapi[=DIR]     compile in GSSAPI support using libraries in DIR],
791 [
792 if test "$with_gssapi" != "no"
793 then
794   if test "$with_gssapi" = "yes" -a -n "$with_kerberos5"
795   then
796     with_gssapi=$with_kerberos5
797   fi
798
799   if test "$with_gssapi" != "yes" -a -n "$with_gssapi"
800   then
801     CFLAGS="$CFLAGS -I$with_gssapi/include"
802     LDFLAGS="$LDFLAGS -L$with_gssapi/lib"
803   fi
804
805   dnl obtain gssapi default libs
806   if krb5-config --libs gssapi 2>/dev/null >/dev/null ; then
807       LIBS="$LIBS `krb5-config --libs gssapi`"
808   else
809     AC_CHECK_LIB(gss, gss_check_version, LIBS="$LIBS -lgss", nogss=t)
810     if test -n "$nogss"
811     then
812       # -lgss not found
813       if test "$with_gssapi" = yes ; then
814           with_gssapi=/usr
815       fi
816       if test -f "$with_gssapi/include/roken.h" -o -f "$with_gssapi/include/krb5/roken.h"
817       then
818          # have roken.h, assume Heimdal
819          case `uname` in
820              NetBSD) LIBS="$LIBS -lkrb5" ;;
821              *)      LIBS="$LIBS -lkrb5 -lasn1 -ldes -lroken -ldb -ldl" ;;
822          esac
823          AC_CHECK_LIB(gssapi, gss_init_sec_context,LIBS="$LIBS -lgssapi",
824                       AC_MSG_ERROR([could not find libgssapi which is needed for GSSAPI support]), )
825          AC_DEFINE(HEIMDAL)
826       else
827          # no roken.h, assume MIT
828          AC_CHECK_LIB(gssapi_krb5, gss_init_sec_context,LIBS="$LIBS -lgssapi_krb5",
829                       AC_MSG_ERROR([could not find libgssapi_krb5 which is needed for GSSAPI support]), -lkrb5)
830       fi
831     fi
832   fi
833   AC_DEFINE(GSSAPI,1,Define if you want GSSAPI authentication)
834   if test "$with_gssapi" != yes ; then
835     CPPFLAGS="$CPPFLAGS -I$with_gssapi/include"
836   fi
837   AC_CHECK_HEADERS(gss.h gssapi.h gssapi/gssapi.h gssapi/gssapi_generic.h)
838   if test "$ac_cv_header_gssapi_h" = "yes"; then
839     AC_EGREP_HEADER(GSS_C_NT_HOSTBASED_SERVICE, gssapi.h, AC_DEFINE(HAVE_GSS_C_NT_HOSTBASED_SERVICE,1,Define if you have MIT kerberos))
840   else
841     AC_EGREP_HEADER(GSS_C_NT_HOSTBASED_SERVICE, gssapi/gssapi.h, AC_DEFINE(HAVE_GSS_C_NT_HOSTBASED_SERVICE))
842   fi
843 fi])
844
845 AC_CONFIG_FILES([Makefile po/Makefile.in genlsm.sh])
846 AC_OUTPUT
847
848 dnl Local Variables:
849 dnl comment-start: "dnl "
850 dnl comment-end: ""
851 dnl comment-start-skip: "\\bdnl\\b\\s *"
852 dnl compile-command: "make configure config.h.in"
853 dnl End: