[libvirt] [PATCH 1/6] Use gnulib's manywarnings & warnings modules

Daniel P. Berrange berrange at redhat.com
Mon Apr 4 16:19:59 UTC 2011


Remove custom code for checking compiler warnings, using
gl_WARN_ADD instead. Don't list all flags ourselves, use
gnulib's gl_MANYWARN_ALL_GCC to get all possible GCC flags,
then turn off the ones we don't want yet.

* acinclude.m4: Rewrite to use gl_WARN_ADD and gl_MANYWARN_ALL_GCC
* bootstrap.conf: Add warnings & manywarnings
* configure.ac: Switch to gl_WARN_ADD
* m4/compiler-flags.m4: Obsoleted by gl_WARN_ADD
---
 acinclude.m4         |  158 +++++++++++++++++++++++++++-----------------------
 bootstrap.conf       |    2 +
 configure.ac         |   15 +++--
 m4/compiler-flags.m4 |   48 ---------------
 4 files changed, 96 insertions(+), 127 deletions(-)
 delete mode 100644 m4/compiler-flags.m4

diff --git a/acinclude.m4 b/acinclude.m4
index 838ec46..8eb0ec5 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -1,11 +1,6 @@
 dnl
-dnl Taken from gnome-common/macros2/gnome-compiler-flags.m4
-dnl
-dnl We've added:
-dnl   -Wextra -Wshadow -Wcast-align -Wwrite-strings -Waggregate-return -Wstrict-prototypes -Winline -Wredundant-decls
-dnl We've removed
-dnl   CFLAGS="$realsave_CFLAGS"
-dnl   to avoid clobbering user-specified CFLAGS
+dnl Enable all known GCC compiler warnings, except for those
+dnl we can't yet cope with
 dnl
 AC_DEFUN([LIBVIRT_COMPILE_WARNINGS],[
     dnl ******************************
@@ -13,90 +8,107 @@ AC_DEFUN([LIBVIRT_COMPILE_WARNINGS],[
     dnl ******************************
 
     AC_ARG_ENABLE(compile-warnings,
-                  [AC_HELP_STRING([--enable-compile-warnings=@<:@no/minimum/yes/maximum/error@:>@],
+                  [AC_HELP_STRING([--enable-compile-warnings=@<:@no/yes/error@:>@],
                                  [Turn on compiler warnings])],,
-                  [enable_compile_warnings="m4_default([$1],[maximum])"])
-
-    warnCFLAGS=
-
-    common_flags=
-    common_flags="$common_flags -Wp,-D_FORTIFY_SOURCE=2"
-    common_flags="$common_flags -fexceptions"
-    common_flags="$common_flags -fasynchronous-unwind-tables"
-    common_flags="$common_flags -fdiagnostics-show-option"
+                  [enable_compile_warnings="m4_default([$1],[yes])"])
 
     case "$enable_compile_warnings" in
     no)
         try_compiler_flags=""
 	;;
-    minimum)
-	try_compiler_flags="-Wall -Wformat -Wformat-security $common_flags"
-	;;
-    yes)
-	try_compiler_flags="-Wall -Wformat -Wformat-security -Wmissing-prototypes $common_flags"
-	;;
-    maximum|error)
-	try_compiler_flags="-Wall -Wformat -Wformat-security"
-	try_compiler_flags="$try_compiler_flags -Wmissing-prototypes"
-	try_compiler_flags="$try_compiler_flags -Wnested-externs "
-	try_compiler_flags="$try_compiler_flags -Wpointer-arith"
-	try_compiler_flags="$try_compiler_flags -Wextra -Wshadow"
-	try_compiler_flags="$try_compiler_flags -Wcast-align"
-	try_compiler_flags="$try_compiler_flags -Wwrite-strings"
-	try_compiler_flags="$try_compiler_flags -Waggregate-return"
-	try_compiler_flags="$try_compiler_flags -Wstrict-prototypes"
-	try_compiler_flags="$try_compiler_flags -Winline"
-	try_compiler_flags="$try_compiler_flags -Wredundant-decls"
-	try_compiler_flags="$try_compiler_flags -Wno-sign-compare"
-	try_compiler_flags="$try_compiler_flags -Wlogical-op"
-	try_compiler_flags="$try_compiler_flags $common_flags"
-	if test "$enable_compile_warnings" = "error" ; then
-	    try_compiler_flags="$try_compiler_flags -Werror"
-	fi
+    yes|minimum|maximum|error)
+
+        # List of warnings that are not relevant / wanted
+        dontwarn="$dontwarn -Wc++-compat"             # Don't care about C++ compiler compat
+        dontwarn="$dontwarn -Wtraditional"            # Don't care about ancient C standard compat
+        dontwarn="$dontwarn -Wtraditional-conversion" # Don't care about ancient C standard compat
+        dontwarn="$dontwarn -Wsystem-headers"         # Ignore warnings in /usr/include
+        dontwarn="$dontwarn -Wpadded"                 # Happy for compiler to add struct padding
+        dontwarn="$dontwarn -Wunreachable-code"       # GCC very confused with -O2
+        dontwarn="$dontwarn -Wconversion"             # Too many to deal with
+        dontwarn="$dontwarn -Wsign-conversion"        # Too many to deal with
+        dontwarn="$dontwarn -Wvla"                    # GNULIB gettext.h violates
+        dontwarn="$dontwarn -Wundef"                  # Many GNULIB violations
+        dontwarn="$dontwarn -Wcast-qual"              # Need to allow bad cast for execve()
+        dontwarn="$dontwarn -Wlong-long"              # We need to use long long in many places
+        dontwarn="$dontwarn -Wswitch-default"         # We allow manual list of all enum cases without default:
+        dontwarn="$dontwarn -Wswitch-enum"            # We allow optional default: instead of listing all enum values
+        dontwarn="$dontwarn -Wstrict-overflow"        # Not a problem since we don't use -fstrict-overflow
+        dontwarn="$dontwarn -Wunsafe-loop-optimizations" # Not a problem since we don't use -funsafe-loop-optimizations
+
+        # We might fundamentally need some of these disabled forever, but ideally
+        # we'd turn many of them on
+        dontwarn="$dontwarn -Wformat-nonliteral"
+        dontwarn="$dontwarn -Wfloat-equal"
+        dontwarn="$dontwarn -Wdeclaration-after-statement"
+        dontwarn="$dontwarn -Wcast-qual"
+        dontwarn="$dontwarn -Wconversion"
+        dontwarn="$dontwarn -Wsign-conversion"
+        dontwarn="$dontwarn -Wold-style-definition"
+        dontwarn="$dontwarn -Wmissing-noreturn"
+        dontwarn="$dontwarn -Wpacked"
+        dontwarn="$dontwarn -Wunused-macros"
+        dontwarn="$dontwarn -Woverlength-strings"
+        dontwarn="$dontwarn -Wmissing-format-attribute"
+        dontwarn="$dontwarn -Wstack-protector"
+
+        # Get all possible GCC warnings
+        gl_MANYWARN_ALL_GCC([maybewarn])
+
+        # Remove the ones we don't want, blacklisted earlier
+        gl_MANYWARN_COMPLEMENT([wantwarn], [$maybewarn], [$dontwarn])
+
+        # Check for $CC support of each warning
+        for w in $wantwarn; do
+          gl_WARN_ADD([$w])
+        done
+
+        # GNULIB uses '-W' which includes a bunch of stuff,
+        # kinda like -Wextra. Unfortunately, it means you
+        # can't simply use '-Wsign-compare' with gl_MANYWARN_COMPLEMENT
+        # So we have -W enabled, and then have to explicitly turn off
+        gl_WARN_ADD(-Wno-sign-compare)
+
+        # This should be < 256 really, but with PATH_MAX everywhere
+        # we have doom, even with 4096. In fact we have some functions
+        # with several PATH_MAX sized variables :-( We should kill off
+        # all PATH_MAX usage and then lower this limit
+        gl_WARN_ADD([-Wframe-larger-than=65700])
+        dnl gl_WARN_ADD([-Wframe-larger-than=4096])
+        dnl gl_WARN_ADD([-Wframe-larger-than=256])
+
+        # Extra special flags
+        gl_WARN_ADD([-Wp,-D_FORTIFY_SOURCE=2])
+        dnl Fedora only uses -fstack-protector, but doesn't seem to
+        dnl be great overhead in adding -fstack-protector-all instead
+        dnl gl_WARN_ADD([-fstack-protector])
+        gl_WARN_ADD([-fstack-protector-all])
+        gl_WARN_ADD([--param=ssp-buffer-size=4])
+        gl_WARN_ADD([-fexceptions])
+        gl_WARN_ADD([-fasynchronous-unwind-tables])
+        gl_WARN_ADD([-fdiagnostics-show-option])
+
+        if test "$enable_compile_warnings" = "error"
+        then
+          gl_WARN_ADD([-Werror])
+        fi
 	;;
     *)
 	AC_MSG_ERROR(Unknown argument '$enable_compile_warnings' to --enable-compile-warnings)
 	;;
     esac
 
