From 6ab8d4607adccd2e5d8afe25b2be433509a98f06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Valverde?= Date: Sat, 8 Sep 2018 00:05:40 +0100 Subject: CMake: Add function to test compiler flags MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Tested-by: Petri Dish Buildbot Reviewed-by: João Valverde --- CMakeLists.txt | 52 +++++++++++++++++++--------------------------------- 1 file changed, 19 insertions(+), 33 deletions(-) (limited to 'CMakeLists.txt') 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}") -- cgit v1.2.3