diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2016-04-05 07:51:28 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2016-04-05 08:09:43 -0700 |
commit | 5baecbc0ebc11178edd73431b644a5de0a31be25 (patch) | |
tree | 1b11fc90b0935fa57768d314b4fab457f0c3694a | |
parent | 93d54ba104bf85d487eb8e90a4857789e0c9a210 (diff) | |
download | emacs-5baecbc0ebc11178edd73431b644a5de0a31be25.tar.gz |
Enable GCC warnings in developer builds
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.
-rw-r--r-- | INSTALL | 8 | ||||
-rw-r--r-- | configure.ac | 54 | ||||
-rw-r--r-- | etc/NEWS | 6 |
3 files changed, 46 insertions, 22 deletions
@@ -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 diff --git a/configure.ac b/configure.ac index f3846f4a256..917ca3a2f3d 100644 --- a/configure.ac +++ b/configure.ac @@ -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 @@ -25,6 +25,12 @@ otherwise leave it unmarked. * 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 |