From 60f78f7e9e984802290a483535db208152008472 Mon Sep 17 00:00:00 2001 From: Christoph Reiter Date: Sat, 15 Dec 2018 12:18:04 +0100 Subject: 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, ) -- cgit v1.2.1