X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/aaf014c77a4fb19bdc33370f5b6af5b8497decf8..04ee0c3f6ad7e4177cc43a0c57f046013a4fbac9:/configure.ac diff --git a/configure.ac b/configure.ac index d3fa76ec..eb94a5ff 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,3 @@ -dnl dnl configure.ac -- autoconf template for nmh dnl @@ -23,31 +22,21 @@ dnl -------------------------- 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], @@ -69,13 +58,13 @@ AS_IF([test x"$with_mts" = x"smtp"], [MTS="smtp"], [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 @@ -96,7 +85,8 @@ dnl CHECK HEADER FILES dnl ------------------ AC_HEADER_TIOCGWINSZ -AC_CHECK_HEADERS([fcntl.h wchar.h wctype.h sys/param.h sys/time.h sys/stream.h]) +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 .]),, @@ -110,6 +100,10 @@ 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 ----------------------- @@ -134,8 +128,8 @@ if test "$GCC" != yes; then 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*], [AM_CFLAGS=\ -"${AM_CFLAGS:+$AM_CFLAGS }-v -errtags=yes -erroff=E_STATEMENT_NOT_REACHED"]) + [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], @@ -143,7 +137,7 @@ AC_CACHE_CHECK([whether compiler supports -Wall], [nmh_cv_has_wall], 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" && AM_CFLAGS="${AM_CFLAGS:+$AM_CFLAGS }-Wall" +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" @@ -151,7 +145,7 @@ AC_CACHE_CHECK([whether compiler supports -Wextra], [nmh_cv_has_wextra], AC_TRY_COMPILE([],[],nmh_cv_has_wextra=yes, nmh_cv_has_wextra=no) CFLAGS="$nmh_saved_cflags"]) -test "$nmh_cv_has_wextra" = "yes" && AM_CFLAGS="${AM_CFLAGS:+$AM_CFLAGS }-Wextra" +test "$nmh_cv_has_wextra" = "yes" && CFLAGS="${CFLAGS:+$CFLAGS }-Wextra" AC_SUBST([AM_CFLAGS]) @@ -159,18 +153,6 @@ 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 - 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. - AS_CASE([$CFLAGS], - [-O*|*' -O'*],[AM_CPPFLAGS="${AM_CPPFLAGS:+$AM_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 is pulled in. @@ -215,11 +197,7 @@ AC_CACHE_CHECK([whether linker supports -Qunused-arguments], [nmh_cv_has_q_unused_arguments=no])]) test "$nmh_cv_has_q_unused_arguments" = "yes" && \ AM_LDFLAGS="${AM_LDFLAGS:+$AM_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 +AC_SUBST([AM_LDFLAGS]) AC_HEADER_ASSERT @@ -362,7 +340,7 @@ NMH_CHECK_ICONV 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 @@ -457,28 +435,67 @@ dnl -------------------- 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 +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_new], [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 ----------------- @@ -526,12 +543,19 @@ dnl ---------------- 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 $@'], +'; 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 $@']) +'; 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 '\''/\/s/int/size_t/; \ + s/\/int i/; \ + s/int n; \\/yy_size_t n; \\/'\'' $@ >$@.tmp && mv -f $@.tmp $@;']) AC_SUBST([AM_LFLAGS])]) dnl ------------------ @@ -548,7 +572,12 @@ dnl ---------------- 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 ]) +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 ]]) +CPPFLAGS="$nmh_saved_CPPFLAGS" AC_STRUCT_DIRENT_D_TYPE @@ -560,7 +589,7 @@ dnl exist. 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([ @@ -597,7 +626,7 @@ RPM build root : ${nmhrpm} 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}