]> diplodocus.org Git - nmh/blobdiff - configure.ac
sbr/utils.c: Add HasSuffix(s, suffix).
[nmh] / configure.ac
index ecba13952840c0eda834020f6f9b73ddbe14944b..9a8b997718d21248193d1638cceed334243eff75 100644 (file)
@@ -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,10 +23,6 @@ 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],
@@ -40,6 +35,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 +87,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 <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"
 
+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 +167,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 +209,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 +272,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 +348,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 <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 -------------------
@@ -470,29 +470,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 +585,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 +601,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 ---------------