diff options
-rw-r--r-- | meson.build | 138 | ||||
-rw-r--r-- | meson/library/meson.build | 25 | ||||
-rw-r--r-- | meson/suppressions/meson.build | 136 | ||||
-rw-r--r-- | meson/warnings/meson.build (renamed from meson/meson.build) | 0 |
4 files changed, 166 insertions, 133 deletions
diff --git a/meson.build b/meson.build index 727a1a4..9d6489b 100644 --- a/meson.build +++ b/meson.build @@ -38,130 +38,11 @@ if host_machine.system() == 'darwin' objcc = meson.get_compiler('objc') endif -# Set ultra strict warnings for developers, if requested -# These are for the implementation, tests and examples add more suppressions +# Set global ultra-strict warnings for developers if enabled c_warnings = [] if get_option('strict') - subdir('meson') - - # C warnings - c_warnings = all_c_warnings - if cc.get_id() == 'clang' - c_warnings += [ - '-Wno-bad-function-cast', - '-Wno-padded', - '-Wno-switch-default', - '-Wno-switch-enum', - ] - - if host_machine.system() == 'darwin' - c_warnings += [ - '-Wno-poison-system-directories', - ] - elif host_machine.system() == 'windows' - c_warnings += [ - '-Wno-deprecated-declarations', - '-Wno-format-nonliteral', - '-Wno-nonportable-system-include-path', - '-Wno-unused-macros', - ] - endif - elif cc.get_id() == 'gcc' - c_warnings += [ - '-Wno-bad-function-cast', - '-Wno-float-equal', - '-Wno-inline', - '-Wno-padded', - '-Wno-pedantic', - '-Wno-suggest-attribute=const', - '-Wno-suggest-attribute=malloc', - '-Wno-suggest-attribute=pure', - '-Wno-switch-default', - '-Wno-switch-enum', - '-Wno-unsuffixed-float-constants', - ] - - if host_machine.system() == 'windows' - c_warnings += [ - '-Wno-cast-function-type', - '-Wno-suggest-attribute=format', - ] - endif - elif cc.get_id() == 'msvc' - c_warnings += [ - '/wd4061', # enumerator in switch is not explicitly handled - '/wd4191', # unsafe conversion from type to type - '/wd4514', # unreferenced inline function has been removed - '/wd4706', # assignment within conditional expression - '/wd4710', # function not inlined - '/wd4711', # function selected for automatic inline expansion - '/wd4820', # padding added after construct - '/wd4996', # POSIX name for this item is deprecated - '/wd5045', # will insert Spectre mitigation for memory load - '/wd5246', # subobject initialization should be wrapped in braces - ] - endif - - add_project_arguments(cc.get_supported_arguments(c_warnings), - language: ['c']) - - # C++ warnings - if is_variable('cpp') - cpp_warnings = all_cpp_warnings - - if cpp.get_id() == 'clang' - cpp_warnings += [ - '-Wno-inline', - '-Wno-padded', - ] - - if host_machine.system() == 'darwin' - cpp_warnings += [ - '-Wno-poison-system-directories', - ] - endif - - elif cpp.get_id() == 'gcc' - cpp_warnings += [ - '-Wno-inline', - '-Wno-padded', - ] - elif cpp.get_id() == 'msvc' - cpp_warnings += [ - '/wd4061', # enumerator in switch is not explicitly handled - '/wd4191', # unsafe conversion from type to type - '/wd4514', # unreferenced inline function has been removed - '/wd4625', # copy constructor implicitly deleted - '/wd4626', # copy assignment operator implicitly deleted - '/wd4706', # assignment within conditional expression - '/wd4710', # function not inlined - '/wd4711', # function selected for automatic inline expansion - '/wd4800', # implicit conversion to bool - '/wd4820', # padding added after construct - '/wd5026', # move constructor implicitly deleted - '/wd5027', # move assignment operator implicitly deleted - '/wd5039', # pointer to potentially throwing function passed to C - '/wd5045', # will insert Spectre mitigation for memory load - ] - endif - - add_project_arguments(cpp.get_supported_arguments(cpp_warnings), - language: ['cpp']) - endif - - # Objective C warnings - if is_variable('objcc') - objc_warnings = all_objc_warnings + [ - '-Wno-bad-function-cast', - '-Wno-direct-ivar-access', - '-Wno-padded', - '-Wno-pedantic', - '-Wno-poison-system-directories', - ] - - add_project_arguments(objcc.get_supported_arguments(objc_warnings), - language: ['objc']) - endif + subdir('meson/warnings') + subdir('meson/suppressions') endif # Disable deprecated API which is not used by tests or examples @@ -263,19 +144,10 @@ endif core_deps += [cc.find_library('m', required: false)] core_name = 'pugl_@0@@1@'.format(platform, version_suffix) includes = include_directories(['include']) - -# Determine library type and set up defines for building them library_args = ['-DPUGL_INTERNAL'] -if get_option('default_library') == 'both' - if host_machine.system() == 'windows' - error('default_library=both is not supported on Windows') - endif - library_type = 'both_libraries' -elif get_option('default_library') == 'shared' - library_type = 'shared_library' -else - library_type = 'static_library' +subdir('meson/library') +if library_type == 'static_library' add_project_arguments(['-DPUGL_STATIC'], language: ['c', 'cpp', 'objc']) endif diff --git a/meson/library/meson.build b/meson/library/meson.build new file mode 100644 index 0000000..5533fb5 --- /dev/null +++ b/meson/library/meson.build @@ -0,0 +1,25 @@ +# Copyright 2020-2022 David Robillard <d@drobilla.net> +# SPDX-License-Identifier: CC0-1.0 OR ISC + +# General code to determine the library type to build. +# +# Unfortunately, meson's default_library option does not handle real-world +# situations out of the box. In particular, it is usually necessary to specify +# different flags for static and shared builds of C libraries so that symbols +# can be exported. To work around this, we do not support default_library=both +# on Windows. On other platforms with GCC-like compilers, we can support both +# because symbols can safely be exported in the same way (giving them default +# visibility) in both static and shared builds. + +if get_option('default_library') == 'both' + if host_machine.system() == 'windows' + error('default_library=both is not supported on Windows') + endif + + library_type = 'both_libraries' +elif get_option('default_library') == 'shared' + library_type = 'shared_library' +else + library_type = 'static_library' + add_project_arguments(['-DPUGL_STATIC'], language: ['c', 'cpp', 'objc']) +endif diff --git a/meson/suppressions/meson.build b/meson/suppressions/meson.build new file mode 100644 index 0000000..8c5cf29 --- /dev/null +++ b/meson/suppressions/meson.build @@ -0,0 +1,136 @@ +# Copyright 2020-2022 David Robillard <d@drobilla.net> +# SPDX-License-Identifier: CC0-1.0 OR ISC + +# Project-specific warning suppressions. +# +# This should be used in conjunction with the generic "warnings" sibling that +# enables all reasonable warnings for the compiler. It lives here just to keep +# the top-level meson.build more readable. + +##### +# C # +##### + +c_warnings = all_c_warnings +if cc.get_id() == 'clang' + c_warnings += [ + '-Wno-bad-function-cast', + '-Wno-padded', + '-Wno-switch-default', + '-Wno-switch-enum', + ] + + if host_machine.system() == 'darwin' + c_warnings += [ + '-Wno-poison-system-directories', + ] + elif host_machine.system() == 'windows' + c_warnings += [ + '-Wno-deprecated-declarations', + '-Wno-format-nonliteral', + '-Wno-nonportable-system-include-path', + '-Wno-unused-macros', + ] + endif +elif cc.get_id() == 'gcc' + c_warnings += [ + '-Wno-bad-function-cast', + '-Wno-float-equal', + '-Wno-inline', + '-Wno-padded', + '-Wno-pedantic', + '-Wno-suggest-attribute=const', + '-Wno-suggest-attribute=malloc', + '-Wno-suggest-attribute=pure', + '-Wno-switch-default', + '-Wno-switch-enum', + '-Wno-unsuffixed-float-constants', + ] + + if host_machine.system() == 'windows' + c_warnings += [ + '-Wno-cast-function-type', + '-Wno-suggest-attribute=format', + ] + endif +elif cc.get_id() == 'msvc' + c_warnings += [ + '/wd4061', # enumerator in switch is not explicitly handled + '/wd4191', # unsafe conversion from type to type + '/wd4514', # unreferenced inline function has been removed + '/wd4706', # assignment within conditional expression + '/wd4710', # function not inlined + '/wd4711', # function selected for automatic inline expansion + '/wd4820', # padding added after construct + '/wd4996', # POSIX name for this item is deprecated + '/wd5045', # will insert Spectre mitigation for memory load + '/wd5246', # subobject initialization should be wrapped in braces + ] +endif + +add_project_arguments(cc.get_supported_arguments(c_warnings), + language: ['c']) + +####### +# C++ # +####### + +if is_variable('cpp') + cpp_warnings = all_cpp_warnings + + if cpp.get_id() == 'clang' + cpp_warnings += [ + '-Wno-inline', + '-Wno-padded', + ] + + if host_machine.system() == 'darwin' + cpp_warnings += [ + '-Wno-poison-system-directories', + ] + endif + + elif cpp.get_id() == 'gcc' + cpp_warnings += [ + '-Wno-inline', + '-Wno-padded', + ] + elif cpp.get_id() == 'msvc' + cpp_warnings += [ + '/wd4061', # enumerator in switch is not explicitly handled + '/wd4191', # unsafe conversion from type to type + '/wd4514', # unreferenced inline function has been removed + '/wd4625', # copy constructor implicitly deleted + '/wd4626', # copy assignment operator implicitly deleted + '/wd4706', # assignment within conditional expression + '/wd4710', # function not inlined + '/wd4711', # function selected for automatic inline expansion + '/wd4800', # implicit conversion to bool + '/wd4820', # padding added after construct + '/wd5026', # move constructor implicitly deleted + '/wd5027', # move assignment operator implicitly deleted + '/wd5039', # pointer to potentially throwing function passed to C + '/wd5045', # will insert Spectre mitigation for memory load + ] + endif + + add_project_arguments(cpp.get_supported_arguments(cpp_warnings), + language: ['cpp']) +endif + +############### +# Objective C # +############### + +if is_variable('objcc') + objc_warnings = all_objc_warnings + [ + '-Wno-bad-function-cast', + '-Wno-direct-ivar-access', + '-Wno-padded', + '-Wno-pedantic', + '-Wno-poison-system-directories', + ] + + add_project_arguments(objcc.get_supported_arguments(objc_warnings), + language: ['objc']) +endif diff --git a/meson/meson.build b/meson/warnings/meson.build index 8973b7a..8973b7a 100644 --- a/meson/meson.build +++ b/meson/warnings/meson.build |