-dnl
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 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])
-
-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]))
+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"no"],[
- AC_DEFINE([TLS_SUPPORT], [1], [Support TLS for session encryption.])dnl
- tls_support=yes],[tls_support=no])
+
+dnl Do you want client-side support for using OAuth2 for SMTP & POP auth?
+AC_ARG_WITH([oauth], AS_HELP_STRING([--with-oauth],
+ [Enable OAuth2 support in SMTP and POP auth]))
dnl Set the backup prefix
AC_ARG_WITH([hash-backup],
[MTS="smtp"])
AC_SUBST([MTS])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 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
AC_PROG_CC([cc gcc])
AM_PROG_CC_C_O
+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=\
+ [cc:*\ Sun\ C*], [CFLAGS=\
"${CFLAGS:+$CFLAGS }-v -errtags=yes -erroff=E_STATEMENT_NOT_REACHED"])
fi
AC_CACHE_CHECK([whether compiler supports -Wall], [nmh_cv_has_wall],
[nmh_saved_cflags="$CFLAGS"
- CFLAGS="$CFLAGS -Wall -Werror"
+ 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 -Werror"
+ 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"
-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
+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
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
[AS_IF([test "$GCC" = yes && `${CC} --version 2>&1 | \
grep clang >/dev/null`],
[nmh_saved_ldflags="$LDFLAGS"
- LDFLAGS="$LDFLAGS -Qunused-arguments"
+ 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" && \
- LDFLAGS="${LDFLAGS:+$LDFLAGS }-Qunused-arguments"
-
-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
+ AM_LDFLAGS="${AM_LDFLAGS:+$AM_LDFLAGS }-Qunused-arguments"
+AC_SUBST([AM_LDFLAGS])
AC_HEADER_ASSERT
AC_PATH_PROG([sendmailpath], [sendmail], [/usr/sbin/sendmail], [$pathtmp])
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],
[LN=ln])
NMH_MIMETYPEPROC
NMH_MIMEENCODINGPROC
-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.
-
-AS_CASE(["$host_os"],
- [linux*],
- [# Like DEFS, but doesn't get stomped on by configure when using config.h:
- CPPFLAGS="${CPPFLAGS:+$CPPFLAGS }-D_GNU_SOURCE"])
-
-AC_HEADER_TIOCGWINSZ
-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>.]),,
-[[#if HAVE_SYS_STREAM_H
-# include <sys/stream.h>
-#endif
-]])
-
-dnl ---------------
-dnl CHECK FUNCTIONS
-dnl ---------------
-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 \
- "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 CHECK FOR LIBRARIES
dnl -------------------
dnl Check for tputs() callback argument
NMH_TPUTS_PUTC_ARG
-termcap_curses_order="termcap curses ncurses"
+termcap_curses_order="termcap tinfo curses ncurses"
for lib in $termcap_curses_order; do
AC_CHECK_LIB([${lib}], [setupterm], [TERMLIB="-l$lib"; break])
done
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"],[
- dnl OpenBSD 5 needs the other-libraries (fourth argument) to the
- dnl AC_CHECK_LIB for SSL_library_init, because it doesn't
+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], , [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])],[$TLSLIB])],
- [TLSLIB=])
+ 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 -----------------
+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 FOR CURL
dnl -----------------
AC_PATH_PROG([curl_config], [curl-config])
AS_IF([test "x$with_oauth" != xno && test -n "$curl_config"], [
save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS `$curl_config --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], [
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])
- echo "HEYEPG ($CURL_USER_AGENT)"
AC_SUBST([CURL_USER_AGENT])
])
- ], [
- CFLAGS="$save_CFLAGS"
])
+ CFLAGS="$save_CFLAGS"
])
dnl -----------------
dnl ----------------
dnl CHECK FLEX FIXUP
dnl ----------------
-dnl Use LFLAGS make variable setting to work around bugs in flex
+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], [LFLAGS=\
-'; 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])])
+ [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/; \
+ s/int n; \\/yy_size_t n; \\/'\'' $@ >$@.tmp && mv -f $@.tmp $@;'])
+ AC_SUBST([AM_LFLAGS])])
dnl ------------------
dnl FOR INTERNAL USE by the NMH test suite
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 man || AS_MKDIR_P([man])])
+[AS_MKDIR_P([etc]); AS_MKDIR_P([man])])
AC_CONFIG_COMMANDS_POST([
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}
libexec install path : ${nmhlibexec}/nmh
backup prefix : ${backup_prefix}
transport system : ${MTS}
spool default locking type : ${with_locking}
-default smtp servers : ${smtpservers}
+default smtp server : ${smtpserver}
SASL support : ${sasl_support}
TLS support : ${tls_support}
OAuth support : ${oauth_support}