X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/ec12e432ab4d26e9fe77e7317be7fd7e364d0997..164fc755c40aeb37efe1b330fd0c01b7fa9ce72c:/configure.ac diff --git a/configure.ac b/configure.ac index fac9b91b..a4caa82f 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], @@ -92,84 +84,109 @@ dnl CHECK THE COMPILER dnl ------------------ dnl We want these before the checks, dnl so the checks can modify their values. -test -z "$CFLAGS" && CFLAGS= auto_cflags=1 -if test x"$enable_debug" = x"yes"; then - test -z "$LDFLAGS" && LDFLAGS=-g -fi +test -z "$CFLAGS" && auto_cflags=1 -AC_PROG_CC +AC_PROG_CC([cc gcc]) AM_PROG_CC_C_O -AC_CACHE_CHECK([whether compiler supports -Wextra], [nmh_cv_has_wextra], -[nmh_saved_cflags="$CFLAGS" - CFLAGS="$CFLAGS -Wextra -Werror" - AC_TRY_COMPILE([],[],nmh_cv_has_wextra=yes,nmh_cv_has_wextra=no) - CFLAGS="$nmh_saved_cflags"]) - -dnl Can't use -ansi with gcc 4.5.3 on Cygwin, at least through setup -dnl setup version 2.763, because it disables some features in the -dnl system system header files and warns about them with -Wall. Try -dnl to test for that generally, though still with gcc. -if test "$GCC" = yes; then - AC_CACHE_CHECK([whether we can use -ansi with gcc], [nmh_cv_has_dash_ansi], - [nmh_saved_cppflags="$CPPFLAGS" - nmh_saved_cflags="$CFLAGS" - CPPFLAGS="-D_GNU_SOURCE" - CFLAGS="-ansi -Wall -Werror" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include ],[tzset();])], - [nmh_cv_has_dash_ansi=yes], - [nmh_cv_has_dash_ansi=no]) - CPPFLAGS="$nmh_saved_cppflags" - CFLAGS="$nmh_saved_cflags"]) -else - nmh_cv_has_dash_ansi=no -fi - -dnl if the user hasn't specified CFLAGS, then -dnl if compiler is gcc, then -dnl use -O2 and some warning flags -dnl else use -O -dnl We use -Wall and -Wextra if supported. If the compiler supports it we -dnl also use -Wno-pointer-sign, because gcc 4 now produces a lot of new -dnl warnings which are probably mostly spurious and which in any case we -dnl don't want to deal with now. -if test "$nmh_cv_has_dash_ansi" = "yes"; then - nmh_gcc_warnflags="-ansi -pedantic -Wall" -else - nmh_gcc_warnflags="-Wall" -fi -if test "$nmh_cv_has_wextra" = "yes"; then - nmh_gcc_warnflags="${nmh_gcc_warnflags} -Wextra" -fi - +dnl ---------------- +dnl CUSTOMIZE CFLAGS +dnl ---------------- if test -n "$auto_cflags"; then - if test x"$enable_debug" = x"yes"; then - if test -n "$GCC"; then - test -z "$CFLAGS" && CFLAGS="$nmh_gcc_warnflags -g" || CFLAGS="$CFLAGS $nmh_gcc_warnflags -g" - else - test -z "$CFLAGS" && CFLAGS=-g || CFLAGS="$CFLAGS -g" - fi + dnl The user didn't specify CFLAGS, so customize them. + if test "$GCC" = yes; then + dnl Can't use -ansi with gcc 4.5.3 on Cygwin, at least through setup + dnl version 2.763, because it disables some features in the system + dnl header files and warns about them with -Wall. Try to test for + dnl that generally, with gcc. + AC_CACHE_CHECK([whether we can use -ansi with gcc], [nmh_cv_has_dash_ansi], + [nmh_saved_cppflags="$CPPFLAGS" + nmh_saved_cflags="$CFLAGS" + CPPFLAGS="-D_GNU_SOURCE" + CFLAGS="-ansi -Wall -Werror" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include ],[tzset();])], + [nmh_cv_has_dash_ansi=yes], + [nmh_cv_has_dash_ansi=no]) + CPPFLAGS="$nmh_saved_cppflags" + CFLAGS="$nmh_saved_cflags"]) + test "$nmh_cv_has_dash_ansi" = "yes" && \ + CFLAGS="${CFLAGS:+$CFLAGS }-ansi -pedantic" + + dnl For Ubuntu gcc 4.8.1, with -O2. It would be better to fix all these, + dnl but until then, suppress the warning. + AC_CACHE_CHECK([whether compiler needs -Wno-unused-result], + [nmh_cv_needs_wnur], + [nmh_saved_cflags="$CFLAGS" + CFLAGS="$CFLAGS -Werror -O2" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include ], + [extern const char *path; + chdir (path); + return 0;])], + [nmh_cv_needs_wnur=no], + [nmh_cv_needs_wnur=yes]) + CFLAGS="$nmh_saved_cflags"]) + AS_IF([test "$nmh_cv_needs_wnur" = yes], + [CFLAGS="${CFLAGS:+$CFLAGS }-Wno-unused-result"]) else - if test -z "$LDFLAGS"; then - case "$build_os" in - darwin*) - LDFLAGS= - ;; - *) - LDFLAGS=-s - ;; - esac - fi - if test -n "$GCC"; then - test -z "$CFLAGS" && CFLAGS="$nmh_gcc_warnflags -O2" || CFLAGS="$CFLAGS $nmh_gcc_warnflags -O2" - else - test -z "$CFLAGS" && CFLAGS=-O || CFLAGS="$CFLAGS -O" - fi - AC_DEFINE([NDEBUG], [1], - [Define to disable run-time debugging and asserts.]) + 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=\ +"${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" + 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" + 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" fi +dnl -------------- +dnl CUSTOMIZE LINK +dnl -------------- +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 ----------------- +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 +dnl it, AC_HEADER_ASSERT enables assertions by default. +test -z "$enable_assert" && enable_assert=no + +AC_HEADER_ASSERT + dnl ------------------ dnl CHECK FOR PROGRAMS dnl ------------------ @@ -196,22 +213,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]) @@ -235,7 +236,7 @@ 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. AS_CASE(["$host_os"], - [cygwin*],[LN=cp], + [cygwin*], [LN=cp], [LN=ln]) AC_SUBST([LN]) @@ -291,7 +292,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 @@ -302,7 +303,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 +AC_SUBST([MAIL_SPOOL_GRP])dnl + +NMH_MIMETYPEPROC +NMH_MIMEENCODINGPROC dnl ------------------ dnl CHECK HEADER FILES @@ -325,8 +329,7 @@ AS_CASE(["$host_os"], [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 .]),, @@ -338,7 +341,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]) +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 \ @@ -354,29 +357,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 @@ -401,7 +404,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,, @@ -415,8 +418,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, @@ -469,101 +475,30 @@ 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 TYPEDEFS -dnl -------------- -AC_TYPE_PID_T -AC_TYPE_OFF_T -AC_TYPE_UID_T -AC_TYPE_MODE_T -AC_TYPE_SIZE_T +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 http://sourceforge.net/p/flex/bugs/140/ +AS_IF([test "$LEX" = flex], + [AS_CASE([`$LEX -V`], + [flex\ 2.5.35], [LFLAGS=\ +'; sed -e "s/ int n;/ size_t n;/" $@ >$@.tmp && mv -f $@.tmp $@; true'], + [flex\ 2.5.36], [LFLAGS=\ +'; sed -s "s/\( \)int i;/\1yy_size_t i;/" $@ >$@.tmp && mv -f $@.tmp $@; true']) + AC_SUBST([LFLAGS])]) dnl ---------------- dnl CHECK STRUCTURES @@ -602,8 +537,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([