aboutsummaryrefslogtreecommitdiffstats
path: root/meson
diff options
context:
space:
mode:
Diffstat (limited to 'meson')
-rw-r--r--meson/meson.build124
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