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