Fix the test for sasl.h to look in the correct place.
[mmh] / configure.in
index 9b8c568..8e8fb1c 100644 (file)
@@ -4,11 +4,8 @@ dnl
 dnl $Id$
 dnl
 
-dnl 2.13 definitely chokes; 2.53 is the earliest version I've tested. 
-dnl 2.50 is the major breakpoint between the old autoconf and the new,
-dnl so require that. If there are bug reports about 2.50-2.52 not working
-dnl we can always move this up a little.
-AC_PREREQ(2.50)
+dnl Move this up a bit
+AC_PREREQ(2.61)
 
 AC_INIT(nmh, m4_normalize(m4_include([VERSION])))
 AC_CONFIG_SRCDIR(h/nmh.h)
@@ -43,10 +40,11 @@ dnl CHECK COMMAND LINE OPTIONS
 dnl --------------------------
 
 dnl Do you want client-side support for apop?
-AC_ARG_ENABLE(apop,
-[  --enable-apop           enable client-side support for POP3 and APOP])
+AC_ARG_ENABLE(apop, AS_HELP_STRING([--enable-apop],
+  [enable client-side support for POP3 and APOP]))
 if test x"$enable_apop" = x"yes"; then
-  AC_DEFINE(APOP)dnl
+  AC_DEFINE(APOP, 1,
+    [Define to compile client-side support for apop into inc and msgchk.])dnl
   APOPLIB=md5.o
   enable_pop=yes
 fi
@@ -54,7 +52,7 @@ AC_SUBST(APOPLIB)dnl
 
 dnl Do you want to debug nmh?
 AC_ARG_ENABLE(debug,
-[  --enable-debug          enable nmh code debugging])
+  AS_HELP_STRING([--enable-debug],[enable nmh code debugging]))
 dnl The old redundant --enable-nmh-debug is deprecated and undocumented.
 if test x"$enable_nmh_debug" = x"yes"; then
   enable_debug=yes
@@ -62,47 +60,70 @@ fi
 
 dnl Allow users to send email from addresses other than their default?
 AC_ARG_ENABLE(masquerade,
-  [  --enable-masquerade[='draft_from mmailid username_extension']
-                          enable up to 3 types of address masquerading [none]],
+  AS_HELP_STRING([--enable-masquerade='draft_from mmailid username_extension'],
+    [enable up to 3 types of address masquerading]),
   [if test x"$enable_masquerade" = x"yes"; then
     masquerade="draft_from mmailid username_extension"
   else
     masquerade="$enable_masquerade"
-  fi])
+  fi],
+  masquerade="draft_from mmailid username_extension")
 AC_SUBST(masquerade)dnl
 
 dnl Do you want mhe support?
 AC_ARG_ENABLE(mhe,
-[  --enable-mhe            enable mhe support (DEFAULT)])
+  AS_HELP_STRING([--disable-mhe],[disable mhe support]))
 
 dnl mhe support is on by default, so define it unless --disable-mhe or the
 dnl deprecated, undocumented --disable-nmh-mhe are specified.
 if test x"$enable_mhe" != x"no" -a x"$enable_nmh_mhe" != x"no"; then
-  AC_DEFINE(MHE)dnl
+  AC_DEFINE(MHE, 1,
+    [Define to compile in support for the Emacs front-end mh-e.])dnl
 fi
 
 dnl Do you want client-side support for pop?
 AC_ARG_ENABLE(pop,
-[  --enable-pop            enable client-side support for plain POP3])
+  AS_HELP_STRING([--enable-pop], [enable client-side support for plain POP3]))
 dnl The old redundant --enable-nmh-pop is deprecated and undocumented.
 if test x"$enable_nmh_pop" = x"yes"; then
   enable_pop=yes
 fi
 
