]> diplodocus.org Git - nmh/blobdiff - configure.ac
Another pass at cleaning up (some of) the manpages.
[nmh] / configure.ac
index 30afee83b4d69ad4735b0f59c44dc8f704903796..4bdf12d60c7cfcba15df04d536138652eec80d95 100644 (file)
@@ -74,17 +74,16 @@ 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
 dnl ------------------
-dnl We want these before the checks,
-dnl so the checks can modify their values.
-test -z "$CFLAGS"  &&  auto_cflags=1
 
 AC_PROG_CC([cc gcc])
 AM_PROG_CC_C_O
@@ -92,72 +91,61 @@ AM_PROG_CC_C_O
 dnl ----------------
 dnl CUSTOMIZE CFLAGS
 dnl ----------------
-if test -n "$auto_cflags"; then
-  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 <time.h>],[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 <unistd.h>],
-                                        [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
-    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=\
+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=\
 "${CFLAGS:+$CFLAGS }-v -errtags=yes -erroff=E_STATEMENT_NOT_REACHED"])
-  fi
+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"
+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"
+
+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 <stdio.h> 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 -D_WITH_GETLINE"])
+       [CPPFLAGS="${CPPFLAGS:+$CPPFLAGS }-D_WITH_GETLINE"
+        nmh_cv_freebsd_localbase=`echo '.include <bsd.port.mk>' \
+               | 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
@@ -196,11 +184,12 @@ AC_HEADER_ASSERT
 dnl ------------------
 dnl CHECK FOR PROGRAMS
 dnl ------------------
-AC_PROG_MAKE_SET       dnl Does make define $MAKE
-AC_PROG_INSTALL                dnl Check for BSD compatible `install'
-AC_PROG_RANLIB         dnl Check for `ranlib'
+AC_PROG_MAKE_SET        dnl Does make define $MAKE
+AC_PROG_INSTALL         dnl Check for BSD compatible `install'
+AC_PROG_RANLIB          dnl Check for `ranlib'
 AC_PROG_AWK             dnl Check for mawk,gawk,nawk, then awk
-AC_PROG_SED            dnl Check for Posix-compliant sed
+AC_PROG_SED             dnl Check for Posix-compliant sed
+AC_PROG_YACC            dnl Check for yacc/bison
 AM_PROG_LEX             dnl Check for lex/flex
 
 AM_PROG_AR
@@ -296,7 +285,7 @@ AS_IF([test x"$DISABLE_SETGID_MAIL" != x -a x"$DISABLE_SETGID_MAIL" != x0],
 
 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
+if test x"$with_locking" = 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],
     [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
@@ -331,8 +320,7 @@ 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 wchar.h wctype.h sys/param.h sys/time.h sys/stream.h])
@@ -501,11 +489,18 @@ 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 $@'],
+'; sed "s/     int n;/ size_t n;/" $@ >$@.tmp && mv -f $@.tmp $@'],
                [flex\ 2.5.3[[67]]], [LFLAGS=\
-'; sed -s "s/\(        \)int i;/\1yy_size_t i;/" $@ >$@.tmp && mv -f $@.tmp $@'])
+'; sed "s/\(   \)int i;/\1yy_size_t i;/" $@ >$@.tmp && mv -f $@.tmp $@'])
        AC_SUBST([LFLAGS])])
 
+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
 dnl ----------------
@@ -556,7 +551,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}";
 
@@ -571,8 +566,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}