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