diff options
author | João Valverde <joao.valverde@tecnico.ulisboa.pt> | 2018-09-08 00:05:40 +0100 |
---|---|---|
committer | João Valverde <j@v6e.pt> | 2018-09-09 01:52:44 +0000 |
commit | 6ab8d4607adccd2e5d8afe25b2be433509a98f06 (patch) | |
tree | 53ec5bb72d17eb9547e5a9ca15d5af1643acf9a6 /CMakeLists.txt | |
parent | c850a16ef4c32d567c92f09bfe15c1fb7c9da011 (diff) |
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>
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 52 |
1 files changed, 19 insertions, 33 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index b12e373df4..462590d222 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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}") |