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