]> git.eshelyaron.com Git - emacs.git/commitdiff
Enable GCC warnings in developer builds
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 5 Apr 2016 14:51:28 +0000 (07:51 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 5 Apr 2016 15:09:43 +0000 (08:09 -0700)
However, do not fail; just issue the warnings.  Add an option
--enable-gcc-warnings=warn-only to configure, to implement this.
* INSTALL, etc/NEWS: Document this.
* configure.ac (gl_GCC_VERSION_IFELSE): New macro, from coreutils.
(gl_gcc_warnings, WERROR_CFLAGS): Use it to add new option.
Don’t treat --with-x-toolkit=no as a special case when configuring
warnings.

INSTALL
configure.ac
etc/NEWS

diff --git a/INSTALL b/INSTALL
index 6f516bd1dde7a755df33a2b0df1599c7c8c59a0b..27af6d9c21f60f9410c0aeb3e4ebc32546336260 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -318,9 +318,11 @@ Use --enable-gcc-warnings to enable compile-time checks that warn
 about possibly-questionable C code.  This is intended for developers
 and is useful with GNU-compatible compilers.  On a recent GNU system
 there should be no warnings; on older and on non-GNU systems the
-generated warnings may still be useful, though you may prefer building
-with 'make WERROR_CFLAGS=' so that the warnings are not treated as
-errors.
+generated warnings may still be useful, though you may prefer
+configuring with --enable-gcc-warnings=warn-only so they are not
+treated as errors.  The default is --enable-gcc-warnings=warn-only if
+it appears to be a developer build, and is --disable-gcc-warnings
+otherwise.
 
 Use --disable-silent-rules to cause 'make' to give more details about
 the commands it executes.  This can be helpful when debugging a build
index f3846f4a25662d3ecdfd3b311ed65df8f148215f..917ca3a2f3db3545d5da83117e2fc5b469bfb9f1 100644 (file)
@@ -842,17 +842,44 @@ if test "$ac_test_CFLAGS" != set; then
   esac
 fi
 
+# gl_GCC_VERSION_IFELSE([major], [minor], [run-if-found], [run-if-not-found])
+# ---------------------------------------------------------------------------
+# If $CPP is gcc-MAJOR.MINOR or newer, then run RUN-IF-FOUND.
+# Otherwise, run RUN-IF-NOT-FOUND.
+AC_DEFUN([gl_GCC_VERSION_IFELSE],
+  [AC_PREPROC_IFELSE(
+    [AC_LANG_PROGRAM(
+      [[
+#if ($1) < __GNUC__ || (($1) == __GNUC__ && ($2) <= __GNUC_MINOR__)
+/* ok */
+#else
+# error "your version of gcc is older than $1.$2"
+#endif
+      ]]),
+    ], [$3], [$4])
+  ]
+)
+
 AC_ARG_ENABLE([gcc-warnings],
-  [AS_HELP_STRING([--enable-gcc-warnings],
-                  [turn on lots of GCC warnings/errors. This is intended for
-                  developers, and may generate false alarms when used
-                  with older or non-GNU development tools.])],
+  [AS_HELP_STRING([--enable-gcc-warnings@<:@=TYPE@:>@],
+                  [control generation of GCC warnings.  The TYPE 'yes'
+                  means to fail if any warnings are issued; 'warn-only'
+                  means issue warnings without failing (default for
+                  developer builds); 'no' means disable warnings
+                  (default for non-developer builds).])],
   [case $enableval in
-     yes|no) ;;
+     yes|no|warn-only) ;;
      *)      AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;;
    esac
    gl_gcc_warnings=$enableval],
-  [gl_gcc_warnings=no]
+  [# By default, use 'warn-only' if it looks like the invoker of 'configure'
+   # is a developer as opposed to a builder.  This is most likely true
+   # if GCC is recent enough and there is a .git subdirectory;
+   # however, if there is also a .tarball-version file it is probably
+   # just a reliease imported into Git for patch management.
+   gl_gcc_warnings=no
+   test -d "$srcdir"/.git && test ! -f "$srcdir"/.tarball-version &&
+     gl_GCC_VERSION_IFELSE([5], [3], [gl_gcc_warnings=warn-only])]
 )
 
 # clang is unduly picky about some things.
@@ -868,7 +895,7 @@ AC_CACHE_CHECK([whether the compiler is clang], [emacs_cv_clang],
 
 # When compiling with GCC, prefer -isystem to -I when including system
 # include files, to avoid generating useless diagnostics for the files.
-AS_IF([test "$gl_gcc_warnings" != yes],
+AS_IF([test $gl_gcc_warnings = no],
  [
   isystem='-I'
   AS_IF([test "$emacs_cv_clang" = yes],
@@ -892,7 +919,7 @@ AS_IF([test "$gl_gcc_warnings" != yes],
        nw="$nw -Wwrite-strings"
        ;;
   esac
-  AS_IF([test -z "$nw"],
+  AS_IF([test $gl_gcc_warnings = yes],
     [gl_WARN_ADD([-Werror], [WERROR_CFLAGS])])
   AC_SUBST([WERROR_CFLAGS])
 
@@ -2011,17 +2038,6 @@ fi
 ## $window_system is now set to the window system we will
 ## ultimately use.
 
-if test "$window_system" = none && test "$gl_gcc_warnings" = yes; then
-   # Too many warnings for now.
-   nw=
-   nw="$nw -Wsuggest-attribute=noreturn"
-   gl_MANYWARN_COMPLEMENT([WARN_CFLAGS], [$WARN_CFLAGS], [$nw])
-
-   gl_WARN_ADD([-Wno-unused-variable])
-   gl_WARN_ADD([-Wno-unused-but-set-variable])
-   gl_WARN_ADD([-Wno-unused-but-set-parameter])
-fi
-
 term_header=
 HAVE_X_WINDOWS=no
 HAVE_X11=no
index 6cc1c5ae01cce9388097b3a3d65d0305684de3de..d38bc3d909982e3da9f1a60c4903edfbdf04fd6a 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -25,6 +25,12 @@ otherwise leave it unmarked.
 \f
 * Installation Changes in Emacs 25.2
 
+** The new option 'configure --enable-gcc-warnings=warn-only' causes
+GCC to issue warnings without stopping the bild.  This behavior is now
+the default in developer builds.  As before, use
+'--disable-gcc-warnings' to suppress GCC's warnings, and
+'--enable-gcc-warnings' to stop the build if GCC issues warnings.
+
 +++
 ** New configure option '--disable-build-details' attempts to build an
 Emacs that is more likely to be reproducible; that is, if you build