On Mon, Apr 02, 2012 at 12:23:46PM +0100, Daniel P. Berrange wrote: > From: "Daniel P. Berrange" <berra...@redhat.com>
What's the source for manywarnings.m4 and warnings.m4 ? Could you add a link somewhere in the commit message? > > * m4/manywarnings.m4m, m4/warnings.m4: Import GNULIB warnings > modules > * m4/spice-compile-warnings.m4: Define SPICE_COMPILE_WARNINGS > * configure.ac: Replace compile warning check with a call to > SPICE_COMPILE_WARNINGS > * client/Makefile.am: Use WARN_CXXFLAGS instead of WARN_CFLAGS > > Signed-off-by: Daniel P. Berrange <berra...@redhat.com> > --- > client/Makefile.am | 2 +- > configure.ac | 77 +----------------- > m4/manywarnings.m4 | 184 > ++++++++++++++++++++++++++++++++++++++++++ > m4/spice-compile-warnings.m4 | 162 +++++++++++++++++++++++++++++++++++++ > m4/warnings.m4 | 37 +++++++++ > 5 files changed, 385 insertions(+), 77 deletions(-) > create mode 100644 m4/manywarnings.m4 > create mode 100644 m4/spice-compile-warnings.m4 > create mode 100644 m4/warnings.m4 > > diff --git a/client/Makefile.am b/client/Makefile.am > index 22d5adf..ba3ce76 100644 > --- a/client/Makefile.am > +++ b/client/Makefile.am > @@ -213,7 +213,7 @@ INCLUDES = \ > $(SSL_CFLAGS) \ > $(XRANDR_CFLAGS) \ > $(XFIXES_CFLAGS) \ > - $(WARN_CFLAGS) \ > + $(WARN_CXXFLAGS) \ > $(XINERAMA_CFLAGS) \ > $(CXIMAGE_CFLAGS) \ > $(NULL) > diff --git a/configure.ac b/configure.ac > index 1feb36d..f5b014f 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -394,82 +394,7 @@ fi > dnl > =========================================================================== > dnl check compiler flags > > -AC_DEFUN([SPICE_CC_TRY_FLAG], [ > - AC_MSG_CHECKING([whether $CC supports $1]) > - > - spice_save_CFLAGS="$CFLAGS" > - CFLAGS="$CFLAGS $1" > - > - AC_COMPILE_IFELSE([AC_LANG_SOURCE([ ])], [spice_cc_flag=yes], > [spice_cc_flag=no]) > - CFLAGS="$spice_save_CFLAGS" > - > - if test "x$spice_cc_flag" = "xyes"; then > - ifelse([$2], , :, [$2]) > - else > - ifelse([$3], , :, [$3]) > - fi > - AC_MSG_RESULT([$spice_cc_flag]) > -]) > - > - > -dnl Use lots of warning flags with with gcc and compatible compilers > - > -dnl Note: if you change the following variable, the cache is automatically > -dnl skipped and all flags rechecked. So there's no need to do anything > -dnl else. If for any reason you need to force a recheck, just change > -dnl MAYBE_WARN in an ignorable way (like adding whitespace) > - > -dnl MAYBE_WARN="-Wall -Wno-sign-compare -Werror -Wno-deprecated-declarations" > - > -if test "$red_target" = "windows"; then > - MAYBE_WARN="-Wall -Wno-sign-compare -Wno-deprecated-declarations" > -else > - MAYBE_WARN="-Wall -Wno-sign-compare -Wno-deprecated-declarations" > -fi > - > -AC_ARG_ENABLE(werror, > -AC_HELP_STRING([--enable-werror], [Use -Werror (if supported)]), > -set_werror="$enableval",[ > -if test -f $srcdir/GITVERSION; then > - is_git_version=true > - set_werror=yes > -else > - set_werror=no > -fi > -]) > - > -# invalidate cached value if MAYBE_WARN has changed > -if test "x$spice_cv_warn_maybe" != "x$MAYBE_WARN"; then > - unset spice_cv_warn_cflags > -fi > -AC_CACHE_CHECK([for supported warning flags], spice_cv_warn_cflags, [ > - echo > - WARN_CFLAGS="" > - > - # Some warning options are not supported by all versions of > - # gcc, so test all desired options against the current > - # compiler. > - # > - # Note that there are some order dependencies > - # here. Specifically, an option that disables a warning will > - # have no net effect if a later option then enables that > - # warnings, (perhaps implicitly). So we put some grouped > - # options (-Wall and -Wextra) up front and the -Wno options > - # last. > - > - for W in $MAYBE_WARN; do > - SPICE_CC_TRY_FLAG([$W], [WARN_CFLAGS="$WARN_CFLAGS $W"]) > - done > - if test "$set_werror" != "no"; then > - SPICE_CC_TRY_FLAG(["-Werror"], [WARN_CFLAGS="$WARN_CFLAGS > -Werror"]) > - fi > - > - spice_cv_warn_cflags=$WARN_CFLAGS > - spice_cv_warn_maybe=$MAYBE_WARN > - > - AC_MSG_CHECKING([which warning flags were supported])]) > -WARN_CFLAGS="$spice_cv_warn_cflags" > -SPICE_CFLAGS="$SPICE_CFLAGS $WARN_CFLAGS" > +SPICE_COMPILE_WARNINGS > > # use ximage.h for win32 build if it is found (no package for mingw32 atm) > if test $os_win32 == "yes" ; then > diff --git a/m4/manywarnings.m4 b/m4/manywarnings.m4 > new file mode 100644 > index 0000000..fd0e372 > --- /dev/null > +++ b/m4/manywarnings.m4 > @@ -0,0 +1,184 @@ > +# manywarnings.m4 serial 3 > +dnl Copyright (C) 2008-2012 Free Software Foundation, Inc. > +dnl This file is free software; the Free Software Foundation > +dnl gives unlimited permission to copy and/or distribute it, > +dnl with or without modifications, as long as this notice is preserved. > + > +dnl From Simon Josefsson > + > +# gl_MANYWARN_COMPLEMENT(OUTVAR, LISTVAR, REMOVEVAR) > +# -------------------------------------------------- > +# Copy LISTVAR to OUTVAR except for the entries in REMOVEVAR. > +# Elements separated by whitespace. In set logic terms, the function > +# does OUTVAR = LISTVAR \ REMOVEVAR. > +AC_DEFUN([gl_MANYWARN_COMPLEMENT], > +[ > + gl_warn_set= > + set x $2; shift > + for gl_warn_item > + do > + case " $3 " in > + *" $gl_warn_item "*) > + ;; > + *) > + gl_warn_set="$gl_warn_set $gl_warn_item" > + ;; > + esac > + done > + $1=$gl_warn_set > +]) > + > +# gl_MANYWARN_ALL_GCC(VARIABLE) > +# ----------------------------- > +# Add all documented GCC warning parameters to variable VARIABLE. > +# Note that you need to test them using gl_WARN_ADD if you want to > +# make sure your gcc understands it. > +AC_DEFUN([gl_MANYWARN_ALL_GCC], > +[ > + dnl First, check if -Wno-missing-field-initializers is needed. > + dnl -Wmissing-field-initializers is implied by -W, but that issues > + dnl warnings with GCC version before 4.7, for the common idiom > + dnl of initializing types on the stack to zero, using { 0, } > + AC_REQUIRE([AC_PROG_CC]) > + if test -n "$GCC"; then > + > + dnl First, check -W -Werror -Wno-missing-field-initializers is supported > + dnl with the current $CC $CFLAGS $CPPFLAGS. > + AC_MSG_CHECKING([whether -Wno-missing-field-initializers is supported]) > + AC_CACHE_VAL([gl_cv_cc_nomfi_supported], [ > + gl_save_CFLAGS="$CFLAGS" > + CFLAGS="$CFLAGS -W -Werror -Wno-missing-field-initializers" > + AC_COMPILE_IFELSE( > + [AC_LANG_PROGRAM([[]], [[]])], > + [gl_cv_cc_nomfi_supported=yes], > + [gl_cv_cc_nomfi_supported=no]) > + CFLAGS="$gl_save_CFLAGS"]) > + AC_MSG_RESULT([$gl_cv_cc_nomfi_supported]) > + > + if test "$gl_cv_cc_nomfi_supported" = yes; then > + dnl Now check whether -Wno-missing-field-initializers is needed > + dnl for the { 0, } construct. > + AC_MSG_CHECKING([whether -Wno-missing-field-initializers is needed]) > + AC_CACHE_VAL([gl_cv_cc_nomfi_needed], [ > + gl_save_CFLAGS="$CFLAGS" > + CFLAGS="$CFLAGS -W -Werror" > + AC_COMPILE_IFELSE( > + [AC_LANG_PROGRAM( > + [[void f (void) > + { > + typedef struct { int a; int b; } s_t; > + s_t s1 = { 0, }; > + } > + ]], > + [[]])], > + [gl_cv_cc_nomfi_needed=no], > + [gl_cv_cc_nomfi_needed=yes]) > + CFLAGS="$gl_save_CFLAGS" > + ]) > + AC_MSG_RESULT([$gl_cv_cc_nomfi_needed]) > + fi > + fi > + > + gl_manywarn_set= > + for gl_manywarn_item in \ > + -Wall \ > + -W \ > + -Wformat-y2k \ > + -Wformat-nonliteral \ > + -Wformat-security \ > + -Winit-self \ > + -Wmissing-include-dirs \ > + -Wswitch-default \ > + -Wswitch-enum \ > + -Wunused \ > + -Wunknown-pragmas \ > + -Wstrict-aliasing \ > + -Wstrict-overflow \ > + -Wsystem-headers \ > + -Wfloat-equal \ > + -Wtraditional \ > + -Wtraditional-conversion \ > + -Wdeclaration-after-statement \ > + -Wundef \ > + -Wshadow \ > + -Wunsafe-loop-optimizations \ > + -Wpointer-arith \ > + -Wbad-function-cast \ > + -Wc++-compat \ > + -Wcast-qual \ > + -Wcast-align \ > + -Wwrite-strings \ > + -Wconversion \ > + -Wsign-conversion \ > + -Wlogical-op \ > + -Waggregate-return \ > + -Wstrict-prototypes \ > + -Wold-style-definition \ > + -Wmissing-prototypes \ > + -Wmissing-declarations \ > + -Wmissing-noreturn \ > + -Wmissing-format-attribute \ > + -Wpacked \ > + -Wpadded \ > + -Wredundant-decls \ > + -Wnested-externs \ > + -Wunreachable-code \ > + -Winline \ > + -Winvalid-pch \ > + -Wlong-long \ > + -Wvla \ > + -Wvolatile-register-var \ > + -Wdisabled-optimization \ > + -Wstack-protector \ > + -Woverlength-strings \ > + -Wbuiltin-macro-redefined \ > + -Wmudflap \ > + -Wpacked-bitfield-compat \ > + -Wsync-nand \ > + ; do > + gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" > + done > + # The following are not documented in the manual but are included in > + # output from gcc --help=warnings. > + for gl_manywarn_item in \ > + -Wattributes \ > + -Wcoverage-mismatch \ > + -Wmultichar \ > + -Wunused-macros \ > + ; do > + gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" > + done > + # More warnings from gcc 4.6.2 --help=warnings. > + for gl_manywarn_item in \ > + -Wabi \ > + -Wcpp \ > + -Wdeprecated \ > + -Wdeprecated-declarations \ > + -Wdiv-by-zero \ > + -Wdouble-promotion \ > + -Wendif-labels \ > + -Wextra \ > + -Wformat-contains-nul \ > + -Wformat-extra-args \ > + -Wformat-zero-length \ > + -Wformat=2 \ > + -Wmultichar \ > + -Wnormalized=nfc \ > + -Woverflow \ > + -Wpointer-to-int-cast \ > + -Wpragmas \ > + -Wsuggest-attribute=const \ > + -Wsuggest-attribute=noreturn \ > + -Wsuggest-attribute=pure \ > + -Wtrampolines \ > + ; do > + gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" > + done > + > + # Disable the missing-field-initializers warning if needed > + if test "$gl_cv_cc_nomfi_needed" = yes; then > + gl_manywarn_set="$gl_manywarn_set -Wno-missing-field-initializers" > + fi > + > + $1=$gl_manywarn_set > +]) > diff --git a/m4/spice-compile-warnings.m4 b/m4/spice-compile-warnings.m4 > new file mode 100644 > index 0000000..8de2ffd > --- /dev/null > +++ b/m4/spice-compile-warnings.m4 > @@ -0,0 +1,162 @@ > +dnl > +dnl Enable all known GCC compiler warnings, except for those > +dnl we can't yet cope with > +dnl > +AC_DEFUN([SPICE_COMPILE_WARNINGS],[ > + dnl ****************************** > + dnl More compiler warnings > + dnl ****************************** > + > + AC_ARG_ENABLE([werror], > + AS_HELP_STRING([--enable-werror], [Use -Werror (if > supported)]), > + [set_werror="$enableval"], > + [if test -d $srcdir/.git; then > + is_git_version=true > + set_werror=yes > + else > + set_werror=no > + fi]) > + > + # List of warnings that are not relevant / wanted > + > + # Don't care about C++ compiler compat > + dontwarn="$dontwarn -Wc++-compat" > + dontwarn="$dontwarn -Wabi" > + dontwarn="$dontwarn -Wdeprecated" > + # Don't care about ancient C standard compat > + dontwarn="$dontwarn -Wtraditional" > + # Don't care about ancient C standard compat > + dontwarn="$dontwarn -Wtraditional-conversion" > + # Ignore warnings in /usr/include > + dontwarn="$dontwarn -Wsystem-headers" > + # Happy for compiler to add struct padding > + dontwarn="$dontwarn -Wpadded" > + # GCC very confused with -O2 > + dontwarn="$dontwarn -Wunreachable-code" > + > + > + dontwarn="$dontwarn -Wconversion" > + dontwarn="$dontwarn -Wsign-conversion" > + dontwarn="$dontwarn -Wvla" > + dontwarn="$dontwarn -Wundef" > + dontwarn="$dontwarn -Wcast-qual" > + dontwarn="$dontwarn -Wlong-long" > + dontwarn="$dontwarn -Wswitch-default" > + dontwarn="$dontwarn -Wswitch-enum" > + dontwarn="$dontwarn -Wstrict-overflow" > + dontwarn="$dontwarn -Wunsafe-loop-optimizations" > + 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 -Wpacked" > + dontwarn="$dontwarn -Wunused-macros" > + dontwarn="$dontwarn -Woverlength-strings" > + dontwarn="$dontwarn -Wstack-protector" > + dontwarn="$dontwarn -Winline" > + dontwarn="$dontwarn -Wbad-function-cast" > + dontwarn="$dontwarn -Wshadow" > + > + # We want to enable thse, but need to sort out the > + # decl mess with gtk/generated_*.c > + dontwarn="$dontwarn -Wmissing-prototypes" > + dontwarn="$dontwarn -Wmissing-declarations" > + > + # Stuff that C++ won't allow. Turn them back on later > + dontwarn="$dontwarn -Waggregate-return" > + dontwarn="$dontwarn -Wstrict-prototypes" > + dontwarn="$dontwarn -Wold-style-definition" > + dontwarn="$dontwarn -Wnested-externs" > + dontwarn="$dontwarn -Wformat-zero-length" > + dontwarn="$dontwarn -Wpointer-to-int-cast" > + dontwarn="$dontwarn -Wjump-misses-init" > + > + # Issues in x11/platform_utils.cpp prevent us turning this on > + dontwarn="$dontwarn -Wmissing-format-attribute" > + > + # 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' (aka -Wextra) which includes a bunch of stuff. > + # Unfortunately, this 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]) > + gl_WARN_ADD([-Wno-unused-parameter]) > + # We can't enable this due to horrible spice_usb_device_get_description > + # signature > + gl_WARN_ADD([-Wno-format-nonliteral]) > + # CEGui headers cause violation of this > + gl_WARN_ADD([-Wno-ignored-qualifiers]) > + > + > + > + > + # GNULIB turns on -Wformat=2 which implies -Wformat-nonliteral, > + # so we need to manually re-exclude it. > + gl_WARN_ADD([-Wno-format-nonliteral]) > + > + # This should be < 1024 really. pixman_utils is the blackspot > + # preventing lower usage > + gl_WARN_ADD([-Wframe-larger-than=20460]) > + > + # Use improved glibc headers > + AC_DEFINE([_FORTIFY_SOURCE], [2], > + [enable compile-time and run-time bounds-checking, and some warnings]) > + > + # Extra special flags > + dnl -fstack-protector stuff passes gl_WARN_ADD with gcc > + dnl on Mingw32, but fails when actually used > + case $host in > + *-*-linux*) > + 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]) > + ;; > + esac > + gl_WARN_ADD([-fexceptions]) > + gl_WARN_ADD([-fasynchronous-unwind-tables]) > + gl_WARN_ADD([-fdiagnostics-show-option]) > + gl_WARN_ADD([-funit-at-a-time]) > + > + # Need -fipa-pure-const in order to make -Wsuggest-attribute=pure > + # fire even without -O. > + gl_WARN_ADD([-fipa-pure-const]) > + > + # We should eventually enable this, but right now there are at > + # least 75 functions triggering warnings. > + gl_WARN_ADD([-Wno-suggest-attribute=pure]) > + gl_WARN_ADD([-Wno-suggest-attribute=const]) > + > + if test "$set_werror" = "yes" > + then > + gl_WARN_ADD([-Werror]) > + fi > + WARN_CXXFLAGS=$WARN_CFLAGS > + AC_SUBST([WARN_CXXFLAGS]) > + > + # These are C-only warnings > + gl_WARN_ADD([-Waggregate-return]) > + gl_WARN_ADD([-Wstrict-prototypes]) > + gl_WARN_ADD([-Wold-style-definition]) > + gl_WARN_ADD([-Wnested-externs]) > + gl_WARN_ADD([-Wformat-zero-length]) > + gl_WARN_ADD([-Wpointer-to-int-cast]) > + gl_WARN_ADD([-Wjump-misses-init]) > + > + WARN_LDFLAGS=$WARN_CFLAGS > + AC_SUBST([WARN_CFLAGS]) > + AC_SUBST([WARN_LDFLAGS]) > +]) > diff --git a/m4/warnings.m4 b/m4/warnings.m4 > new file mode 100644 > index 0000000..69d05a6 > --- /dev/null > +++ b/m4/warnings.m4 > @@ -0,0 +1,37 @@ > +# warnings.m4 serial 5 > +dnl Copyright (C) 2008-2012 Free Software Foundation, Inc. > +dnl This file is free software; the Free Software Foundation > +dnl gives unlimited permission to copy and/or distribute it, > +dnl with or without modifications, as long as this notice is preserved. > + > +dnl From Simon Josefsson > + > +# gl_AS_VAR_APPEND(VAR, VALUE) > +# ---------------------------- > +# Provide the functionality of AS_VAR_APPEND if Autoconf does not have it. > +m4_ifdef([AS_VAR_APPEND], > +[m4_copy([AS_VAR_APPEND], [gl_AS_VAR_APPEND])], > +[m4_define([gl_AS_VAR_APPEND], > +[AS_VAR_SET([$1], [AS_VAR_GET([$1])$2])])]) > + > +# gl_WARN_ADD(PARAMETER, [VARIABLE = WARN_CFLAGS]) > +# ------------------------------------------------ > +# Adds parameter to WARN_CFLAGS if the compiler supports it. For example, > +# gl_WARN_ADD([-Wparentheses]). > +AC_DEFUN([gl_WARN_ADD], > +dnl FIXME: gl_Warn must be used unquoted until we can assume > +dnl autoconf 2.64 or newer. > +[AS_VAR_PUSHDEF([gl_Warn], [gl_cv_warn_$1])dnl > +AC_CACHE_CHECK([whether compiler handles $1], m4_defn([gl_Warn]), [ > + gl_save_CPPFLAGS="$CPPFLAGS" > + CPPFLAGS="${CPPFLAGS} $1" > + AC_PREPROC_IFELSE([AC_LANG_PROGRAM([])], > + [AS_VAR_SET(gl_Warn, [yes])], > + [AS_VAR_SET(gl_Warn, [no])]) > + CPPFLAGS="$gl_save_CPPFLAGS" > +]) > +AS_VAR_IF(gl_Warn, [yes], > + [gl_AS_VAR_APPEND(m4_if([$2], [], [[WARN_CFLAGS]], [[$2]]), [" $1"])]) > +AS_VAR_POPDEF([gl_Warn])dnl > +m4_ifval([$2], [AS_LITERAL_IF([$2], [AC_SUBST([$2])], [])])dnl > +]) > -- > 1.7.7.6 > > _______________________________________________ > Spice-devel mailing list > Spice-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/spice-devel _______________________________________________ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel