X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/c8f33b7de6ac503f084e38647396d634916cbad3..9322ba2854211794c27fae9468768b80b767c211:/configure.ac?ds=sidebyside diff --git a/configure.ac b/configure.ac old mode 100755 new mode 100644 index 44a71c89..d1a755ca --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,6 @@ 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]) @@ -24,32 +23,22 @@ 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]) +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])) 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 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 Set the backup prefix AC_ARG_WITH([hash-backup], AS_HELP_STRING([--with-hash-backup],[use # as the backup prefix (default: ,)])) @@ -70,13 +59,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 @@ -97,7 +86,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 .]),, @@ -111,6 +101,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 ----------------------- @@ -135,25 +129,27 @@ 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*], [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" +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 @@ -166,8 +162,10 @@ if test "$GCC" = yes; then 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'*],[AM_CPPFLAGS="${AM_CPPFLAGS:+$AM_CPPFLAGS }-D_FORTIFY_SOURCE=2"]) + [-O|*\ -O|-O[[!0]]*|*\ -O[[!0]]*], + [AM_CPPFLAGS="${AM_CPPFLAGS:+$AM_CPPFLAGS }-D_FORTIFY_SOURCE=2"]) fi dnl FreeBSD needs a bit of magic to bring getline() into scope. @@ -207,13 +205,14 @@ AC_CACHE_CHECK([whether linker supports -Qunused-arguments], [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" + 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 @@ -456,28 +455,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 - 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 ----------------- @@ -522,15 +560,21 @@ AS_IF([test "x$with_oauth" = xyes && test "x$HAVE_CURL_H" = x], 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 $@']) +'; 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/'\'' $@ >$@.tmp && mv -f $@.tmp $@']) AC_SUBST([AM_LFLAGS])]) dnl ------------------ @@ -547,7 +591,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 @@ -583,8 +632,8 @@ nmh configuration nmh version : AC_PACKAGE_VERSION host os : ${host} compiler : ${CC} -compiler flags : ${CFLAGS} -linker flags : ${LDFLAGS} +compiler flags : ${AM_CFLAGS} ${CFLAGS} +linker flags : ${AM_LDFLAGS} ${LDFLAGS} preprocessor flags : ${AM_CPPFLAGS} ${CPPFLAGS} source code location : ${srcdir} binary install path : ${nmhbin} @@ -596,7 +645,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}