]> diplodocus.org Git - nmh/blobdiff - configure.ac
Note that mhshow-suffix/mhshow- matching is case-insenstive.
[nmh] / configure.ac
index 7abb916a07fc1771ca2e857b478856bec4464ced..1f8dc6c8e60cac153c7054a9cab9a1b2432d3a60 100644 (file)
@@ -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`
@@ -27,23 +26,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]))
-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],
@@ -65,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
@@ -160,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 <stdio.h> is pulled in.
@@ -216,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
 
@@ -363,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
@@ -458,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 -----------------
@@ -524,7 +540,6 @@ 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/
@@ -532,13 +547,31 @@ 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 '\''/\<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 ------------------
+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 ------------------
@@ -553,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 <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
 
@@ -565,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([
 
@@ -577,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}";
@@ -594,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}