X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/4eafd6246d1a39c32cbdf074af65b198506d2030..cae263b3cec6548fa9c752df0103308740c25e39:/configure.ac?ds=sidebyside diff --git a/configure.ac b/configure.ac index c778a150..1f8dc6c8 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,3 @@ -dnl dnl configure.ac -- autoconf template for nmh dnl @@ -12,7 +11,7 @@ AM_INIT_AUTOMAKE([-Wall foreign serial-tests subdir-objects 1.12]) AC_CANONICAL_HOST AC_MSG_NOTICE([configuring for AC_PACKAGE_NAME-AC_PACKAGE_VERSION]) -AC_SUBST(VERSION,AC_PACKAGE_VERSION)dnl +AC_SUBST([VERSION], [AC_PACKAGE_VERSION])dnl dnl What date of nmh are we building? DATE=`cat ${srcdir}/DATE` @@ -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,7 +128,7 @@ 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 @@ -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,14 +543,35 @@ 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 ------------------ +dnl By default we put backend executables in $(libexecdir)/nmh and +dnl configuration files in $(sysconfdir)/nmh, but let a user override +dnl these choices by supplying these variables +dnl ------------------ + +AC_ARG_VAR([nmhlibexecdir], [The installation directory for backend programs +used by nmh. Defaults to $(libexecdir)/nmh.]) +AS_IF([test -z ${nmhlibexecdir+x}], [nmhlibexecdir='${libexecdir}/nmh']) + +AC_ARG_VAR([nmhetcdir], [The installation directory for configuration files +used by nmh. Defaults to $(sysconfdir)/nmh.]) +AS_IF([test -z ${nmhetcdir+x}], [nmhetcdir='${sysconfdir}/nmh']) + dnl ------------------ dnl FOR INTERNAL USE by the NMH test suite dnl ------------------ @@ -548,7 +586,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 +603,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([ @@ -572,8 +615,9 @@ dnl We only use the expanded versions to print the install paths in 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 "nmhlibexec=${nmhlibexecdir}"; eval "nmhlibexec=${nmhlibexec}" +eval "nmhlibexec=${nmhlibexec}" +eval "nmhsysconf=${nmhetcdir}"; eval "nmhsysconf=${nmhsysconf}" eval "nmhman=${mandir}"; eval "nmhman=${nmhman}" eval "nmhdoc=${docdir}"; eval "nmhdoc=${nmhdoc}" eval "nmhrpm=${nmhrpm}"; @@ -589,15 +633,15 @@ linker flags : ${AM_LDFLAGS} ${LDFLAGS} preprocessor flags : ${AM_CPPFLAGS} ${CPPFLAGS} source code location : ${srcdir} binary install path : ${nmhbin} -libexec install path : ${nmhlibexec}/nmh -config files install path : ${nmhsysconf}/nmh +libexec install path : ${nmhlibexec} +config files install path : ${nmhsysconf} man page install path : ${nmhman} docs install path : ${nmhdoc} 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}