Removed the MTS and post; now we always use /usr/sbin/sendmail -t
[mmh] / configure.in
1 dnl
2 dnl configure.in -- autoconf template for nmh
3 dnl
4
5 dnl Move this up a bit
6 AC_PREREQ(2.61)
7
8 AC_INIT(mmh, m4_normalize(m4_include([VERSION])))
9 AC_CONFIG_SRCDIR(h/nmh.h)
10 AC_CONFIG_HEADER(config.h)
11
12 AC_CANONICAL_TARGET
13
14 dnl ---------------------
15 dnl define a macro or two
16 dnl ---------------------
17
18 AC_DEFUN(NMH_PROG_GNU_LIBTOOL, [
19 if test -n "$LIBTOOL" ; then
20   tmptest=`$LIBTOOL --version 2>&1 | grep GNU`
21   if test x"$tmptest" != x  ; then
22     GNU_LIBTOOL=1
23     AC_SUBST(GNU_LIBTOOL)dnl
24   fi
25 fi
26 ] )
27   
28 echo "configuring for AC_PACKAGE_NAME-AC_PACKAGE_VERSION"
29 AC_SUBST(VERSION,AC_PACKAGE_VERSION)dnl
30
31 dnl What date of nmh are we building?
32 DATE=`cat ${srcdir}/DATE`
33 echo "configuring for nmh dated $DATE"
34 AC_SUBST(DATE)dnl
35
36 dnl --------------------------
37 dnl CHECK COMMAND LINE OPTIONS
38 dnl --------------------------
39
40 dnl Do you want to debug nmh?
41 AC_ARG_ENABLE(debug,
42   AS_HELP_STRING([--enable-debug],[enable nmh code debugging]))
43 dnl The old redundant --enable-nmh-debug is deprecated and undocumented.
44 if test x"$enable_nmh_debug" = x"yes"; then
45   enable_debug=yes
46 fi
47
48 dnl Allow users to send email from addresses other than their default?
49 AC_ARG_ENABLE(masquerade,
50   AS_HELP_STRING([--enable-masquerade='draft_from mmailid username_extension'],
51     [enable up to 3 types of address masquerading]),
52   [if test x"$enable_masquerade" = x"yes"; then
53     masquerade="draft_from mmailid username_extension"
54   else
55     masquerade="$enable_masquerade"
56   fi], [masquerade="draft_from mmailid username_extension"])
57 AC_SUBST(masquerade)dnl
58
59 dnl Do you want mhe support?
60 AC_ARG_ENABLE(mhe,
61   AS_HELP_STRING([--disable-mhe],[disable mhe support]))
62
63 dnl mhe support is on by default, so define it unless --disable-mhe or the
64 dnl deprecated, undocumented --disable-nmh-mhe are specified.
65 if test x"$enable_mhe" != x"no" -a x"$enable_nmh_mhe" != x"no"; then
66   AC_DEFINE(MHE, 1,
67     [Define to compile in support for the Emacs front-end mh-e.])dnl
68 fi
69
70 dnl Do you want to disable use of locale functions
71 AH_TEMPLATE([LOCALE],
72 [Undefine if you don't want locale features.  By default this is defined.])
73 AC_ARG_ENABLE([locale],
74 AC_HELP_STRING([--disable-locale], [turn off locale features]),
75 [if test x$enableval = xyes; then
76   AC_DEFINE(LOCALE)
77 fi],
78 AC_DEFINE(LOCALE)
79 )
80
81 dnl Do you want client-side support for using SASL for authentication?
82 dnl Note that this code will be enabled for SMTP
83 AC_ARG_WITH(cyrus-sasl, AS_HELP_STRING([--with-cyrus-sasl],
84   [Enable SASL support via the Cyrus SASL library]))
85 if test x"$with_cyrus_sasl" != x -a x"$with_cyrus_sasl" != x"no"; then
86   AC_DEFINE(CYRUS_SASL, 1,
87     [Define to use the Cyrus SASL library for authentication of SMTP.])dnl
88   if test x"$with_cyrus_sasl" != xyes; then
89     AC_MSG_WARN([Arguments to --with-cyrus-sasl now ignored])
90     AC_MSG_WARN([Please pass the appropriate arguments to CPPFLAGS/LDFLAGS])
91   fi
92   sasl_support=yes
93 else
94   sasl_support=no
95 fi
96
97 dnl Do you want client-side support for encryption with TLS?
98 AC_ARG_WITH(tls, AS_HELP_STRING([--with-tls], [Enable TLS support]))
99 if test x"$with_tls" != x -a x"$with_tls" != x"no"; then
100   AC_DEFINE(TLS_SUPPORT, 1, [Support TLS for session encryption.])dnl
101   tls_support=yes
102 else
103   tls_support=no
104 fi
105
106 dnl What should be the default editor?
107 AC_ARG_WITH(editor,
108   AS_HELP_STRING([--with-editor=EDITOR],[specify the default editor]))
109
110 if test -n "$with_editor"; then
111   editorpath="$with_editor"
112 fi
113
114 dnl Set the backup prefix
115 AC_ARG_WITH([hash-backup],
116   AS_HELP_STRING([--with-hash-backup],[use # as the backup prefix (default: ,)]))
117 if test x"$with_hash_backup" != x -a x"$with_hash_backup" != x"no"; then
118   backup_prefix="#"
119 else
120   backup_prefix=","
121 fi
122 AC_DEFINE_UNQUOTED(BACKUP_PREFIX, "$backup_prefix",
123     [The prefix that is prepended to the name of message files when they are "removed" by rmm. This should typically be `,' or `#'.])dnl
124
125 dnl What method of locking to use?
126 AC_ARG_WITH(locking,
127   AS_HELP_STRING([--with-locking=@<:@dot|fcntl|flock|lockf@:>@],
128   [specify the file locking method]))
129
130 if test x"$with_locking" = x"dot"; then
131   LOCKTYPE="dot"
132   AC_DEFINE(DOT_LOCKING, 1, [Define to use dot based file locking.])dnl
133 elif test x"$with_locking" = x"flock"; then
134   LOCKTYPE="flock"
135   AC_DEFINE(FLOCK_LOCKING, 1, [Define to use flock() based locking.])dnl
136 elif test x"$with_locking" = x"lockf"; then
137   LOCKTYPE="lockf"
138   AC_DEFINE(LOCKF_LOCKING, 1, [Define to use lockf() based locking.])dnl
139 elif test x"$with_locking" = x"fcntl"; then
140   LOCKTYPE="fcntl"
141   AC_DEFINE(FCNTL_LOCKING, 1, [Define to use fnctl() based locking.])dnl
142 else
143   LOCKTYPE="dot"
144   AC_DEFINE(DOT_LOCKING)dnl
145 fi
146
147 dnl What should be the default pager?
148 AC_ARG_WITH(pager,
149   AS_HELP_STRING([--with-pager=PAGER],[specify the default pager]))
150
151 if test -n "$with_pager"; then
152   pagerpath="$with_pager"
153 fi
154
155 dnl ----------------------------------------------------
156 dnl Default location is /usr/local/mmh/{bin,etc,lib,share/man}
157 dnl ----------------------------------------------------
158 AC_PREFIX_DEFAULT(/usr/local/mmh)
159
160
161 dnl ------------------
162 dnl CHECK THE COMPILER
163 dnl ------------------
164 dnl We want these before the checks,
165 dnl so the checks can modify their values.
166 test -z "$CFLAGS" && CFLAGS= auto_cflags=1
167 if test x"$enable_debug" = x"yes"; then
168   test -z "$LDFLAGS" && LDFLAGS=-g
169 fi
170
171 AC_PROG_CC
172
173 AC_CACHE_CHECK(whether compiler supports -Wno-pointer-sign, nmh_cv_has_noptrsign,
174 [nmh_saved_cflags="$CFLAGS"
175  CFLAGS="$CFLAGS -Wno-pointer-sign"
176  AC_TRY_COMPILE([],[],nmh_cv_has_noptrsign=yes,nmh_cv_has_noptrsign=no)
177  CFLAGS="$nmh_saved_cflags"])
178
179 dnl if the user hasn't specified CFLAGS, then
180 dnl   if compiler is gcc, then
181 dnl     use -O2 and some warning flags
182 dnl   else use -O
183 dnl We use -Wall; if the compiler supports it we also use -Wno-pointer-sign,
184 dnl because gcc 4 now produces a lot of new warnings which are probably mostly
185 dnl spurious and which in any case we don't want to deal with now.
186 if test "$nmh_cv_has_noptrsign" = "yes"; then
187         nmh_gcc_warnflags="-Wall -Wno-pointer-sign"
188 else
189         nmh_gcc_warnflags="-Wall"
190 fi
191
192 if test -n "$auto_cflags"; then
193   if test x"$enable_debug" = x"yes"; then
194     if test -n "$GCC"; then
195       test -z "$CFLAGS" && CFLAGS="$nmh_gcc_warnflags -g" || CFLAGS="$CFLAGS $nmh_gcc_warnflags -g"
196     else
197       test -z "$CFLAGS" && CFLAGS=-g || CFLAGS="$CFLAGS -g"
198     fi
199   else
200     if test -z "$LDFLAGS"; then
201       case "$build_os" in
202         darwin*)
203           LDFLAGS=
204           ;;
205         *)
206           LDFLAGS=-s
207           ;;
208       esac
209     fi
210     if test -n "$GCC"; then
211       test -z "$CFLAGS" && CFLAGS="$nmh_gcc_warnflags -O2" || CFLAGS="$CFLAGS $nmh_gcc_warnflags -O2"
212     else
213       test -z "$CFLAGS" && CFLAGS=-O  || CFLAGS="$CFLAGS -O"
214     fi
215   fi
216 fi
217
218 AC_C_CONST              dnl Does compiler support `const'.
219
220 dnl ------------------
221 dnl CHECK FOR PROGRAMS
222 dnl ------------------
223 AC_PROG_MAKE_SET        dnl Does make define $MAKE
224 AC_PROG_INSTALL         dnl Check for BSD compatible `install'
225 AC_PROG_RANLIB          dnl Check for `ranlib'
226 AC_PROG_AWK             dnl Check for mawk,gawk,nawk, then awk
227 AC_PROG_LEX             dnl Check for lex/flex
228
229 dnl Look for `cut'
230 pathtmp=/usr/bin:/bin:/usr/local/bin:/usr/xpg4/bin:/usr/ucb
231 AC_PATH_PROG(cutpath, cut, no, [$pathtmp])
232
233 dnl ----------------------------------------------
234 dnl check for lclint, and lint if it doesn't exist
235 dnl ----------------------------------------------
236 AC_CHECK_PROG(linttmp1, lclint, lclint, no)dnl
237 if test x$ac_cv_prog_linttmp1 != xno ; then
238   LINT=$ac_cv_prog_linttmp1
239   LINTFLAGS="-weak +posixlib -macrovarprefixexclude"
240 else
241   AC_CHECK_PROG(linttmp2, lint, lint, no)dnl
242   if test x$ac_cv_prog_linttmp2 != xno ; then
243     LINT=$ac_cv_prog_linttmp2
244     LINTFLAGS=""
245   else
246     LINT="echo 'No lint program found'"
247     LINTFLAGS=""
248   fi
249 fi
250 AC_SUBST(LINT)dnl
251 AC_SUBST(LINTFLAGS)dnl
252
253 dnl try to figure out which one we've got
254 AC_CHECK_PROG(LIBTOOL, libtool, libtool, , [$pathtmp])
255 NMH_PROG_GNU_LIBTOOL
256
257 dnl Check for lorder and tsort commands
258 AC_CHECK_PROG(LORDER, lorder, lorder, no)dnl
259 AC_CHECK_PROG(TSORT, tsort, tsort, no)dnl
260
261 dnl If either doesn't exist, replace them with echo and cat
262 if test x$ac_cv_prog_LORDER != xlorder -o x$ac_cv_prog_TSORT != xtsort; then
263   LORDER=echo
264   TSORT=cat
265   AC_SUBST(LORDER)dnl
266   AC_SUBST(TSORT)dnl
267 dnl Mac OS X has lorder, but sh is too broken for it to work
268 dnl elif test -z "`lorder config/config.c 2>&1 | grep config/config.c`" ; then
269 dnl   LORDER=echo
270 dnl   TSORT=cat
271 dnl   AC_SUBST(LORDER)dnl
272 dnl   AC_SUBST(TSORT)dnl
273 fi
274
275 dnl Check whether tsort can deal with loops
276 AC_CACHE_CHECK(whether tsort can deal with loops, nmh_cv_tsort_loop,
277   [if test -z "`echo a b b a | tsort 2>/dev/null | grep a`" ; then
278     nmh_cv_tsort_loop=no
279   else
280     nmh_cv_tsort_loop=yes
281   fi])
282 if test x$nmh_cv_tsort_loop = xno ; then
283   LORDER=echo
284   TSORT=cat
285   AC_SUBST(LORDER)dnl
286   AC_SUBST(TSORT)dnl
287 fi
288
289 dnl Look for `ls'
290 pathtmp=/usr/bin:/bin:/usr/local/bin:/usr/xpg4/bin:/usr/ucb
291 AC_PATH_PROG(lspath, ls, no, [$pathtmp])
292
293 dnl See how we get ls to display the owner and the group
294 if test "$lspath" != "no"; then
295   AC_CACHE_CHECK(how to get ls to show us the group ownership of a file, 
296                  nmh_cv_ls_grpopt,
297   [if test x"`$lspath -dl / | $AWK '{print $9}'`" = x"/"; then
298     dnl There were 9 parameters, so unless this is a really bizarre, nonstandard
299     dnl ls, it would seem -l gave us both the user and group.  On this type of
300     dnl ls, -g makes _only_ the group be displayed (and not the user).
301     nmh_cv_ls_grpopt="-l"
302   else
303     dnl Looks like -l only gave us the user, so we need -g to get the group too.
304     nmh_cv_ls_grpopt="-lg"
305   fi])
306 fi
307
308 dnl Look for `more'
309 pathtmp=/usr/bin:/bin:/usr/ucb:/usr/local/bin
310 AC_PATH_PROG(morepath, more, no, [$pathtmp])
311
312 dnl If pager is not specified yet,
313 dnl then use `more' as the default.
314 if test -z "$pagerpath"; then
315   pagerpath="$morepath"
316 fi
317 AC_SUBST(pagerpath)dnl
318
319 dnl Look for `sendmail'
320 pathtmp=/usr/lib:/usr/sbin:/usr/etc:/usr/ucblib:/usr/bin:/bin
321 AC_PATH_PROG(sendmailpath, sendmail, /usr/sbin/sendmail, [$pathtmp])
322
323 dnl Look for `vi'
324 pathtmp=/usr/bin:/bin:/usr/ucb:/usr/local/bin
325 AC_PATH_PROG(vipath, vi, /bin/vi, [$pathtmp])
326
327 dnl If editor is not specified yet,
328 dnl then use `vi' as the default.
329 if test -z "$editorpath"; then
330   editorpath="$vipath"
331 fi
332 AC_SUBST(editorpath)dnl
333
334 dnl ----------------------------------------------------------
335 dnl FIND MAIL SPOOL AND SEE IF WE NEED TO MAKE inc SETGID MAIL
336 dnl ----------------------------------------------------------
337 AC_CACHE_CHECK(where mail spool is located, nmh_cv_mailspool,
338 [for mailspool in /var/mail        dnl
339                   /var/spool/mail  dnl
340                   /usr/spool/mail  dnl
341                   /dev/null;       dnl Just in case we fall through
342 do
343   test -d $mailspool && break
344 done
345 nmh_cv_mailspool=$mailspool
346 ])
347 mailspool=$nmh_cv_mailspool
348 AC_SUBST(mailspool)dnl
349
350 dnl See whether the mail spool directory is world-writable.
351 if test "$lspath" != "no" -a "$cutpath" != "no"; then
352   AC_CACHE_CHECK(whether the mail spool is world-writable, 
353                  nmh_cv_mailspool_world_writable,
354   [if test "`$lspath -dlL $mailspool | $cutpath -c9`" = "-"; then
355     nmh_cv_mailspool_world_writable=no
356   else
357     nmh_cv_mailspool_world_writable=yes
358   fi])
359 fi
360
361 dnl Also, check for liblockfile (as found on Debian systems)
362 AC_CHECK_HEADER(lockfile.h, AC_CHECK_LIB(lockfile, lockfile_create) )
363
364 dnl and whether its companion program dotlockfile is setgid
365 AC_PATH_PROG(dotlockfilepath, dotlockfile, no)
366 if test "$ac_cv_lib_lockfile_lockfile_create" != "no" ; then
367   if test "$ac_cv_path_dotlockfilepath" != "no" ; then
368     AC_CACHE_CHECK(whether dotlockfile is setgid, nmh_cv_dotlockfile_setgid,
369     [ if test -g "$ac_cv_path_dotlockfilepath" ; then
370         nmh_cv_dotlockfile_setgid=yes
371       else
372         nmh_cv_dotlockfile_setgid=no
373       fi])
374   fi
375 fi
376
377 dnl If mailspool is not world-writable and dotlockfile is not setgid,
378 dnl we need to #define MAILGROUP to 1 and make inc setgid.
379 if test x"$LOCKTYPE" = x"dot" -a x"$nmh_cv_mailspool_world_writable" = x"no" -a x"$nmh_cv_dotlockfile_setgid" != x"yes" ; then
380   dnl do we really need both of these?
381   AC_DEFINE(MAILGROUP,1,
382     [Define to 1 if you need to make `inc' set-group-id because your mail spool is not world writable. There are no guarantees as to the safety of doing this, but this #define will add some extra security checks.])dnl
383   SETGID_MAIL=1
384 fi
385 AC_SUBST(SETGID_MAIL)dnl
386
387 dnl Use ls to see which group owns the mail spool directory.
388 AC_CACHE_CHECK(what group owns the mail spool, nmh_cv_ls_mail_grp,
389 [nmh_cv_ls_mail_grp=`$lspath -dL $nmh_cv_ls_grpopt $mailspool|$AWK '{print $4}'`
390 ])
391 MAIL_SPOOL_GRP=$nmh_cv_ls_mail_grp
392 AC_SUBST(MAIL_SPOOL_GRP)dnl
393
394 dnl ------------------
395 dnl CHECK HEADER FILES
396 dnl ------------------
397
398 dnl On glibc we need to define at least the '_XOPEN_SOURCE' level of features,
399 dnl or wchar.h doesn't declare a prototype for wcwidth(). But if we only define
400 dnl that level then db.h won't compile. So we define _GNU_SOURCE which turns
401 dnl on everything. Perhaps other OSes need some feature switch set to get wcwidth()
402 dnl declared; if so they should have an entry added to this case statement.
403 dnl NB that we must define this on the compiler command line, not in config.h,
404 dnl because it must be set before any system header is included and there's no
405 dnl portable way to make sure that files generated by lex include config.h
406 dnl before system header files.
407
408 case "$target_os" in
409   linux*)
410     # Like DEFS, but doesn't get stomped on by configure when using config.h:
411     OURDEFS="$OURDEFS -D_GNU_SOURCE"
412     ;;
413 esac
414 AC_SUBST(OURDEFS)
415
416 AC_HEADER_DIRENT
417 AC_HEADER_STDC
418 AC_HEADER_TIME
419 AC_HEADER_SYS_WAIT
420 AC_HEADER_STAT
421 AC_HEADER_TIOCGWINSZ
422 AC_CHECK_HEADERS(string.h memory.h stdlib.h unistd.h errno.h fcntl.h \
423                  limits.h crypt.h termcap.h termio.h termios.h locale.h \
424                  langinfo.h wchar.h wctype.h iconv.h netdb.h \
425                  sys/param.h sys/time.h sys/utsname.h sys/stream.h \
426                  arpa/inet.h arpa/ftp.h)
427  
428 dnl
429 dnl Checks for _IO_write_ptr. A Linuxism used by nmh on linux. We
430 dnl really use a whole set of them, but this check should be
431 dnl sufficient.
432 dnl
433 AC_CHECK_HEADER(libio.h, [
434   AC_EGREP_HEADER(_IO_write_ptr, libio.h, [
435     AC_DEFINE(LINUX_STDIO,1,[Use the Linux _IO_*_ptr defines from <libio.h>.]) ]) ]) 
436
437 AC_CHECK_HEADER([sys/ptem.h], AC_DEFINE(WINSIZE_IN_PTEM,1,
438   [Define to 1 if `struct winsize' requires <sys/ptem.h>.]),,
439 [[#if HAVE_SYS_STREAM_H
440 #  include <sys/stream.h>
441 #endif
442 ]])
443
444 dnl ---------------
445 dnl CHECK FUNCTIONS
446 dnl ---------------
447 AC_FUNC_VFORK
448 AC_CHECK_LIB(mkstemp,mkstemp)
449 AC_CHECK_FUNCS(waitpid wait3 sigaction sigprocmask sigblock sigsetmask \
450                sighold sigrelse writev lstat uname tzset killpg mkstemp \
451                getutent nl_langinfo mbtowc wcwidth)
452
453 dnl sigsetjmp may be a macro
454 AC_MSG_CHECKING(for sigsetjmp)
455 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <setjmp.h>]],
456   [[sigsetjmp((void *)0, 0);]])],[AC_DEFINE(HAVE_SIGSETJMP, 1,
457     [Define to 1 if you have the `sigsetjmp'.]) AC_MSG_RESULT(yes)],
458   [AC_MSG_RESULT(no)])
459
460 AC_REPLACE_FUNCS(memmove snprintf strerror strdup)
461
462 dnl Look for the initgroups() declaration.  On AIX 4.[13], Solaris 4.1.3, and
463 dnl ULTRIX 4.2A the function is defined in libc but there's no declaration in
464 dnl any system header.  
465 dnl
466 dnl On Solaris 2.[456], the declaration is in <grp.h>.  On HP-UX 9-11 and
467 dnl (reportedly) FreeBSD 3.[23], it's in <unistd.h>.  Any other locations we
468 dnl need to check?
469 AH_TEMPLATE(INITGROUPS_HEADER, [Define to the header containing the declaration of `initgroups'.])
470 AC_EGREP_HEADER(initgroups, grp.h, AC_DEFINE(INITGROUPS_HEADER, <grp.h>),
471                 AC_EGREP_HEADER(initgroups, unistd.h, 
472                                 AC_DEFINE(INITGROUPS_HEADER, <unistd.h>)))
473
474 dnl On AIX 4.1, snprintf() is defined in libc.a but there's no prototype in
475 dnl <stdio.h> or elsewhere.  Apparently it's not officially supported (though it
476 dnl seems to work perfectly and IBM apparently uses it in internal code).
477 dnl Anyhow, if we omit our own snprintf() and vsnprintf() prototypes when we
478 dnl HAVE_SNPRINTF, we get a billion warnings at compile time.  Use the C
479 dnl preprocessor to preprocess stdio.h and make sure that there's actually a 
480 dnl prototype. 
481 AC_EGREP_HEADER(snprintf, stdio.h, AC_DEFINE(HAVE_SNPRINTF_PROTOTYPE,1,
482   [Define to 1 if <stdio.h> has a prototype for snprintf().]))
483
484 dnl Check for multibyte character set support
485 if test "x$ac_cv_header_wchar_h" = "xyes" -a "x$ac_cv_header_wctype_h" = "xyes" \
486     -a "x$ac_cv_func_wcwidth" = "xyes" -a "x$ac_cv_func_mbtowc" = "xyes"; then
487   AC_DEFINE(MULTIBYTE_SUPPORT, 1,
488     [Define to enable support for multibyte character sets.])
489 fi
490
491 dnl -------------------
492 dnl CHECK FOR LIBRARIES
493 dnl -------------------
494 dnl Check location of modf
495 AC_CHECK_FUNC(modf, , AC_CHECK_LIB(m, modf))
496
497 dnl Checks for network libraries (nsl, socket)
498 AC_CHECK_NETLIBS
499
500 termcap_curses_order="termcap curses ncurses"
501 for lib in $termcap_curses_order; do
502   AC_CHECK_LIB(${lib}, tgetent, [TERMLIB="-l$lib"; break])
503 done
504 AC_SUBST(TERMLIB)dnl
505
506 dnl ---------------
507 dnl CHECK FOR ICONV
508 dnl ---------------
509
510 dnl Find iconv. It may be in libiconv and may be iconv() or libiconv()
511 if test "x$ac_cv_header_iconv_h" = "xyes"; then
512   AC_CHECK_FUNC(iconv, ac_found_iconv=yes, ac_found_iconv=no)
513   if test "x$ac_found_iconv" = "xno"; then
514     AC_CHECK_LIB(iconv, iconv, ac_found_iconv=yes)
515     if test "x$ac_found_iconv" = "xno"; then
516       AC_CHECK_LIB(iconv, libiconv, ac_found_iconv=yes)
517     fi
518     if test "x$ac_found_iconv" != "xno"; then
519       LIBS="-liconv $LIBS"
520     fi
521   else
522     dnl Handle case where there is a native iconv but iconv.h is from libiconv
523     AC_CHECK_DECL(_libiconv_version,
524       [ AC_CHECK_LIB(iconv, libiconv, LIBS="-liconv $LIBS") ],,
525       [ #include <iconv.h> ])
526   fi
527 fi
528 if test "x$ac_found_iconv" = xyes; then
529   AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
530 fi
531
532 dnl Check if iconv uses const in prototype declaration
533 if test "x$ac_found_iconv" = "xyes"; then
534   AC_CACHE_CHECK(for iconv declaration, ac_cv_iconv_const,
535     [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
536         #include <iconv.h>]],
537         [[#ifdef __cplusplus
538           "C"
539           #endif
540           #if defined(__STDC__) || defined(__cplusplus)
541           size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
542           #else
543           size_t iconv();
544           #endif]])],
545       [ac_cv_iconv_const=],
546       [ac_cv_iconv_const=const])])
547   AC_DEFINE_UNQUOTED([ICONV_CONST], $ac_cv_iconv_const,
548     [Define as const if the declaration of iconv() needs const.])
549 fi
550
551 dnl --------------
552 dnl CHECK FOR NDBM
553 dnl --------------
554
555 AC_ARG_WITH([ndbm],AS_HELP_STRING([--with-ndbm=ARG],[use -lARG to link with ndbm]),
556             [nmh_ndbm=$withval],[nmh_ndbm=autodetect])
557 AC_ARG_WITH([ndbmheader],AS_HELP_STRING([--with-ndbmheader=ARG],[#include <ARG> to use ndbm]),
558             [nmh_ndbmheader=$withval],[nmh_ndbmheader=autodetect])
559
560 if test "$nmh_ndbm" = "autodetect"; then
561   if test "$nmh_ndbmheader" != "autodetect"; then
562     AC_MSG_ERROR([must specify both --with-ndbm and --with-ndbmheader or neither])
563   else
564
565     dnl There are at least four implementations of ndbm, and
566     dnl several of those can be in different places at the whim
567     dnl of the system integrator. A good summary of this mess
568     dnl can be found at http://www.unixpapa.com/incnote/dbm.html
569
570     dnl Classic ndbm with no library required (eg NetBSD): try this
571     dnl first so we don't accidentally link in a pointless but harmless
572     dnl library in one of the later ndbm.h+libfoo tests:
573     NMH_CHECK_NDBM(ndbm.h,,,
574     dnl Berkeley DBv2 emulating ndbm: header in db.h:
575       NMH_CHECK_NDBM(db.h,db,,
576     dnl Berkeley DBv1 emulating ndbm:
577         NMH_CHECK_NDBM(ndbm.h,db,,
578           NMH_CHECK_NDBM(ndbm.h,db1,,
579     dnl Classic ndbm:
580             NMH_CHECK_NDBM(ndbm.h,ndbm,,
581     dnl glibc2.1 systems put db1 in a subdir:
582               NMH_CHECK_NDBM(db1/ndbm.h,db1,,
583     dnl GNU gdbm emulating ndbm, with header possibly in gdbm/
584     dnl and possibly needing gbdm_compat library:
585                 NMH_CHECK_NDBM(gdbm/ndbm.h,gdbm,,
586                   NMH_CHECK_NDBM(gdbm/ndbm.h,gdbm_compat -lgdbm,,
587                     NMH_CHECK_NDBM(ndbm.h,gdbm,,
588                       NMH_CHECK_NDBM(ndbm.h,gdbm_compat -lgdbm))))))))))
589
590   fi
591 else
592   dnl We don't really need to check that the user-specified values work,
593   dnl but it is a convenience to the user to bomb out early rather than
594   dnl after configure and half the compile process.
595   NMH_CHECK_NDBM([$nmh_ndbmheader],[$nmh_ndbm])
596 fi
597
598 if test "$nmh_ndbm_found" = "no"; then
599   AC_MSG_ERROR([could not find a working ndbm library/header combination])
600 else
601   dnl Now export the lib/header to our makefile/config.h:
602   if test x"$nmh_ndbmheader" != x; then
603     AC_DEFINE_UNQUOTED(NDBM_HEADER, <$nmh_ndbmheader>,
604       [Define to the header containing the ndbm API prototypes.])
605   fi
606   if test x"$nmh_ndbm" != x; then
607     NDBM_LIBS="-l$nmh_ndbm"
608   else
609     NDBM_LIBS=
610   fi
611   AC_SUBST(NDBM_LIBS)
612 fi
613
614
615 dnl --------------------
616 dnl CHECK FOR CYRUS-SASL
617 dnl --------------------
618
619 AS_IF([test x"$sasl_support" = x"yes"],[
620   AC_CHECK_HEADER([sasl/sasl.h], , [AC_MSG_ERROR([sasl.h not found])])
621   AC_CHECK_LIB([sasl2], [sasl_client_new], ,
622     [AC_MSG_ERROR([Cyrus SASL library not found])])])
623
624 dnl -----------------
625 dnl CHECK FOR OPENSSL
626 dnl -----------------
627
628 AS_IF([test x"$tls_support" = x"yes"],[
629   AC_CHECK_HEADER([openssl/ssl.h], , [AC_MSG_ERROR([openssl/ssl.h not found])])
630   AC_CHECK_LIB([crypto], [BIO_write], ,
631     [AC_MSG_ERROR([OpenSSL crypto library not found])])
632   AC_CHECK_LIB([ssl], [SSL_library_init], ,
633     [AC_MSG_ERROR([OpenSSL library not found])])])
634
635 dnl ---------------------
636 dnl CHECK TERMCAP LIBRARY
637 dnl ---------------------
638
639 dnl Add the termcap library, so that the following configure
640 dnl tests will find it when it tries to link test programs.
641 nmh_save_LIBS="$LIBS"
642 LIBS="$TERMLIB $LIBS"
643
644 dnl Checks for external variable ospeed in the termcap library.
645 AC_CACHE_CHECK(if an include file defines ospeed,
646 nmh_cv_decl_ospeed_include_defines,
647 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
648 #if HAVE_TERMIOS_H
649 #include <termios.h>
650 #endif
651 #if HAVE_TERMCAP_H
652 #include <termcap.h>
653 #endif]], [[ospeed = 0;]])],
654 nmh_cv_decl_ospeed_include_defines=yes,nmh_cv_decl_ospeed_include_defines=no)])
655  
656 if test $nmh_cv_decl_ospeed_include_defines = no; then
657   AC_CACHE_CHECK(if you must define ospeed,
658   nmh_cv_decl_ospeed_must_define,
659   [AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],
660   [[extern short ospeed; ospeed = 0;]])],
661   nmh_cv_decl_ospeed_must_define=yes,nmh_cv_decl_ospeed_must_define=no)])
662 fi
663  
664 AH_TEMPLATE(HAVE_OSPEED, [Define to 1 if your termcap library has the ospeed variable.])
665 if test $nmh_cv_decl_ospeed_include_defines = yes; then
666   AC_DEFINE(HAVE_OSPEED)dnl
667 elif test $nmh_cv_decl_ospeed_must_define = yes; then
668   AC_DEFINE(HAVE_OSPEED)
669   AC_DEFINE(MUST_DEFINE_OSPEED, 1,
670     [Define to 1 if you have ospeed, but it is not defined in termcap.h.])
671 fi
672
673 dnl Check if tgetent accepts NULL (and will allocate its own termcap buffer)
674 dnl Some termcaps reportedly accept a zero buffer, but then dump core
675 dnl in tgetstr().
676 dnl Under Cygwin test program crashes but exit code is still 0. So,
677 dnl we test for a file that porgram should create
678 AH_TEMPLATE([TGETENT_ACCEPTS_NULL],
679 [Define to 1 if tgetent() accepts NULL as a buffer.])
680 AC_CACHE_CHECK(if tgetent accepts NULL,
681 nmh_cv_func_tgetent_accepts_null,
682 [AC_TRY_RUN([
683 main()
684 {
685     char buf[4096];
686     int r1 = tgetent(buf, "vt100");
687     int r2 = tgetent((char*)0,"vt100");
688     if (r1 >= 0 && r1 == r2) {
689         char tbuf[1024], *u;
690         u = tbuf;
691         tgetstr("cl", &u);
692         creat("conftest.tgetent", 0640);
693     }
694     exit((r1 != r2) || r2 == -1);
695 }
696 ],
697   if test -f conftest.tgetent; then
698     nmh_cv_func_tgetent_accepts_null=yes
699   else
700     nmh_cv_func_tgetent_accepts_null=no
701   fi,
702   nmh_cv_func_tgetent_accepts_null=no,
703   nmh_cv_func_tgetent_accepts_null=no)])
704 if test x$nmh_cv_func_tgetent_accepts_null = xyes; then
705   AC_DEFINE(TGETENT_ACCEPTS_NULL)
706 fi
707 AC_CACHE_CHECK(if tgetent returns 0 on success,
708 nmh_cv_func_tgetent_zero_success,
709 [AC_TRY_RUN([
710 main()
711 {
712     char buf[4096];
713     int r1 = tgetent(buf, "!@#$%^&*");
714     int r2 = tgetent(buf, "vt100");
715     if (r1 < 0 && r2 == 0) {
716         char tbuf[1024], *u;
717         u = tbuf;
718         tgetstr("cl", &u);
719         creat("conftest.tgetent0", 0640);
720     }
721     exit(r1 == r2);
722 }
723 ],
724   if test -f conftest.tgetent0; then
725     nmh_cv_func_tgetent_zero_success=yes
726   else
727     nmh_cv_func_tgetent_zero_success=no
728   fi,
729   nmh_cv_func_tgetent_zero_success=no,
730   nmh_cv_func_tgetent_zero_success=no)])
731 AH_TEMPLATE([TGETENT_SUCCESS],
732 [Define to what tgetent() returns on success (0 on HP-UX X/Open curses).])
733 if test x$nmh_cv_func_tgetent_zero_success = xyes; then
734   AC_DEFINE(TGETENT_SUCCESS, 0)
735 else
736   AC_DEFINE(TGETENT_SUCCESS, 1)
737 fi
738
739 dnl Now put the libraries back to what it was before we
740 dnl starting checking the termcap library.
741 LIBS="$nmh_save_LIBS"
742
743 dnl --------------
744 dnl CHECK TYPEDEFS
745 dnl --------------
746 AC_TYPE_SIGNAL
747 AC_TYPE_PID_T
748 AC_TYPE_OFF_T
749 AC_TYPE_UID_T
750 AC_TYPE_MODE_T
751 AC_TYPE_SIZE_T
752
753 dnl Check for sigset_t.  Currently I'm looking in
754 dnl <sys/types.h> and <signal.h>.  Others might need
755 dnl to be added.
756 AC_CACHE_CHECK(for sigset_t, nmh_cv_type_sigset_t,
757 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
758 #include <signal.h>]], [[sigset_t tempsigset;]])],
759 nmh_cv_type_sigset_t=yes,nmh_cv_type_sigset_t=no)])
760 if test $nmh_cv_type_sigset_t = no; then
761   AC_DEFINE(sigset_t, unsigned int,
762     [Define to `unsigned int' if <sys/types.h> or <signal.h> doesn't define.])
763 fi
764
765 dnl ----------------
766 dnl CHECK STRUCTURES
767 dnl ----------------
768 AC_CHECK_MEMBERS(struct stat.st_blksize)
769
770 AC_CHECK_MEMBERS(struct tm.tm_gmtoff,,,
771   [#ifdef TIME_WITH_SYS_TIME
772 # include <sys/time.h>
773 # include <time.h>
774 #else
775 # ifdef TM_IN_SYS_TIME
776 #  include <sys/time.h>
777 # else
778 #  include <time.h>
779 # endif
780 #endif])
781
782 AC_CHECK_MEMBERS(struct utmp.ut_type,,,[#include <utmp.h>])
783
784 AC_MSG_CHECKING(for union wait)
785 AC_CACHE_VAL(nmh_cv_union_wait, [dnl
786   AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
787 #include <sys/wait.h>]],
788     [[union wait status; int pid; pid = wait (&status);
789 #ifdef WEXITSTATUS
790 /* Some POSIXoid systems have both the new-style macros and the old
791    union wait type, and they do not work together.  If union wait
792    conflicts with WEXITSTATUS et al, we don't want to use it at all.  */
793         if (WEXITSTATUS (status) != 0) pid = -1;
794 #ifdef WTERMSIG
795         /* If we have WEXITSTATUS and WTERMSIG, just use them on ints.  */
796         -- blow chunks here --
797 #endif
798 #endif
799 #ifdef HAVE_WAITPID
800         /* Make sure union wait works with waitpid.  */
801         pid = waitpid (-1, &status, 0);
802 #endif
803       ]])],
804     [nmh_cv_union_wait=yes],
805     [nmh_cv_union_wait=no])])
806 if test "$nmh_cv_union_wait" = yes; then
807   AC_DEFINE(HAVE_UNION_WAIT, 1,
808     [Define to 1 if you have the \`union wait' type in <sys/wait.h>.])
809 fi
810 AC_MSG_RESULT($nmh_cv_union_wait)
811
812 CHECK_TYPE_STRUCT_DIRENT_D_TYPE()
813
814 dnl -------------
815 dnl CHECK SIGNALS
816 dnl -------------
817 dnl What style of signal do you have (POSIX, BSD, or SYSV)?
818 AH_TEMPLATE(RELIABLE_SIGNALS, [Define to 1 if you have reliable signals.])
819 AC_MSG_CHECKING(what style of signals to use)
820 if test $ac_cv_func_sigaction = yes -a $ac_cv_func_sigprocmask = yes; then
821   signals_style=POSIX_SIGNALS
822   AC_DEFINE(POSIX_SIGNALS, 1,
823     [Define to 1 if you use POSIX style signal handling.])
824   AC_DEFINE(RELIABLE_SIGNALS)
825 elif test $ac_cv_func_sigblock = yes -a $ac_cv_func_sigsetmask = yes; then
826   signals_style=BSD_SIGNALS
827   AC_DEFINE(BSD_SIGNALS,1,
828     [Define to 1 if you use BSD style signal handling (and can block signals).])
829   AC_DEFINE(RELIABLE_SIGNALS)
830 elif test $ac_cv_func_sighold = yes -a $ac_cv_func_sigrelse = yes; then
831   signals_style=SYSV_SIGNALS
832   AC_DEFINE(SYSV_SIGNALS,1,
833     [Define to 1 if you use SYSV style signal handling (and can block signals).])
834 else
835   signals_style=NO_SIGNAL_BLOCKING
836   AC_DEFINE(NO_SIGNAL_BLOCKING,1,
837     [Define to 1 if you have no signal blocking at all (bummer).])
838 fi
839
840 AC_MSG_RESULT($signals_style)
841
842 dnl Where is <signal.h> located?  Needed as input for signames.awk
843 AC_CACHE_CHECK(where signal.h is located, nmh_cv_path_signal_h,
844 [for SIGNAL_H in /usr/include/bsd/sys/signal.h  dnl Next
845                  /usr/include/asm/signal.h      dnl Linux 1.3.0 and above
846                  /usr/include/asm/signum.h      dnl some versions of Linux/Alpha
847                  /usr/include/linux/signal.h    dnl Linux up to 1.2.11
848                  /usr/include/sys/signal.h      dnl Almost everybody else
849                  /dev/null;                     dnl Just in case we fall through
850 do
851   test -f $SIGNAL_H && \
852   grep '#[      ]*define[       ][      ]*SIG[0-9A-Z]*[         ]*[0-9][0-9]*' $SIGNAL_H > /dev/null && \
853   break
854 done
855 nmh_cv_path_signal_h=$SIGNAL_H
856 ])
857 SIGNAL_H=$nmh_cv_path_signal_h
858 AC_SUBST(SIGNAL_H)dnl
859
860 dnl ----------------
861 dnl OS SPECIFIC DEFINES
862 dnl ----------------
863 AH_TEMPLATE(SYS5, [Defined for Solaris 2.x, Irix, OSF/1, HP-UX, AIX, SCO5; only used in vmh.c which is not built.])
864 AH_TEMPLATE(SVR4, [Defined for Solaris 2.x, Irix, OSF/1, HP-UX, AIX; only used in vmh.c which is not built.])
865 AH_TEMPLATE(BSD44, [Defined for SunOS 4, FreeBSD, NetBSD, OpenBSD, BSD/OS, Mac OS X/Rhapsody; only used in vmh.c which is not built.])
866 AH_TEMPLATE(BSD42, [Defined for SunOS 4, FreeBSD, NetBSD, OpenBSD, BSD/OS, Mac OS X/Rhapsody -- does PicoBSD have uname?])
867 AH_TEMPLATE(SCO_5_STDIO, [Defined for SCO5.])
868
869 case "$target_os" in
870
871   solaris2*)
872     AC_DEFINE(SYS5)
873     AC_DEFINE(SVR4)
874     ;;
875   irix*)
876     AC_DEFINE(SYS5)
877     AC_DEFINE(SVR4)
878     ;;
879   osf*)
880     AC_DEFINE(SYS5)
881     AC_DEFINE(SVR4)
882     ;;
883   aix*)
884     AC_DEFINE(SYS5)
885     AC_DEFINE(SVR4)
886     ;;
887   sunos4*)
888     AC_DEFINE(BSD42)
889     ;;
890   freebsd*)  
891     AC_DEFINE(BSD42)
892     AC_DEFINE(BSD44)
893     ;;
894   netbsd*)
895     AC_DEFINE(BSD42)
896     AC_DEFINE(BSD44)
897     ;;
898   openbsd*)
899     AC_DEFINE(BSD42)
900     AC_DEFINE(BSD44)
901     ;;
902   bsd/os*)
903     AC_DEFINE(BSD42)
904     AC_DEFINE(BSD44)
905     ;;
906   sco5*)
907     AC_DEFINE(SYS5)
908     AC_DEFINE(SCO_5_STDIO)
909     ;;
910 esac
911
912
913 dnl ----------------
914 dnl OUTPUT MAKEFILES
915 dnl ----------------
916 AC_CONFIG_FILES(Makefile config/Makefile h/Makefile sbr/Makefile uip/Makefile \
917                 etc/Makefile docs/Makefile man/Makefile)
918 AC_CONFIG_COMMANDS([stamp],[test -z "$CONFIG_HEADERS" || echo > stamp-h])
919 AC_OUTPUT
920
921 dnl These odd looking assignments are done to expand out unexpanded
922 dnl variables in bindir et al (for instance mandir is '${datarootdir}/man',
923 dnl but expanding that gives '${prefix}/share/man', so we need to expand
924 dnl again to get the final answer.
925 dnl We only use the expanded versions to print the install paths in
926 dnl the final summary and should use them nowhere else (see the autoconf
927 dnl docs for the rationale for bindir etc being unexpanded).
928 eval "nmhbin=${bindir}";         eval "nmhbin=${nmhbin}"
929 eval "nmhsysconf=${sysconfdir}"; eval "nmhsysconf=${nmhsysconf}"
930 eval "nmhlib=${libdir}";         eval "nmhlib=${nmhlib}"
931 eval "nmhman=${mandir}";         eval "nmhman=${nmhman}"
932
933 echo "
934 nmh configuration
935 -----------------
936 nmh version                : AC_PACKAGE_VERSION
937 target os                  : ${target}
938 compiler                   : ${CC}
939 compiler flags             : ${CFLAGS}
940 linker flags               : ${LDFLAGS}
941 definitions                : ${OURDEFS}
942 source code location       : ${srcdir}
943 binary install path        : ${nmhbin}
944 library install path       : ${nmhlib}
945 config files install path  : ${nmhsysconf}
946 man page install path      : ${nmhman}
947 backup prefix              : ${backup_prefix}
948 file locking type          : ${LOCKTYPE}
949 default editor             : ${editorpath}
950 default pager              : ${pagerpath}
951 email address masquerading : ${masquerade}
952 SASL support               : ${sasl_support}
953 TLS support                : ${tls_support}"
954 echo ""