From f905bd8e17bfcee7240ee3174f5ed420043c8bad Mon Sep 17 00:00:00 2001 From: David Robillard Date: Mon, 3 Apr 2023 09:00:23 -0400 Subject: Use new meson strict warning system Meson includes warning_level=everything as of version 1.0.0, which supercedes maintaining redundant lists of warning flags here. --- .gitlab-ci.yml | 22 +++--- meson.build | 5 +- meson/suppressions/meson.build | 19 +++-- meson/warnings/meson.build | 155 ----------------------------------------- meson_options.txt | 8 +-- test/headers/meson.build | 4 +- test/meson.build | 32 ++++----- 7 files changed, 43 insertions(+), 202 deletions(-) delete mode 100644 meson/warnings/meson.build diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2f327470..4d91add2 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -17,7 +17,7 @@ dev: stage: build image: lv2plugin/debian-x64 script: - - meson setup build -Dc_std=c11 -Dbuildtype=debug -Ddocs=enabled -Dstrict=true -Dwerror=true -Db_coverage=true + - meson setup build -Dc_std=c11 -Dbuildtype=debug -Ddocs=enabled -Dwarning_level=3 -Dwerror=true -Db_coverage=true - ninja -C build test - ninja -C build coverage-html - mkdir -p build/doc/ @@ -34,14 +34,14 @@ static: stage: build image: lv2plugin/debian-x64 script: - - meson setup build -Ddocs=disabled -Dstrict=true -Dwerror=true -Dstatic=true -Ddefault_library=static + - meson setup build -Ddocs=disabled -Dwarning_level=3 -Dwerror=true -Dstatic=true -Ddefault_library=static - ninja -C build test sanitize: stage: build image: lv2plugin/debian-x64-clang script: - - meson setup build -Db_lundef=false -Dc_std=c11 -Dbuildtype=plain -Ddocs=disabled -Dstrict=true -Dwerror=true + - meson setup build -Db_lundef=false -Dc_std=c11 -Dbuildtype=plain -Ddocs=disabled -Dwarning_level=3 -Dwerror=true - ninja -C build test variables: CC: "clang" @@ -56,7 +56,7 @@ arm32: stage: build image: lv2plugin/debian-arm32 script: - - meson setup build --cross-file=/usr/share/meson/cross/arm-linux-gnueabihf.ini -Dc_std=c11 -Dbuildtype=debug -Ddocs=disabled -Dstrict=true -Dwerror=true + - meson setup build --cross-file=/usr/share/meson/cross/arm-linux-gnueabihf.ini -Dc_std=c11 -Dbuildtype=debug -Ddocs=disabled -Dwarning_level=3 -Dwerror=true - ninja -C build test - meson configure -Dbuildtype=release build - ninja -C build test @@ -65,7 +65,7 @@ arm64: stage: build image: lv2plugin/debian-arm64 script: - - meson setup build --cross-file=/usr/share/meson/cross/aarch64-linux-gnu.ini -Dc_std=c11 -Dbuildtype=debug -Ddocs=disabled -Dstrict=true -Dwerror=true + - meson setup build --cross-file=/usr/share/meson/cross/aarch64-linux-gnu.ini -Dc_std=c11 -Dbuildtype=debug -Ddocs=disabled -Dwarning_level=3 -Dwerror=true - ninja -C build test - meson configure -Dbuildtype=release build - ninja -C build test @@ -74,7 +74,7 @@ x32: stage: build image: lv2plugin/debian-x32 script: - - meson setup build --cross-file=/usr/share/meson/cross/i686-linux-gnu.ini -Dbuildtype=debug -Dstrict=true -Dwerror=true -Ddocs=disabled + - meson setup build --cross-file=/usr/share/meson/cross/i686-linux-gnu.ini -Dbuildtype=debug -Dwarning_level=3 -Dwerror=true -Ddocs=disabled - ninja -C build test - meson configure -Dbuildtype=release build - ninja -C build test @@ -83,7 +83,7 @@ mingw32: stage: build image: lv2plugin/debian-mingw32 script: - - meson setup build --cross-file=/usr/share/meson/cross/i686-w64-mingw32.ini -Dc_std=c11 -Dbuildtype=debug -Ddocs=disabled -Dstrict=true -Dwerror=true + - meson setup build --cross-file=/usr/share/meson/cross/i686-w64-mingw32.ini -Dc_std=c11 -Dbuildtype=debug -Ddocs=disabled -Dwarning_level=3 -Dwerror=true - ninja -C build test - meson configure -Dbuildtype=release build - ninja -C build test @@ -94,7 +94,7 @@ mingw64: stage: build image: lv2plugin/debian-mingw64 script: - - meson setup build --cross-file=/usr/share/meson/cross/x86_64-w64-mingw32.ini -Dc_std=c11 -Dbuildtype=debug -Ddocs=disabled -Dstrict=true -Dwerror=true + - meson setup build --cross-file=/usr/share/meson/cross/x86_64-w64-mingw32.ini -Dc_std=c11 -Dbuildtype=debug -Ddocs=disabled -Dwarning_level=3 -Dwerror=true - ninja -C build test - meson configure -Dbuildtype=release build - ninja -C build test @@ -107,7 +107,7 @@ freebsd: stage: build tags: [freebsd,meson] script: - - meson setup build -Dbuildtype=debug -Dstrict=true -Dwerror=true + - meson setup build -Dbuildtype=debug -Dwarning_level=3 -Dwerror=true - ninja -C build test - meson configure -Dbuildtype=release build - ninja -C build test @@ -116,7 +116,7 @@ mac: stage: build tags: [macos] script: - - meson setup build -Dc_std=c11 -Dbuildtype=debug -Ddocs=disabled -Dstrict=true -Dwerror=true + - meson setup build -Dc_std=c11 -Dbuildtype=debug -Ddocs=disabled -Dwarning_level=3 -Dwerror=true - ninja -C build test - meson configure -Dbuildtype=release build - ninja -C build test @@ -125,7 +125,7 @@ win: stage: build tags: [windows,meson] script: - - meson setup build -Dbuildtype=debug -Ddocs=disabled -Dstrict=true -Dwerror=true + - meson setup build -Dbuildtype=debug -Ddocs=disabled -Dwarning_level=everything -Dwerror=true - ninja -C build test - meson configure -Dbuildtype=release build - ninja -C build test diff --git a/meson.build b/meson.build index eb2547bb..0c0a41c2 100644 --- a/meson.build +++ b/meson.build @@ -1,4 +1,4 @@ -# Copyright 2021-2022 David Robillard +# Copyright 2021-2023 David Robillard # SPDX-License-Identifier: 0BSD OR ISC project('serd', ['c'], @@ -27,9 +27,6 @@ pkg = import('pkgconfig') cc = meson.get_compiler('c') # Set global warning flags -if get_option('strict') and not meson.is_subproject() - subdir('meson/warnings') -endif subdir('meson/suppressions') ################ diff --git a/meson/suppressions/meson.build b/meson/suppressions/meson.build index 0fabf3bf..508bbbd5 100644 --- a/meson/suppressions/meson.build +++ b/meson/suppressions/meson.build @@ -11,10 +11,12 @@ # C # ##### +warning_level = get_option('warning_level') + if is_variable('cc') c_suppressions = [] - if get_option('strict') + if warning_level == 'everything' if cc.get_id() == 'clang' c_suppressions += [ '-Wno-cast-align', @@ -27,12 +29,6 @@ if is_variable('cc') '-Wno-padded', ] - if host_machine.system() == 'freebsd' - c_suppressions += [ - '-Wno-c11-extensions', - ] - endif - if host_machine.system() == 'windows' c_suppressions += [ '-Wno-deprecated-declarations', @@ -78,10 +74,19 @@ if is_variable('cc') ] elif cc.get_id() == 'msvc' c_suppressions += [ + '/experimental:external', + '/external:W0', + '/external:anglebrackets', '/wd4706', # assignment within conditional expression '/wd4996', # POSIX name for this item is deprecated ] endif + if host_machine.system() == 'freebsd' and warning_level in ['3', 'everything'] + c_suppressions += [ + '-Wno-c11-extensions', + ] + endif + c_suppressions = cc.get_supported_arguments(c_suppressions) endif diff --git a/meson/warnings/meson.build b/meson/warnings/meson.build deleted file mode 100644 index c0e523b9..00000000 --- a/meson/warnings/meson.build +++ /dev/null @@ -1,155 +0,0 @@ -# Copyright 2020-2022 David Robillard -# SPDX-License-Identifier: 0BSD OR ISC - -# General code to enable approximately all warnings in GCC 12, clang, and MSVC. -# -# This is trivial for clang and MSVC, but GCC doesn't have an "everything" -# option, so we need to enable everything we want explicitly. Wall is assumed, -# but Wextra is not, for stability. -# -# These are collected from common.opt and c.opt in the GCC source, and manually -# curated with the help of the GCC documentation. Warnings that are -# application-specific, historical, or about compatibility between specific -# language revisions are omitted. The intent here is to have roughly the same -# meaning as clang's Weverything: extremely strict, but general. Specifically -# omitted are: -# -# General: -# -# Wabi= -# Waggregate-return -# Walloc-size-larger-than=BYTES -# Walloca-larger-than=BYTES -# Wframe-larger-than=BYTES -# Wlarger-than=BYTES -# Wstack-usage=BYTES -# Wsystem-headers -# Wtraditional -# Wtraditional-conversion -# Wtrampolines -# Wvla-larger-than=BYTES -# -# Build specific: -# -# Wpoison-system-directories -# -# C Specific: -# -# Wc11-c2x-compat -# Wc90-c99-compat -# Wc99-c11-compat -# Wdeclaration-after-statement -# Wtraditional -# Wtraditional-conversion -# -# C++ Specific: -# -# Wc++0x-compat -# Wc++1z-compat -# Wc++2a-compat -# Wctad-maybe-unsupported -# Wnamespaces -# Wtemplates - -# GCC warnings that apply to all C-family languages -gcc_common_warnings = [ - '-Walloc-zero', - '-Walloca', - '-Wanalyzer-too-complex', - '-Warith-conversion', - '-Warray-bounds=2', - '-Wattribute-alias=2', - '-Wbidi-chars=ucn', - '-Wcast-align=strict', - '-Wcast-qual', - '-Wconversion', - '-Wdate-time', - '-Wdisabled-optimization', - '-Wdouble-promotion', - '-Wduplicated-branches', - '-Wduplicated-cond', - '-Wfloat-equal', - '-Wformat-overflow=2', - '-Wformat-signedness', - '-Wformat-truncation=2', - '-Wformat=2', - '-Winit-self', - '-Winline', - '-Winvalid-pch', - '-Wlogical-op', - '-Wmissing-declarations', - '-Wmissing-include-dirs', - '-Wmultichar', - '-Wnormalized=nfc', - '-Wnull-dereference', - '-Wopenacc-parallelism', - '-Wpacked', - '-Wpadded', - '-Wredundant-decls', - '-Wshadow', - '-Wshift-negative-value', - '-Wshift-overflow=2', - '-Wstack-protector', - '-Wstrict-aliasing=3', - '-Wstrict-overflow=5', - '-Wstringop-overflow=3', - '-Wsuggest-attribute=cold', - '-Wsuggest-attribute=const', - '-Wsuggest-attribute=format', - '-Wsuggest-attribute=malloc', - '-Wsuggest-attribute=noreturn', - '-Wsuggest-attribute=pure', - '-Wswitch-default', - '-Wswitch-enum', - '-Wtrampolines', - '-Wtrivial-auto-var-init', - '-Wundef', - '-Wuninitialized', - '-Wunsafe-loop-optimizations', - '-Wunused-const-variable=2', - '-Wunused-macros', - '-Wvector-operation-performance', - '-Wvla', - '-Wwrite-strings', -] - -##### -# C # -##### - -if is_variable('cc') - # Set all_c_warnings for the current C compiler - all_c_warnings = [] - - if cc.get_id() == 'clang' - all_c_warnings += ['-Weverything'] - - if not meson.is_cross_build() - all_c_warnings += [ - '-Wno-poison-system-directories', - ] - endif - - elif cc.get_id() == 'gcc' - all_c_warnings += gcc_common_warnings + [ - '-Wbad-function-cast', - '-Wc++-compat', - '-Wmissing-prototypes', - '-Wnested-externs', - '-Wold-style-definition', - '-Wstrict-prototypes', - '-Wunsuffixed-float-constants', - ] - - elif cc.get_id() == 'msvc' - all_c_warnings += [ - '/Wall', - '/experimental:external', - '/external:W0', - '/external:anglebrackets', - ] - endif - - all_c_warnings = cc.get_supported_arguments(all_c_warnings) - add_global_arguments(all_c_warnings, language: ['c']) -endif diff --git a/meson_options.txt b/meson_options.txt index b32b4693..ebaaffa0 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -1,4 +1,4 @@ -# Copyright 2021-2022 David Robillard +# Copyright 2021-2023 David Robillard # SPDX-License-Identifier: 0BSD OR ISC option('checks', type: 'feature', value: 'enabled', yield: true, @@ -7,12 +7,12 @@ option('checks', type: 'feature', value: 'enabled', yield: true, option('docs', type: 'feature', value: 'auto', yield: true, description: 'Build documentation') +option('lint', type: 'boolean', value: false, yield: true, + description: 'Run code quality checks') + option('static', type: 'boolean', value: false, yield: true, description: 'Statically link executables') -option('strict', type: 'boolean', value: false, yield: true, - description: 'Enable ultra-strict warnings') - option('tests', type: 'feature', value: 'auto', yield: true, description: 'Build tests') diff --git a/test/headers/meson.build b/test/headers/meson.build index 0c4e97ea..78a48618 100644 --- a/test/headers/meson.build +++ b/test/headers/meson.build @@ -1,9 +1,9 @@ -# Copyright 2020-2022 David Robillard +# Copyright 2020-2023 David Robillard # SPDX-License-Identifier: 0BSD OR ISC header_c_suppressions = [] -if get_option('strict') +if get_option('warning_level') == 'everything' if cc.get_id() == 'clang' header_c_suppressions += [ '-Wno-padded', diff --git a/test/meson.build b/test/meson.build index 45173690..283ce3e8 100644 --- a/test/meson.build +++ b/test/meson.build @@ -5,11 +5,20 @@ run_suite = find_program('run_suite.py') wrapper = meson.get_external_property('exe_wrapper', '') -#################### -# Project Metadata # -#################### +######################## +# Scripts and Metadata # +######################## -if get_option('strict') +python_scripts = files( + '../scripts/serd_bench.py', + 'run_suite.py', + 'serd_test_util/__init__.py', + 'test_quiet.py', + 'test_stdin.py', + 'test_write_error.py', +) + +if get_option('lint') # Check release metadata if not meson.is_subproject() autoship = find_program('autoship', required: false) @@ -28,22 +37,7 @@ if get_option('strict') suite: 'data', ) endif -endif - -########### -# Scripts # -########### - -python_scripts = files( - '../scripts/serd_bench.py', - 'run_suite.py', - 'serd_test_util/__init__.py', - 'test_quiet.py', - 'test_stdin.py', - 'test_write_error.py', -) -if get_option('strict') # Check script formatting black = find_program('black', required: false) if black.found() -- cgit v1.2.1