CMake: Add function to test compiler flags

Remove all the duplicate code. Each test result is cached so it
needs an unique variable to store the result.

Change-Id: Ib591a1d6beaa13337d927a446b4d8d5e687ff610
Reviewed-on: https://code.wireshark.org/review/29485
Petri-Dish: João Valverde <j@v6e.pt>
Tested-by: Petri Dish Buildbot
Reviewed-by: João Valverde <j@v6e.pt>
This commit is contained in:
João Valverde 2018-09-08 00:05:40 +01:00 committed by João Valverde
parent c850a16ef4
commit 6ab8d4607a
1 changed files with 19 additions and 33 deletions

View File

@ -695,52 +695,38 @@ else()
set(BUILD_SHARED_LIBS 1)
endif()
# Sigh: Have to use THIS_FLAG instead of ${F} for some reason
foreach(THIS_FLAG ${C_FLAG_TESTS})
string( REGEX REPLACE "[^a-zA-Z0-9_]+" "_" F ${THIS_FLAG} )
set(${F} ${THIS_FLAG})
set(V C_${F}_VALID)
message(STATUS "Checking for c-compiler flag: ${THIS_FLAG}")
check_c_compiler_flag("${ADDED_CMAKE_C_FLAGS} ${${F}}" ${V})
if (${${V}})
set(ADDED_CMAKE_C_FLAGS "${ADDED_CMAKE_C_FLAGS} ${${F}}")
function(test_compiler_flag _lang _this_flag _valid_flags_var)
string(MAKE_C_IDENTIFIER "${_lang}${_this_flag}_VALID" _flag_var)
set(_test_flags "${${_valid_flags_var}} ${_this_flag}")
if(_lang STREQUAL "C")
check_c_compiler_flag("${_test_flags}" ${_flag_var})
elseif(_lang STREQUAL "CXX")
check_cxx_compiler_flag("${_test_flags}" ${_flag_var})
else()
message(FATAL_ERROR "Language must be C or CXX")
endif()
if (${_flag_var})
set(${_valid_flags_var} "${_test_flags}" PARENT_SCOPE)
endif()
endfunction()
foreach(THIS_FLAG ${C_FLAG_TESTS})
test_compiler_flag(C ${THIS_FLAG} ADDED_CMAKE_C_FLAGS)
endforeach()
set(CMAKE_C_FLAGS "${ADDED_CMAKE_C_FLAGS} ${CMAKE_C_FLAGS}")
foreach(THIS_FLAG ${CXX_FLAG_TESTS})
string( REGEX REPLACE "[^a-zA-Z0-9_]+" "_" F ${THIS_FLAG} )
set(${F} ${THIS_FLAG})
set(V CXX_${F}_VALID)
message(STATUS "Checking for c++-compiler flag: ${THIS_FLAG}")
check_cxx_compiler_flag("${ADDED_CMAKE_CXX_FLAGS} ${${F}}" ${V})
if (${${V}})
set(ADDED_CMAKE_CXX_FLAGS "${ADDED_CMAKE_CXX_FLAGS} ${${F}}")
endif()
test_compiler_flag(CXX ${THIS_FLAG} ADDED_CMAKE_CXX_FLAGS)
endforeach()
set(CMAKE_CXX_FLAGS "${ADDED_CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS}")
foreach(THIS_FLAG ${C_WARN_TESTS})
string( REGEX REPLACE "[^a-zA-Z0-9_]+" "_" F ${THIS_FLAG} )
set(${F} ${THIS_FLAG})
set(V C_${F}_VALID)
message(STATUS "Checking for c-compiler flag: ${THIS_FLAG}")
check_c_compiler_flag("${C_FLAG_TESTS} ${${F}}" ${V})
if (${${V}})
set(ADDED_WARN_C_FLAGS "${ADDED_WARN_C_FLAGS} ${${F}}")
endif()
test_compiler_flag(C ${THIS_FLAG} ADDED_WARN_C_FLAGS)
endforeach()
set(CMAKE_C_FLAGS "${ADDED_WARN_C_FLAGS} ${CMAKE_C_FLAGS}")
foreach(THIS_FLAG ${CXX_WARN_TESTS})
string( REGEX REPLACE "[^a-zA-Z0-9_]+" "_" F ${THIS_FLAG} )
set(${F} ${THIS_FLAG})
set(V CXX_${F}_VALID)
message(STATUS "Checking for c++-compiler flag: ${THIS_FLAG}")
check_cxx_compiler_flag("${CXX_FLAG_TESTS} ${${F}}" ${V})
if (${${V}})
set(ADDED_WARN_CXX_FLAGS "${ADDED_WARN_CXX_FLAGS} ${${F}}")
endif()
test_compiler_flag(CXX ${THIS_FLAG} ADDED_WARN_CXX_FLAGS)
endforeach()
set(CMAKE_CXX_FLAGS "${ADDED_WARN_CXX_FLAGS} ${CMAKE_CXX_FLAGS}")