]> diplodocus.org Git - nmh/blobdiff - configure.ac
Fix invalid pointer arithmetic.
[nmh] / configure.ac
index 7abb916a07fc1771ca2e857b478856bec4464ced..677a54c40235012c15f5a0185cba066233164f6a 100644 (file)
@@ -27,23 +27,17 @@ 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]))
 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]))
 
 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],
 
 dnl Set the backup prefix
 AC_ARG_WITH([hash-backup],
@@ -65,13 +59,13 @@ AS_IF([test x"$with_mts" = x"smtp"], [MTS="smtp"],
       [MTS="smtp"])
 AC_SUBST([MTS])dnl
 
       [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
 
 dnl -------------------------------------------------------------------
 dnl Default location is /usr/local/nmh/{bin,etc,libexec,man}, unless we
@@ -160,18 +154,6 @@ dnl Check for any platform-specific additional AM_CPPFLAGS.  This depends on
 dnl MULTIBYTE_ENABLED having already been set.
 NMH_ADDL_CPPFLAGS
 
 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 <stdio.h> is pulled in.
 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 <stdio.h> is pulled in.
@@ -216,11 +198,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"
                        [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
 
 
 AC_HEADER_ASSERT
 
@@ -458,28 +436,67 @@ dnl --------------------
 dnl CHECK FOR CYRUS-SASL
 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])
 
 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 -----------------
 
 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.
   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])
 
 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 -----------------
 dnl -----------------
 dnl CHECK FOR CURL
 dnl -----------------
@@ -524,7 +541,6 @@ AS_IF([test "x$with_oauth" = xyes && test "x$HAVE_CURL_H" = x],
 dnl ----------------
 dnl CHECK FLEX FIXUP
 dnl ----------------
 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 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/
@@ -532,11 +548,15 @@ 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=\
 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=\
                [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=\
                [flex\ 2.6.1], [AM_LFLAGS=\
-'; sed '\''/\<int num_to_read\>/s/int/size_t/; s/\<yy_size_t i\>/int i/'\'' $@ >$@.tmp && mv -f $@.tmp $@'])
+'; sed '\''/\<int num_to_read\>/s/int/size_t/; \
+                s/\<yy_size_t i\>/int i/; \
+                s/int n; \\/yy_size_t n; \\/'\'' $@ >$@.tmp && mv -f $@.tmp $@;'])
        AC_SUBST([AM_LFLAGS])])
 
 dnl ------------------
        AC_SUBST([AM_LFLAGS])])
 
 dnl ------------------
@@ -553,7 +573,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).
 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 <time.h>])
+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 <time.h>]])
+CPPFLAGS="$nmh_saved_CPPFLAGS"
 
 AC_STRUCT_DIRENT_D_TYPE
 
 
 AC_STRUCT_DIRENT_D_TYPE
 
@@ -565,7 +590,7 @@ dnl exist.
 dnl
 
 AC_CONFIG_COMMANDS([build-directories],
 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([
 
 
 AC_CONFIG_COMMANDS_POST([
 
@@ -602,7 +627,7 @@ RPM build root             : ${nmhrpm}
 backup prefix              : ${backup_prefix}
 transport system           : ${MTS}
 spool default locking type : ${with_locking}
 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}
 SASL support               : ${sasl_support}
 TLS support                : ${tls_support}
 OAuth support              : ${oauth_support}