diff options
Diffstat (limited to 'meson')
-rw-r--r-- | meson/meson.build | 124 |
1 files changed, 71 insertions, 53 deletions
diff --git a/meson/meson.build b/meson/meson.build index 87de44d..8973b7a 100644 --- a/meson/meson.build +++ b/meson/meson.build @@ -1,15 +1,20 @@ -# Copyright 2021 David Robillard <d@drobilla.net> +# Copyright 2020-2022 David Robillard <d@drobilla.net> # SPDX-License-Identifier: CC0-1.0 OR ISC -# General code to enable approximately all warnings. +# General code to enable approximately all warnings in GCC 12, clang, and MSVC. # -# This is trivial for clang and MSVC, but GCC does not have such an option, and -# has several esoteric warnings, so we need to enable everything we want -# explicitly. We enable everything that does not require a value argument, -# except for warnings that are only relevant for very old languages (earlier -# than C99 or C++11) or non-standard extensions. +# 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. # -# Omitted common warnings: +# 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 @@ -24,15 +29,21 @@ # Wtrampolines # Wvla-larger-than=BYTES # -# Omitted C warnings: +# C Specific: # +# Wc11-c2x-compat # Wc90-c99-compat +# Wc99-c11-compat # Wdeclaration-after-statement # Wtraditional # Wtraditional-conversion # -# Omitted C++ warnings: +# C++ Specific: # +# Wc++0x-compat +# Wc++1z-compat +# Wc++2a-compat +# Wctad-maybe-unsupported # Wnamespaces # Wtemplates @@ -43,39 +54,50 @@ gcc_common_warnings = [ '-Warith-conversion', '-Warray-bounds=2', '-Wattribute-alias=2', + '-Wbidi-chars=ucn', '-Wcast-align=strict', + '-Wcast-function-type', '-Wcast-qual', + '-Wclobbered', '-Wconversion', '-Wdate-time', '-Wdisabled-optimization', '-Wdouble-promotion', '-Wduplicated-branches', '-Wduplicated-cond', + '-Wempty-body', + '-Wendif-labels', '-Wfloat-equal', '-Wformat-overflow=2', '-Wformat-signedness', '-Wformat-truncation=2', '-Wformat=2', - '-Wimplicit-fallthrough=2', + '-Wignored-qualifiers', + '-Wimplicit-fallthrough=3', '-Winit-self', '-Winline', '-Winvalid-pch', '-Wlogical-op', '-Wmissing-declarations', + '-Wmissing-field-initializers', '-Wmissing-include-dirs', '-Wmultichar', '-Wnormalized=nfc', '-Wnull-dereference', + '-Wopenacc-parallelism', + '-Woverlength-strings', '-Wpacked', + '-Wpacked-bitfield-compat', '-Wpadded', + '-Wpointer-arith', '-Wredundant-decls', - '-Wscalar-storage-order', '-Wshadow', + '-Wshift-negative-value', '-Wshift-overflow=2', - '-Wsizeof-array-argument', '-Wstack-protector', '-Wstrict-aliasing=3', '-Wstrict-overflow=5', + '-Wstring-compare', '-Wstringop-overflow=3', '-Wsuggest-attribute=cold', '-Wsuggest-attribute=const', @@ -85,78 +107,75 @@ gcc_common_warnings = [ '-Wsuggest-attribute=pure', '-Wswitch-default', '-Wswitch-enum', - '-Wsync-nand', + '-Wtrampolines', + '-Wtrivial-auto-var-init', + '-Wtype-limits', '-Wundef', + '-Wuninitialized', + '-Wunsafe-loop-optimizations', + '-Wunused', '-Wunused-const-variable=2', '-Wunused-macros', - '-Wvarargs', '-Wvector-operation-performance', '-Wvla', '-Wwrite-strings', ] -gcc_c_warnings = [ - '-Wbad-function-cast', - '-Wc++-compat', - '-Wc99-c11-compat', - '-Wdesignated-init', - '-Wdiscarded-array-qualifiers', - '-Wdiscarded-qualifiers', - '-Wincompatible-pointer-types', - '-Wjump-misses-init', - '-Wmissing-prototypes', - '-Wnested-externs', - '-Wold-style-definition', - '-Wstrict-prototypes', - '-Wunsuffixed-float-constants', -] - # Set all_c_warnings for the current C compiler -if is_variable('cc') +if is_variable('cc') and not is_variable('all_c_warnings') + all_c_warnings = [] if cc.get_id() == 'clang' - all_c_warnings = ['-Weverything'] + all_c_warnings += ['-Weverything'] elif cc.get_id() == 'gcc' - all_c_warnings = gcc_common_warnings + [ + all_c_warnings += gcc_common_warnings + [ + '-Wabsolute-value', '-Wbad-function-cast', '-Wc++-compat', - '-Wc99-c11-compat', - '-Wdesignated-init', - '-Wdiscarded-array-qualifiers', - '-Wdiscarded-qualifiers', - '-Wincompatible-pointer-types', + '-Wenum-conversion', '-Wjump-misses-init', + '-Wmissing-parameter-type', '-Wmissing-prototypes', '-Wnested-externs', + '-Wold-style-declaration', '-Wold-style-definition', + '-Woverride-init', + '-Wsign-compare', '-Wstrict-prototypes', '-Wunsuffixed-float-constants', ] elif cc.get_id() == 'msvc' - all_c_warnings = ['/Wall'] - else - all_c_warnings = [] + all_c_warnings += ['/Wall'] endif endif # Set all_cpp_warnings for the current C++ compiler -if is_variable('cpp') +if is_variable('cpp') and not is_variable('all_cpp_warnings') + all_cpp_warnings = [] if cpp.get_id() == 'clang' - all_cpp_warnings = [ + all_cpp_warnings += [ '-Weverything', '-Wno-c++98-compat', '-Wno-c++98-compat-pedantic' ] elif cpp.get_id() == 'gcc' - all_cpp_warnings = gcc_common_warnings + [ + all_cpp_warnings += gcc_common_warnings + [ '-Wabi-tag', '-Waligned-new=all', '-Wcatch-value=3', '-Wcomma-subscript', '-Wconditionally-supported', '-Wctor-dtor-privacy', + '-Wdelete-non-virtual-dtor', + '-Wdeprecated', + '-Wdeprecated-copy', '-Wdeprecated-copy-dtor', + '-Wdeprecated-enum-enum-conversion', + '-Wdeprecated-enum-float-conversion', '-Weffc++', + '-Wexpansion-to-defined', '-Wextra-semi', + '-Wimport', + '-Winvalid-imported-macros', '-Wmismatched-tags', '-Wmultiple-inheritance', '-Wnoexcept', @@ -165,9 +184,12 @@ if is_variable('cpp') '-Wold-style-cast', '-Woverloaded-virtual', '-Wplacement-new=2', + '-Wredundant-move', '-Wredundant-tags', '-Wregister', + '-Wsign-compare', '-Wsign-promo', + '-Wsized-deallocation', '-Wstrict-null-sentinel', '-Wsuggest-final-methods', '-Wsuggest-final-types', @@ -178,22 +200,18 @@ if is_variable('cpp') '-Wzero-as-null-pointer-constant', ] elif cpp.get_id() == 'msvc' - all_cpp_warnings = ['/Wall'] - else - all_cpp_warnings = [] + all_cpp_warnings += ['/Wall'] endif endif # Set all_objc_warnings for the current Objective C compiler -if is_variable('objcc') +if is_variable('objcc') and not is_variable('all_objc_warnings') all_objc_warnings = [] if objcc.get_id() == 'clang' - all_objc_warnings = ['-Weverything'] + all_objc_warnings += ['-Weverything'] elif objc.get_id() == 'gcc' - all_objc_warnings = gcc_common_warnings + [ + all_objc_warnings += gcc_common_warnings + [ '-Wno-direct-ivar-access', ] - else - all_objc_warnings = [] endif endif |