diff options
author | David Robillard <d@drobilla.net> | 2020-07-17 19:29:15 +0200 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2020-07-17 19:29:15 +0200 |
commit | 116a28fa5f92e58a46dc878751019ba74a61e54a (patch) | |
tree | 48c62db7798b8d6cfa09eddefbb26d6ac1aee82c | |
parent | 8b67c693005e5d3ca9a6e0d5ed0613392fcec623 (diff) | |
download | autowaf-116a28fa5f92e58a46dc878751019ba74a61e54a.tar.gz autowaf-116a28fa5f92e58a46dc878751019ba74a61e54a.tar.bz2 autowaf-116a28fa5f92e58a46dc878751019ba74a61e54a.zip |
Fix ultra-strict warnings for C++-only projects
-rw-r--r-- | extras/autowaf.py | 88 |
1 files changed, 54 insertions, 34 deletions
diff --git a/extras/autowaf.py b/extras/autowaf.py index 3c61320..0d50e40 100644 --- a/extras/autowaf.py +++ b/extras/autowaf.py @@ -412,44 +412,62 @@ gcc_cxx_warnings = [ def remove_all_warning_flags(env): """Removes all warning flags except Werror or equivalent""" - if 'clang' in env.CC_NAME or 'gcc' in env.CC_NAME: - for var in ['CFLAGS', 'CXXFLAGS']: - flags = env[var] - env[var] = [f for f in flags - if not (f.startswith('-W') and f != '-Werror')] - elif 'msvc' in env.CC_NAME: - for var in ['CFLAGS', 'CXXFLAGS']: - flags = env[var] - env[var] = [f for f in flags + if 'CC' in env: + if 'clang' in env.CC_NAME or 'gcc' in env.CC_NAME: + env['CFLAGS'] = [f for f in env['CFLAGS'] + if not (f.startswith('-W') and f != '-Werror')] + elif 'msvc' in env.CC_NAME: + env['CFLAGS'] = [f for f in env['CFLAGS'] if not (f.startswith('/W') and f != '/WX')] + if 'CXX' in env: + if 'clang' in env.CXX_NAME or 'gcc' in env.CXX_NAME: + env['CXXFLAGS'] = [f for f in env['CXXFLAGS'] + if not (f.startswith('-W') and f != '-Werror')] + elif 'msvc' in env.CXX_NAME: + env['CXXFLAGS'] = [f for f in env['CXXFLAGS'] + if not (f.startswith('/W') and f != '/WX')] + def enable_all_warnings(env): """Enables all known warnings""" - if 'clang' in env.CC_NAME: - env.append_unique('CFLAGS', ['-Weverything']) - env.append_unique('CXXFLAGS', ['-Weverything', - '-Wno-c++98-compat', - '-Wno-c++98-compat-pedantic']) - elif 'gcc' in env.CC_NAME: - env.append_unique('CFLAGS', gcc_common_warnings) - env.append_unique('CXXFLAGS', gcc_common_warnings) - env.append_unique('CFLAGS', gcc_c_warnings) - env.append_unique('CXXFLAGS', gcc_cxx_warnings) - elif env.MSVC_COMPILER: - env.append_unique('CFLAGS', ['/Wall']) - env.append_unique('CXXFLAGS', ['/Wall']) - else: - Logs.warn('Unknown compiler "%s", not enabling warnings' % env.CC_NAME) + if 'CC' in env: + if 'clang' in env.CC_NAME: + env.append_unique('CFLAGS', ['-Weverything']) + elif 'gcc' in env.CC_NAME: + env.append_unique('CFLAGS', gcc_common_warnings) + env.append_unique('CFLAGS', gcc_c_warnings) + elif env.MSVC_COMPILER: + env.append_unique('CFLAGS', ['/Wall']) + else: + Logs.warn('Unknown compiler "%s", not enabling warnings' % env.CC_NAME) + + if 'CXX' in env: + if 'clang' in env.CXX_NAME: + env.append_unique('CXXFLAGS', ['-Weverything', + '-Wno-c++98-compat', + '-Wno-c++98-compat-pedantic']) + elif 'gcc' in env.CXX_NAME: + env.append_unique('CXXFLAGS', gcc_common_warnings) + env.append_unique('CXXFLAGS', gcc_cxx_warnings) + elif env.MSVC_COMPILER: + env.append_unique('CXXFLAGS', ['/Wall']) + else: + Logs.warn('Unknown compiler "%s", not enabling warnings' % env.CXX_NAME) def set_warnings_as_errors(env): - if 'clang' in env.CC_NAME or 'gcc' in env.CC_NAME: - env.append_unique('CFLAGS', ['-Werror']) - env.append_unique('CXXFLAGS', ['-Werror']) - elif env.MSVC_COMPILER: - env.append_unique('CFLAGS', ['/WX']) - env.append_unique('CXXFLAGS', ['/WX']) + if 'CC' in env: + if 'clang' in env.CC_NAME or 'gcc' in env.CC_NAME: + env.append_unique('CFLAGS', ['-Werror']) + elif env.MSVC_COMPILER: + env.append_unique('CFLAGS', ['/WX']) + + if 'CXX' in env: + if 'clang' in env.CXX_NAME or 'gcc' in env.CXX_NAME: + env.append_unique('CXXFLAGS', ['-Werror']) + elif env.MSVC_COMPILER: + env.append_unique('CXXFLAGS', ['/WX']) def add_compiler_flags(env, lang, compiler_to_flags): @@ -591,10 +609,12 @@ def configure(conf): if conf.find_program(cov, var='LLVM_COV', mandatory=False): break else: - conf.check_cc(cflags=check_flags(conf), - lib='gcov', - define_name='HAVE_GCOV', - mandatory=False) + check_func = (conf.check_cc if 'CC' in conf.env + else conf.check_cxx) + check_func(cflags=check_flags(conf), + lib='gcov', + define_name='HAVE_GCOV', + mandatory=False) except Exception: pass # Test options do not exist |