dnl configure.ac -- autoconf template for nmh
dnl
-dnl Move this up a bit
AC_PREREQ([2.68])
AC_INIT([nmh], m4_normalize(m4_include([VERSION])), [nmh-workers@nongnu.org])
dnl CHECK COMMAND LINE OPTIONS
dnl --------------------------
-dnl Do you want to debug nmh?
-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],
[Enable SASL support via the Cyrus SASL library]))
-AS_IF([test x"$with_cyrus_sasl" != x -a x"$with_cyrus_sasl" != x"no"],[
- AC_DEFINE([CYRUS_SASL], [1],
- [Define to use the Cyrus SASL library for authentication of POP and SMTP.])dnl
- AS_IF([test x"$with_cyrus_sasl" != xyes],[
- AC_MSG_WARN([Arguments to --with-cyrus-sasl now ignored])
- AC_MSG_WARN([Please pass the appropriate arguments to CPPFLAGS/LDFLAGS])])
- sasl_support=yes], [sasl_support=no])
+AS_IF([test x"$with_cyrus_sasl" != x -a x"$with_cyrus_sasl" != xyes -a \
+ x"$with_cyrus_sasl" != xno],[
+ AC_MSG_WARN([Arguments to --with-cyrus-sasl now ignored])
+ AC_MSG_WARN([Please pass the appropriate arguments to CPPFLAGS/LDFLAGS])])
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"],[
- AC_DEFINE([TLS_SUPPORT], [1], [Support TLS for session encryption.])dnl
- tls_support=yes],[tls_support=no])
-dnl What should be the default editor?
-AC_ARG_WITH([editor],
- AS_HELP_STRING([--with-editor=EDITOR],[specify the default editor]))
-
-AS_IF([test -n "$with_editor"], [editorpath="$with_editor"])
+dnl Do you want client-side support for using OAuth2 for SMTP authentication?
+AC_ARG_WITH([oauth], AS_HELP_STRING([--with-oauth],
+ [Enable OAuth2 support in SMTP auth]))
dnl Set the backup prefix
AC_ARG_WITH([hash-backup],
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 What method of locking to use?
-AS_CASE(["$host_os"],
- [aix*|cygwin*|linux*],
- [default_locktype="fcntl"; default_locking=FCNTL_LOCKING],
- [freebsd*|openbsd*|darwin*], [default_locktype="flock"; default_locking=FLOCK_LOCKING],
- [default_locktype="dot"; default_locking=DOT_LOCKING])
-
-AC_ARG_WITH([locking],
- AS_HELP_STRING([--with-locking=@<:@dot|fcntl|flock|lockf@:>@],
- [specify the file locking method]))
-
-AS_IF([test x"$with_locking" = x"dot"],
- [LOCKTYPE="dot"
- AC_DEFINE([DOT_LOCKING], [1], [Define to use dot based file locking.])],
- [test x"$with_locking" = x"flock"],
- [LOCKTYPE="flock"
- AC_DEFINE([FLOCK_LOCKING], [1], [Define to use flock() based locking.])],
- [test x"$with_locking" = x"lockf"],
- [LOCKTYPE="lockf"
- AC_DEFINE([LOCKF_LOCKING], [1], [Define to use lockf() based locking.])],
- [test x"$with_locking" = x"fcntl"],
- [LOCKTYPE="fcntl"
- AC_DEFINE([FCNTL_LOCKING], [1], [Define to use fnctl() based locking.])],
- [LOCKTYPE="$default_locktype"
- AC_DEFINE_UNQUOTED([$default_locking], [1])])
-
-dnl Should we use a locking directory?
-AC_ARG_ENABLE([lockdir],
- [AS_HELP_STRING([--enable-lockdir=dir], [Store dot-lock files in "dir"])], [
- AS_IF([test "x$enableval" = xyes],[
- AC_MSG_ERROR([--enable-lockdir requires an argument])])
- AS_IF([test "x$LOCKTYPE" != xdot],[
- AC_MSG_ERROR([Can only use --enable-lockdir with dot locking])])
- AC_DEFINE_UNQUOTED([LOCKDIR], ["$enableval"],
- [Directory to store dot-locking lock files])
-])
-
dnl What method of posting should post use?
AC_ARG_WITH([mts],
AS_HELP_STRING([--with-mts=@<:@smtp|sendmail/smtp|sendmail/pipe@:>@],
[MTS="smtp"])
AC_SUBST([MTS])dnl
-dnl What should be the default pager?
-AC_ARG_WITH([pager],
- AS_HELP_STRING([--with-pager=PAGER],[specify the default pager]))
-
-AS_IF([test -n "$with_pager"], [pagerpath="$with_pager"])
-
-dnl If a pager is not explicitly specified, then look for one.
-dnl Fall back to `cat', to avoid catastrophic failure of
-dnl `mhshow', et al., if pagerpath is set to `no'.
-AS_IF([test -z "$pagerpath"],
- [pathtmp=/usr/bin:/bin:/usr/ucb:/usr/local/bin
- AC_PATH_PROGS([pagerpath], [more less most cat], [no], [$pathtmp])])
-AC_SUBST([pagerpath])dnl
-
-dnl What should be the default mail server(s)?
-AC_ARG_WITH([smtpservers],
- [AS_HELP_STRING([--with-smtpservers='SMTPSERVER1@<:@ SMTPSERVER2...@:>@'],
- [specify the default SMTP server(s) @<:@localhost@:>@])])
-AS_IF([test -n "$with_smtpservers"], [smtpservers="$with_smtpservers"],
- [smtpservers="localhost"])
-AC_SUBST([smtpservers])dnl
-
-dnl ----------------------------------------------------
-dnl Default location is /usr/local/nmh/{bin,etc,lib,man}
-dnl ----------------------------------------------------
+dnl What should be the default mail server?
+AC_ARG_WITH([smtpserver],
+ [AS_HELP_STRING([--with-smtpserver='SMTPSERVER'],
+ [specify the default SMTP server @<:@localhost@:>@])])
+AS_IF([test -n "$with_smtpserver"], [smtpserver="$with_smtpserver"],
+ [smtpserver="localhost"])
+AC_SUBST([smtpserver])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
dnl ------------------
-dnl We want these before the checks,
-dnl so the checks can modify their values.
-test -z "$CFLAGS" && CFLAGS= auto_cflags=1
-if test x"$enable_debug" = x"yes"; then
- test -z "$LDFLAGS" && LDFLAGS=-g
-fi
-AC_PROG_CC
+AC_PROG_CC([cc gcc])
AM_PROG_CC_C_O
-AC_CACHE_CHECK([whether preprocessor supports -Wunused-macros],
- [nmh_cv_has_unusedmacros],
- [nmh_saved_cppflags="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS -Wunused-macros -Wno-unused-macros"
- AC_TRY_COMPILE([],[],nmh_cv_has_unusedmacros=yes,nmh_cv_has_unusedmacros=no)
- CPPFLAGS="$nmh_saved_cppflags"])
-
-if test "$nmh_cv_has_unusedmacros" = 'yes'; then
- test -z "$CPPFLAGS" && CPPFLAGS=-Wunused-macros \
- || CPPFLAGS="$CPPFLAGS -Wunused-macros"
- DISABLE_UNUSED_MACROS_WARNING=-Wno-unused-macros
-fi
-AC_SUBST([DISABLE_UNUSED_MACROS_WARNING])dnl
-
-AC_CACHE_CHECK([whether compiler supports -Wno-sign-compare],
- [nmh_cv_has_nosigncompare],
- [nmh_saved_cppflags="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS -Wno-sign-compare"
- AC_TRY_COMPILE([],[],nmh_cv_has_nosigncompare=yes,
- nmh_cv_has_nosigncompare=no)
- CPPFLAGS="$nmh_saved_cppflags"])
-
-if test "$nmh_cv_has_nosigncompare" = 'yes'; then
- DISABLE_SIGN_COMPARE_WARNING=-Wno-sign-compare
+dnl ------------------
+dnl CHECK HEADER FILES
+dnl ------------------
+
+AC_HEADER_TIOCGWINSZ
+AC_CHECK_HEADERS([fcntl.h stdbool.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>.]),,
+[[#if HAVE_SYS_STREAM_H
+# include <sys/stream.h>
+#endif
+]])
+
+dnl ---------------
+dnl CHECK FUNCTIONS
+dnl ---------------
+AC_CHECK_FUNCS([wcwidth mbtowc getutxent arc4random mkstemps])
+
+dnl Use custom getline for platforms that don't have it.
+AC_CONFIG_LIBOBJ_DIR([sbr])
+AC_REPLACE_FUNCS([getline])
+
+dnl -----------------------
+dnl CHECK MULTIBYTE SUPPORT
+dnl -----------------------
+AS_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"],
+ [AC_DEFINE([MULTIBYTE_SUPPORT], [1],
+ [Define to enable support for multibyte character sets.])
+ MULTIBYTE_ENABLED=1],
+ [MULTIBYTE_ENABLED=0])
+AC_SUBST([MULTIBYTE_ENABLED])
+
+dnl ----------------
+dnl CUSTOMIZE CFLAGS
+dnl ----------------
+dnl The user didn't specify CFLAGS, so customize them.
+
+if test "$GCC" != yes; then
+ dnl Use -v and some other options with SunStudio cc. lex produces
+ dnl code that causes unreachable-statement warnings. It might be
+ dnl better to use an autoconf test, except -v will probably succeed
+ dnl with many other compilers but have different meaning.
+ AS_CASE([`${CC} -V 2>&1`],
+ [cc:*\ Sun\ C*], [CFLAGS=\
+"${CFLAGS:+$CFLAGS }-v -errtags=yes -erroff=E_STATEMENT_NOT_REACHED"])
fi
-AC_SUBST([DISABLE_SIGN_COMPARE_WARNING])dnl
+
+AC_CACHE_CHECK([whether compiler supports -Wall], [nmh_cv_has_wall],
+ [nmh_saved_cflags="$CFLAGS"
+ CFLAGS="$AM_CFLAGS $CFLAGS -Wall -Werror"
+ AC_TRY_COMPILE([],[],nmh_cv_has_wall=yes,nmh_cv_has_wall=no)
+ CFLAGS="$nmh_saved_cflags"])
+test "$nmh_cv_has_wall" = "yes" && CFLAGS="${CFLAGS:+$CFLAGS }-Wall"
AC_CACHE_CHECK([whether compiler supports -Wextra], [nmh_cv_has_wextra],
-[nmh_saved_cflags="$CFLAGS"
- CFLAGS="$CFLAGS -Wextra -Wno-clobbered"
- AC_TRY_COMPILE([],[],nmh_cv_has_wextra=yes,nmh_cv_has_wextra=no)
- CFLAGS="$nmh_saved_cflags"])
-
-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 Can't use -ansi with gcc 4.5.3 on Cygwin, at least through setup
-dnl setup version 2.763, because it disables some features in the
-dnl system system header files and warns about them with -Wall. Try
-dnl to test for that generally, though still with gcc.
+ [nmh_saved_cflags="$CFLAGS"
+ CFLAGS="$AM_CFLAGS $CFLAGS -Wextra -Werror"
+ AC_TRY_COMPILE([],[],nmh_cv_has_wextra=yes,
+ nmh_cv_has_wextra=no)
+ CFLAGS="$nmh_saved_cflags"])
+test "$nmh_cv_has_wextra" = "yes" && CFLAGS="${CFLAGS:+$CFLAGS }-Wextra"
+
+AC_SUBST([AM_CFLAGS])
+
+dnl Check for any platform-specific additional AM_CPPFLAGS. This depends on
+dnl MULTIBYTE_ENABLED having already been set.
+NMH_ADDL_CPPFLAGS
+
if test "$GCC" = yes; then
- AC_CACHE_CHECK([whether we can use -ansi with gcc], [nmh_cv_has_dash_ansi],
- [nmh_saved_cppflags="$CPPFLAGS"
- nmh_saved_cflags="$CFLAGS"
- CPPFLAGS="-D_GNU_SOURCE"
- CFLAGS="-ansi -Wall -Werror"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <time.h>],[tzset();])],
- [nmh_cv_has_dash_ansi=yes],
- [nmh_cv_has_dash_ansi=no])
- CPPFLAGS="$nmh_saved_cppflags"
- CFLAGS="$nmh_saved_cflags"])
-else
- nmh_cv_has_dash_ansi=no
+ 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 AM_CPPFLAGS because it requires optimization.
+ dnl Use "\ " instead of ' ' or " " for compatiblity with posh.
+ AS_CASE([$CFLAGS],
+ [-O|*\ -O|-O[[!0]]*|*\ -O[[!0]]*],
+ [AM_CPPFLAGS="${AM_CPPFLAGS:+$AM_CPPFLAGS }-D_FORTIFY_SOURCE=2"])
fi
-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 and -Wextra if supported. If the compiler supports it we
-dnl also use -Wno-pointer-sign, because gcc 4 now produces a lot of new
-dnl warnings which are probably mostly spurious and which in any case we
-dnl don't want to deal with now.
-if test "$nmh_cv_has_noptrsign" = "yes"; then
- if test "$nmh_cv_has_dash_ansi" = "yes"; then
- nmh_gcc_common_flags="-ansi -pedantic -Wall"
- else
- nmh_gcc_common_flags="-Wall"
- fi
- if test "$nmh_cv_has_wextra" = "yes"; then
- nmh_gcc_warnflags="${nmh_gcc_common_flags} -Wextra -Wno-clobbered "\
-"-Wno-pointer-sign"
- else
- nmh_gcc_warnflags="${nmh_gcc_common_flags} -Wno-pointer-sign"
- fi
-else
- if test "$nmh_cv_has_wextra" = "yes"; then
- nmh_gcc_warnflags="${nmh_gcc_common_flags} -Wextra -Wno-clobbered"
- else
- nmh_gcc_warnflags="${nmh_gcc_common_flags}"
- fi
-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"
+])
-if test -n "$auto_cflags"; then
- if test x"$enable_debug" = x"yes"; then
- if test -n "$GCC"; then
- test -z "$CFLAGS" && CFLAGS="$nmh_gcc_warnflags -g" || CFLAGS="$CFLAGS $nmh_gcc_warnflags -g"
- else
- test -z "$CFLAGS" && CFLAGS=-g || CFLAGS="$CFLAGS -g"
- fi
- else
- if test -z "$LDFLAGS"; then
- case "$build_os" in
- darwin*)
- LDFLAGS=
- ;;
- *)
- LDFLAGS=-s
- ;;
- esac
- fi
- if test -n "$GCC"; then
- test -z "$CFLAGS" && CFLAGS="$nmh_gcc_warnflags -O2" || CFLAGS="$CFLAGS $nmh_gcc_warnflags -O2"
- else
- test -z "$CFLAGS" && CFLAGS=-O || CFLAGS="$CFLAGS -O"
- fi
- fi
-fi
+dnl --------------
+dnl CUSTOMIZE LINK
+dnl --------------
+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])
-AC_C_CONST dnl Does compiler support `const'.
+dnl -----------------
+dnl CUSTOMIZE LDFLAGS
+dnl -----------------
+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="$AM_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" && \
+ AM_LDFLAGS="${AM_LDFLAGS:+$AM_LDFLAGS }-Qunused-arguments"
+AC_SUBST([AM_LDFLAGS])
+
+dnl This hack turns off assertions by default, assuming
+dnl that configure still uses this shell variable. Without
+dnl it, AC_HEADER_ASSERT enables assertions by default.
+test -z "$enable_assert" && enable_assert=no
+
+AC_HEADER_ASSERT
dnl ------------------
dnl CHECK FOR PROGRAMS
dnl ------------------
-AC_PROG_MAKE_SET dnl Does make define $MAKE
-AC_PROG_INSTALL dnl Check for BSD compatible `install'
-AC_PROG_RANLIB dnl Check for `ranlib'
+AC_PROG_MAKE_SET dnl Does make define $MAKE
+AC_PROG_INSTALL dnl Check for BSD compatible `install'
+AC_PROG_RANLIB dnl Check for `ranlib'
AC_PROG_AWK dnl Check for mawk,gawk,nawk, then awk
-AC_PROG_SED dnl Check for Posix-compliant sed
+AC_PROG_SED dnl Check for Posix-compliant sed
+AC_PROG_YACC dnl Check for yacc/bison
AM_PROG_LEX dnl Check for lex/flex
AM_PROG_AR
dnl Look for `cut'
-pathtmp=/usr/bin:/bin:/usr/local/bin:/usr/xpg4/bin:/usr/ucb
+pathtmp=/usr/xpg4/bin:/usr/bin:/bin:/usr/local/bin:/usr/ucb
AC_PATH_PROG([cutpath], [cut], [no], [$pathtmp])
dnl
AC_CHECK_PROGS([MD5SUM], [md5sum md5], [missing])
AS_CASE(["${MD5SUM}"],
[md5sum], [MD5FMT="cat"],
- [md5], [[MD5FMT="${SED} -e 's/MD5 *(\(.*\)) *= \([0-9a-f]*\)/\2 \1/'"]],
+ [md5], [[MD5FMT="${SED} -e 's/MD5 *(.*) *= \([0-9a-f]*\)/\1/'"]],
[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/bin:/bin:/usr/local/bin:/usr/xpg4/bin:/usr/ucb
+pathtmp=/usr/xpg4/bin:/usr/bin:/bin:/usr/local/bin:/usr/ucb
AC_PATH_PROG([lspath], [ls], [no], [$pathtmp])
dnl See how we get ls to display the owner and the group
nmh_cv_ls_grpopt="-lg"])])])
dnl Look for `sendmail'
-pathtmp=/usr/lib:/usr/sbin:/usr/etc:/usr/ucblib:/usr/bin:/bin
+pathtmp=/usr/sbin:/usr/lib:/usr/etc:/usr/ucblib:/usr/bin:/bin
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], [/bin/vi], [$pathtmp])
-
-dnl If editor is not specified yet,
-dnl then use `vi' as the default.
-AS_IF([test -z "$editorpath"], [editorpath="$vipath"])
-AC_SUBST([editorpath])dnl
-
dnl Cygwin FAT filesystems do not support hard links. So default to
-dnl cp instead, even if running on an NTFS or other filesystem.
+dnl cp instead, even if running on an NTFS or other filesystem. (And
+dnl therefore, this cannot be made into a dynamic test, in order to
+dnl support the least common Cygwin denominator.
AS_CASE(["$host_os"],
- [cygwin*],[LN=cp],
+ [cygwin*], [LN=cp],
[LN=ln])
AC_SUBST([LN])
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"$LOCKTYPE" = x"dot" -a x"$nmh_cv_mailspool_world_writable" = x"no" -a x"$nmh_cv_dotlockfile_setgid" != x"yes" ; then
+if test x"$with_locking" = 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
-
-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.
+AC_SUBST([MAIL_SPOOL_GRP])dnl
-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"])])
-
-AC_HEADER_STDC
-AC_HEADER_TIOCGWINSZ
-AC_CHECK_HEADERS([errno.h fcntl.h crypt.h ncurses/termcap.h termcap.h \
- langinfo.h wchar.h wctype.h netdb.h \
- sys/param.h sys/time.h sys/stream.h])
-
-dnl
-dnl Checks for _IO_write_ptr. A Linuxism used by nmh on linux. We
-dnl really use a whole set of them, but this check should be
-dnl sufficient.
-dnl
-AC_CHECK_HEADER(libio.h, [
- AC_EGREP_HEADER(_IO_write_ptr, libio.h, [
- 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,1,
- [Define to 1 if `struct winsize' requires <sys/ptem.h>.]),,
-[[#if HAVE_SYS_STREAM_H
-# include <sys/stream.h>
-#endif
-]])
-
-dnl ---------------
-dnl CHECK FUNCTIONS
-dnl ---------------
-AC_CHECK_FUNCS([wcwidth mbtowc writev lstat nl_langinfo getutxent])
-
-dnl Check for multibyte character set support
-AS_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"],
- [AC_DEFINE([MULTIBYTE_SUPPORT], [1],
- [Define to enable support for multibyte character sets.])
- MULTIBYTE_ENABLED=1],
- [MULTIBYTE_ENABLED=0])
-AC_SUBST([MULTIBYTE_ENABLED])
+NMH_MIMETYPEPROC
+NMH_MIMEENCODINGPROC
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 CHECK FOR CYRUS-SASL
dnl --------------------
-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], [SASLLIB="-lsasl2"],
- [AC_MSG_ERROR([Cyrus SASL library not found])])],[SASLLIB=""])
+AS_IF([test x"$with_cyrus_sasl" != x"no"],[
+ AC_CHECK_HEADER([sasl/sasl.h], HAVE_SASL_H=1)
+ AC_CHECK_LIB([sasl2], [sasl_client_new], [SASLLIB="-lsasl2"])])
AC_SUBST([SASLLIB])
+dnl -----------------
+dnl Enable SASL?
+dnl -----------------
+dnl By default (with_cyrus_sasl=''), enable SASL if header and lib are found.
+dnl If SASL requested (--with-cyrus-sasl with_cyrus_sasl=yes), error if header or lib not found.
+dnl If SASL disabled (--without-cyrus-sasl with_cyrus_sasl=no), don't enable it.
+sasl_support=no
+CYRUS_SASL=0
+AC_SUBST([CYRUS_SASL])
+AS_IF([test "x$with_cyrus_sasl" = xyes && test "x$HAVE_SASL_H" = x],
+ [AC_MSG_ERROR([SASL requested but sasl.h not found])],
+ [test "x$with_cyrus_sasl" = xyes && test "x$SASLLIB" = x],
+ [AC_MSG_ERROR([SASL requested but Cyrus SASL library not found])],
+ [test "x$with_cyrus_sasl" != xno && test "x$HAVE_SASL_H" = x1 &&
+ test "x$SASLLIB" != x],
+ [AC_DEFINE([CYRUS_SASL], [1],
+ [Define to use the Cyrus SASL library for authentication of POP and SMTP.])
+ CYRUS_SASL=1
+ sasl_support=yes])
+
dnl -----------------
dnl CHECK FOR OPENSSL
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
-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
+AS_IF([test x"$with_tls" != x"no"],[
+ dnl OpenBSD 5 needs the other-libraries (fifth argument) to the
+ dnl AC_CHECK_LIB for SSL_new, because it doesn't
+ dnl automatically append -lcrypto when linking with -lssl.
+ AC_CHECK_HEADER([openssl/ssl.h], HAVE_SSL_H=1)
+ AC_CHECK_LIB([crypto], [BIO_write], [TLSLIB="-lcrypto"])
+ AC_CHECK_LIB([ssl], [SSL_new], [TLSLIB="-lssl $TLSLIB"], [TLSLIB=],
+ [$TLSLIB])])
+AC_SUBST([TLSLIB])
-dnl Now put the libraries back to what it was before we
-dnl starting checking the termcap library.
-LIBS="$nmh_save_LIBS"
+dnl -----------------
+dnl Enable TLS?
+dnl -----------------
+dnl By default (with_tls=''), enable TLS if header and libs were found.
+dnl If TLS requested (--with-tls with_tls=yes), error if header/lib not found.
+dnl If TLS disabled (--without-tls with_tls=no), don't enable it.
+tls_support=no
+TLS_SUPPORT=0
+AC_SUBST([TLS_SUPPORT])
+AS_IF([test "x$with_tls" = xyes && test "x$HAVE_SSL_H" = x],
+ [AC_MSG_ERROR([TLS requested but openssl/ssl.h not found])],
+ [test "x$with_tls" = xyes && test "x$TLSLIB" = x],
+ [AC_MSG_ERROR([TLS requested but crypto or ssl library not found])],
+ [test "x$with_tls" != xno && test "x$HAVE_SSL_H" = x1 && test "x$TLSLIB" != x],
+ [AC_DEFINE([TLS_SUPPORT], [1], [Support TLS for session encryption.])
+ TLS_SUPPORT=1
+ tls_support=yes
+ save_LIBS="$LIBS"
+ LIBS="$LIBS $TLSLIB"
+ AC_CHECK_FUNCS([X509_VERIFY_PARAM_set1_host])
+ LIBS="$save_LIBS"])
-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 CHECK FOR CURL
+dnl -----------------
+dnl Look for curl if oauth not disabled (--without-oauth).
+AC_PATH_PROG([curl_config], [curl-config])
+AS_IF([test "x$with_oauth" != xno && test -n "$curl_config"], [
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$AM_CPPFLAGS $AM_CFLAGS $CFLAGS `$curl_config --cflags`"
+ AC_CHECK_HEADER([curl/curl.h], [
+ HAVE_CURL_H=1
+ AC_CHECK_LIB([curl], [curl_easy_init], [
+ CURLLIB="`$curl_config --libs`"
+ AC_SUBST([CURLLIB])
+ CURL_USER_AGENT="`$curl_config --version | sed 's|^libcurl *|libcurl/|; q'`"
+ AS_IF([test "x$CURL_USER_AGENT" != "x`echo $CURL_USER_AGENT | sed 's/ //'`"],
+ [AC_MSG_WARN([unexpected curl-config --version: $CURL_USER_AGENT])
+ CURL_USER_AGENT=libcurl/UNKNOWN])
+ AC_SUBST([CURL_USER_AGENT])
+ ])
+ ])
+ CFLAGS="$save_CFLAGS"
+ ])
+
+dnl -----------------
+dnl Enable OAuth?
+dnl -----------------
+dnl By default (with_oauth=''), enable OAuth if curl is found.
+dnl If OAuth requested (--with-oauth with_oauth=yes), error if curl not found.
+dnl If OAuth disabled (--without-oauth with_oauth=no), don't enable it.
+oauth_support=no
+OAUTH_SUPPORT=0
+AC_SUBST([OAUTH_SUPPORT])
+AS_IF([test "x$with_oauth" = xyes && test "x$HAVE_CURL_H" = x],
+ [AC_MSG_ERROR([OAuth requested but curl/curl.h not found])],
+ [test "x$with_oauth" = xyes && test "x$CURLLIB" = x],
+ [AC_MSG_ERROR([OAuth requested but curl library not found])],
+ [test "x$with_oauth" != xno && test "x$HAVE_CURL_H" = x1 && test "x$CURLLIB" != x],
+ [AC_DEFINE([OAUTH_SUPPORT], [1], [Support OAuth2 in SMTP auth.])
+ OAUTH_SUPPORT=1
+ oauth_support=yes])
+
+dnl ----------------
+dnl CHECK FLEX FIXUP
+dnl ----------------
+dnl BUG: This stops $(LFLAGS) working as it comes after $(AM_FLAGS).
+dnl Use AM_LFLAGS make variable setting to work around bugs in flex
+dnl 2.5.36-37 that cause signed/unsigned mismatch,
+dnl http://sourceforge.net/p/flex/bugs/140/
+dnl 2.6.1 bug: https://github.com/westes/flex/issues/97
+AS_IF([test "$LEX" = flex],
+ [AS_CASE([`$LEX -V`],
+ [flex\ 2.5.35], [AM_LFLAGS=\
+'; sed "s/ int n;/ size_t n;/" $@ >$@.tmp && mv -f $@.tmp $@'],
+ [flex\ 2.5.3[[67]]], [AM_LFLAGS=\
+'; sed "s/\( \)int i;/\1yy_size_t i;/" $@ >$@.tmp && mv -f $@.tmp $@'],
+ [flex\ 2.6.0], [AM_LFLAGS=\
+'; sed "s/, num_to_read/, (size_t) num_to_read/" $@ >$@.tmp && mv -f $@.tmp $@'],
+ [flex\ 2.6.1], [AM_LFLAGS=\
+'; sed '\''/\<int num_to_read\>/s/int/size_t/; s/\<yy_size_t i\>/int i/'\'' $@ >$@.tmp && mv -f $@.tmp $@'])
+ AC_SUBST([AM_LFLAGS])])
+
+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 For platforms such as FreeBSD that have tm_gmtoff in struct tm.
dnl (FreeBSD has a timezone() function but not a timezone global
dnl variable that is visible).
-AC_CHECK_MEMBERS([struct tm.tm_gmtoff],,,[#include <time.h>])
+dnl On Linux, $AM_CPPFLAGS contains -D_GNU_SOURCE, which makes
+dnl tm_gmtoff visible.
+nmh_saved_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
+AC_CHECK_MEMBERS([struct tm.tm_gmtoff],,,[[#include <time.h>]])
+CPPFLAGS="$nmh_saved_CPPFLAGS"
AC_STRUCT_DIRENT_D_TYPE
-dnl Where is <signal.h> located? Needed as input for signames.awk
-AC_CACHE_CHECK(where signal.h is located, nmh_cv_path_signal_h,
-[for SIGNAL_H in /usr/include/bsd/sys/signal.h dnl Next
- /usr/include/asm/signal.h dnl Linux 1.3.0 and above
- /usr/include/asm/signum.h dnl some versions of Linux/Alpha
- /usr/include/linux/signal.h dnl Linux up to 1.2.11
- /usr/include/sys/signal.h dnl Almost everybody else
- /dev/null; dnl Just in case we fall through
-do
- test -f $SIGNAL_H && \
- grep '#[ ]*define[ ][ ]*SIG[0-9A-Z]*[ ]*[0-9][0-9]*' $SIGNAL_H > /dev/null && \
- break
-done
-nmh_cv_path_signal_h=$SIGNAL_H
-])
-SIGNAL_H=$nmh_cv_path_signal_h
-AC_SUBST(SIGNAL_H)dnl
-
dnl
dnl Sigh, this is required because under the new world order autoconf has
dnl nothing to create in a few of the build directories when doing an object
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 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 "nmhlibexec=${libexecdir}"; eval "nmhlibexec=${nmhlibexec}"
eval "nmhsysconf=${sysconfdir}"; eval "nmhsysconf=${nmhsysconf}"
-eval "nmhlib=${libdir}"; eval "nmhlib=${nmhlib}"
eval "nmhman=${mandir}"; eval "nmhman=${nmhman}"
+eval "nmhdoc=${docdir}"; eval "nmhdoc=${nmhdoc}"
eval "nmhrpm=${nmhrpm}";
AC_MSG_NOTICE([
nmh version : AC_PACKAGE_VERSION
host os : ${host}
compiler : ${CC}
-compiler flags : ${CFLAGS}
-linker flags : ${LDFLAGS}
-preprocessor flags : ${CPPFLAGS}
+compiler flags : ${AM_CFLAGS} ${CFLAGS}
+linker flags : ${AM_LDFLAGS} ${LDFLAGS}
+preprocessor flags : ${AM_CPPFLAGS} ${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}
+docs install path : ${nmhdoc}
RPM build root : ${nmhrpm}
backup prefix : ${backup_prefix}
transport system : ${MTS}
-file locking type : ${LOCKTYPE}
-default smtp servers : ${smtpservers}
-default editor : ${editorpath}
-default pager : ${pagerpath}
+spool default locking type : ${with_locking}
+default smtp server : ${smtpserver}
SASL support : ${sasl_support}
TLS support : ${tls_support}
+OAuth support : ${oauth_support}
])])dnl
dnl ---------------