+dnl Do you want to disable use of locale functions
+AH_TEMPLATE([LOCALE],
+[Undefine if you don't want locale features.  By default this is defined.])
+AC_ARG_ENABLE([locale],
+AC_HELP_STRING([--disable-locale], [turn off locale features]),
+[if test x$enableval = xyes; then
+  AC_DEFINE(LOCALE)
+fi],
+AC_DEFINE(LOCALE)
+)
+
 dnl Do you want client-side support for using SASL for authentication?
 dnl Note that this code will be enabled for both POP and SMTP
-AC_ARG_WITH(cyrus-sasl,
-[  --with-cyrus-sasl=<dir> Specify location of Cyrus SASL library for auth])
+AC_ARG_WITH(cyrus-sasl, AS_HELP_STRING([--with-cyrus-sasl],
+  [Enable SASL support via the Cyrus SASL library]))
 if test x"$with_cyrus_sasl" != x -a x"$with_cyrus_sasl" != x"no"; then
-  AC_DEFINE(CYRUS_SASL)dnl
+  AC_DEFINE(CYRUS_SASL, 1,
+    [Define to use the Cyrus SASL library for authentication of POP and SMTP.])dnl
   sasl_support=yes
 else
   sasl_support=no
 fi
 
+dnl Do you want client-side support for encryption with TLS?
+AC_ARG_WITH(tls, AS_HELP_STRING([--with-tls], [Enable TLS support]))
+if test x"$with_tls" != x -a x"$with_tls" != x"no"; then
+  AC_DEFINE(TLS_SUPPORT, 1, [Support TLS for session encryption.])dnl
+  tls_support=yes
+else
+  tls_support=no
+fi
+
 dnl What should be the default editor?
 AC_ARG_WITH(editor,
-[  --with-editor=EDITOR    specify the default editor])
+  AS_HELP_STRING([--with-editor=EDITOR],[specify the default editor]))
 
 if test -n "$with_editor"; then
   editorpath="$with_editor"
@@ -110,33 +131,26 @@ fi
 
 dnl Set the backup prefix
 AC_ARG_WITH([hash-backup],
-  [  --with-hash-backup      use # as the backup prefix (default: ,)])
+  AS_HELP_STRING([--with-hash-backup],[use # as the backup prefix (default: ,)]))
 if test x"$with_hash_backup" != x -a x"$with_hash_backup" != x"no"; then
   backup_prefix="#"
 else
   backup_prefix=","
 fi
-AC_DEFINE_UNQUOTED(BACKUP_PREFIX, "$backup_prefix")dnl
+AC_DEFINE_UNQUOTED(BACKUP_PREFIX, "$backup_prefix",
+    [The prefix that is prepended to the name of message files when they are "removed" by rmm. This should typically be `,' or `#'.])dnl
 
 dnl Do you want support for hesiod
 AC_ARG_WITH(hesiod,
-[  --with-hesiod=PREFIX    specify location of Hesiod])
+  AS_HELP_STRING([--with-hesiod=DIR],[specify location of Hesiod]))
 if test x"$with_hesiod" != x -a x"$with_hesiod" != x"no"; then
-  AC_DEFINE(HESIOD)dnl
-fi
-
-dnl Do you want client-side support for kpop
-AC_ARG_WITH(krb4,
-[  --with-krb4=PREFIX      specify location of Kerberos V4 for KPOP support])
-if test x"$with_krb4" != x -a x"$with_krb4" != x"no"; then
-  enable_pop=yes
-  AC_DEFINE(KPOP)dnl
-  AC_DEFINE(KPOP_PRINCIPAL, "pop")dnl
+  AC_DEFINE(HESIOD,1,[Define this to compile support for using Hesiod.])dnl
 fi
 
 dnl After we know if we're including apop and kpop support, do pop stuff
 if test x"$enable_pop" = x"yes"; then
-  AC_DEFINE(POP)dnl
+  AC_DEFINE(POP, 1,
+    [Define this to compile client-side support for pop into inc and msgchk.])dnl
   POPLIB=popsbr.o
   POPSED='/^%nmhbeginpop%/d;/^%nmhendpop%/d'
 else
@@ -147,21 +161,21 @@ AC_SUBST(POPSED)dnl
 
 dnl What method of locking to use?
 AC_ARG_WITH(locking,
-[  --with-locking=LOCKTYPE specify the file locking method
-                          (one of dot, fcntl, flock, lockf)])
+  AS_HELP_STRING([--with-locking=@<:@dot|fcntl|flock|lockf@:>@],
+  [specify the file locking method]))
 
 if test x"$with_locking" = x"dot"; then
   LOCKTYPE="dot"
-  AC_DEFINE(DOT_LOCKING)dnl
+  AC_DEFINE(DOT_LOCKING, 1, [Define to use dot based file locking.])dnl
 elif test x"$with_locking" = x"flock"; then
   LOCKTYPE="flock"
-  AC_DEFINE(FLOCK_LOCKING)dnl
+  AC_DEFINE(FLOCK_LOCKING, 1, [Define to use flock() based locking.])dnl
 elif test x"$with_locking" = x"lockf"; then
   LOCKTYPE="lockf"
-  AC_DEFINE(LOCKF_LOCKING)dnl
+  AC_DEFINE(LOCKF_LOCKING, 1, [Define to use lockf() based locking.])dnl
 elif test x"$with_locking" = x"fcntl"; then
   LOCKTYPE="fcntl"
-  AC_DEFINE(FCNTL_LOCKING)dnl
+  AC_DEFINE(FCNTL_LOCKING, 1, [Define to use fnctl() based locking.])dnl
 else
   LOCKTYPE="dot"
   AC_DEFINE(DOT_LOCKING)dnl
@@ -169,7 +183,8 @@ fi
 
 dnl What method of posting should post use?
 AC_ARG_WITH(mts,
-[  --with-mts=MTS          specify the default mail transport agent/service])
+  AS_HELP_STRING([--with-mts=@<:@smtp|sendmail@:>@],
+  [specify the default mail transport agent/service]))
 
 if test x"$with_mts" = x"smtp"; then
   MTS="smtp"
@@ -181,11 +196,12 @@ fi
 AC_SUBST(MTS)dnl
 
 dnl Both the smtp and sendmail mail transport services use the smtp code
-AC_DEFINE(SMTPMTS)dnl
+AC_DEFINE(SMTPMTS, 1,
+  [Define if you want SMTP (simple mail transport protocol) support.])dnl
 
 dnl What should be the default pager?
 AC_ARG_WITH(pager,
-[  --with-pager=PAGER      specify the default pager])
+  AS_HELP_STRING([--with-pager=PAGER],[specify the default pager]))
 
 if test -n "$with_pager"; then
   pagerpath="$with_pager"
@@ -193,8 +209,8 @@ fi
 
 dnl What should be the default mail server(s)?
 AC_ARG_WITH(smtpservers,
-[  --with-smtpservers='SMTPSERVER1[ SMTPSERVER2...]'
-                          specify the default SMTP server(s) [localhost]])
+  AS_HELP_STRING([--with-smtpservers='SMTPSERVER1@<:@ SMTPSERVER2...@:>@'],
+  [specify the default SMTP server(s) @<:@localhost@:>@]))
 if test -n "$with_smtpservers"; then
   smtpservers="$with_smtpservers"
 else
@@ -219,14 +235,29 @@ fi
 
 AC_PROG_CC
 
+AC_CACHE_CHECK(whether compiler supports -Wno-pointer-sign, nmh_cv_has_noptrsign,
+[nmh_saved_cflags="$CFLAGS"
+ CFLAGS="$CFLAGS -Wno-pointer-sign"
+ AC_TRY_COMPILE([],[],nmh_cv_has_noptrsign=yes,nmh_cv_has_noptrsign=no)
+ CFLAGS="$nmh_saved_cflags"])
+
 dnl if the user hasn't specified CFLAGS, then
 dnl   if compiler is gcc, then
 dnl     use -O2 and some warning flags
 dnl   else use -O
+dnl We use -Wall; if the compiler supports it we also use -Wno-pointer-sign,
+dnl because gcc 4 now produces a lot of new warnings which are probably mostly
+dnl spurious and which in any case we don't want to deal with now.
+if test "$nmh_cv_has_noptrsign" = "yes"; then
+        nmh_gcc_warnflags="-Wall -Wno-pointer-sign"
+else
+        nmh_gcc_warnflags="-Wall"
+fi
+
 if test -n "$auto_cflags"; then
   if test x"$enable_debug" = x"yes"; then
     if test -n "$GCC"; then
-      test -z "$CFLAGS" && CFLAGS="-Wall -g" || CFLAGS="$CFLAGS -Wall -g"
+      test -z "$CFLAGS" && CFLAGS="$nmh_gcc_warnflags -g" || CFLAGS="$CFLAGS $nmh_gcc_warnflags -g"
     else
       test -z "$CFLAGS" && CFLAGS=-g || CFLAGS="$CFLAGS -g"
     fi
@@ -242,7 +273,7 @@ if test -n "$auto_cflags"; then
       esac
     fi
     if test -n "$GCC"; then
-      test -z "$CFLAGS" && CFLAGS="-Wall -O2" || CFLAGS="$CFLAGS -Wall -O2"
+      test -z "$CFLAGS" && CFLAGS="$nmh_gcc_warnflags -O2" || CFLAGS="$CFLAGS $nmh_gcc_warnflags -O2"
     else
       test -z "$CFLAGS" && CFLAGS=-O  || CFLAGS="$CFLAGS -O"
     fi
@@ -352,11 +383,11 @@ AC_SUBST(pagerpath)dnl
 
 dnl Look for `sendmail'
 pathtmp=/usr/lib:/usr/sbin:/usr/etc:/usr/ucblib:/usr/bin:/bin
-AC_PATH_PROG(sendmailpath, sendmail, no, [$pathtmp])
+AC_PATH_PROG(sendmailpath, sendmail, /usr/sbin/sendmail, [$pathtmp])
 
 dnl Look for `vi'
 pathtmp=/usr/bin:/bin:/usr/ucb:/usr/local/bin
-AC_PATH_PROG(vipath, vi, no, [$pathtmp])
+AC_PATH_PROG(vipath, vi, /bin/vi, [$pathtmp])
 
 dnl If editor is not specified yet,
 dnl then use `vi' as the default.
@@ -365,20 +396,6 @@ if test -z "$editorpath"; then
 fi
 AC_SUBST(editorpath)dnl
 
-dnl Check for broken vi
-AC_CACHE_CHECK(for broken vi, nmh_cv_attvibug,
-[if echo 'r /nonexist-file
-q' | ex > /dev/null
-then
-        nmh_cv_attvibug=no
-else
-        nmh_cv_attvibug=yes
-fi])
-if test "$nmh_cv_attvibug" = yes; then
-  AC_DEFINE(ATTVIBUG)dnl
-fi
-
 dnl ----------------------------------------------------------
 dnl FIND MAIL SPOOL AND SEE IF WE NEED TO MAKE inc SETGID MAIL
 dnl ----------------------------------------------------------
@@ -424,9 +441,10 @@ fi
 
 dnl If mailspool is not world-writable and dotlockfile is not setgid,
 dnl we need to #define MAILGROUP to 1 and make inc setgid.
-if test x"$nmh_cv_mailspool_world_writable" = x"no" -a x"$nmh_cv_dotlockfile_setgid" != x"yes" ; then
+if test x"$LOCKTYPE" = x"dot" -a x"$nmh_cv_mailspool_world_writable" = x"no" -a x"$nmh_cv_dotlockfile_setgid" != x"yes" ; then
   dnl do we really need both of these?
-  AC_DEFINE(MAILGROUP)dnl
+  AC_DEFINE(MAILGROUP,1,
+    [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
   SETGID_MAIL=1
 fi
 AC_SUBST(SETGID_MAIL)dnl
@@ -441,47 +459,36 @@ AC_SUBST(MAIL_SPOOL_GRP)dnl
 dnl ------------------
 dnl CHECK HEADER FILES
 dnl ------------------
+
+dnl On glibc we need to define at least the '_XOPEN_SOURCE' level of features,
+dnl or wchar.h doesn't declare a prototype for wcwidth(). But if we only define
+dnl that level then db.h won't compile. So we define _GNU_SOURCE which turns
+dnl on everything. Perhaps other OSes need some feature switch set to get wcwidth()
+dnl declared; if so they should have an entry added to this case statement.
+dnl NB that we must define this on the compiler command line, not in config.h,
+dnl because it must be set before any system header is included and there's no
+dnl portable way to make sure that files generated by lex include config.h
+dnl before system header files.
+
+case "$target_os" in
+  linux*)
+    # Like DEFS, but doesn't get stomped on by configure when using config.h:
+    OURDEFS="$OURDEFS -D_GNU_SOURCE"
+    ;;
+esac
+AC_SUBST(OURDEFS)
+
 AC_HEADER_DIRENT
 AC_HEADER_STDC
 AC_HEADER_TIME
 AC_HEADER_SYS_WAIT
 AC_HEADER_STAT
+AC_HEADER_TIOCGWINSZ
 AC_CHECK_HEADERS(string.h memory.h stdlib.h unistd.h errno.h fcntl.h \
                  limits.h crypt.h termcap.h termio.h termios.h locale.h \
-                 langinfo.h netdb.h sys/param.h sys/time.h sys/utsname.h \
-                 iconv.h sys/stream.h arpa/inet.h arpa/ftp.h)
-
-
-AC_CACHE_CHECK(POSIX termios, nmh_cv_sys_posix_termios,
-[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
-#include <unistd.h>
-#include <termios.h>]],
-[[/* SunOS 4.0.3 has termios.h but not the library calls.  */
-tcgetattr(0, 0);]])],
-nmh_cv_sys_posix_termios=yes, nmh_cv_sys_posix_termios=no)])
-if test $nmh_cv_sys_posix_termios = yes; then
-  AC_CACHE_CHECK(TIOCGWINSZ in termios.h,
-  nmh_cv_header_termios_h_tiocgwinsz,
-  [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
-#include <termios.h>]],
-  [[int x = TIOCGWINSZ;]])],
-  nmh_cv_header_termios_h_tiocgwinsz=yes,nmh_cv_header_termios_h_tiocgwinsz=no)])
-else
-  nmh_cv_header_termios_h_tiocgwinsz=no
-fi
-if test $nmh_cv_header_termios_h_tiocgwinsz = no; then
-  AC_CACHE_CHECK(TIOCGWINSZ in sys/ioctl.h,
-  nmh_cv_header_sys_ioctl_h_tiocgwinsz,
-  [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
-#include <sys/ioctl.h>]],
-  [[int x = TIOCGWINSZ;]])],
-  nmh_cv_header_sys_ioctl_h_tiocgwinsz=yes,nmh_cv_header_sys_ioctl_h_tiocgwinsz=no)])
-  if test $nmh_cv_header_sys_ioctl_h_tiocgwinsz = yes; then
-    AC_DEFINE(GWINSZ_IN_SYS_IOCTL)dnl
-  fi
-fi
+                 langinfo.h wchar.h wctype.h iconv.h netdb.h \
+                 sys/param.h sys/time.h sys/utsname.h sys/stream.h \
+                 arpa/inet.h arpa/ftp.h)
  
 dnl
 dnl Checks for _IO_write_ptr. A Linuxism used by nmh on linux. We
@@ -490,9 +497,10 @@ dnl sufficient.
 dnl
 AC_CHECK_HEADER(libio.h, [
   AC_EGREP_HEADER(_IO_write_ptr, libio.h, [
-    AC_DEFINE(LINUX_STDIO) ]) ]) 
+    AC_DEFINE(LINUX_STDIO,1,[Use the Linux _IO_*_ptr defines from <libio.h>.]) ]) ]) 
 
-AC_CHECK_HEADER([sys/ptem.h], AC_DEFINE(WINSIZE_IN_PTEM),,
+AC_CHECK_HEADER([sys/ptem.h], AC_DEFINE(WINSIZE_IN_PTEM,1,
+  [Define to 1 if `struct winsize' requires <sys/ptem.h>.]),,
 [[#if HAVE_SYS_STREAM_H
 #  include <sys/stream.h>
 #endif
@@ -505,19 +513,16 @@ AC_FUNC_VFORK
 AC_CHECK_LIB(mkstemp,mkstemp)
 AC_CHECK_FUNCS(waitpid wait3 sigaction sigprocmask sigblock sigsetmask \
                sighold sigrelse writev lstat uname tzset killpg mkstemp \
-               sethostent getutent nl_langinfo)
-
-dnl solaris screws this up
-AC_CHECK_FUNC(gethostbyname, [AC_DEFINE(HAVE_GETHOSTBYNAME)],
-  AC_CHECK_LIB(nsl, gethostbyname, [AC_DEFINE(HAVE_GETHOSTBYNAME)] ) )
+               getutent nl_langinfo mbtowc wcwidth)
 
 dnl sigsetjmp may be a macro
 AC_MSG_CHECKING(for sigsetjmp)
 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <setjmp.h>]],
-  [[sigsetjmp((void *)0, 0);]])],[AC_DEFINE(HAVE_SIGSETJMP) AC_MSG_RESULT(yes)],
+  [[sigsetjmp((void *)0, 0);]])],[AC_DEFINE(HAVE_SIGSETJMP, 1,
+    [Define to 1 if you have the `sigsetjmp'.]) AC_MSG_RESULT(yes)],
   [AC_MSG_RESULT(no)])
 
-AC_REPLACE_FUNCS(snprintf strerror strdup)
+AC_REPLACE_FUNCS(memmove snprintf strerror strdup)
 
 dnl Look for the initgroups() declaration.  On AIX 4.[13], Solaris 4.1.3, and
 dnl ULTRIX 4.2A the function is defined in libc but there's no declaration in
@@ -525,7 +530,8 @@ dnl any system header.
 dnl
 dnl On Solaris 2.[456], the declaration is in <grp.h>.  On HP-UX 9-11 and
 dnl (reportedly) FreeBSD 3.[23], it's in <unistd.h>.  Any other locations we
-dnl need to check? 
+dnl need to check?
+AH_TEMPLATE(INITGROUPS_HEADER, [Define to the header containing the declaration of `initgroups'.])
 AC_EGREP_HEADER(initgroups, grp.h, AC_DEFINE(INITGROUPS_HEADER, <grp.h>),
                 AC_EGREP_HEADER(initgroups, unistd.h, 
                                 AC_DEFINE(INITGROUPS_HEADER, <unistd.h>)))
@@ -537,7 +543,15 @@ dnl Anyhow, if we omit our own snprintf() and vsnprintf() prototypes when we
 dnl HAVE_SNPRINTF, we get a billion warnings at compile time.  Use the C
 dnl preprocessor to preprocess stdio.h and make sure that there's actually a 
 dnl prototype. 
-AC_EGREP_HEADER(snprintf, stdio.h, AC_DEFINE(HAVE_SNPRINTF_PROTOTYPE))
+AC_EGREP_HEADER(snprintf, stdio.h, AC_DEFINE(HAVE_SNPRINTF_PROTOTYPE,1,
+  [Define to 1 if <stdio.h> has a prototype for snprintf().]))
+
+dnl Check for multibyte character set support
+if test "x$ac_cv_header_wchar_h" = "xyes" -a "x$ac_cv_header_wctype_h" = "xyes" \
+    -a "x$ac_cv_func_wcwidth" = "xyes" -a "x$ac_cv_func_mbtowc" = "xyes"; then
+  AC_DEFINE(MULTIBYTE_SUPPORT, 1,
+    [Define to enable support for multibyte character sets.])
+fi
 
 dnl -------------------
 dnl CHECK FOR LIBRARIES
@@ -602,19 +616,66 @@ fi
 dnl --------------
 dnl CHECK FOR NDBM
 dnl --------------
-dnl Checks for ndbm
-AC_CHECK_FUNC(dbm_open, ,
-  AC_CHECK_LIB(ndbm, dbm_open, ,
-    AC_CHECK_LIB(dbm, dbm_open, ,
-      AC_CHECK_LIB(db1, dbm_open, ,
-        AC_CHECK_LIB(gdbm, dbm_open, ,
-          AC_CHECK_LIB(db, __db_ndbm_open))))))
 
-dnl ----------------
-dnl CHECK FOR NDBM.H
-dnl ----------------
+AC_ARG_WITH([ndbm],AS_HELP_STRING([--with-ndbm=ARG],[use -lARG to link with ndbm]),
+            [nmh_ndbm=$withval],[nmh_ndbm=autodetect])
+AC_ARG_WITH([ndbmheader],AS_HELP_STRING([--with-ndbmheader=ARG],[#include <ARG> to use ndbm]),
+            [nmh_ndbmheader=$withval],[nmh_ndbmheader=autodetect])
+
+if test "$nmh_ndbm" = "autodetect"; then
+  if test "$nmh_ndbmheader" != "autodetect"; then
+    AC_MSG_ERROR([must specify both --with-ndbm and --with-ndbmheader or neither])
+  else
+
+    dnl There are at least four implementations of ndbm, and
+    dnl several of those can be in different places at the whim
+    dnl of the system integrator. A good summary of this mess
+    dnl can be found at http://www.unixpapa.com/incnote/dbm.html
+
+    dnl Classic ndbm with no library required (eg NetBSD): try this
+    dnl first so we don't accidentally link in a pointless but harmless
+    dnl library in one of the later ndbm.h+libfoo tests:
+    NMH_CHECK_NDBM(ndbm.h,,,
+    dnl Berkeley DBv2 emulating ndbm: header in db.h:
+      NMH_CHECK_NDBM(db.h,db,,
+    dnl Berkeley DBv1 emulating ndbm:
+        NMH_CHECK_NDBM(ndbm.h,db,,
+          NMH_CHECK_NDBM(ndbm.h,db1,,
+    dnl Classic ndbm:
+            NMH_CHECK_NDBM(ndbm.h,ndbm,,
+    dnl glibc2.1 systems put db1 in a subdir:
+              NMH_CHECK_NDBM(db1/ndbm.h,db1,,
+    dnl GNU gdbm emulating ndbm, with header possibly in gdbm/
+    dnl and possibly needing gbdm_compat library:
+                NMH_CHECK_NDBM(gdbm/ndbm.h,gdbm,,
+                  NMH_CHECK_NDBM(gdbm/ndbm.h,gdbm_compat -lgdbm,,
+                    NMH_CHECK_NDBM(ndbm.h,gdbm,,
+                      NMH_CHECK_NDBM(ndbm.h,gdbm_compat -lgdbm))))))))))
+
+  fi
+else
+  dnl We don't really need to check that the user-specified values work,
+  dnl but it is a convenience to the user to bomb out early rather than
+  dnl after configure and half the compile process.
+  NMH_CHECK_NDBM([$nmh_ndbmheader],[$nmh_ndbm])
+fi
+
+if test "$nmh_ndbm_found" = "no"; then
+  AC_MSG_ERROR([could not find a working ndbm library/header combination])
+else
+  dnl Now export the lib/header to our makefile/config.h:
+  if test x"$nmh_ndbmheader" != x; then
+    AC_DEFINE_UNQUOTED(NDBM_HEADER, <$nmh_ndbmheader>,
+      [Define to the header containing the ndbm API prototypes.])
+  fi
+  if test x"$nmh_ndbm" != x; then
+    NDBM_LIBS="-l$nmh_ndbm"
+  else
+    NDBM_LIBS=
+  fi
+  AC_SUBST(NDBM_LIBS)
+fi
 
-AC_CHECK_HEADERS(db1/ndbm.h gdbm/ndbm.h db.h, break, )
 
 dnl ----------------
 dnl CHECK FOR HESIOD
@@ -638,66 +699,25 @@ fi
 AC_SUBST(HESIOD_INCLUDES)dnl
 AC_SUBST(HESIOD_LIBS)dnl
 
-dnl ----------------------------------
-dnl CHECK FOR KRB4 (Kerberos4 support)
-dnl ----------------------------------
-if test x"$with_krb4" != x -a x"$with_krb4" != x"no"; then
-  if test x"$with_krb4" != x"yes"; then
-    KRB4_INCLUDES="-I$with_krb4/include"
-    if test -d "$with_krb4/include/kerberosIV"; then
-      KRB4_INCLUDES="$KRB4_INCLUDES -I$with_krb4/include/kerberosIV"
-    fi
-    KRB4_LIBS="-L$with_krb4/lib"
-  elif test -d /usr/include/kerberosIV; then
-    KRB4_INCLUDES="-I/usr/include/kerberosIV"
-  fi
-dnl First, check if we have -lk5crypto, since that means we have a recent krb5
-
-  AC_CHECK_LIB(k5crypto, krb5_encrypt,
-       [AC_CHECK_LIB(krb4, krb_rd_req,
-               [KRB4_LIBS="$KRB4_LIBS -lkrb4 -ldes425 -lkrb5 -lk5crypto -lcom_err"],
-               [AC_MSG_ERROR(Kerberos 4 compatibility libraries not found)],
-               $KRB4_LIBS -ldes425 -lkrb5 -lk5crypto -lcom_err)],
+dnl --------------------
+dnl CHECK FOR CYRUS-SASL
+dnl --------------------
 
-       [AC_CHECK_LIB(krb4, krb_rd_req,
-           [KRB4_LIBS="$KRB4_LIBS -lkrb4 -ldes425 -lkrb5 -lcrypto -lcom_err"],
-           [AC_CHECK_LIB(krb, krb_rd_req,
-             [KRB4_LIBS="$KRB4_LIBS -lkrb -ldes"],
-             [AC_MSG_ERROR(Kerberos 4 libraries not found)],
-             $KRB4_LIBS -ldes)],
-           $KRB4_LIBS -ldes425 -lkrb5 -lcrypto -lcom_err)],
-       $KRB4_LIBS)
+AS_IF([test x"$sasl_support" = x"yes"],[
+  AC_CHECK_HEADER([sasl/sasl.h], , [AC_MSG_ERROR([sasl.h not found])])
+  AC_CHECK_LIB([sasl2], [sasl_client_new], ,
+    [AC_MSG_ERROR([Cyrus SASL library not found])])])
 
-fi
-AC_SUBST(KRB4_INCLUDES)dnl
-AC_SUBST(KRB4_LIBS)dnl
+dnl -----------------
+dnl CHECK FOR OPENSSL
+dnl -----------------
 
-dnl --------------------
-dnl CHECK FOR CYRUS SASL
-dnl --------------------
-if test x"$with_cyrus_sasl" != x -a x"$with_cyrus_sasl" != x"no"; then
-  if test x"$with_cyrus_sasl" != x"yes"; then
-    SASL_INCLUDES="-I$with_cyrus_sasl/include"
-    SASL_LIBS="-L$with_cyrus_sasl/lib"
-
-    dnl Do OS-specific hardcoding of SASL shared library path into executables,
-    dnl so user isn't forced to set environment variables like Solaris'
-    dnl LD_LIBRARY_PATH.
-    case "$target_os" in
-      solaris*)
-       SASL_LIBS="$SASL_LIBS -R$with_cyrus_sasl/lib"
-       ;;
-    esac
-  fi
-  save_LDFLAGS="$LDFLAGS"
-  LDFLAGS="$LDFLAGS $SASL_LIBS"
-  AC_CHECK_LIB(sasl2, sasl_client_new,
-    [SASL_LIBS="$SASL_LIBS -lsasl2"],
-    [AC_MSG_ERROR(Cyrus SASL library not found)])
-  LDFLAGS="$save_LDFLAGS"
-fi
-AC_SUBST(SASL_INCLUDES)dnl
-AC_SUBST(SASL_LIBS)dnl
+AS_IF([test x"$tls_support" = x"yes"],[
+  AC_CHECK_HEADER([openssl/ssl.h], , [AC_MSG_ERROR([openssl/ssl.h not found])])
+  AC_CHECK_LIB([crypto], [BIO_write], ,
+    [AC_MSG_ERROR([OpenSSL crypto library not found])])
+  AC_CHECK_LIB([ssl], [SSL_library_init], ,
+    [AC_MSG_ERROR([OpenSSL library not found])])])
 
 dnl ---------------------
 dnl CHECK TERMCAP LIBRARY
@@ -728,24 +748,80 @@ if test $nmh_cv_decl_ospeed_include_defines = no; then
   nmh_cv_decl_ospeed_must_define=yes,nmh_cv_decl_ospeed_must_define=no)])
 fi
  
+AH_TEMPLATE(HAVE_OSPEED, [Define to 1 if your termcap library has the ospeed variable.])
 if test $nmh_cv_decl_ospeed_include_defines = yes; then
   AC_DEFINE(HAVE_OSPEED)dnl
 elif test $nmh_cv_decl_ospeed_must_define = yes; then
   AC_DEFINE(HAVE_OSPEED)
-  AC_DEFINE(MUST_DEFINE_OSPEED)
+  AC_DEFINE(MUST_DEFINE_OSPEED, 1,
+    [Define to 1 if you have ospeed, but it is not defined in termcap.h.])
 fi
 
-dnl dnl Checks if tgetent accepts NULL and will
-dnl dnl allocate its own termcap buffer.
-dnl AC_CACHE_CHECK(if tgetent accepts NULL,
-dnl nmh_cv_func_tgetent_accepts_null,
-dnl [AC_TRY_RUN([main(){int i = tgetent((char*)0,"vt100");exit(!i || i == -1);}],
-dnl   nmh_cv_func_tgetent_accepts_null=yes,
-dnl   nmh_cv_func_tgetent_accepts_null=no,
-dnl   nmh_cv_func_tgetent_accepts_null=no)])
-dnl if test $nmh_cv_func_tgetent_accepts_null = yes; then
-dnl   AC_DEFINE(TGETENT_ACCEPTS_NULL)
-dnl fi
+dnl Check if tgetent accepts NULL (and will allocate its own termcap buffer)
+dnl Some termcaps reportedly accept a zero buffer, but then dump core
+dnl in tgetstr().
+dnl Under Cygwin test program crashes but exit code is still 0. So,
+dnl we test for a file that porgram should create
+AH_TEMPLATE([TGETENT_ACCEPTS_NULL],
+[Define to 1 if tgetent() accepts NULL as a buffer.])
+AC_CACHE_CHECK(if tgetent accepts NULL,
+nmh_cv_func_tgetent_accepts_null,
+[AC_TRY_RUN([
+main()
+{
+    char buf[4096];
+    int r1 = tgetent(buf, "vt100");
+    int r2 = tgetent((char*)0,"vt100");
+    if (r1 >= 0 && r1 == r2) {
+        char tbuf[1024], *u;
+        u = tbuf;
+       tgetstr("cl", &u);
+       creat("conftest.tgetent", 0640);
+    }
+    exit((r1 != r2) || r2 == -1);
+}
+],
+  if test -f conftest.tgetent; then
+    nmh_cv_func_tgetent_accepts_null=yes
+  else
+    nmh_cv_func_tgetent_accepts_null=no
+  fi,
+  nmh_cv_func_tgetent_accepts_null=no,
+  nmh_cv_func_tgetent_accepts_null=no)])
+if test x$nmh_cv_func_tgetent_accepts_null = xyes; then
+  AC_DEFINE(TGETENT_ACCEPTS_NULL)
+fi
+AC_CACHE_CHECK(if tgetent returns 0 on success,
+nmh_cv_func_tgetent_zero_success,
+[AC_TRY_RUN([
+main()
+{
+    char buf[4096];
+    int r1 = tgetent(buf, "!@#$%^&*");
+    int r2 = tgetent(buf, "vt100");
+    if (r1 < 0 && r2 == 0) {
+        char tbuf[1024], *u;
+        u = tbuf;
+       tgetstr("cl", &u);
+       creat("conftest.tgetent0", 0640);
+    }
+    exit(r1 == r2);
+}
+],
+  if test -f conftest.tgetent0; then
+    nmh_cv_func_tgetent_zero_success=yes
+  else
+    nmh_cv_func_tgetent_zero_success=no
+  fi,
+  nmh_cv_func_tgetent_zero_success=no,
+  nmh_cv_func_tgetent_zero_success=no)])
+AH_TEMPLATE([TGETENT_SUCCESS],
+[Define to what tgetent() returns on success (0 on HP-UX X/Open curses).])
+if test x$nmh_cv_func_tgetent_zero_success = xyes; then
+  AC_DEFINE(TGETENT_SUCCESS, 0)
+else
+  AC_DEFINE(TGETENT_SUCCESS, 1)
+fi
 
 dnl Now put the libraries back to what it was before we
 dnl starting checking the termcap library.
@@ -769,7 +845,8 @@ AC_CACHE_CHECK(for sigset_t, nmh_cv_type_sigset_t,
 #include <signal.h>]], [[sigset_t tempsigset;]])],
 nmh_cv_type_sigset_t=yes,nmh_cv_type_sigset_t=no)])
 if test $nmh_cv_type_sigset_t = no; then
