X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/005c31fab73f653d1244e708ae18c254b5b4e962..7711f3fc00259e55f630cfe6104eff3083dc9d77:/configure.ac?ds=sidebyside diff --git a/configure.ac b/configure.ac index 00835424..02f0a044 100644 --- a/configure.ac +++ b/configure.ac @@ -28,14 +28,6 @@ dnl Do you want to debug nmh? AC_ARG_ENABLE([debug], AS_HELP_STRING([--enable-debug],[enable nmh code debugging])) -dnl Do you want to disable use of locale functions -AH_TEMPLATE([LOCALE], -[Undefine if you don't want locale features. By default this is defined.]) -AC_ARG_ENABLE([locale], - [AS_HELP_STRING([--disable-locale], [turn off locale features])], - [AS_IF([test x$enableval = xyes], [AC_DEFINE(LOCALE)])], - [AC_DEFINE(LOCALE)]) - 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], @@ -50,7 +42,7 @@ AS_IF([test x"$with_cyrus_sasl" != x -a x"$with_cyrus_sasl" != x"no"],[ 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 -a x"$with_tls" != x"no"],[ +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]) @@ -82,10 +74,12 @@ AS_IF([test -n "$with_smtpservers"], [smtpservers="$with_smtpservers"], [smtpservers="localhost"]) AC_SUBST([smtpservers])dnl -dnl ---------------------------------------------------- -dnl Default location is /usr/local/nmh/{bin,etc,lib,man} -dnl ---------------------------------------------------- +dnl ------------------------------------------------------------------- +dnl Default location is /usr/local/nmh/{bin,etc,libexec,man}, unless we +dnl find an existing installation, in which case we use its location. +dnl ------------------------------------------------------------------- AC_PREFIX_DEFAULT([/usr/local/nmh]) +AC_PREFIX_PROGRAM([mhparam]) dnl ------------------ dnl CHECK THE COMPILER @@ -145,43 +139,62 @@ if test -n "$auto_cflags"; then test "$nmh_cv_has_wextra" = "yes" && CFLAGS="${CFLAGS:+$CFLAGS }-Wextra" fi +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 CPPFLAGS because it requires optimization. + AS_CASE([$CFLAGS], + [-O*|*' -O'*],[CPPFLAGS="${CPPFLAGS:+$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. +dnl +dnl And while we're here, add the packages tree to the cpp and ld search +dnl paths. Note that FreeBSD's pkg(8) seems to be hardwired to use /usr/local. +dnl If /usr/ports is installed, we use its idea of where things are installed, +dnl otherwise we assume /usr/local. + +AS_IF([test `uname` = FreeBSD], + [CPPFLAGS="${CPPFLAGS:+$CPPFLAGS }-D_WITH_GETLINE" + nmh_cv_freebsd_localbase=`echo '.include ' \ + | make -k -f /dev/stdin -V LOCALBASE 2>/dev/null | sed 1q` + test -z "$nmh_cv_freebsd_localbase" && nmh_cv_freebsd_localbase=/usr/local + CPPFLAGS="${CPPFLAGS:+$CPPFLAGS }-I$nmh_cv_freebsd_localbase/include" + LDFLAGS="${LDFLAGS:+$LDFLAGS }-L$nmh_cv_freebsd_localbase/lib" +]) + dnl -------------- dnl CUSTOMIZE LINK dnl -------------- -if test `uname` = OpenBSD; then - dnl Filter out "often/almost always misused" warnings from OpenBSD linker. - [POSTLINK="2>&1 | egrep -v ': [w]arning: s[a-z]+\(\) is \ -(almost always|often) misused, please use'; true"] -fi +AS_IF([test `uname` = OpenBSD], + dnl Munge "often/almost always misused" warnings from OpenBSD linker + dnl so that they don't color the waterfall. + [POSTLINK="2>&1 | sed -e \ +'s/: w\(arning: s.*() is .* misused, please use\)/: W\1/'"]) AC_SUBST([POSTLINK]) dnl ----------------- dnl CUSTOMIZE LDFLAGS dnl ----------------- -if test "$GCC" = yes; then - dnl Disable clang complaint about unused -ansi when linking. - AC_CACHE_CHECK([whether linker supports -Qunused-arguments], - [nmh_cv_has_q_unused_arguments], - [nmh_saved_ldflags="$LDFLAGS" - 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"]) - test "$nmh_cv_has_q_unused_arguments" = "yes" && \ - LDFLAGS="${LDFLAGS:+$LDFLAGS }-Qunused-arguments" -fi - -dnl This really shouldn't be necessary. And we really shouldn't add -s. -if test x"$enable_debug" = x"yes"; then - test -z "$LDFLAGS" && LDFLAGS=-g -else - if test -z "$LDFLAGS"; then - case "$build_os" in - darwin*) LDFLAGS= ;; - *) LDFLAGS=-s ;; - esac - fi -fi +dnl Disable clang complaint about unused -ansi when linking. +AC_CACHE_CHECK([whether linker supports -Qunused-arguments], + [nmh_cv_has_q_unused_arguments], + [AS_IF([test "$GCC" = yes && `${CC} --version 2>&1 | \ + grep clang >/dev/null`], + [nmh_saved_ldflags="$LDFLAGS" + 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" dnl This hack turns off assertions by default, assuming dnl that configure still uses this shell variable. Without @@ -216,22 +229,6 @@ AS_CASE(["${MD5SUM}"], [MD5FMT="missing"]) AC_SUBST([MD5FMT]) -dnl ---------------------------------------------- -dnl check for lclint, and lint if it doesn't exist -dnl ---------------------------------------------- -AC_CHECK_PROG([linttmp1], [lclint], [lclint], [no])dnl -AS_IF([test x$ac_cv_prog_linttmp1 != xno], - [LINT=$ac_cv_prog_linttmp1 - LINTFLAGS="-weak +posixlib -macrovarprefixexclude"], - [AC_CHECK_PROG([linttmp2], [lint], [lint], [no])dnl - AS_IF([test x$ac_cv_prog_linttmp2 != xno], - [LINT=$ac_cv_prog_linttmp2 - LINTFLAGS=""], - [LINT="echo 'No lint program found'" - LINTFLAGS=""])]) -AC_SUBST([LINT])dnl -AC_SUBST([LINTFLAGS])dnl - dnl Look for `ls' pathtmp=/usr/xpg4/bin:/usr/bin:/bin:/usr/local/bin:/usr/ucb AC_PATH_PROG([lspath], [ls], [no], [$pathtmp]) @@ -311,7 +308,7 @@ dnl If mailspool is not world-writable and dotlockfile is not setgid, dnl we need to #define MAILGROUP to 1 and make inc setgid. if test x"$LOCKTYPE" = x"dot" -a x"$nmh_cv_mailspool_world_writable" = x"no" -a x"$nmh_cv_dotlockfile_setgid" != x"yes" ; then dnl do we really need both of these? - AC_DEFINE(MAILGROUP,1, + AC_DEFINE([MAILGROUP],[1], [Define to 1 if you need to make `inc' set-group-id because your mail spool is not world writable. There are no guarantees as to the safety of doing this, but this #define will add some extra security checks.])dnl SETGID_MAIL=1 fi @@ -322,20 +319,10 @@ AC_CACHE_CHECK(what group owns the mail spool, nmh_cv_ls_mail_grp, [nmh_cv_ls_mail_grp=`$lspath -dL $nmh_cv_ls_grpopt $mailspool|$AWK '{print $4}'` ]) MAIL_SPOOL_GRP=$nmh_cv_ls_mail_grp -AC_SUBST(MAIL_SPOOL_GRP)dnl - -dnl --------------------------------------------- -dnl CHECK FOR PROGRAM TO PROVIDE MIME TYPE STRING -dnl --------------------------------------------- -AS_IF([file --mime "${srcdir}"/configure >/dev/null 2>&1], - [nmh_mimetypeproc='"file --mime"']) -if test -n "$nmh_mimetypeproc"; then - AS_IF([file --brief --mime "${srcdir}"/configure >/dev/null 2>&1], - [nmh_mimetypeproc='"file --brief --mime"']) -fi -AS_CASE([$nmh_mimetypeproc], [?*], - [AC_DEFINE_UNQUOTED([MIMETYPEPROC], [$nmh_mimetypeproc], - [Program, with arguments, that provides MIME type string.])]) +AC_SUBST([MAIL_SPOOL_GRP])dnl + +NMH_MIMETYPEPROC +NMH_MIMEENCODINGPROC dnl ------------------ dnl CHECK HEADER FILES @@ -354,12 +341,10 @@ dnl before system header files. AS_CASE(["$host_os"], [linux*], [# Like DEFS, but doesn't get stomped on by configure when using config.h: - AS_IF([test -z "$CPPFLAGS"],[CPPFLAGS="-D_GNU_SOURCE"], - [CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"])]) + CPPFLAGS="${CPPFLAGS:+$CPPFLAGS }-D_GNU_SOURCE"]) AC_HEADER_TIOCGWINSZ -AC_CHECK_HEADERS([fcntl.h ncurses/termcap.h termcap.h langinfo.h \ - wchar.h wctype.h sys/param.h sys/time.h sys/stream.h]) +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 .]),, @@ -371,7 +356,7 @@ AC_CHECK_HEADER([sys/ptem.h], AC_DEFINE(WINSIZE_IN_PTEM,1, dnl --------------- dnl CHECK FUNCTIONS dnl --------------- -AC_CHECK_FUNCS([wcwidth mbtowc writev lstat nl_langinfo getutxent arc4random]) +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 \ @@ -387,29 +372,29 @@ AC_SUBST([MULTIBYTE_ENABLED]) dnl ------------------- dnl CHECK FOR LIBRARIES dnl ------------------- -dnl Check location of modf -AC_CHECK_FUNC([modf], , AC_CHECK_LIB([m], [modf])) - dnl Checks for network libraries (nsl, socket) NMH_CHECK_NETLIBS -dnl Check for readline support -NMH_READLINE - dnl Check the locking functions supported and what we should use by default NMH_LOCKING dnl Check for iconv NMH_CHECK_ICONV +dnl Check for tputs() callback argument +NMH_TPUTS_PUTC_ARG + termcap_curses_order="termcap curses ncurses" for lib in $termcap_curses_order; do - AC_CHECK_LIB(${lib}, tgetent, [TERMLIB="-l$lib"; break]) + AC_CHECK_LIB([${lib}], [setupterm], [TERMLIB="-l$lib"; break]) done AC_SUBST([TERMLIB])dnl AS_IF([test "x$TERMLIB" = "x"], - [AC_MSG_FAILURE([Could not find tgetent in any library. Is there a curses -or ncurses library or package that you can install?])]) + [AC_MSG_FAILURE([Could not find setupterm in any library. Is there a +curses or ncurses library or package that you can install?])]) + +dnl Check for readline support +NMH_READLINE dnl -------------- dnl CHECK FOR NDBM @@ -434,7 +419,7 @@ if test "$nmh_ndbm" = "autodetect"; then dnl first so we don't accidentally link in a pointless but harmless dnl library in one of the later ndbm.h+libfoo tests: NMH_CHECK_NDBM(ndbm.h,,, - dnl Berkeley DBv2 emulating ndbm: header in db.h: + dnl Berkeley DBv2 emulating ndbm: header in db.h, e.g., 32-bit Cygwin: NMH_CHECK_NDBM(db.h,db,, dnl Berkeley DBv1 emulating ndbm: NMH_CHECK_NDBM(ndbm.h,db,, @@ -448,8 +433,11 @@ if test "$nmh_ndbm" = "autodetect"; then NMH_CHECK_NDBM(gdbm/ndbm.h,gdbm,, NMH_CHECK_NDBM(gdbm/ndbm.h,gdbm_compat -lgdbm,, NMH_CHECK_NDBM(ndbm.h,gdbm,, - NMH_CHECK_NDBM(ndbm.h,gdbm_compat -lgdbm)))))))))) - + dnl 64-bit Cygwin: + NMH_CHECK_NDBM(ndbm.h,gdbm_compat -lgdbm,, + dnl On Linux, libgdbm_compat.so loads libgdbm.so as well, so it doesn't + dnl need to be explicit: + NMH_CHECK_NDBM(gdbm-ndbm.h,gdbm_compat))))))))))) fi else dnl We don't really need to check that the user-specified values work, @@ -502,115 +490,37 @@ dnl CHECK FOR OPENSSL 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 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_MSG_ERROR([OpenSSL library not found])])], + [AC_MSG_ERROR([OpenSSL library not found])],[$TLSLIB])], [TLSLIB=]) AC_SUBST([TLSLIB]) -dnl --------------------- -dnl CHECK TERMCAP LIBRARY -dnl --------------------- - -dnl Add the termcap library, so that the following configure -dnl tests will find it when it tries to link test programs. -nmh_save_LIBS="$LIBS" -LIBS="$TERMLIB $LIBS" - -dnl Check if tgetent accepts NULL (and will allocate its own termcap buffer) -dnl Some termcaps reportedly accept a zero buffer, but then dump core -dnl in tgetstr(). -dnl Under Cygwin test program crashes but exit code is still 0. So, -dnl we test for a file that porgram should create -AH_TEMPLATE([TGETENT_ACCEPTS_NULL], -[Define to 1 if tgetent() accepts NULL as a buffer.]) -AC_CACHE_CHECK(if tgetent accepts NULL, -nmh_cv_func_tgetent_accepts_null, -[AC_TRY_RUN([ -main() -{ - char buf[4096]; - int r1 = tgetent(buf, "vt100"); - int r2 = tgetent((char*)0,"vt100"); - if (r1 >= 0 && r1 == r2) { - char tbuf[1024], *u; - u = tbuf; - tgetstr("cl", &u); - creat("conftest.tgetent", 0640); - } - exit((r1 != r2) || r2 == -1); -} -], - if test -f conftest.tgetent; then - nmh_cv_func_tgetent_accepts_null=yes - else - nmh_cv_func_tgetent_accepts_null=no - fi, - nmh_cv_func_tgetent_accepts_null=no, - nmh_cv_func_tgetent_accepts_null=no)]) -if test x$nmh_cv_func_tgetent_accepts_null = xyes; then - AC_DEFINE(TGETENT_ACCEPTS_NULL) -fi -AC_CACHE_CHECK(if tgetent returns 0 on success, -nmh_cv_func_tgetent_zero_success, -[AC_TRY_RUN([ -main() -{ - char buf[4096]; - int r1 = tgetent(buf, "!@#$%^&*"); - int r2 = tgetent(buf, "vt100"); - if (r1 < 0 && r2 == 0) { - char tbuf[1024], *u; - u = tbuf; - tgetstr("cl", &u); - creat("conftest.tgetent0", 0640); - } - exit(r1 == r2); -} -], - if test -f conftest.tgetent0; then - nmh_cv_func_tgetent_zero_success=yes - else - nmh_cv_func_tgetent_zero_success=no - fi, - nmh_cv_func_tgetent_zero_success=no, - nmh_cv_func_tgetent_zero_success=no)]) -AH_TEMPLATE([TGETENT_SUCCESS], -[Define to what tgetent() returns on success (0 on HP-UX X/Open curses).]) -if test x$nmh_cv_func_tgetent_zero_success = xyes; then - AC_DEFINE(TGETENT_SUCCESS, 0) -else - AC_DEFINE(TGETENT_SUCCESS, 1) -fi - -dnl Now put the libraries back to what it was before we -dnl starting checking the termcap library. -LIBS="$nmh_save_LIBS" - dnl ---------------- dnl CHECK FLEX FIXUP dnl ---------------- dnl Use LFLAGS make variable setting to work around bugs in flex -dnl 2.5.36 that cause signed/unsigned mismatch, +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=\ -'; printf "%s\n" '\''1,$$s/(size_t) \(num_to_read\)/\1/'\'' w q | ed -s $@'], - [flex\ 2.5.36], [LFLAGS=\ -'; printf "%s\n" '\''1,$$s/\( \)int i;/\1yy_size_t i;/'\'' w q | ed -s $@']) +'; sed "s/ int n;/ size_t n;/" $@ >$@.tmp && mv -f $@.tmp $@'], + [flex\ 2.5.3[[67]]], [LFLAGS=\ +'; sed "s/\( \)int i;/\1yy_size_t i;/" $@ >$@.tmp && mv -f $@.tmp $@']) AC_SUBST([LFLAGS])]) -dnl -------------- -dnl CHECK TYPEDEFS -dnl -------------- -AC_TYPE_PID_T -AC_TYPE_OFF_T -AC_TYPE_UID_T -AC_TYPE_MODE_T -AC_TYPE_SIZE_T +dnl ------------------ +dnl FOR INTERNAL USE by the NMH test suite +dnl ------------------ +AC_ARG_VAR([NMHETCDIRINST], [for internal use by nmh test suite]) +AS_IF([test -n "$NMHETCDIRINST"], [nmhetcdirinst=$NMHETCDIRINST] + AC_SUBST([nmhetcdirinst])) dnl ---------------- dnl CHECK STRUCTURES @@ -649,8 +559,7 @@ dnl exist. dnl AC_CONFIG_COMMANDS([build-directories], -[test -d etc || AS_MKDIR_P([etc]) -test -d man || AS_MKDIR_P([man])]) +[test -d man || AS_MKDIR_P([man])]) AC_CONFIG_COMMANDS_POST([ @@ -663,7 +572,7 @@ 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 "nmhsysconf=${sysconfdir}"; eval "nmhsysconf=${nmhsysconf}" -eval "nmhlib=${libdir}"; eval "nmhlib=${nmhlib}" +eval "nmhlibexec=${libexecdir}"; eval "nmhlibexec=${nmhlibexec}" eval "nmhman=${mandir}"; eval "nmhman=${nmhman}" eval "nmhrpm=${nmhrpm}"; @@ -678,8 +587,8 @@ linker flags : ${LDFLAGS} preprocessor flags : ${CPPFLAGS} source code location : ${srcdir} binary install path : ${nmhbin} -library install path : ${nmhlib} -config files install path : ${nmhsysconf} +libexec install path : ${nmhlibexec}/nmh +config files install path : ${nmhsysconf}/nmh man page install path : ${nmhman} RPM build root : ${nmhrpm} backup prefix : ${backup_prefix}