-    COMPILER_FLAGS=
-    for option in $try_compiler_flags; do
-        gl_COMPILER_FLAGS($option)
-    done
-    unset option
-    unset try_compiler_flags
-
-    AC_ARG_ENABLE(iso-c,
-                  AC_HELP_STRING([--enable-iso-c],
-                                 [Try to warn if code is not ISO C ]),,
-                  [enable_iso_c=no])
-
-    AC_MSG_CHECKING(what language compliance flags to pass to the C compiler)
-    complCFLAGS=
-    if test "x$enable_iso_c" != "xno"; then
-	if test "x$GCC" = "xyes"; then
-	case " $CFLAGS " in
-	    *[\ \	]-ansi[\ \	]*) ;;
-	    *) complCFLAGS="$complCFLAGS -ansi" ;;
-	esac
-	case " $CFLAGS " in
-	    *[\ \	]-pedantic[\ \	]*) ;;
-	    *) complCFLAGS="$complCFLAGS -pedantic" ;;
-	esac
-	fi
-    fi
-    AC_MSG_RESULT($complCFLAGS)
-
-    WARN_CFLAGS="$COMPILER_FLAGS $complCFLAGS"
     WARN_LDFLAGS=$WARN_CFLAGS
     AC_SUBST([WARN_CFLAGS])
     AC_SUBST([WARN_LDFLAGS])
 
     dnl Needed to keep compile quiet on python 2.4
