[libvirt PATCH 021/351] meson: add compiler warnings

Pavel Hrdina phrdina at redhat.com
Wed Jul 22 15:49:59 UTC 2020


On Wed, Jul 22, 2020 at 10:13:50AM +0200, Peter Krempa wrote:
> On Thu, Jul 16, 2020 at 11:54:17 +0200, Pavel Hrdina wrote:
> > Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
> > ---
> >  config.h                    |   7 +
> >  configure.ac                |   3 -
> >  m4/virt-compile-warnings.m4 | 255 ------------------------------------
> >  m4/virt-warnings.m4         | 115 ----------------
> >  meson.build                 | 221 ++++++++++++++++++++++++++++---
> >  5 files changed, 211 insertions(+), 390 deletions(-)
> >  delete mode 100644 m4/virt-compile-warnings.m4
> >  delete mode 100644 m4/virt-warnings.m4
> > 
> > diff --git a/config.h b/config.h
> > index 9c433ad4c0f..368688f3d01 100644
> > --- a/config.h
> > +++ b/config.h
> > @@ -1,5 +1,12 @@
> >  #include <meson-config.h>
> >  
> > +/* 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
> > +
> >  #ifndef __GNUC__
> >  # error "Libvirt requires GCC >= 4.8, or CLang"
> >  #endif
> > diff --git a/configure.ac b/configure.ac
> > index 8f16b364de6..56a471fc3ab 100644
> > --- a/configure.ac
> > +++ b/configure.ac
> > @@ -161,7 +161,6 @@ fi
> >  
> >  # Check for compiler and library settings.
> >  
> > -LIBVIRT_COMPILE_WARNINGS
> >  LIBVIRT_LINKER_RELRO
> >  LIBVIRT_LINKER_NO_INDIRECT
> >  LIBVIRT_LINKER_NO_UNDEFINED
> > @@ -849,8 +848,6 @@ AC_MSG_NOTICE([])
> >  AC_MSG_NOTICE([Miscellaneous])
> >  AC_MSG_NOTICE([])
> >  LIBVIRT_RESULT_DEBUG
> > -LIBVIRT_RESULT([Use -Werror], [$enable_werror])
> > -LIBVIRT_RESULT([Warning Flags], [$WARN_CFLAGS])
> >  LIBVIRT_RESULT_DTRACE
> >  LIBVIRT_RESULT_NUMAD
> >  LIBVIRT_RESULT_INIT_SCRIPT
> > diff --git a/m4/virt-compile-warnings.m4 b/m4/virt-compile-warnings.m4
> > deleted file mode 100644
> > index d3538d59f82..00000000000
> > --- a/m4/virt-compile-warnings.m4
> > +++ /dev/null
> > @@ -1,255 +0,0 @@
> > -dnl
> > -dnl Enable all known GCC compiler warnings, except for those
> > -dnl we can't yet cope with
> > -dnl
> > -AC_DEFUN([LIBVIRT_COMPILE_WARNINGS],[
> > -    dnl ******************************
> > -    dnl More compiler warnings
> > -    dnl ******************************
> > -
> > -    LIBVIRT_ARG_ENABLE([WERROR], [Use -Werror (if supported)], [check])
> > -    if test "$enable_werror" = "check"; then
> > -        if test -d $srcdir/.git; then
> > -            is_git_version=true
> > -            enable_werror=yes
> > -        else
> > -            enable_werror=no
> > -        fi
> > -    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"
> > -    # Need to allow bad cast for execve()
> > -    dontwarn="$dontwarn -Wcast-qual"
> > -    # We need to use long long in many places
> > -    dontwarn="$dontwarn -Wlong-long"
> > -    # We allow manual list of all enum cases without default:
> > -    dontwarn="$dontwarn -Wswitch-default"
> > -    # 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"
> > -    # gcc 5.1 -Wformat-signedness mishandles enums, not ready for prime time
> > -    dontwarn="$dontwarn -Wformat-signedness"
> > -    # Several conditionals expand the same on both branches
> > -    # depending on the particular platform/architecture
> > -    dontwarn="$dontwarn -Wduplicated-branches"
> > -    # > This warning does not generally indicate that there is anything wrong
> > -    # > with your code; it merely indicates that GCC's optimizers are unable
> > -    # > to handle the code effectively.
> > -    # Source: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
> > -    dontwarn="$dontwarn -Wdisabled-optimization"
> > -    # Various valid glib APIs/macros trigger this warning
> > -    dontwarn="$dontwarn -Wbad-function-cast"
> > -
> > -    # Broken in 6.0 and later
> > -    #     https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69602
> > -    AC_CACHE_CHECK([whether gcc gives bogus warnings for -Wlogical-op],
> > -      [lv_cv_gcc_wlogical_op_equal_expr_broken], [
> > -        save_CFLAGS="$CFLAGS"
> > -        CFLAGS="-O2 -Wlogical-op -Werror"
> > -        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
> > -          #define TEST1 1
> > -          #define TEST2 TEST1
> > -        ]], [[
> > -          int test = 0;
> > -          return test == TEST1 || test == TEST2;]])],
> > -        [lv_cv_gcc_wlogical_op_equal_expr_broken=no],
> > -        [lv_cv_gcc_wlogical_op_equal_expr_broken=yes])
> > -        CFLAGS="$save_CFLAGS"])
> > -
> > -    AC_CACHE_CHECK([whether clang gives bogus warnings for -Wdouble-promotion],
> > -      [lv_cv_clang_double_promotion_broken], [
> > -        save_CFLAGS="$CFLAGS"
> > -        CFLAGS="-O2 -Wdouble-promotion -Werror"
> > -        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
> > -          #include <math.h>
> > -        ]], [[
> > -          float f = 0.0;
> > -	  return isnan(f);]])],
> > -        [lv_cv_clang_double_promotion_broken=no],
> > -        [lv_cv_clang_double_promotion_broken=yes])
> > -        CFLAGS="$save_CFLAGS"])
> > -
> > -    if test "$lv_cv_clang_double_promotion_broken" = "yes";
> > -    then
> > -      dontwarn="$dontwarn -Wdouble-promotion"
> > -    fi
> > -
> > -    # Clang complains about unused static inline functions
> > -    # which are common with G_DEFINE_AUTOPTR_CLEANUP_FUNC
> > -    AC_CACHE_CHECK([whether clang gives bogus warnings for -Wunused-function],
> > -      [lv_cv_clang_unused_function_broken], [
> > -        save_CFLAGS="$CFLAGS"
> > -        CFLAGS="-Wunused-function -Werror"
> > -        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
> > -           static inline void foo(void) {}
> > -        ]], [[
> > -          return 0]])],
> > -        [lv_cv_clang_unused_function_broken=no],
> > -        [lv_cv_clang_unused_function_broken=yes])
> > -        CFLAGS="$save_CFLAGS"])
> > -
> > -    # We might fundamentally need some of these disabled forever, but
> > -    # ideally we'd turn many of them on
> > -    dontwarn="$dontwarn -Wfloat-equal"
> > -    dontwarn="$dontwarn -Wdeclaration-after-statement"
> > -    dontwarn="$dontwarn -Wpacked"
> > -    dontwarn="$dontwarn -Wunused-macros"
> > -    dontwarn="$dontwarn -Woverlength-strings"
> > -    dontwarn="$dontwarn -Wstack-protector"
> > -    dontwarn="$dontwarn -Wsuggest-attribute=malloc"
> > -
> > -    # 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])
> > -
> > -    # -Wunused-functin is implied by -Wall we must turn it
> > -    # off explicitly.
> > -    if test "$lv_cv_clang_unused_function_broken" = "yes";
> > -    then
> > -      wantwarn="$wantwarn -Wno-unused-function"
> > -    fi
> > -
> > -    # manywarnings 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"
> > -    # We do "bad" function casts all the time for event callbacks
> > -    wantwarn="$wantwarn -Wno-cast-function-type"
> > -
> > -    # CLang incorrectly complains about dup typedefs win gnu99 mode
> > -    # so use this CLang-specific arg to keep it quiet
> > -    wantwarn="$wantwarn -Wno-typedef-redefinition"
> > -
> > -    # manywarnings 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"
> > -
> > -    # manywarnings explicitly filters it out, preferring -Wswitch
> > -    # but that doesn't report missing enums if a default:
> > -    # is present.
> > -    wantwarn="$wantwarn -Wswitch-enum"
> > -
> > -    # manywarnings turns on -Wformat=2 which implies -Wformat-nonliteral,
> > -    # so we need to manually re-exclude it.
> > -    wantwarn="$wantwarn -Wno-format-nonliteral"
> > -
> > -    # -Wformat enables this by default, and we should keep it,
> > -    # but need to rewrite various areas of code first
> > -    wantwarn="$wantwarn -Wno-format-truncation"
> > -
> > -    # 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"
> > -    gl_WARN_ADD([-Wframe-larger-than=262144], [RELAXED_FRAME_LIMIT_CFLAGS])
> > -
> > -    # 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 "$enable_werror" = "yes"
> > -    then
> > -      wantwarn="$wantwarn -Werror"
> > -    fi
> > -
> > -    # Request the gnu99 standard which is the best choice with
> > -    # gcc 4.8.0. Not a warning flag, but the probing mechanism
> > -    # is convenient
> > -    wantwarn="$wantwarn -std=gnu99"
> > -
> > -    # 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
> > -
> > -    case $WARN_CFLAGS in
> > -        *-Wsuggest-attribute=format*)
> > -           AC_DEFINE([HAVE_SUGGEST_ATTRIBUTE_FORMAT], [1], [Whether -Wsuggest-attribute=format works])
> > -        ;;
> > -    esac
> > -
> > -    # Use security checked glibc headers
> > -    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
> > -    ])
> > -
> > -    if test "$gl_cv_warn_c__Wlogical_op" = yes &&
> > -       test "$lv_cv_gcc_wlogical_op_equal_expr_broken" = yes; then
> > -      AC_DEFINE_UNQUOTED([BROKEN_GCC_WLOGICALOP_EQUAL_EXPR], 1,
> > -        [Define to 1 if gcc -Wlogical-op reports false positive 'or' equal expr])
> > -    fi
> > -])
> > diff --git a/m4/virt-warnings.m4 b/m4/virt-warnings.m4
> > deleted file mode 100644
> > index d272365f0a1..00000000000
> > --- a/m4/virt-warnings.m4
> > +++ /dev/null
> > @@ -1,115 +0,0 @@
> > -# warnings.m4 serial 14
> > -dnl Copyright (C) 2008-2020 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/meson.build b/meson.build
> > index d9a95e049c0..2450a8bdd79 100644
> > --- a/meson.build
> > +++ b/meson.build
> > @@ -7,6 +7,7 @@ project(
> >          'buildtype=debugoptimized',
> >          'b_pie=true',
> >          'c_std=gnu99',
> > +        'warning_level=2',
> >      ],
> >  )
> >  
> > @@ -212,10 +213,8 @@ cc_flags = [
> >    '-Waddress',
> >    '-Waddress-of-packed-member',
> >    '-Waggressive-loop-optimizations',
> > -  '-Wall',
> >    '-Wattribute-warning',
> >    '-Wattributes',
> > -  '-Wbad-function-cast',
> >    '-Wbool-compare',
> >    '-Wbool-operation',
> >    '-Wbuiltin-declaration-mismatch',
> > @@ -232,27 +231,20 @@ cc_flags = [
> >    '-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',
> > @@ -299,9 +291,7 @@ cc_flags = [
> >    '-Wold-style-definition',
> >    '-Wopenmp-simd',
> >    '-Woverflow',
> > -  '-Woverlength-strings',
> >    '-Woverride-init',
> > -  '-Wpacked',
> >    '-Wpacked-bitfield-compat',
> >    '-Wpacked-not-aligned',
> >    '-Wparentheses',
> > @@ -323,15 +313,12 @@ cc_flags = [
> >    '-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',
> > @@ -340,21 +327,18 @@ cc_flags = [
> >    '-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',
> > @@ -392,6 +376,203 @@ cc_flags += [
> >    '-Wvla-larger-then=4031',
> >  ]
> >  
> > +cc_flags += [
> > +  # So we have -W enabled, and then have to explicitly turn off...
> > +  '-Wno-sign-compare',
> > +
> > +  # We do "bad" function casts all the time for event callbacks
> > +  '-Wno-cast-function-type',
> > +
> > +  # CLang incorrectly complains about dup typedefs win gnu99 mode
> > +  # so use this CLang-specific arg to keep it quiet
> > +  '-Wno-typedef-redefinition',
> > +
> > +  # We don't use -Wc++-compat so we have to enable it explicitly
> > +  '-Wjump-misses-init',
> > +
> > +  # TODO comment
> > +  '-Wswitch-enum',
> 
> TODO: fix all TODOs

Fixed, thanks.

> > +
> > +  # -Wformat=2 implies -Wformat-nonliteral so we need to manually exclude it
> > +  '-Wno-format-nonliteral',
> > +
> > +  # -Wformat enables this by default, and we should keep it,
> > +  # but need to rewrite various areas of code first
> > +  '-Wno-format-truncation',
> > +
> > +  # 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
> > +  '-Wframe-larger-than=4096',
> > +
> > +  # extra special flags
> > +  '-fexceptions',
> > +  '-fasynchronous-unwind-tables',
> > +
> > +  # Need -fipa-pure-const in order to make -Wsuggest-attribute=pure
> > +  # fire even without -O.
> > +  '-fipa-pure-const',
> > +
> > +  # We should eventually enable this, but right now there are at
> > +  # least 75 functions triggering warnings.
> > +  '-Wno-suggest-attribute=pure',
> > +  '-Wno-suggest-attribute=const',
> > +]
> > +
> > +if git
> > +  cc_flags += [ '-Werror' ]
> > +endif
> 
> This doesn't seem right. We definitely don't want this to be based
> solely on whether we're building from git.

So the thing with Meson is that it has build-in option --werror with
default value 'false'. It is possible to change the default value
in the project() function. Unfortunately it is not possible to call
anything else before project() function so we cannot detect if building
from GIT before we can change the default value.

There are three solutions:

    1) Keep it as it is, it would not be possible to disable -Werror if
    building from GIT.

    2) Drop the GIT detection and require developers to use --werror to
    have this functionality.

    3) Introduce our own -Dgit_werror which would allow us to change the
    default behavior and disable -Werror for build from GIT.

There is additional limitation with Meson. In both cases with autotools
distcheck or Meson dist the build is done from unpacked tarball.
With autotools we can use DISTCHECK_CONFIGURE_FLAGS to change the
default configure flags used during distcheck, with Meson there is
nothing like that so we cannot force -Werror during Meson dist build.

With this limitation in order to have -Werror enabled during Meson dist
build developers would have to pass --werror to meson setup for all the
solutions or -Dgit_werror=enabled in case of the third solution.

If you check the last patch, I'm doing it for our CI in order to have
-Werror during dist build.

None of the solutions are ideal to copy the behavior from autotools.

Pavel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20200722/17ff4e59/attachment-0001.sig>


More information about the libvir-list mailing list