[virt-tools-list] [virt-viewer PATCH 5/5] Switch to gnulib's compiler warning flags

Eduardo Lima (Etrunko) etrunko at redhat.com
Wed Feb 13 20:04:36 UTC 2019


On 2/13/19 3:27 PM, Marc-André Lureau wrote:
> Hi
> 
> On Wed, Feb 13, 2019 at 6:05 PM Daniel P. Berrangé <berrange at redhat.com> wrote:
>>
>> This enables many more compiler warnings than the current code. It also
>> ensures that -Werror is enabled by default when building from GIT so
>> that maintainers see regressions as hard failures.
>>
>> Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
> 
> Reviewed-by: Marc-André Lureau <marcandre.lureau at redhat.com>
> 
> But soon we will switch to meson :) oh well!

I have a patch for spice that does the same for meson. I am just waiting
for it to be reviewed/acked so I can use it as base for virt-viewer as well.

> 
>> ---
>>  acinclude.m4               |  98 -----------
>>  configure.ac               |   2 +-
>>  m4/manywarnings.m4         | 334 +++++++++++++++++++++++++++++++++++++
>>  m4/virt-viewer-warnings.m4 | 159 ++++++++++++++++++
>>  m4/warnings.m4             | 115 +++++++++++++
>>  prepare-release.sh         |   2 +-
>>  6 files changed, 610 insertions(+), 100 deletions(-)
>>  delete mode 100644 acinclude.m4
>>  create mode 100644 m4/manywarnings.m4
>>  create mode 100644 m4/virt-viewer-warnings.m4
>>  create mode 100644 m4/warnings.m4
>>
>> diff --git a/acinclude.m4 b/acinclude.m4
>> deleted file mode 100644
>> index 68398a6..0000000
>> --- a/acinclude.m4
>> +++ /dev/null
>> @@ -1,98 +0,0 @@
>> -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
>> -AC_DEFUN([VIRT_VIEWER_COMPILE_WARNINGS],[
>> -    dnl ******************************
>> -    dnl More compiler warnings
>> -    dnl ******************************
>> -
>> -    AC_ARG_ENABLE(compile-warnings,
>> -                  AC_HELP_STRING([--enable-compile-warnings=@<:@no/minimum/yes/maximum/error@:>@],
>> -                                 [Turn on compiler warnings]),,
>> -                  [enable_compile_warnings="m4_default([$1],[maximum])"])
>> -
>> -    warnCFLAGS=
>> -
>> -    try_compiler_flags="-fexceptions -fstack-protector --param=ssp-buffer-size=4 -fasynchronous-unwind-tables"
>> -
>> -    case "$enable_compile_warnings" in
>> -    no)
>> -       ;;
>> -    minimum)
>> -       try_compiler_flags="$try_compiler_flags -Wall"
>> -       ;;
>> -    yes)
>> -       try_compiler_flags="$try_compiler_flags -Wall -Wmissing-prototypes -std=c99"
>> -       ;;
>> -    maximum|error)
>> -       try_compiler_flags="$try_compiler_flags -Wall -Wmissing-prototypes -std=c99 -Wnested-externs -Wpointer-arith"
>> -        try_compiler_flags="$try_compiler_flags -Wextra -Wshadow -Wcast-align -Wwrite-strings -Waggregate-return"
>> -        # Removed -Wstrict-prototypes to avoid GTK bug
>> -       try_compiler_flags="$try_compiler_flags -Winline -Wredundant-decls -Wdeprecated-declarations -Wno-sign-compare"
>> -       # Remove as glib function casts hit
>> -       try_compiler_flags="$try_compiler_flags -Wno-cast-function-type"
>> -       if test "$enable_compile_warnings" = "error" ; then
>> -           try_compiler_flags="$try_compiler_flags -Werror"
>> -       fi
>> -       ;;
>> -    *)
>> -       AC_MSG_ERROR(Unknown argument '$enable_compile_warnings' to --enable-compile-warnings)
>> -       ;;
>> -    esac
>> -
>> -    AH_VERBATIM([FORTIFY_SOURCE],
>> -                [/* Enable compile-time and run-time bounds-checking, and some warnings. */
>> -                 #if !defined _FORTIFY_SOURCE && defined __OPTIMIZE__ && __OPTIMIZE__
>> -                 # define _FORTIFY_SOURCE 2
>> -                 #endif
>> -                ])
>> -
>> -    compiler_flags=
>> -    for option in $try_compiler_flags; do
>> -       SAVE_CFLAGS="$CFLAGS"
>> -       CFLAGS="$CFLAGS $option"
>> -       AC_MSG_CHECKING([whether gcc understands $option])
>> -       AC_TRY_COMPILE([], [],
>> -               has_option=yes,
>> -               has_option=no,)
>> -       CFLAGS="$SAVE_CFLAGS"
>> -       AC_MSG_RESULT($has_option)
>> -       if test $has_option = yes; then
>> -         compiler_flags="$compiler_flags $option"
>> -       fi
>> -       unset has_option
>> -       unset SAVE_CFLAGS
>> -    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"
>> -    AC_SUBST(WARN_CFLAGS)
>> -])
>> diff --git a/configure.ac b/configure.ac
>> index 5598c61..8ff69ac 100644
>> --- a/configure.ac
>> +++ b/configure.ac
>> @@ -90,7 +90,7 @@ m4_if(m4_version_compare([2.61a.100],
>>        [AC_CONFIG_LINKS([$GNUmakefile:$GNUmakefile], [],
>>          [GNUmakefile=$GNUmakefile])])
>>
>> -VIRT_VIEWER_COMPILE_WARNINGS(maximum)
>> +VIRT_VIEWER_COMPILE_WARNINGS()
>>
>>  GETTEXT_PACKAGE=virt-viewer
>>  AC_SUBST(GETTEXT_PACKAGE)
>> diff --git a/m4/manywarnings.m4 b/m4/manywarnings.m4
>> new file mode 100644
>> index 0000000..e0488a5
>> --- /dev/null
>> +++ b/m4/manywarnings.m4
>> @@ -0,0 +1,334 @@
>> +# manywarnings.m4 serial 17
>> +dnl Copyright (C) 2008-2019 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.
>> +#
>> +# The effects of this macro depend on the current language (_AC_LANG).
>> +AC_DEFUN([gl_MANYWARN_ALL_GCC],
>> +[_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])
>> +
>> +# Specialization for _AC_LANG = C.
>> +# Use of m4_defun rather than AC_DEFUN works around a bug in autoconf < 2.63b.
>> +m4_defun([gl_MANYWARN_ALL_GCC(C)],
>> +[
>> +  AC_LANG_PUSH([C])
>> +
>> +  dnl First, check for some issues that only occur when combining multiple
>> +  dnl gcc warning categories.
>> +  AC_REQUIRE([AC_PROG_CC])
>> +  if test -n "$GCC"; then
>> +
>> +    dnl Check if -W -Werror -Wno-missing-field-initializers is supported
>> +    dnl with the current $CC $CFLAGS $CPPFLAGS.
>> +    AC_CACHE_CHECK([whether -Wno-missing-field-initializers is supported],
>> +      [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"
>> +      ])
>> +
>> +    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_CACHE_CHECK([whether -Wno-missing-field-initializers is needed],
>> +        [gl_cv_cc_nomfi_needed],
>> +        [gl_save_CFLAGS="$CFLAGS"
>> +         CFLAGS="$CFLAGS -W -Werror"
>> +         AC_COMPILE_IFELSE(
>> +           [AC_LANG_PROGRAM(
>> +              [[int f (void)
>> +                {
>> +                  typedef struct { int a; int b; } s_t;
>> +                  s_t s1 = { 0, };
>> +                  return s1.b;
>> +                }
>> +              ]],
>> +              [[]])],
>> +           [gl_cv_cc_nomfi_needed=no],
>> +           [gl_cv_cc_nomfi_needed=yes])
>> +         CFLAGS="$gl_save_CFLAGS"
>> +        ])
>> +    fi
>> +
>> +    dnl Next, check if -Werror -Wuninitialized is useful with the
>> +    dnl user's choice of $CFLAGS; some versions of gcc warn that it
>> +    dnl has no effect if -O is not also used
>> +    AC_CACHE_CHECK([whether -Wuninitialized is supported],
>> +      [gl_cv_cc_uninitialized_supported],
>> +      [gl_save_CFLAGS="$CFLAGS"
>> +       CFLAGS="$CFLAGS -Werror -Wuninitialized"
>> +       AC_COMPILE_IFELSE(
>> +         [AC_LANG_PROGRAM([[]], [[]])],
>> +         [gl_cv_cc_uninitialized_supported=yes],
>> +         [gl_cv_cc_uninitialized_supported=no])
>> +       CFLAGS="$gl_save_CFLAGS"
>> +      ])
>> +
>> +  fi
>> +
>> +  # List all gcc warning categories.
>> +  # To compare this list to your installed GCC's, run this Bash command:
>> +  #
>> +  # comm -3 \
>> +  #  <((sed -n 's/^  *\(-[^ 0-9][^ ]*\) .*/\1/p' manywarnings.m4; \
>> +  #     awk '/^[^#]/ {print $1}' ../build-aux/gcc-warning.spec) | sort) \
>> +  #  <(LC_ALL=C gcc --help=warnings | sed -n 's/^  \(-[^ ]*\) .*/\1/p' | sort)
>> +
>> +  gl_manywarn_set=
>> +  for gl_manywarn_item in -fno-common \
>> +    -W \
>> +    -Waddress \
>> +    -Waggressive-loop-optimizations \
>> +    -Wall \
>> +    -Wattribute-alias \
>> +    -Wattributes \
>> +    -Wbad-function-cast \
>> +    -Wbool-compare \
>> +    -Wbool-operation \
>> +    -Wbuiltin-declaration-mismatch \
>> +    -Wbuiltin-macro-redefined \
>> +    -Wcast-align \
>> +    -Wcast-align=strict \
>> +    -Wcast-function-type \
>> +    -Wchar-subscripts \
>> +    -Wclobbered \
>> +    -Wcomment \
>> +    -Wcomments \
>> +    -Wcoverage-mismatch \
>> +    -Wcpp \
>> +    -Wdangling-else \
>> +    -Wdate-time \
>> +    -Wdeprecated \
>> +    -Wdeprecated-declarations \
>> +    -Wdesignated-init \
>> +    -Wdisabled-optimization \
>> +    -Wdiscarded-array-qualifiers \
>> +    -Wdiscarded-qualifiers \
>> +    -Wdiv-by-zero \
>> +    -Wdouble-promotion \
>> +    -Wduplicated-branches \
>> +    -Wduplicated-cond \
>> +    -Wduplicate-decl-specifier \
>> +    -Wempty-body \
>> +    -Wendif-labels \
>> +    -Wenum-compare \
>> +    -Wexpansion-to-defined \
>> +    -Wextra \
>> +    -Wformat-contains-nul \
>> +    -Wformat-extra-args \
>> +    -Wformat-nonliteral \
>> +    -Wformat-security \
>> +    -Wformat-signedness \
>> +    -Wformat-y2k \
>> +    -Wformat-zero-length \
>> +    -Wframe-address \
>> +    -Wfree-nonheap-object \
>> +    -Whsa \
>> +    -Wif-not-aligned \
>> +    -Wignored-attributes \
>> +    -Wignored-qualifiers \
>> +    -Wimplicit \
>> +    -Wimplicit-function-declaration \
>> +    -Wimplicit-int \
>> +    -Wincompatible-pointer-types \
>> +    -Winit-self \
>> +    -Winline \
>> +    -Wint-conversion \
>> +    -Wint-in-bool-context \
>> +    -Wint-to-pointer-cast \
>> +    -Winvalid-memory-model \
>> +    -Winvalid-pch \
>> +    -Wlogical-not-parentheses \
>> +    -Wlogical-op \
>> +    -Wmain \
>> +    -Wmaybe-uninitialized \
>> +    -Wmemset-elt-size \
>> +    -Wmemset-transposed-args \
>> +    -Wmisleading-indentation \
>> +    -Wmissing-attributes \
>> +    -Wmissing-braces \
>> +    -Wmissing-declarations \
>> +    -Wmissing-field-initializers \
>> +    -Wmissing-include-dirs \
>> +    -Wmissing-parameter-type \
>> +    -Wmissing-prototypes \
>> +    -Wmultichar \
>> +    -Wmultistatement-macros \
>> +    -Wnarrowing \
>> +    -Wnested-externs \
>> +    -Wnonnull \
>> +    -Wnonnull-compare \
>> +    -Wnull-dereference \
>> +    -Wodr \
>> +    -Wold-style-declaration \
>> +    -Wold-style-definition \
>> +    -Wopenmp-simd \
>> +    -Woverflow \
>> +    -Woverlength-strings \
>> +    -Woverride-init \
>> +    -Wpacked \
>> +    -Wpacked-bitfield-compat \
>> +    -Wpacked-not-aligned \
>> +    -Wparentheses \
>> +    -Wpointer-arith \
>> +    -Wpointer-compare \
>> +    -Wpointer-sign \
>> +    -Wpointer-to-int-cast \
>> +    -Wpragmas \
>> +    -Wpsabi \
>> +    -Wrestrict \
>> +    -Wreturn-local-addr \
>> +    -Wreturn-type \
>> +    -Wscalar-storage-order \
>> +    -Wsequence-point \
>> +    -Wshadow \
>> +    -Wshift-count-negative \
>> +    -Wshift-count-overflow \
>> +    -Wshift-negative-value \
>> +    -Wsizeof-array-argument \
>> +    -Wsizeof-pointer-div \
>> +    -Wsizeof-pointer-memaccess \
>> +    -Wstack-protector \
>> +    -Wstrict-aliasing \
>> +    -Wstrict-overflow \
>> +    -Wstrict-prototypes \
>> +    -Wstringop-truncation \
>> +    -Wsuggest-attribute=cold \
>> +    -Wsuggest-attribute=const \
>> +    -Wsuggest-attribute=format \
>> +    -Wsuggest-attribute=malloc \
>> +    -Wsuggest-attribute=noreturn \
>> +    -Wsuggest-attribute=pure \
>> +    -Wsuggest-final-methods \
>> +    -Wsuggest-final-types \
>> +    -Wswitch \
>> +    -Wswitch-bool \
>> +    -Wswitch-unreachable \
>> +    -Wsync-nand \
>> +    -Wsystem-headers \
>> +    -Wtautological-compare \
>> +    -Wtrampolines \
>> +    -Wtrigraphs \
>> +    -Wtype-limits \
>> +    -Wuninitialized \
>> +    -Wunknown-pragmas \
>> +    -Wunsafe-loop-optimizations \
>> +    -Wunused \
>> +    -Wunused-but-set-parameter \
>> +    -Wunused-but-set-variable \
>> +    -Wunused-function \
>> +    -Wunused-label \
>> +    -Wunused-local-typedefs \
>> +    -Wunused-macros \
>> +    -Wunused-parameter \
>> +    -Wunused-result \
>> +    -Wunused-value \
>> +    -Wunused-variable \
>> +    -Wvarargs \
>> +    -Wvariadic-macros \
>> +    -Wvector-operation-performance \
>> +    -Wvla \
>> +    -Wvolatile-register-var \
>> +    -Wwrite-strings \
>> +    \
>> +    ; do
>> +    gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item"
>> +  done
>> +
>> +  # gcc --help=warnings outputs an unusual form for these options; list
>> +  # them here so that the above 'comm' command doesn't report a false match.
>> +  # Would prefer "min (PTRDIFF_MAX, SIZE_MAX)", but it must be a literal.
>> +  # Also, AC_COMPUTE_INT requires it to fit in a long; it is 2**63 on
>> +  # the only platforms where it does not fit in a long, so make that
>> +  # a special case.
>> +  AC_MSG_CHECKING([max safe object size])
>> +  AC_COMPUTE_INT([gl_alloc_max],
>> +    [LONG_MAX < (PTRDIFF_MAX < (size_t) -1 ? PTRDIFF_MAX : (size_t) -1)
>> +     ? -1
>> +     : PTRDIFF_MAX < (size_t) -1 ? (long) PTRDIFF_MAX : (long) (size_t) -1],
>> +    [[#include <limits.h>
>> +      #include <stddef.h>
>> +      #include <stdint.h>
>> +    ]],
>> +    [gl_alloc_max=2147483647])
>> +  case $gl_alloc_max in
>> +    -1) gl_alloc_max=9223372036854775807;;
>> +  esac
>> +  AC_MSG_RESULT([$gl_alloc_max])
>> +  gl_manywarn_set="$gl_manywarn_set -Walloc-size-larger-than=$gl_alloc_max"
>> +  gl_manywarn_set="$gl_manywarn_set -Warray-bounds=2"
>> +  gl_manywarn_set="$gl_manywarn_set -Wformat-overflow=2"
>> +  gl_manywarn_set="$gl_manywarn_set -Wformat-truncation=2"
>> +  gl_manywarn_set="$gl_manywarn_set -Wimplicit-fallthrough=5"
>> +  gl_manywarn_set="$gl_manywarn_set -Wnormalized=nfc"
>> +  gl_manywarn_set="$gl_manywarn_set -Wshift-overflow=2"
>> +  gl_manywarn_set="$gl_manywarn_set -Wstringop-overflow=2"
>> +  gl_manywarn_set="$gl_manywarn_set -Wunused-const-variable=2"
>> +  gl_manywarn_set="$gl_manywarn_set -Wvla-larger-than=4031"
>> +
>> +  # These are needed for older GCC versions.
>> +  if test -n "$GCC"; then
>> +    case `($CC --version) 2>/dev/null` in
>> +      'gcc (GCC) '[[0-3]].* | \
>> +      'gcc (GCC) '4.[[0-7]].*)
>> +        gl_manywarn_set="$gl_manywarn_set -fdiagnostics-show-option"
>> +        gl_manywarn_set="$gl_manywarn_set -funit-at-a-time"
>> +          ;;
>> +    esac
>> +  fi
>> +
>> +  # Disable specific options as needed.
>> +  if test "$gl_cv_cc_nomfi_needed" = yes; then
>> +    gl_manywarn_set="$gl_manywarn_set -Wno-missing-field-initializers"
>> +  fi
>> +
>> +  if test "$gl_cv_cc_uninitialized_supported" = no; then
>> +    gl_manywarn_set="$gl_manywarn_set -Wno-uninitialized"
>> +  fi
>> +
>> +  $1=$gl_manywarn_set
>> +
>> +  AC_LANG_POP([C])
>> +])
>> +
>> +# Specialization for _AC_LANG = C++.
>> +# Use of m4_defun rather than AC_DEFUN works around a bug in autoconf < 2.63b.
>> +m4_defun([gl_MANYWARN_ALL_GCC(C++)],
>> +[
>> +  gl_MANYWARN_ALL_GCC_CXX_IMPL([$1])
>> +])
>> diff --git a/m4/virt-viewer-warnings.m4 b/m4/virt-viewer-warnings.m4
>> new file mode 100644
>> index 0000000..4036b75
>> --- /dev/null
>> +++ b/m4/virt-viewer-warnings.m4
>> @@ -0,0 +1,159 @@
>> +dnl
>> +dnl Enable all known GCC compiler warnings, except for those
>> +dnl we can't yet cope with
>> +dnl
>> +AC_DEFUN([VIRT_VIEWER_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"
>> +    # Too many to deal with
>> +    dontwarn="$dontwarn -Wconversion"
>> +    # Too many to deal with
>> +    dontwarn="$dontwarn -Wsign-conversion"
>> +    # We need to use long long in many places
>> +    dontwarn="$dontwarn -Wlong-long"
>> +    # Not a problem since we don't use -fstrict-overflow
>> +    dontwarn="$dontwarn -Wstrict-overflow"
>> +    # Not a problem since we don't use -funsafe-loop-optimizations
>> +    dontwarn="$dontwarn -Wunsafe-loop-optimizations"
>> +    # gcc 4.4.6 complains this is C++ only; gcc 4.7.0 implies this from -Wall
>> +    dontwarn="$dontwarn -Wenum-compare"
>> +    # /usr/include/spice-1/spice/protocol.h triggers violations
>> +    dontwarn="$dontwarn -Wpacked"
>> +
>> +    # g_clear_object & G_ATOMIC_OP_USE_GCC_BUILTINS causes
>> +    # violations with this. XXX Fix glib ?
>> +    dontwarn="$dontwarn -Wbad-function-cast"
>> +
>> +    # Due to gutils.h bug in g_bit_storage
>> +    wantwarn="$wantwarn -Wno-sign-conversion"
>> +    wantwarn="$wantwarn -Wno-conversion"
>> +    # We can't enable this due to horrible spice_usb_device_get_description
>> +    # signature
>> +#    wantwarn="$wantwarn -Wno-format-nonliteral"
>> +
>> +    # 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])
>> +
>> +    # 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...
>> +    wantwarn="$wantwarn -Wno-sign-compare"
>> +
>> +    # GNULIB expects this to be part of -Wc++-compat, but we turn
>> +    # that one off, so we need to manually enable this again
>> +    wantwarn="$wantwarn -Wjump-misses-init"
>> +
>> +    # We do "bad" function casts all the time for event callbacks
>> +    wantwarn="$wantwarn -Wno-cast-function-type"
>> +
>> +    # GNULIB turns on -Wformat=2 which implies -Wformat-nonliteral,
>> +    # so we need to manually re-exclude it.
>> +    wantwarn="$wantwarn -Wno-format-nonliteral"
>> +
>> +    # This should be < 256 really. Currently we're down to 4096,
>> +    # but using 1024 bytes sized buffers (mostly for virStrerror)
>> +    # stops us from going down further
>> +    wantwarn="$wantwarn -Wframe-larger-than=4096"
>> +
>> +    # We want to allow use of comments to annotate switch fallthrough
>> +    wantwarn="$wantwarn -Wimplicit-fallthrough=2"
>> +
>> +    # Extra special flags
>> +    dnl -fstack-protector stuff passes gl_WARN_ADD with gcc
>> +    dnl on Mingw32, but fails when actually used
>> +    case $host in
>> +       aarch64-*-*)
>> +       dnl "error: -fstack-protector not supported for this target [-Werror]"
>> +       ;;
>> +       *-*-linux*)
>> +       dnl Prefer -fstack-protector-strong if it's available.
>> +       dnl There doesn't seem to be great overhead in adding
>> +       dnl -fstack-protector-all instead of -fstack-protector.
>> +       dnl
>> +       dnl We also don't need ssp-buffer-size with -all or -strong,
>> +       dnl since functions are protected regardless of buffer size.
>> +       dnl wantwarn="$wantwarn --param=ssp-buffer-size=4"
>> +       wantwarn="$wantwarn -fstack-protector-strong"
>> +       ;;
>> +       *-*-freebsd*)
>> +       dnl FreeBSD ships old gcc 4.2.1 which doesn't handle
>> +       dnl -fstack-protector-all well
>> +       wantwarn="$wantwarn -fstack-protector"
>> +
>> +       wantwarn="$wantwarn -Wno-unused-command-line-argument"
>> +       ;;
>> +    esac
>> +    wantwarn="$wantwarn -fexceptions"
>> +    wantwarn="$wantwarn -fasynchronous-unwind-tables"
>> +
>> +    # Need -fipa-pure-const in order to make -Wsuggest-attribute=pure
>> +    # fire even without -O.
>> +    wantwarn="$wantwarn -fipa-pure-const"
>> +    # We should eventually enable this, but right now there are at
>> +    # least 75 functions triggering warnings.
>> +    wantwarn="$wantwarn -Wno-suggest-attribute=pure"
>> +    wantwarn="$wantwarn -Wno-suggest-attribute=const"
>> +
>> +    if test "$set_werror" = "yes"
>> +    then
>> +      wantwarn="$wantwarn -Werror"
>> +    fi
>> +
>> +    # Check for $CC support of each warning
>> +    for w in $wantwarn; do
>> +      gl_WARN_ADD([$w])
>> +    done
>> +
>> +    case $host in
>> +        *-*-linux*)
>> +        dnl Fall back to -fstack-protector-all if -strong is not available
>> +        case $WARN_CFLAGS in
>> +        *-fstack-protector-strong*)
>> +        ;;
>> +        *)
>> +            gl_WARN_ADD(["-fstack-protector-all"])
>> +        ;;
>> +        esac
>> +        ;;
>> +    esac
>> +
>> +    AH_VERBATIM([FORTIFY_SOURCE],
>> +    [/* Enable compile-time and run-time bounds-checking, and some warnings,
>> +        without upsetting newer glibc. */
>> +     #if !defined _FORTIFY_SOURCE && defined __OPTIMIZE__ && __OPTIMIZE__
>> +     # define _FORTIFY_SOURCE 2
>> +     #endif
>> +    ])
>> +])
>> diff --git a/m4/warnings.m4 b/m4/warnings.m4
>> new file mode 100644
>> index 0000000..235cac6
>> --- /dev/null
>> +++ b/m4/warnings.m4
>> @@ -0,0 +1,115 @@
>> +# warnings.m4 serial 14
>> +dnl Copyright (C) 2008-2019 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_COMPILER_OPTION_IF(OPTION, [IF-SUPPORTED], [IF-NOT-SUPPORTED],
>> +#                       [PROGRAM = AC_LANG_PROGRAM()])
>> +# -----------------------------------------------------------------
>> +# Check if the compiler supports OPTION when compiling PROGRAM.
>> +#
>> +# The effects of this macro depend on the current language (_AC_LANG).
>> +AC_DEFUN([gl_COMPILER_OPTION_IF],
>> +[
>> +dnl FIXME: gl_Warn must be used unquoted until we can assume Autoconf
>> +dnl 2.64 or newer.
>> +AS_VAR_PUSHDEF([gl_Warn], [gl_cv_warn_[]_AC_LANG_ABBREV[]_$1])dnl
>> +AS_VAR_PUSHDEF([gl_Flags], [_AC_LANG_PREFIX[]FLAGS])dnl
>> +AS_LITERAL_IF([$1],
>> +  [m4_pushdef([gl_Positive], m4_bpatsubst([$1], [^-Wno-], [-W]))],
>> +  [gl_positive="$1"
>> +case $gl_positive in
>> +  -Wno-*) gl_positive=-W`expr "X$gl_positive" : 'X-Wno-\(.*\)'` ;;
>> +esac
>> +m4_pushdef([gl_Positive], [$gl_positive])])dnl
>> +AC_CACHE_CHECK([whether _AC_LANG compiler handles $1], m4_defn([gl_Warn]), [
>> +  gl_save_compiler_FLAGS="$gl_Flags"
>> +  gl_AS_VAR_APPEND(m4_defn([gl_Flags]),
>> +    [" $gl_unknown_warnings_are_errors ]m4_defn([gl_Positive])["])
>> +  AC_LINK_IFELSE([m4_default([$4], [AC_LANG_PROGRAM([])])],
>> +                 [AS_VAR_SET(gl_Warn, [yes])],
>> +                 [AS_VAR_SET(gl_Warn, [no])])
>> +  gl_Flags="$gl_save_compiler_FLAGS"
>> +])
>> +AS_VAR_IF(gl_Warn, [yes], [$2], [$3])
>> +m4_popdef([gl_Positive])dnl
>> +AS_VAR_POPDEF([gl_Flags])dnl
>> +AS_VAR_POPDEF([gl_Warn])dnl
>> +])
>> +
>> +# gl_UNKNOWN_WARNINGS_ARE_ERRORS
>> +# ------------------------------
>> +# Clang doesn't complain about unknown warning options unless one also
>> +# specifies -Wunknown-warning-option -Werror.  Detect this.
>> +#
>> +# The effects of this macro depend on the current language (_AC_LANG).
>> +AC_DEFUN([gl_UNKNOWN_WARNINGS_ARE_ERRORS],
>> +[_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])
>> +
>> +# Specialization for _AC_LANG = C. This macro can be AC_REQUIREd.
>> +# Use of m4_defun rather than AC_DEFUN works around a bug in autoconf < 2.63b.
>> +m4_defun([gl_UNKNOWN_WARNINGS_ARE_ERRORS(C)],
>> +[
>> +  AC_LANG_PUSH([C])
>> +  gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL
>> +  AC_LANG_POP([C])
>> +])
>> +
>> +# Specialization for _AC_LANG = C++. This macro can be AC_REQUIREd.
>> +# Use of m4_defun rather than AC_DEFUN works around a bug in autoconf < 2.63b.
>> +m4_defun([gl_UNKNOWN_WARNINGS_ARE_ERRORS(C++)],
>> +[
>> +  AC_LANG_PUSH([C++])
>> +  gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL
>> +  AC_LANG_POP([C++])
>> +])
>> +
>> +# Specialization for _AC_LANG = Objective C. This macro can be AC_REQUIREd.
>> +# Use of m4_defun rather than AC_DEFUN works around a bug in autoconf < 2.63b.
>> +m4_defun([gl_UNKNOWN_WARNINGS_ARE_ERRORS(Objective C)],
>> +[
>> +  AC_LANG_PUSH([Objective C])
>> +  gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL
>> +  AC_LANG_POP([Objective C])
>> +])
>> +
>> +AC_DEFUN([gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL],
>> +[gl_COMPILER_OPTION_IF([-Werror -Wunknown-warning-option],
>> +   [gl_unknown_warnings_are_errors='-Wunknown-warning-option -Werror'],
>> +   [gl_unknown_warnings_are_errors=])])
>> +
>> +# gl_WARN_ADD(OPTION, [VARIABLE = WARN_CFLAGS/WARN_CXXFLAGS],
>> +#             [PROGRAM = AC_LANG_PROGRAM()])
>> +# -----------------------------------------------------------
>> +# Adds parameter to WARN_CFLAGS/WARN_CXXFLAGS if the compiler supports it
>> +# when compiling PROGRAM.  For example, gl_WARN_ADD([-Wparentheses]).
>> +#
>> +# If VARIABLE is a variable name, AC_SUBST it.
>> +#
>> +# The effects of this macro depend on the current language (_AC_LANG).
>> +AC_DEFUN([gl_WARN_ADD],
>> +[AC_REQUIRE([gl_UNKNOWN_WARNINGS_ARE_ERRORS(]_AC_LANG[)])
>> +gl_COMPILER_OPTION_IF([$1],
>> +  [gl_AS_VAR_APPEND(m4_if([$2], [], [[WARN_]_AC_LANG_PREFIX[FLAGS]], [[$2]]), [" $1"])],
>> +  [],
>> +  [$3])
>> +m4_ifval([$2],
>> +         [AS_LITERAL_IF([$2], [AC_SUBST([$2])])],
>> +         [AC_SUBST([WARN_]_AC_LANG_PREFIX[FLAGS])])dnl
>> +])
>> +
>> +# Local Variables:
>> +# mode: autoconf
>> +# End:
>> diff --git a/prepare-release.sh b/prepare-release.sh
>> index c2fbfdb..11e6abb 100755
>> --- a/prepare-release.sh
>> +++ b/prepare-release.sh
>> @@ -14,7 +14,7 @@ mkdir build
>>  cd build
>>
>>  ../autogen.sh --prefix=$INSTALL_ROOT \
>> -    --enable-compile-warnings=error
>> +    --enable-werror
>>
>>  make
>>  make install
>> --
>> 2.20.1
>>
>> _______________________________________________
>> virt-tools-list mailing list
>> virt-tools-list at redhat.com
>> https://www.redhat.com/mailman/listinfo/virt-tools-list
> 
> _______________________________________________
> virt-tools-list mailing list
> virt-tools-list at redhat.com
> https://www.redhat.com/mailman/listinfo/virt-tools-list
> 


-- 
Eduardo de Barros Lima (Etrunko)
Software Engineer - RedHat
etrunko at redhat.com




More information about the virt-tools-list mailing list