Meson defines a warning_level option which has the following behaviour
with C code
0: no warning flags
1: -Wall
2: -Wall -Wextra
3: -Wall -Wextra -Wpedantic
Currently we add our extra warning flags unconditionally if the compiler
supports them, regardless of the meson warning_level setting. This has
effectively nullified the warning_level setting in meson, and also
results in meson printing these messages:
meson.build:498: WARNING: Consider using the built-in warning_level option instead of
using "-Wall".
meson.build:498: WARNING: Consider using the built-in warning_level option instead of
using "-Wextra".
Semantically we can think of our huge list of flags as being an "extra"
set of warnings, and thus we ought to only add them when meson would
itself use -Wextra. aka warning_level == 2 or 3.
In practice libvirt code can't be built with -Wpedantic so we can ignore
meson warning_level 3, and only add our flags when warning_level==2.
In doing this change, we no longer have to check -Wall/-Wextra ourselves
as we can assume meson already set them.
-W is an alias of -Wextra so it is removed too.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
meson.build | 112 ++++++++++++++++++++++++++--------------------------
1 file changed, 56 insertions(+), 56 deletions(-)
diff --git a/meson.build b/meson.build
index cf0e4f5715..9fda0c7948 100644
--- a/meson.build
+++ b/meson.build
@@ -229,12 +229,10 @@ cc_flags += [
'-fexceptions',
'-fipa-pure-const',
'-fno-common',
- '-W',
'-Wabsolute-value',
'-Waddress',
'-Waddress-of-packed-member',
'-Waggressive-loop-optimizations',
- '-Wall',
'-Walloc-size-larger-than=@0(a)'.format(alloc_max.stdout().strip()),
'-Warray-bounds=2',
'-Wattribute-alias=2',
@@ -268,7 +266,6 @@ cc_flags += [
'-Wempty-body',
'-Wendif-labels',
'-Wexpansion-to-defined',
- '-Wextra',
'-Wformat-contains-nul',
'-Wformat-extra-args',
# -Wformat=2 implies -Wformat-nonliteral so we need to manually exclude it
@@ -398,71 +395,74 @@ cc_flags += [
'-Wwrite-strings',
]
-supported_cc_flags = cc.get_supported_arguments(cc_flags)
-
-# on aarch64 error: -fstack-protector not supported for this target
-if host_machine.cpu_family() != 'aarch64'
- if host_machine.system() in [ 'linux', 'freebsd', 'windows' ]
- # we prefer -fstack-protector-strong but fallback to -fstack-protector-all
- fstack_cflags = cc.first_supported_argument([
- '-fstack-protector-strong',
- '-fstack-protector-all',
- ])
- supported_cc_flags += fstack_cflags
-
- # When building with mingw using -fstack-protector requires libssp library
- # which is included by using -fstack-protector with linker.
- if fstack_cflags.length() == 1 and host_machine.system() == 'windows'
- add_project_link_arguments(fstack_cflags, language: 'c')
+supported_cc_flags = []
+if get_option('warning_level') == '2'
+ supported_cc_flags = cc.get_supported_arguments(cc_flags)
+
+ # on aarch64 error: -fstack-protector not supported for this target
+ if host_machine.cpu_family() != 'aarch64'
+ if host_machine.system() in [ 'linux', 'freebsd', 'windows'
]
+ # we prefer -fstack-protector-strong but fallback to -fstack-protector-all
+ fstack_cflags = cc.first_supported_argument([
+ '-fstack-protector-strong',
+ '-fstack-protector-all',
+ ])
+ supported_cc_flags += fstack_cflags
+
+ # When building with mingw using -fstack-protector requires libssp library
+ # which is included by using -fstack-protector with linker.
+ if fstack_cflags.length() == 1 and host_machine.system() == 'windows'
+ add_project_link_arguments(fstack_cflags, language: 'c')
+ endif
+ endif
+ endif
+
+ if supported_cc_flags.contains('-Wlogical-op')
+ # Broken in 6.0 and later
+ #
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69602
+ w_logical_op_args = ['-O2', '-Wlogical-op', '-Werror']
+ w_logical_op_code = '''
+ #define TEST1 1
+ #define TEST2 TEST1
+
+ int main(void) {
+ int test = 0;
+ return test == TEST1 || test == TEST2;
+ }
+ '''
+ if not cc.compiles(w_logical_op_code, args: w_logical_op_args)
+ conf.set('BROKEN_GCC_WLOGICALOP_EQUAL_EXPR', 1)
endif
endif
-endif
-if supported_cc_flags.contains('-Wlogical-op')
- # Broken in 6.0 and later
- #
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69602
- w_logical_op_args = ['-O2', '-Wlogical-op', '-Werror']
- w_logical_op_code = '''
- #define TEST1 1
- #define TEST2 TEST1
+ # Check whether clang gives bogus warning for -Wdouble-promotion.
+ w_double_promotion_args = ['-O2', '-Wdouble-promotion',
'-Werror']
+ w_double_promotion_code = '''
+ #include <math.h>
int main(void) {
- int test = 0;
- return test == TEST1 || test == TEST2;
+ float f = 0.0;
+ return isnan(f);
}
'''
- if not cc.compiles(w_logical_op_code, args: w_logical_op_args)
- conf.set('BROKEN_GCC_WLOGICALOP_EQUAL_EXPR', 1)
+ if cc.compiles(w_double_promotion_code, args: w_double_promotion_args, name:
'-Wdouble-promotion')
+ supported_cc_flags += ['-Wdouble-promotion']
endif
-endif
-# Check whether clang gives bogus warning for -Wdouble-promotion.
-w_double_promotion_args = ['-O2', '-Wdouble-promotion',
'-Werror']
-w_double_promotion_code = '''
- #include <math.h>
+ # Clang complains about unused static inline functions which are common
+ # with G_DEFINE_AUTOPTR_CLEANUP_FUNC.
+ w_unused_function_args = ['-Wunused-function', '-Werror']
+ w_unused_function_code = '''
+ static inline void foo(void) {}
- int main(void) {
- float f = 0.0;
- return isnan(f);
- }
-'''
-if cc.compiles(w_double_promotion_code, args: w_double_promotion_args, name:
'-Wdouble-promotion')
- supported_cc_flags += ['-Wdouble-promotion']
-endif
-
-# Clang complains about unused static inline functions which are common
-# with G_DEFINE_AUTOPTR_CLEANUP_FUNC.
-w_unused_function_args = ['-Wunused-function', '-Werror']
-w_unused_function_code = '''
- static inline void foo(void) {}
+ int main(void) { return 0; }
+ '''
+ # -Wunused-function is implied by -Wall, we must turn it off explicitly.
+ if not cc.compiles(w_unused_function_code, args: w_unused_function_args)
+ supported_cc_flags += ['-Wno-unused-function']
+ endif
- int main(void) { return 0; }
-'''
-# -Wunused-function is implied by -Wall, we must turn it off explicitly.
-if not cc.compiles(w_unused_function_code, args: w_unused_function_args)
- supported_cc_flags += ['-Wno-unused-function']
endif
-
add_project_arguments(supported_cc_flags, language: 'c')
if cc.has_argument('-Wsuggest-attribute=format')
--
2.30.2