[libvirt] [PATCH] Use gnulib's manywarnings & warnings modules
Daniel P. Berrange
berrange at redhat.com
Mon Apr 4 16:28:52 UTC 2011
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 :|
More information about the libvir-list
mailing list