[libvirt PATCH 5/6] meson: honour meson warning_level option

Daniel P. Berrangé berrange at redhat.com
Thu Apr 8 10:58:22 UTC 2021


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 at 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@'.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




More information about the libvir-list mailing list