-    COMPILER_FLAGS=
-    gl_COMPILER_FLAGS(-Wno-redundant-decls)
-    WARN_PYTHON_CFLAGS=$COMPILER_FLAGS
+    save_WARN_CFLAGS=$WARN_CFLAGS
+    WARN_CFLAGS=
+    gl_WARN_ADD(-Wno-redundant-decls)
+    WARN_PYTHON_CFLAGS=$WARN_CFLAGS
     AC_SUBST(WARN_PYTHON_CFLAGS)
+    WARN_CFLAGS=$save_WARN_CFLAGS
 ])
 
 
diff --git a/bootstrap.conf b/bootstrap.conf
index ca0c3de..86aad14 100644
--- a/bootstrap.conf
+++ b/bootstrap.conf
@@ -45,6 +45,7 @@ ignore-value
 inet_pton
 ioctl
 maintainer-makefile
+manywarnings
 mkstemp
 mkstemps
 mktempd
@@ -81,6 +82,7 @@ timegm
 uname
 useless-if-before-free
 usleep
+warnings
 vasprintf
 verify
 vc-list-files
diff --git a/configure.ac b/configure.ac
index a8d223a..7874c30 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1970,12 +1970,14 @@ AC_ARG_ENABLE([test-coverage],
 enable_coverage=$enableval
 
 if test "${enable_coverage}" = yes; then
-  COMPILER_FLAGS=
-  gl_COMPILER_FLAGS(-fprofile-arcs)
-  gl_COMPILER_FLAGS(-ftest-coverage)
-  AC_SUBST([COVERAGE_CFLAGS], [$COMPILER_FLAGS])
-  AC_SUBST([COVERAGE_LDFLAGS], [$COMPILER_FLAGS])
-  COMPILER_FLAGS=
+  save_WARN_CFLAGS=$WARN_CFLAGS
+  WARN_CFLAGS=
+  gl_WARN_ADD(-fprofile-arcs)
+  gl_WARN_ADD(-ftest-coverage)
+  COVERAGE_FLAGS=$WARN_CFLAGS
+  AC_SUBST([COVERAGE_CFLAGS], [$COVERAGE_FLAGS])
+  AC_SUBST([COVERAGE_LDFLAGS], [$COVERAGE_FLAGS])
+  WARN_CFLAGS=$save_WARN_CFLAGS
 fi
 
 AC_ARG_ENABLE([test-oom],
@@ -2538,6 +2540,7 @@ AC_MSG_NOTICE([Miscellaneous])
 AC_MSG_NOTICE([])
 AC_MSG_NOTICE([        Debug: $enable_debug])
 AC_MSG_NOTICE([     Warnings: $enable_compile_warnings])
+AC_MSG_NOTICE([Warning Flags: $WARN_CFLAGS])
 AC_MSG_NOTICE([     Readline: $lv_use_readline])
 AC_MSG_NOTICE([       Python: $with_python])
 AC_MSG_NOTICE([       DTrace: $with_dtrace])
diff --git a/m4/compiler-flags.m4 b/m4/compiler-flags.m4
deleted file mode 100644
index 6db4816..0000000
--- a/m4/compiler-flags.m4
+++ /dev/null
@@ -1,48 +0,0 @@
-# serial 4
-# Find valid warning flags for the C Compiler.           -*-Autoconf-*-
-#
-# Copyright (C) 2010 Red Hat, Inc.
-# Copyright (C) 2001, 2002, 2006 Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301  USA
-
-# Written by Jesse Thilo.
-
-AC_DEFUN([gl_COMPILER_FLAGS],
-  [AC_MSG_CHECKING(whether compiler accepts $1)
-   ac_save_CFLAGS="$CFLAGS"
-   dnl Some flags are dependant, so we set all previously checked
-   dnl flags when testing. Except for -Werror which we have to
-   dnl check on its own, because some of our compiler flags cause
-   dnl warnings from the autoconf test program!
-   if test "$1" = "-Werror" ; then
-     CFLAGS="$CFLAGS $1"
-   else
-     CFLAGS="$CFLAGS $COMPILER_FLAGS $1"
-   fi
-   AC_TRY_LINK([], [], has_option=yes, has_option=no,)
-   echo 'int x;' >conftest.c
-   $CC $CFLAGS -c conftest.c 2>conftest.err
-   ret=$?
-   if test $ret != 0 || test -s conftest.err || test $has_option = "no"; then
-       AC_MSG_RESULT(no)
-   else
-       AC_MSG_RESULT(yes)
-       COMPILER_FLAGS="$COMPILER_FLAGS $1"
-   fi
-   CFLAGS="$ac_save_CFLAGS"
-   rm -f conftest*
- ])
-- 
1.7.4




More information about the libvir-list mailing list