[virt-tools-list] [virt-viewer PATCH 5/5] Switch to gnulib's compiler warning flags
Marc-André Lureau
marcandre.lureau at redhat.com
Wed Feb 13 17:27:15 UTC 2019
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!
> ---
> 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
More information about the virt-tools-list
mailing list