X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/5776f9b783afe8e6bdbe430adb5d5b9435d25b19..4b2ba897bbf4c545b33e42bd1e06bee26e665dc4:/configure.ac?ds=sidebyside diff --git a/configure.ac b/configure.ac index ecba1395..4ed79bbc 100644 --- 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]) @@ -40,6 +39,10 @@ AS_IF([test x"$with_cyrus_sasl" != x -a x"$with_cyrus_sasl" != x"no"],[ 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])) + 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"],[ @@ -88,35 +91,79 @@ dnl ------------------ 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 .]),, +[[#if HAVE_SYS_STREAM_H +# include +#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" +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 dnl Do this regardless of auto_cflags value. dnl Enable _FORTIFY_SOURCE checking, which is supported by @@ -124,9 +171,9 @@ if test "$GCC" = yes; then 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. + dnl -D_FORTIFY_SOURCE from AM_CPPFLAGS because it requires optimization. AS_CASE([$CFLAGS], - [-O*|*' -O'*],[CPPFLAGS="${CPPFLAGS:+$CPPFLAGS }-D_FORTIFY_SOURCE=2"]) + [-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. @@ -166,13 +213,13 @@ 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" dnl This hack turns off assertions by default, assuming dnl that configure still uses this shell variable. Without @@ -229,7 +276,9 @@ pathtmp=/usr/sbin:/usr/lib:/usr/etc:/usr/ucblib:/usr/bin:/bin 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]) @@ -303,51 +352,6 @@ AC_SUBST([MAIL_SPOOL_GRP])dnl 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 .]),, -[[#if HAVE_SYS_STREAM_H -# include -#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 ------------------- @@ -470,29 +474,70 @@ 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 + 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_CHECK_LIB([ssl], [SSL_new], [TLSLIB="-lssl $TLSLIB"], [AC_MSG_ERROR([OpenSSL library not found])],[$TLSLIB])], [TLSLIB=]) AC_SUBST([TLSLIB]) +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 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/ AS_IF([test "$LEX" = flex], [AS_CASE([`$LEX -V`], - [flex\ 2.5.35], [LFLAGS=\ + [flex\ 2.5.35], [AM_LFLAGS=\ '; sed "s/ int n;/ size_t n;/" $@ >$@.tmp && mv -f $@.tmp $@'], - [flex\ 2.5.3[[67]]], [LFLAGS=\ + [flex\ 2.5.3[[67]]], [AM_LFLAGS=\ '; sed "s/\( \)int i;/\1yy_size_t i;/" $@ >$@.tmp && mv -f $@.tmp $@']) - AC_SUBST([LFLAGS])]) + AC_SUBST([AM_LFLAGS])]) dnl ------------------ dnl FOR INTERNAL USE by the NMH test suite @@ -544,9 +589,9 @@ nmh configuration 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 @@ -560,6 +605,7 @@ spool default locking type : ${with_locking} default smtp servers : ${smtpservers} SASL support : ${sasl_support} TLS support : ${tls_support} +OAuth support : ${oauth_support} ])])dnl dnl ---------------