diff --git a/Modules/CheckCSourceCompiles.cmake b/Modules/CheckCSourceCompiles.cmake index 41de73b53d..3c32487093 100644 --- a/Modules/CheckCSourceCompiles.cmake +++ b/Modules/CheckCSourceCompiles.cmake @@ -1,7 +1,8 @@ # - Check if the given C source code compiles. -# CHECK_C_SOURCE_COMPILES( ) +# CHECK_C_SOURCE_COMPILES( [FAIL_REGEX ]) # - source code to try to compile # - variable to store whether the source code compiled +# - fail if test output matches this regex # The following variables may be set before calling this macro to # modify the way the check is run: # @@ -12,6 +13,17 @@ MACRO(CHECK_C_SOURCE_COMPILES SOURCE VAR) IF("${VAR}" MATCHES "^${VAR}$") + SET(_FAIL_REGEX) + SET(_key) + FOREACH(arg ${ARGN}) + IF("${arg}" MATCHES "^(FAIL_REGEX)$") + SET(_key "${arg}") + ELSEIF(_key) + LIST(APPEND _${_key} "${arg}") + ELSE() + MESSAGE(FATAL_ERROR "Unknown argument:\n ${arg}\n") + ENDIF() + ENDFOREACH() SET(MACRO_CHECK_FUNCTION_DEFINITIONS "-D${VAR} ${CMAKE_REQUIRED_FLAGS}") IF(CMAKE_REQUIRED_LIBRARIES) @@ -38,6 +50,13 @@ MACRO(CHECK_C_SOURCE_COMPILES SOURCE VAR) "${CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES}" "${CHECK_C_SOURCE_COMPILES_ADD_INCLUDES}" OUTPUT_VARIABLE OUTPUT) + + FOREACH(_regex ${_FAIL_REGEX}) + IF("${OUTPUT}" MATCHES "${_regex}") + SET(${VAR} 0) + ENDIF() + ENDFOREACH() + IF(${VAR}) SET(${VAR} 1 CACHE INTERNAL "Test ${VAR}") MESSAGE(STATUS "Performing Test ${VAR} - Success") diff --git a/Modules/CheckCXXSourceCompiles.cmake b/Modules/CheckCXXSourceCompiles.cmake index fedc53f9fd..458ee6f378 100644 --- a/Modules/CheckCXXSourceCompiles.cmake +++ b/Modules/CheckCXXSourceCompiles.cmake @@ -1,7 +1,8 @@ # - Check if the given C++ source code compiles. -# CHECK_CXX_SOURCE_COMPILES( ) +# CHECK_CXX_SOURCE_COMPILES( [FAIL_REGEX ]) # - source code to try to compile # - variable to store whether the source code compiled +# - fail if test output matches this regex # The following variables may be set before calling this macro to # modify the way the check is run: # @@ -12,6 +13,18 @@ MACRO(CHECK_CXX_SOURCE_COMPILES SOURCE VAR) IF("${VAR}" MATCHES "^${VAR}$") + SET(_FAIL_REGEX) + SET(_key) + FOREACH(arg ${ARGN}) + IF("${arg}" MATCHES "^(FAIL_REGEX)$") + SET(_key "${arg}") + ELSEIF(_key) + LIST(APPEND _${_key} "${arg}") + ELSE() + MESSAGE(FATAL_ERROR "Unknown argument:\n ${arg}\n") + ENDIF() + ENDFOREACH() + SET(MACRO_CHECK_FUNCTION_DEFINITIONS "-D${VAR} ${CMAKE_REQUIRED_FLAGS}") IF(CMAKE_REQUIRED_LIBRARIES) @@ -38,6 +51,13 @@ MACRO(CHECK_CXX_SOURCE_COMPILES SOURCE VAR) "${CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES}" "${CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES}" OUTPUT_VARIABLE OUTPUT) + + FOREACH(_regex ${_FAIL_REGEX}) + IF("${OUTPUT}" MATCHES "${_regex}") + SET(${VAR} 0) + ENDIF() + ENDFOREACH() + IF(${VAR}) SET(${VAR} 1 CACHE INTERNAL "Test ${VAR}") MESSAGE(STATUS "Performing Test ${VAR} - Success")