Merge pull request #579 from jpcima/gnu-warnings

Detected compiler warnings
This commit is contained in:
JP Cimalando 2020-12-13 16:26:52 +01:00 committed by GitHub
commit 751c2664df
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 99 additions and 7 deletions

94
cmake/GNUWarnings.cmake Normal file
View file

@ -0,0 +1,94 @@
# A CMake module to use GNU warning flags with C and C++
# and detect their availability.
#
# Usage:
# gw_warn(<Wflag>...)
# gw_warn_c(<Wflag>...)
# gw_warn_cxx(<Wflag>...)
# gw_target_warn(<target> <PUBLIC|PRIVATE|INTERFACE> <Wflag>...)
# gw_target_warn_c(<target> <PUBLIC|PRIVATE|INTERFACE> <Wflag>...)
# gw_target_warn_cxx(<target> <PUBLIC|PRIVATE|INTERFACE> <Wflag>...)
#
# Copyright 2020, Jean Pierre Cimalando <jp-dev@inbox.ru>
# SPDX-License-Identifier: BSD-2-Clause
function(gw_warn)
gw_warn_c(${ARGN})
gw_warn_cxx(${ARGN})
endfunction()
function(gw_warn_c)
if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang")
foreach(flag ${ARGN})
_gw_check_c_flag_is_silent("${flag}")
if("${GNUWARNINGS_C_FLAG_${flag}_SILENT}")
add_compile_options("$<$<COMPILE_LANGUAGE:C>:${flag}>")
endif()
endforeach()
endif()
endfunction()
function(gw_warn_cxx)
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
foreach(flag ${ARGN})
_gw_check_cxx_flag_is_silent("${flag}")
if("${GNUWARNINGS_CXX_FLAG_${flag}_SILENT}")
add_compile_options("$<$<COMPILE_LANGUAGE:CXX>:${flag}>")
endif()
endforeach()
endif()
endfunction()
function(gw_target_warn TARGET DOMAIN)
gw_target_warn_c("${TARGET}" "${DOMAIN}" ${ARGN})
gw_target_warn_cxx("${TARGET}" "${DOMAIN}" ${ARGN})
endfunction()
function(gw_target_warn_c TARGET DOMAIN)
if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang")
foreach(flag ${ARGN})
_gw_check_c_flag_is_silent("${flag}")
if("${GNUWARNINGS_C_FLAG_${flag}_SILENT}")
target_compile_options("${TARGET}" "${DOMAIN}" "$<$<COMPILE_LANGUAGE:C>:${flag}>")
endif()
endforeach()
endif()
endfunction()
function(gw_target_warn_cxx TARGET DOMAIN)
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
foreach(flag ${ARGN})
_gw_check_cxx_flag_is_silent("${flag}")
if("${GNUWARNINGS_CXX_FLAG_${flag}_SILENT}")
target_compile_options("${TARGET}" "${DOMAIN}" "$<$<COMPILE_LANGUAGE:CXX>:${flag}>")
endif()
endforeach()
endif()
endfunction()
function(_gw_check_c_flag_is_silent FLAG)
if(NOT DEFINED "GNUWARNINGS_C_FLAG_${FLAG}_SILENT")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/CheckGNUWarning.c" "")
_gw_check_command_succeeds_silently(_result "${CMAKE_C_COMPILER}" "${FLAG}" "-c" "-o" "${CMAKE_CURRENT_BINARY_DIR}/CheckGNUWarning.o" "${CMAKE_CURRENT_BINARY_DIR}/CheckGNUWarning.c")
message(STATUS "Have C warning ${flag}: ${_result}")
set("GNUWARNINGS_C_FLAG_${FLAG}_SILENT" "${_result}" CACHE BOOL "Have C warning ${flag}")
endif()
endfunction()
function(_gw_check_cxx_flag_is_silent FLAG)
if(NOT DEFINED "GNUWARNINGS_CXX_FLAG_${FLAG}_SILENT")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/CheckGNUWarning.cpp" "")
_gw_check_command_succeeds_silently(_result "${CMAKE_CXX_COMPILER}" "${FLAG}" "-c" "-o" "${CMAKE_CURRENT_BINARY_DIR}/CheckGNUWarning.o" "${CMAKE_CURRENT_BINARY_DIR}/CheckGNUWarning.cpp")
message(STATUS "Have C++ warning ${flag}: ${_result}")
set("GNUWARNINGS_CXX_FLAG_${FLAG}_SILENT" "${_result}" CACHE BOOL "Have C++ warning ${flag}")
endif()
endfunction()
function(_gw_check_command_succeeds_silently RESULT_VARIABLE)
execute_process(COMMAND ${ARGN} RESULT_VARIABLE _result OUTPUT_VARIABLE _output ERROR_VARIABLE _error OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE)
if(_result EQUAL 0 AND _output STREQUAL "" AND _error STREQUAL "")
set("${RESULT_VARIABLE}" TRUE PARENT_SCOPE)
else()
set("${RESULT_VARIABLE}" FALSE PARENT_SCOPE)
endif()
endfunction()

View file

@ -1,5 +1,6 @@
include(CMakeDependentOption)
include(CheckCXXCompilerFlag)
include(GNUWarnings)
set(CMAKE_CXX_STANDARD 11 CACHE STRING "C++ standard to be used")
set(CMAKE_C_STANDARD 99 CACHE STRING "C standard to be used")
@ -61,10 +62,7 @@ endif()
# Add required flags for the builds
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
add_compile_options(-Wall)
add_compile_options(-Wextra)
add_compile_options(-Wno-multichar)
add_compile_options(-Werror=return-type)
gw_warn(-Wall -Wextra -Wno-multichar -Werror=return-type)
if (SFIZZ_SYSTEM_PROCESSOR MATCHES "^(i.86|x86_64)$")
add_compile_options(-msse2)
elseif(SFIZZ_SYSTEM_PROCESSOR MATCHES "^(arm.*)$")

View file

@ -213,7 +213,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
endif()
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
target_compile_options(sfizz-vstgui PRIVATE
gw_target_warn(sfizz-vstgui PRIVATE
"-Wno-deprecated-copy"
"-Wno-deprecated-declarations"
"-Wno-extra"

View file

@ -141,7 +141,7 @@ else()
endif()
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
target_compile_options(${VSTPLUGIN_PRJ_NAME} PRIVATE
gw_target_warn(${VSTPLUGIN_PRJ_NAME} PRIVATE
"-Wno-extra"
"-Wno-multichar"
"-Wno-reorder"
@ -317,7 +317,7 @@ elseif(SFIZZ_AU)
endif()
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
target_compile_options(${AUPLUGIN_PRJ_NAME} PRIVATE
gw_target_warn(${AUPLUGIN_PRJ_NAME} PRIVATE
"-Wno-extra"
"-Wno-multichar"
"-Wno-reorder"