[gobject-introspection] meson: add default compiler warning flags and enable -Werror on CI



commit 60f78f7e9e984802290a483535db208152008472
Author: Christoph Reiter <reiter christoph gmail com>
Date:   Sat Dec 15 12:18:04 2018 +0100

    meson: add default compiler warning flags and enable -Werror on CI
    
    This enables various compiler warnings project wide and disables the triggered
    ones for each library/executable. This should give us roughly the same behaviour
    as with autotools.
    
    Tested with gcc8 and clang7.

 .gitlab-ci.yml                |  1 +
 girepository/cmph/meson.build | 21 ++++++++++++++++++--
 girepository/meson.build      | 24 +++++++++++++++++++---
 giscanner/meson.build         |  8 ++++++--
 meson.build                   | 46 +++++++++++++++++++++++++++++++++++++++++++
 tests/meson.build             | 10 ++++++++--
 tests/repository/meson.build  |  7 ++++++-
 tools/meson.build             | 12 +++++++++++
 8 files changed, 119 insertions(+), 10 deletions(-)
---
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 0ad627db..53abbde7 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -13,6 +13,7 @@ fedora-x86_64-meson:
   variables:
     CCACHE_BASEDIR: "${CI_PROJECT_DIR}"
     CCACHE_DIR: "${CI_PROJECT_DIR}/_ccache"
+    CFLAGS: "-Werror"
   script:
     - meson --prefix /usr --libdir /usr/lib64 --buildtype debug -Dgtk-doc=true -Dcairo=true -Dpython=python3 
_build .
     - cd _build
diff --git a/girepository/cmph/meson.build b/girepository/cmph/meson.build
index 368afc7b..77c6e696 100644
--- a/girepository/cmph/meson.build
+++ b/girepository/cmph/meson.build
@@ -29,9 +29,20 @@ cmph_deps = [
   cc.find_library('m', required: false),
 ]
 
+custom_c_args = cc.get_supported_arguments([
+  '-Wno-implicit-fallthrough',
+  '-Wno-old-style-definition',
+  '-Wno-strict-prototypes',
+  '-Wno-suggest-attribute=noreturn',
+  '-Wno-type-limits',
+  '-Wno-undef',
+  '-Wno-unused-parameter',
+  '-Wno-cast-align',
+  '-Wno-unused-function',
+])
 cmph = static_library('cmph',
   sources: cmph_sources,
-  c_args: gi_hidden_visibility_cflags,
+  c_args: gi_hidden_visibility_cflags + custom_c_args,
   dependencies: cmph_deps,
 )
 
@@ -40,11 +51,17 @@ cmph_dep = declare_dependency(
   include_directories: include_directories('.'),
 )
 
+custom_c_args = cc.get_supported_arguments([
+  '-Wno-old-style-definition',
+  '-Wno-strict-prototypes',
+  '-Wno-type-limits',
+])
 cmph_test = executable('cmph-bdz-test', '../cmph-bdz-test.c',
   dependencies: [
     cmph_dep,
     glib_dep,
-  ]
+  ],
+  c_args: custom_c_args,
 )
 
 test('cmph-bdz-test', cmph_test)
diff --git a/girepository/meson.build b/girepository/meson.build
index 64cd9ece..e0f224e7 100644
--- a/girepository/meson.build
+++ b/girepository/meson.build
@@ -1,9 +1,14 @@
 subdir('cmph')
 
