* configure.in, INSTALL: if --enable-masquerade is not
[mmh] / configure.in
index 59d9207..0b2a73c 100644 (file)
@@ -47,7 +47,8 @@ dnl Do you want client-side support for 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
@@ -69,7 +70,8 @@ AC_ARG_ENABLE(masquerade,
     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?
@@ -79,7 +81,8 @@ AC_ARG_ENABLE(mhe,
 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?
@@ -90,12 +93,24 @@ 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, AS_HELP_STRING([--with-cyrus-sasl=DIR],
   [specify location of 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
@@ -117,13 +132,14 @@ if test x"$with_hash_backup" != x -a x"$with_hash_backup" != x"no"; then
 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,
   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
+  AC_DEFINE(HESIOD,1,[Define this to compile support for using Hesiod.])dnl
 fi
 
 dnl Do you want client-side support for kpop
@@ -131,13 +147,15 @@ AC_ARG_WITH(krb4, AS_HELP_STRING([--with-krb4=DIR],
   [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(KPOP, 1,
+    [Define to compile client-side support for kpop (kerberized pop) into inc and msgchk.])dnl
+  AC_DEFINE(KPOP_PRINCIPAL, "pop", [Define this to "pop" when using Kerberos V4])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
@@ -153,16 +171,16 @@ AC_ARG_WITH(locking,
 
 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
@@ -183,7 +201,8 @@ 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,
@@ -221,14 +240,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
@@ -244,7 +278,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
@@ -367,20 +401,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 ----------------------------------------------------------
@@ -426,9 +446,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
@@ -443,47 +464,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 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)
-
-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
  
 dnl
 dnl Checks for _IO_write_ptr. A Linuxism used by nmh on linux. We
@@ -492,9 +502,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
@@ -507,19 +518,24 @@ 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 mbtowc wcwidth)
+               getutent nl_langinfo mbtowc wcwidth)
 
-dnl solaris screws this up
-AC_CHECK_FUNC(gethostbyname, [AC_DEFINE(HAVE_GETHOSTBYNAME)],
-  AC_CHECK_LIB(nsl, gethostbyname, [AC_DEFINE(HAVE_GETHOSTBYNAME)] ) )
+dnl solaris has these in the nsl library
+AC_SEARCH_LIBS(gethostbyname, nsl,
+  [AC_DEFINE(HAVE_GETHOSTBYNAME,1,
+    [Define to 1 if you have the `gethostbyname' function.])])
+AC_SEARCH_LIBS(sethostent, nsl,
+  [AC_DEFINE(HAVE_SETHOSTENT,1,
+    [Define to 1 if you have the `sethostent' function.])])
 
 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 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
@@ -527,7 +543,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>)))
@@ -539,13 +556,14 @@ 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])
+    [Define to enable support for multibyte character sets.])
 fi
 
 dnl -------------------
@@ -660,7 +678,8 @@ if test "$nmh_ndbm_found" = "no"; then
 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>)
+    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"
@@ -783,24 +802,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.
@@ -824,7 +899,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 ----------------
@@ -832,8 +908,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
@@ -842,40 +918,62 @@ 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)
-fi
-
-AC_CACHE_CHECK(for ut_type in struct utmp, nmh_cv_struct_utmp_ut_type,
-[AC_TRY_COMPILE(
-[#include <utmp.h>],
-[struct utmp temputmp; temputmp.ut_type = 0;],
-  nmh_cv_struct_utmp_ut_type=yes, nmh_cv_struct_utmp_ut_type=no)])
-if test $nmh_cv_struct_utmp_ut_type = yes; then
-  AC_DEFINE(HAVE_UTMP_UT_TYPE)
+#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)
 
 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)
@@ -901,6 +999,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*)
@@ -983,6 +1087,7 @@ 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}