Signed-off-by: Pavel Hrdina <phrdina(a)redhat.com>
---
m4/virt-manywarnings.m4 | 339 ----------------------------------------
meson.build | 192 +++++++++++++++++++++++
2 files changed, 192 insertions(+), 339 deletions(-)
delete mode 100644 m4/virt-manywarnings.m4
diff --git a/m4/virt-manywarnings.m4 b/m4/virt-manywarnings.m4
deleted file mode 100644
index 783620da3ad..00000000000
--- a/m4/virt-manywarnings.m4
+++ /dev/null
@@ -1,339 +0,0 @@
-# manywarnings.m4 serial 18
-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_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 \
- -Wabsolute-value \
- -Waddress \
- -Waddress-of-packed-member \
- -Waggressive-loop-optimizations \
- -Wall \
- -Wattribute-warning \
- -Wattributes \
- -Wbad-function-cast \
- -Wbool-compare \
- -Wbool-operation \
- -Wbuiltin-declaration-mismatch \
- -Wbuiltin-macro-redefined \
- -Wcannot-profile \
- -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-profile \
- -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 -Wattribute-alias=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/meson.build b/meson.build
index be5e64fc6d2..d9a95e049c0 100644
--- a/meson.build
+++ b/meson.build
@@ -201,6 +201,198 @@ libvirt_revision = arr_version[2].to_int()
libvirt_lib_version = '@0@.@1@.@2(a)'.format(libvirt_so_version, libvirt_age,
libvirt_revision)
+# check compile flags
+
+cc = meson.get_compiler('c')
+
+cc_flags = [
+ '-fno-common',
+ '-W',
+ '-Wabsolute-value',
+ '-Waddress',
+ '-Waddress-of-packed-member',
+ '-Waggressive-loop-optimizations',
+ '-Wall',
+ '-Wattribute-warning',
+ '-Wattributes',
+ '-Wbad-function-cast',
+ '-Wbool-compare',
+ '-Wbool-operation',
+ '-Wbuiltin-declaration-mismatch',
+ '-Wbuiltin-macro-redefined',
+ '-Wcannot-profile',
+ '-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-profile',
+ '-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',
+]
+
+# gcc --help=warnings outputs
+ptrdiff_max = cc.sizeof('ptrdiff_t', prefix: '#include
<stddef.h>')
+size_max = cc.sizeof('size_t', prefix: '#include <stdint.h>')
+# Compute max safe object size by checking ptrdiff_t and size_t sizes.
+# Ideally we would get PTRDIFF_MAX and SIZE_MAX values but it would
+# give us (2147483647L) and we would have to remove the () and the suffix
+# in order to convert it to numbers to be able to pick the smaller one.
+alloc_max = run_command(
+ 'python3', '-c',
+ 'print(min(2**@0@ - 1, 2**@1@ - 1))'.format(ptrdiff_max * 8 - 1, size_max *
8),
+)
+cc_flags += [
+ '-Walloc-size-larger-than=@0(a)'.format(alloc_max.stdout().strip()),
+ '-Warray-bounds=2',
+ '-Wattribute-alias=2',
+ '-Wformat-overflow=2',
+ '-Wformat-truncation=2',
+ '-Wimplicit-fallthrough=5',
+ '-Wnormalized=nfc',
+ '-Wshift-overflow=2',
+ '-Wstringop-overflow=2',
+ '-Wunused-const-variable=2',
+ '-Wvla-larger-then=4031',
+]
+
+
# define top include directory
top_inc_dir = include_directories('.')
--
2.26.2