-  AC_DEFINE(sigset_t, unsigned int)
+  AC_DEFINE(sigset_t, unsigned int,
+    [Define to `unsigned int' if <sys/types.h> or <signal.h> doesn't define.])
 fi
 
 dnl ----------------
@@ -777,8 +854,8 @@ dnl CHECK STRUCTURES
 dnl ----------------
 AC_CHECK_MEMBERS(struct stat.st_blksize)
 
-AC_CACHE_CHECK(for tm_gmtoff in struct tm, nmh_cv_struct_tm_gmtoff,
-[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef TIME_WITH_SYS_TIME
+AC_CHECK_MEMBERS(struct tm.tm_gmtoff,,,
+  [#ifdef TIME_WITH_SYS_TIME
 # include <sys/time.h>
 # include <time.h>
 #else
@@ -787,31 +864,64 @@ AC_CACHE_CHECK(for tm_gmtoff in struct tm, nmh_cv_struct_tm_gmtoff,
 # else
 #  include <time.h>
 # endif
-#endif]], [[struct tm temptm; temptm.tm_gmtoff = 0;]])],
-nmh_cv_struct_tm_gmtoff=yes,nmh_cv_struct_tm_gmtoff=no)])
-if test $nmh_cv_struct_tm_gmtoff = yes; then
-  AC_DEFINE(HAVE_TM_GMTOFF)
+#endif])
+
+AC_CHECK_MEMBERS(struct utmp.ut_type,,,[#include <utmp.h>])
+
+AC_MSG_CHECKING(for union wait)
+AC_CACHE_VAL(nmh_cv_union_wait, [dnl
+  AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
+#include <sys/wait.h>]],
+    [[union wait status; int pid; pid = wait (&status);
+#ifdef WEXITSTATUS
+/* Some POSIXoid systems have both the new-style macros and the old
+   union wait type, and they do not work together.  If union wait
+   conflicts with WEXITSTATUS et al, we don't want to use it at all.  */
+        if (WEXITSTATUS (status) != 0) pid = -1;
+#ifdef WTERMSIG
+        /* If we have WEXITSTATUS and WTERMSIG, just use them on ints.  */
+        -- blow chunks here --
+#endif
+#endif
+#ifdef HAVE_WAITPID
+        /* Make sure union wait works with waitpid.  */
+        pid = waitpid (-1, &status, 0);
+#endif
+      ]])],
+    [nmh_cv_union_wait=yes],
+    [nmh_cv_union_wait=no])])
+if test "$nmh_cv_union_wait" = yes; then
+  AC_DEFINE(HAVE_UNION_WAIT, 1,
+    [Define to 1 if you have the \`union wait' type in <sys/wait.h>.])
 fi
+AC_MSG_RESULT($nmh_cv_union_wait)
+
+CHECK_TYPE_STRUCT_DIRENT_D_TYPE()
 
 dnl -------------
 dnl CHECK SIGNALS
 dnl -------------
 dnl What style of signal do you have (POSIX, BSD, or SYSV)?
+AH_TEMPLATE(RELIABLE_SIGNALS, [Define to 1 if you have reliable signals.])
 AC_MSG_CHECKING(what style of signals to use)
 if test $ac_cv_func_sigaction = yes -a $ac_cv_func_sigprocmask = yes; then
   signals_style=POSIX_SIGNALS
-  AC_DEFINE(POSIX_SIGNALS)
+  AC_DEFINE(POSIX_SIGNALS, 1,
+    [Define to 1 if you use POSIX style signal handling.])
   AC_DEFINE(RELIABLE_SIGNALS)
 elif test $ac_cv_func_sigblock = yes -a $ac_cv_func_sigsetmask = yes; then
   signals_style=BSD_SIGNALS
-  AC_DEFINE(BSD_SIGNALS)
+  AC_DEFINE(BSD_SIGNALS,1,
+    [Define to 1 if you use BSD style signal handling (and can block signals).])
   AC_DEFINE(RELIABLE_SIGNALS)
 elif test $ac_cv_func_sighold = yes -a $ac_cv_func_sigrelse = yes; then
   signals_style=SYSV_SIGNALS
-  AC_DEFINE(SYSV_SIGNALS)
+  AC_DEFINE(SYSV_SIGNALS,1,
+    [Define to 1 if you use SYSV style signal handling (and can block signals).])
 else
   signals_style=NO_SIGNAL_BLOCKING
-  AC_DEFINE(NO_SIGNAL_BLOCKING)
+  AC_DEFINE(NO_SIGNAL_BLOCKING,1,
+    [Define to 1 if you have no signal blocking at all (bummer).])
 fi
 
 AC_MSG_RESULT($signals_style)
@@ -837,6 +947,12 @@ AC_SUBST(SIGNAL_H)dnl
 dnl ----------------
 dnl OS SPECIFIC DEFINES
 dnl ----------------
+AH_TEMPLATE(SYS5, [Defined for Solaris 2.x, Irix, OSF/1, HP-UX, AIX, SCO5; only used in vmh.c which is not built.])
+AH_TEMPLATE(SVR4, [Defined for Solaris 2.x, Irix, OSF/1, HP-UX, AIX; only used in vmh.c which is not built.])
+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.])
+AH_TEMPLATE(BSD42, [Defined for SunOS 4, FreeBSD, NetBSD, OpenBSD, BSD/OS, Mac OS X/Rhapsody -- does PicoBSD have uname?])
+AH_TEMPLATE(SCO_5_STDIO, [Defined for SCO5.])
+
 case "$target_os" in
 
   solaris2*)
@@ -890,11 +1006,17 @@ AC_CONFIG_FILES(Makefile config/Makefile h/Makefile sbr/Makefile uip/Makefile \
 AC_CONFIG_COMMANDS([stamp],[test -z "$CONFIG_HEADERS" || echo > stamp-h])
 AC_OUTPUT
 
-dnl Umm, what's the point of these assignments??  -- <dan-nmh@dilvish.speed.net>
-eval "nmhbin=${bindir}";         eval "nmhbin2=${nmhbin}"
-eval "nmhsysconf=${sysconfdir}"; eval "nmhsysconf2=${nmhsysconf}"
-eval "nmhlib=${libdir}";         eval "nmhlib2=${nmhlib}"
-eval "nmhman=${mandir}"
+dnl These odd looking assignments are done to expand out unexpanded
+dnl variables in bindir et al (for instance mandir is '${datarootdir}/man',
+dnl but expanding that gives '${prefix}/share/man', so we need to expand
+dnl again to get the final answer.
+dnl We only use the expanded versions to print the install paths in
+dnl the final summary and should use them nowhere else (see the autoconf
+dnl docs for the rationale for bindir etc being unexpanded).
+eval "nmhbin=${bindir}";         eval "nmhbin=${nmhbin}"
+eval "nmhsysconf=${sysconfdir}"; eval "nmhsysconf=${nmhsysconf}"
+eval "nmhlib=${libdir}";         eval "nmhlib=${nmhlib}"
+eval "nmhman=${mandir}";         eval "nmhman=${nmhman}"
 
 pop_kinds=no
 if test x"$enable_pop" = x"yes"; then
@@ -904,10 +1026,6 @@ if test x"$enable_pop" = x"yes"; then
     pop_kinds="${pop_kinds}APOP "
   fi
 
-  if test x"$with_krb4" != x -a x"$with_krb4" != x"no"; then
-    pop_kinds="${pop_kinds}KPOP "
-  fi
-
   pop_kinds="${pop_kinds}POP3)"
 fi
 
@@ -919,10 +1037,11 @@ target os                  : ${target}
 compiler                   : ${CC}
 compiler flags             : ${CFLAGS}
 linker flags               : ${LDFLAGS}
+definitions                : ${OURDEFS}
 source code location       : ${srcdir}
-binary install path        : ${nmhbin2}
-libary install path        : ${nmhlib2}
-config files install path  : ${nmhsysconf2}
+binary install path        : ${nmhbin}
+library install path       : ${nmhlib}
+config files install path  : ${nmhsysconf}
 man page install path      : ${nmhman}
 backup prefix              : ${backup_prefix}
 transport system           : ${MTS}
@@ -932,5 +1051,6 @@ default editor             : ${editorpath}
 default pager              : ${pagerpath}
 email address masquerading : ${masquerade}
 pop is enabled             : ${pop_kinds}
-SASL support               : ${sasl_support}"
+SASL support               : ${sasl_support}
+TLS support                : ${tls_support}"
 echo ""