+custom_c_args = cc.get_supported_arguments([
+  '-Wno-strict-prototypes',
+  '-Wno-old-style-definition',
+  '-Wno-cast-align',
+])
 girepo_gthash_lib = static_library('girepository-gthash',
   sources: 'gthash.c',
   include_directories : configinc,
-  c_args: gi_hidden_visibility_cflags,
+  c_args: gi_hidden_visibility_cflags + custom_c_args,
   dependencies: [
     cmph_dep,
     glib_dep,
@@ -17,6 +22,11 @@ girepo_gthash_dep = declare_dependency(
   include_directories: include_directories('.'),
 )
 
+custom_c_args = cc.get_supported_arguments([
+  '-Wno-unused-parameter',
+  '-Wno-duplicated-branches',
+  '-Wno-cast-align',
+])
 girepo_internals_lib = static_library('girepository-internals',
   sources: [
     'girmodule.c',
@@ -25,7 +35,7 @@ girepo_internals_lib = static_library('girepository-internals',
     'girparser.c',
     'girwriter.c',
   ],
-  c_args: gi_hidden_visibility_cflags,
+  c_args: gi_hidden_visibility_cflags + custom_c_args,
   include_directories : configinc,
   dependencies: [girepo_gthash_dep, libffi_dep],
 )
@@ -136,10 +146,18 @@ girepo_gir_sources = files(
 
 install_headers(girepo_headers, subdir: 'gobject-introspection-1.0')
 
+custom_c_args = cc.get_supported_arguments([
+  '-Wno-unused-parameter',
+  '-Wno-duplicated-branches',
+  '-Wno-type-limits',
+  '-Wno-cast-align',
+  '-Wno-missing-field-initializers',
+])
 girepo_lib = shared_library('girepository-1.0',
   sources: girepo_sources,
   include_directories : configinc,
-  c_args: gi_hidden_visibility_cflags + ['-DG_IREPOSITORY_COMPILATION'],
+  c_args: gi_hidden_visibility_cflags + ['-DG_IREPOSITORY_COMPILATION'] +
+          custom_c_args,
   dependencies: [glib_dep, gobject_dep, gmodule_dep,
                  gio_dep, girepo_internals_dep],
   version: '1.0.0',
diff --git a/giscanner/meson.build b/giscanner/meson.build
index 6ac74aaf..4998865a 100644
--- a/giscanner/meson.build
+++ b/giscanner/meson.build
@@ -70,13 +70,17 @@ if not cc.has_header('unistd.h')
   giscanner_args += '-DYY_NO_UNISTD_H'
 endif
 
+custom_c_args = cc.get_supported_arguments([
+  '-Wno-missing-field-initializers',
+  '-Wno-unused-parameter',
+])
 giscanner_lib = static_library('giscanner',
   sources: [
     'sourcescanner.c',
     scannerparser,
     scannerlexer,
   ],
-  c_args: giscanner_args,
+  c_args: giscanner_args + custom_c_args,
   include_directories : configinc,
   dependencies: [glib_dep, gobject_dep, gio_dep, gmodule_dep],
 )
@@ -90,7 +94,7 @@ endif
 
 giscanner_pymod = python.extension_module('_giscanner', ['giscannermodule.c'],
   link_with: giscanner_lib,
-  c_args: [gi_hidden_visibility_cflags],
+  c_args: gi_hidden_visibility_cflags + custom_c_args,
   include_directories : configinc,
   dependencies: [glib_dep, gobject_dep, gio_dep, gmodule_dep,
                  python_ext_dep],
diff --git a/meson.build b/meson.build
index ea6e3ed7..79c76302 100644
--- a/meson.build
+++ b/meson.build
@@ -22,6 +22,52 @@ if not python_version.version_compare(python_version_req)
 endif
 
 cc = meson.get_compiler('c')
+
+project_c_args = []
+if cc.get_id() != 'msvc'
+    project_c_args += [
+      '-Wall',
+      '-Warray-bounds',
+      '-Wcast-align',
+      '-Wdeclaration-after-statement',
+      '-Wduplicated-branches',
+      '-Wextra',
+      '-Wformat=2',
+      '-Wformat-nonliteral',
+      '-Wformat-security',
+      '-Wimplicit-function-declaration',
+      '-Winit-self',
+      '-Wjump-misses-init',
+      '-Wlogical-op',
+      '-Wmissing-declarations',
+      '-Wmissing-format-attribute',
+      '-Wmissing-include-dirs',
+      '-Wmissing-noreturn',
+      '-Wmissing-prototypes',
+      '-Wnested-externs',
+      '-Wnull-dereference',
+      '-Wold-style-definition',
+      '-Wpacked',
+      '-Wpointer-arith',
+      '-Wrestrict',
+      '-Wreturn-type',
+      '-Wshadow',
+      '-Wsign-compare',
+      '-Wstrict-aliasing',
+      '-Wstrict-prototypes',
+      '-Wundef',
+      '-Wunused-but-set-variable',
+      '-Wwrite-strings',
+    ]
+
+    project_c_args += [
+      '-fno-strict-aliasing',
+    ]
+endif
+
+project_c_args = cc.get_supported_arguments(project_c_args)
+add_project_arguments(project_c_args, language: 'c')
+
 config = configuration_data()
 
 config.set('GI_MAJOR_VERSION', gi_versions[0])
diff --git a/tests/meson.build b/tests/meson.build
index 7e633f29..c11151dc 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -46,18 +46,24 @@ test_everything_files = custom_target('everything',
 test_everything_headers = [test_everything_files[0]]
 test_everything_sources = [test_everything_files[1]]
 
+custom_c_args = cc.get_supported_arguments([
+  '-Wno-unused-parameter',
+])
 everything_lib = shared_library('everything-1.0',
   sources: test_everything_sources,
   include_directories : configinc,
-  c_args: gi_hidden_visibility_cflags,
+  c_args: gi_hidden_visibility_cflags + custom_c_args,
   dependencies: [glib_dep, gobject_dep],
   version: '1.0.0',
 )
 
+custom_c_args = cc.get_supported_arguments([
+  '-Wno-unused-parameter',
+])
 gimarshallingtests_lib = shared_library('gimarshallingtests-1.0',
   sources: test_marshalling_sources,
   include_directories : configinc,
-  c_args: gi_hidden_visibility_cflags,
+  c_args: gi_hidden_visibility_cflags + custom_c_args,
   dependencies: [glib_dep, gobject_dep],
   version: '1.0.0',
 )
diff --git a/tests/repository/meson.build b/tests/repository/meson.build
index 1281427e..3a51a0e3 100644
--- a/tests/repository/meson.build
+++ b/tests/repository/meson.build
@@ -13,10 +13,15 @@ repository_test_env.append(
   join_paths(meson.build_root(), 'tests')
 )
 
+custom_c_args = cc.get_supported_arguments([
+  '-Wno-unused-parameter',
+])
 if glib_dep.type_name() == 'pkgconfig'
   foreach test_name : repository_tests
     source = files(test_name + '.c')
-    exe = executable(test_name, source, dependencies: [girepo_dep])
+    exe = executable(test_name, source,
+      dependencies: [girepo_dep],
+      c_args: custom_c_args)
     test(test_name, exe, env: repository_test_env)
   endforeach
 endif
diff --git a/tools/meson.build b/tools/meson.build
index 65839c34..806441af 100644
--- a/tools/meson.build
+++ b/tools/meson.build
@@ -40,23 +40,35 @@ endforeach
 
 girscanner = tool_output[0]
 
+custom_c_args = cc.get_supported_arguments([
+  '-Wno-missing-field-initializers',
+])
 gircompiler = executable('g-ir-compiler', 'compiler.c',
   dependencies: [
     girepo_internals_dep,
     girepo_dep,
   ],
   install: true,
+  c_args: custom_c_args,
 )
 
+custom_c_args = cc.get_supported_arguments([
+  '-Wno-missing-field-initializers',
+])
 girgenerate = executable('g-ir-generate', 'generate.c',
   dependencies: [
     girepo_internals_dep,
     girepo_dep,
   ],
   install: true,
+  c_args: custom_c_args,
 )
 
+custom_c_args = cc.get_supported_arguments([
+  '-Wno-missing-field-initializers',
+])
 girinspect = executable('g-ir-inspect', 'g-ir-inspect.c',
   dependencies: girepo_dep,
   install: true,
+  c_args: custom_c_args,
 )


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]