On Fri, Apr 01, 2011 at 10:02:18AM -0600, Eric Blake wrote:
On 04/01/2011 09:39 AM, Daniel P. Berrange wrote:
>
> * 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 | 153 ++++++++++++++++++++++++++------------------------
I really don't like how we have crammed so much into acinclude.m4; it
would be nicer if we could separate things into individual m4/foo.m4
files...
The new series moves this file
> + # 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
We really ought to follow coreutils' lead of generating two separate
lists of -W flags - a larger set for libvirt and a smaller set for
gnulib. Then exemptions such as -Wvla could be used just for gnulib.
But that can be a followup patch.
The problem isn't with the compilation of gnulib - that doesn't use
any of these flags. The issue is with various things in the gnulib
header files, which impact compilation of the main libvirt code.
eg
../gnulib/lib/gettext.h:218:3: error: variable length array 'msg_ctxt_id' is
used [-Wvla]
> + dontwarn="$dontwarn -Wcast-qual" # Need to allow bad
cast for execve()
> + dontwarn="$dontwarn -Wlong-long" # We need to use
long long in many places
> +
> + # We might fundamentally need some of these disabled forever, but ideally
> + # we'd turn many of them on
> + dontwarn="$dontwarn -Wformat-nonliteral"
> + dontwarn="$dontwarn -Wswitch-default"
> + dontwarn="$dontwarn -Wswitch-enum"
> + dontwarn="$dontwarn -Wstrict-overflow"
> + dontwarn="$dontwarn -Wfloat-equal"
> + dontwarn="$dontwarn -Wdeclaration-after-statement"
> + dontwarn="$dontwarn -Wunsafe-loop-optimizations"
> + 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 -W"
-W is the same as -Wextra - that turns on a lot of useful warnings. Can
we fine-tune it to just disable the needed warnings?
Removing that means I need a manual check for -Wno-sign-compare
since gl_MANYWAY_COMPLEMENT can't see that -W include -Wsign-compare
> + 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
Yep, gnulib's macros are nice for this!
Daniel
--
|:
http://berrange.com -o-
http://www.flickr.com/photos/dberrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|:
http://entangle-photo.org -o-
http://live.gnome.org/gtk-vnc :|