AC_ARG_ENABLE([debug],
AS_HELP_STRING([--enable-debug],[enable nmh code debugging]))
-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],
- [AS_HELP_STRING([--disable-locale], [turn off locale features])],
- [AS_IF([test x$enableval = xyes], [AC_DEFINE(LOCALE)])],
- [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],
dnl Do you want client-side support for encryption with TLS?
AC_ARG_WITH([tls], AS_HELP_STRING([--with-tls], [Enable TLS support]))
-AS_IF([test x"$with_tls" != x -a x"$with_tls" != x"no"],[
+AS_IF([test x"$with_tls" != x"no"],[
AC_DEFINE([TLS_SUPPORT], [1], [Support TLS for session encryption.])dnl
tls_support=yes],[tls_support=no])
[smtpservers="localhost"])
AC_SUBST([smtpservers])dnl
-dnl ----------------------------------------------------
-dnl Default location is /usr/local/nmh/{bin,etc,lib,man}
-dnl ----------------------------------------------------
+dnl -------------------------------------------------------------------
+dnl Default location is /usr/local/nmh/{bin,etc,libexec,man}, unless we
+dnl find an existing installation, in which case we use its location.
+dnl -------------------------------------------------------------------
AC_PREFIX_DEFAULT([/usr/local/nmh])
+AC_PREFIX_PROGRAM([mhparam])
dnl ------------------
dnl CHECK THE COMPILER
test "$nmh_cv_has_wextra" = "yes" && CFLAGS="${CFLAGS:+$CFLAGS }-Wextra"
fi
+if test "$GCC" = yes; then
+ dnl Do this regardless of auto_cflags value.
+ dnl Enable _FORTIFY_SOURCE checking, which is supported by
+ dnl gcc 4.1 and later, but only when optimization is enabled.
+ dnl It shouldn't hurt with earlier versions because it's a cpp macro.
+ dnl If the user configures with a CFLAGS that contains a -O flag
+ dnl but then removes it a make time, they'll also have to remove
+ dnl -D_FORTIFY_SOURCE from CPPFLAGS because it requires optimization.
+ AS_CASE([$CFLAGS],
+ [-O*|*' -O'*],[CPPFLAGS="${CPPFLAGS:+$CPPFLAGS }-D_FORTIFY_SOURCE=2"])
+fi
+
+dnl FreeBSD needs a bit of magic to bring getline() into scope.
+dnl We do this here rather than in (say) h/mh.h because this macro must
+dnl be defined before <stdio.h> is pulled in.
+dnl
+dnl And while we're here, add the packages tree to the cpp and ld search
+dnl paths. Note that FreeBSD's pkg(8) seems to be hardwired to use /usr/local.
+dnl If /usr/ports is installed, we use its idea of where things are installed,
+dnl otherwise we assume /usr/local.
+
+AS_IF([test `uname` = FreeBSD],
+ [CPPFLAGS="${CPPFLAGS:+$CPPFLAGS }-D_WITH_GETLINE"
+ nmh_cv_freebsd_localbase=`echo '.include <bsd.port.mk>' \
+ | make -k -f /dev/stdin -V LOCALBASE 2>/dev/null | sed 1q`
+ test -z "$nmh_cv_freebsd_localbase" && nmh_cv_freebsd_localbase=/usr/local
+ CPPFLAGS="${CPPFLAGS:+$CPPFLAGS }-I$nmh_cv_freebsd_localbase/include"
+ LDFLAGS="${LDFLAGS:+$LDFLAGS }-L$nmh_cv_freebsd_localbase/lib"
+])
+
dnl --------------
dnl CUSTOMIZE LINK
dnl --------------
-if test `uname` = OpenBSD; then
- dnl Filter out "often/almost always misused" warnings from OpenBSD linker.
- POSTLINK=["2>&1 | egrep -v 'warning'; true"]
-fi
+AS_IF([test `uname` = OpenBSD],
+ dnl Munge "often/almost always misused" warnings from OpenBSD linker
+ dnl so that they don't color the waterfall.
+ [POSTLINK="2>&1 | sed -e \
+'s/: w\(arning: s.*() is .* misused, please use\)/: W\1/'"])
AC_SUBST([POSTLINK])
dnl -----------------
dnl CUSTOMIZE LDFLAGS
dnl -----------------
-if test "$GCC" = yes; then
- dnl Disable clang complaint about unused -ansi when linking.
- AC_CACHE_CHECK([whether linker supports -Qunused-arguments],
- [nmh_cv_has_q_unused_arguments],
- [nmh_saved_ldflags="$LDFLAGS"
- LDFLAGS="$LDFLAGS -Qunused-arguments"
- AC_TRY_LINK([],[],nmh_cv_has_q_unused_arguments=yes,
- nmh_cv_has_q_unused_arguments=no)
- LDFLAGS="$nmh_saved_ldflags"])
- test "$nmh_cv_has_q_unused_arguments" = "yes" && \
- LDFLAGS="${LDFLAGS:+$LDFLAGS }-Qunused-arguments"
-fi
-
-dnl This really shouldn't be necessary. And we really shouldn't add -s.
-if test x"$enable_debug" = x"yes"; then
- test -z "$LDFLAGS" && LDFLAGS=-g
-else
- if test -z "$LDFLAGS"; then
- case "$build_os" in
- darwin*) LDFLAGS= ;;
- *) LDFLAGS=-s ;;
- esac
- fi
-fi
+dnl Disable clang complaint about unused -ansi when linking.
+AC_CACHE_CHECK([whether linker supports -Qunused-arguments],
+ [nmh_cv_has_q_unused_arguments],
+ [AS_IF([test "$GCC" = yes && `${CC} --version 2>&1 | \
+ grep clang >/dev/null`],
+ [nmh_saved_ldflags="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -Qunused-arguments"
+ AC_TRY_LINK([],[],nmh_cv_has_q_unused_arguments=yes,
+ nmh_cv_has_q_unused_arguments=no)
+ LDFLAGS="$nmh_saved_ldflags"],
+ [nmh_cv_has_q_unused_arguments=no])])
+test "$nmh_cv_has_q_unused_arguments" = "yes" && \
+ LDFLAGS="${LDFLAGS:+$LDFLAGS }-Qunused-arguments"
dnl This hack turns off assertions by default, assuming
dnl that configure still uses this shell variable. Without
[MD5FMT="missing"])
AC_SUBST([MD5FMT])
-dnl ----------------------------------------------
-dnl check for lclint, and lint if it doesn't exist
-dnl ----------------------------------------------
-AC_CHECK_PROG([linttmp1], [lclint], [lclint], [no])dnl
-AS_IF([test x$ac_cv_prog_linttmp1 != xno],
- [LINT=$ac_cv_prog_linttmp1
- LINTFLAGS="-weak +posixlib -macrovarprefixexclude"],
- [AC_CHECK_PROG([linttmp2], [lint], [lint], [no])dnl
- AS_IF([test x$ac_cv_prog_linttmp2 != xno],
- [LINT=$ac_cv_prog_linttmp2
- LINTFLAGS=""],
- [LINT="echo 'No lint program found'"
- LINTFLAGS=""])])
-AC_SUBST([LINT])dnl
-AC_SUBST([LINTFLAGS])dnl
-
dnl Look for `ls'
pathtmp=/usr/xpg4/bin:/usr/bin:/bin:/usr/local/bin:/usr/ucb
AC_PATH_PROG([lspath], [ls], [no], [$pathtmp])
dnl we need to #define MAILGROUP to 1 and make inc setgid.
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,1,
+ 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
[nmh_cv_ls_mail_grp=`$lspath -dL $nmh_cv_ls_grpopt $mailspool|$AWK '{print $4}'`
])
MAIL_SPOOL_GRP=$nmh_cv_ls_mail_grp
-AC_SUBST(MAIL_SPOOL_GRP)dnl
+AC_SUBST([MAIL_SPOOL_GRP])dnl
+
+NMH_MIMETYPEPROC
+NMH_MIMEENCODINGPROC
dnl ------------------
dnl CHECK HEADER FILES
AS_CASE(["$host_os"],
[linux*],
[# Like DEFS, but doesn't get stomped on by configure when using config.h:
- AS_IF([test -z "$CPPFLAGS"],[CPPFLAGS="-D_GNU_SOURCE"],
- [CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"])])
+ CPPFLAGS="${CPPFLAGS:+$CPPFLAGS }-D_GNU_SOURCE"])
AC_HEADER_TIOCGWINSZ
-AC_CHECK_HEADERS([fcntl.h ncurses/termcap.h termcap.h langinfo.h \
- wchar.h wctype.h sys/param.h sys/time.h sys/stream.h])
+AC_CHECK_HEADERS([fcntl.h wchar.h wctype.h sys/param.h sys/time.h sys/stream.h])
AC_CHECK_HEADER([sys/ptem.h], AC_DEFINE(WINSIZE_IN_PTEM,1,
[Define to 1 if `struct winsize' requires <sys/ptem.h>.]),,
dnl ---------------
dnl CHECK FUNCTIONS
dnl ---------------
-AC_CHECK_FUNCS([wcwidth mbtowc writev lstat nl_langinfo getutxent arc4random])
+AC_CHECK_FUNCS([wcwidth mbtowc getutxent arc4random mkstemps])
dnl Check for multibyte character set support
AS_IF([test "x$ac_cv_header_wchar_h" = "xyes" -a \
dnl -------------------
dnl CHECK FOR LIBRARIES
dnl -------------------
-dnl Check location of modf
-AC_CHECK_FUNC([modf], , AC_CHECK_LIB([m], [modf]))
-
dnl Checks for network libraries (nsl, socket)
NMH_CHECK_NETLIBS
-dnl Check for readline support
-NMH_READLINE
-
dnl Check the locking functions supported and what we should use by default
NMH_LOCKING
dnl Check for iconv
NMH_CHECK_ICONV
+dnl Check for tputs() callback argument
+NMH_TPUTS_PUTC_ARG
+
termcap_curses_order="termcap curses ncurses"
for lib in $termcap_curses_order; do
- AC_CHECK_LIB(${lib}, tgetent, [TERMLIB="-l$lib"; break])
+ AC_CHECK_LIB([${lib}], [setupterm], [TERMLIB="-l$lib"; break])
done
AC_SUBST([TERMLIB])dnl
AS_IF([test "x$TERMLIB" = "x"],
- [AC_MSG_FAILURE([Could not find tgetent in any library. Is there a curses
-or ncurses library or package that you can install?])])
+ [AC_MSG_FAILURE([Could not find setupterm in any library. Is there a
+curses or ncurses library or package that you can install?])])
+
+dnl Check for readline support
+NMH_READLINE
dnl --------------
dnl CHECK FOR NDBM
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:
+ dnl Berkeley DBv2 emulating ndbm: header in db.h, e.g., 32-bit Cygwin:
NMH_CHECK_NDBM(db.h,db,,
dnl Berkeley DBv1 emulating ndbm:
NMH_CHECK_NDBM(ndbm.h,db,,
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))))))))))
-
+ dnl 64-bit Cygwin:
+ NMH_CHECK_NDBM(ndbm.h,gdbm_compat -lgdbm,,
+ dnl On Linux, libgdbm_compat.so loads libgdbm.so as well, so it doesn't
+ dnl need to be explicit:
+ NMH_CHECK_NDBM(gdbm-ndbm.h,gdbm_compat)))))))))))
fi
else
dnl We don't really need to check that the user-specified values work,
dnl -----------------
AS_IF([test x"$tls_support" = x"yes"],[
+ dnl OpenBSD 5 needs the other-libraries (fourth argument) to the
+ dnl AC_CHECK_LIB for SSL_library_init, because it doesn't
+ dnl automatically append -lcrypto when linking with -lssl.
AC_CHECK_HEADER([openssl/ssl.h], , [AC_MSG_ERROR([openssl/ssl.h not found])])
AC_CHECK_LIB([crypto], [BIO_write], [TLSLIB="-lcrypto"],
[AC_MSG_ERROR([OpenSSL crypto library not found])])
AC_CHECK_LIB([ssl], [SSL_library_init], [TLSLIB="-lssl $TLSLIB"],
- [AC_MSG_ERROR([OpenSSL library not found])])],
+ [AC_MSG_ERROR([OpenSSL library not found])],[$TLSLIB])],
[TLSLIB=])
AC_SUBST([TLSLIB])
-dnl ---------------------
-dnl CHECK TERMCAP LIBRARY
-dnl ---------------------
-
-dnl Add the termcap library, so that the following configure
-dnl tests will find it when it tries to link test programs.
-nmh_save_LIBS="$LIBS"
-LIBS="$TERMLIB $LIBS"
-
-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.
-LIBS="$nmh_save_LIBS"
-
dnl ----------------
dnl CHECK FLEX FIXUP
dnl ----------------
dnl Use LFLAGS make variable setting to work around bugs in flex
-dnl 2.5.35-37 that cause signed/unsigned mismatch,
+dnl 2.5.36-37 that cause signed/unsigned mismatch,
dnl http://sourceforge.net/p/flex/bugs/140/
AS_IF([test "$LEX" = flex],
[AS_CASE([`$LEX -V`],
[flex\ 2.5.35], [LFLAGS=\
-'; printf "%s\n" '\''1,$$s/(size_t) \(num_to_read\)/\1/'\'' w q | ed -s $@'],
- [flex\ 2.5.3@<:@67@:>@], [LFLAGS=\
-'; printf "%s\n" '\''1,$$s/\( \)int i;/\1yy_size_t i;/'\'' w q | ed -s $@'])
+'; sed "s/ int n;/ size_t n;/" $@ >$@.tmp && mv -f $@.tmp $@'],
+ [flex\ 2.5.3[[67]]], [LFLAGS=\
+'; sed "s/\( \)int i;/\1yy_size_t i;/" $@ >$@.tmp && mv -f $@.tmp $@'])
AC_SUBST([LFLAGS])])
-dnl --------------
-dnl CHECK TYPEDEFS
-dnl --------------
-AC_TYPE_PID_T
-AC_TYPE_OFF_T
-AC_TYPE_UID_T
-AC_TYPE_MODE_T
-AC_TYPE_SIZE_T
+dnl ------------------
+dnl FOR INTERNAL USE by the NMH test suite
+dnl ------------------
+AC_ARG_VAR([NMHETCDIRINST], [for internal use by nmh test suite])
+AS_IF([test -n "$NMHETCDIRINST"], [nmhetcdirinst=$NMHETCDIRINST]
+ AC_SUBST([nmhetcdirinst]))
dnl ----------------
dnl CHECK STRUCTURES
dnl
AC_CONFIG_COMMANDS([build-directories],
-[test -d etc || AS_MKDIR_P([etc])
-test -d man || AS_MKDIR_P([man])])
+[test -d man || AS_MKDIR_P([man])])
AC_CONFIG_COMMANDS_POST([
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 "nmhlibexec=${libexecdir}"; eval "nmhlibexec=${nmhlibexec}"
eval "nmhman=${mandir}"; eval "nmhman=${nmhman}"
eval "nmhrpm=${nmhrpm}";
preprocessor flags : ${CPPFLAGS}
source code location : ${srcdir}
binary install path : ${nmhbin}
-library install path : ${nmhlib}
-config files install path : ${nmhsysconf}
+libexec install path : ${nmhlibexec}/nmh
+config files install path : ${nmhsysconf}/nmh
man page install path : ${nmhman}
RPM build root : ${nmhrpm}
backup prefix : ${backup_prefix}