diff options
author | Brad King <brad.king@kitware.com> | 2009-09-17 19:29:01 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2009-09-17 19:29:01 (GMT) |
commit | ca76645ab7f235fdad652fcff7ad9a899bc12424 (patch) | |
tree | 53e3933b541867d9b091e811f608288aead5141b /Modules | |
parent | 80af3ae35ddb2ff79d64d7183d901a95d05d661d (diff) | |
download | CMake-ca76645ab7f235fdad652fcff7ad9a899bc12424.zip CMake-ca76645ab7f235fdad652fcff7ad9a899bc12424.tar.gz CMake-ca76645ab7f235fdad652fcff7ad9a899bc12424.tar.bz2 |
Add FAIL_REGEX to CHECK_(C|CXX)_SOURCE_COMPILES
This teaches the CHECK_C_SOURCE_COMPILES and CHECK_CXX_SOURCE_COMPILES
macros to recognize a FAIL_REGEX option. If they see the regular
expression in the output of the test compilation, the check fails.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/CheckCSourceCompiles.cmake | 21 | ||||
-rw-r--r-- | Modules/CheckCXXSourceCompiles.cmake | 22 |
2 files changed, 41 insertions, 2 deletions
diff --git a/Modules/CheckCSourceCompiles.cmake b/Modules/CheckCSourceCompiles.cmake index 41de73b..3c32487 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(<code> <var>) +# CHECK_C_SOURCE_COMPILES(<code> <var> [FAIL_REGEX <fail-regex>]) # <code> - source code to try to compile # <var> - variable to store whether the source code compiled +# <fail-regex> - 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 fedc53f..458ee6f 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(<code> <var>) +# CHECK_CXX_SOURCE_COMPILES(<code> <var> [FAIL_REGEX <fail-regex>]) # <code> - source code to try to compile # <var> - variable to store whether the source code compiled +# <fail-regex> - 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") |