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}")