| # |
| # Check if the source code provided in the SOURCE argument compiles. |
| # |
| # CHECK_C_SOURCE_COMPILES - macro which checks if the source code compiles\ |
| # SOURCE - source code to try to compile |
| # VARIABLE - variable to store size if the type exists. |
| # |
| # Checks the following optional VARIABLES (not arguments) |
| # CMAKE_REQUIRED_LIBRARIES - Link to extra libraries |
| # CMAKE_REQUIRED_FLAGS - Extra flags to C compiler |
| # |
| |
| MACRO(CHECK_C_SOURCE_COMPILES SOURCE VAR) |
| IF("${VAR}" MATCHES "^${VAR}$") |
| SET(MACRO_CHECK_FUNCTION_DEFINITIONS |
| "-D${VAR} ${CMAKE_REQUIRED_FLAGS}") |
| IF(CMAKE_REQUIRED_LIBRARIES) |
| SET(CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES |
| "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}") |
| ENDIF(CMAKE_REQUIRED_LIBRARIES) |
| IF(CMAKE_REQUIRED_INCLUDES) |
| SET(CHECK_C_SOURCE_COMPILES_ADD_INCLUDES |
| "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}") |
| ENDIF(CMAKE_REQUIRED_INCLUDES) |
| FILE(WRITE "${CMAKE_BINARY_DIR}/CMakeTmp/src.c" |
| "${SOURCE}") |
| |
| MESSAGE(STATUS "Performing Test ${VAR}") |
| TRY_COMPILE(${VAR} |
| ${CMAKE_BINARY_DIR} |
| ${CMAKE_BINARY_DIR}/CMakeTmp/src.c |
| CMAKE_FLAGS |
| "${CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES}" |
| "${CHECK_C_SOURCE_COMPILES_ADD_INCLUDES}" |
| OUTPUT_VARIABLE OUTPUT) |
| IF(${VAR}) |
| SET(${VAR} 1 CACHE INTERNAL "Test ${FUNCTION}") |
| MESSAGE(STATUS "Performing Test ${VAR} - Success") |
| WRITE_FILE(${CMAKE_BINARY_DIR}/CMakeOutput.log |
| "Performing C SOURCE FILE Test ${VAR} succeded with the following output:\n" |
| "${OUTPUT}\n" |
| "Source file was:\n${SOURCE}\n" APPEND) |
| ELSE(${VAR}) |
| MESSAGE(STATUS "Performing Test ${VAR} - Failed") |
| SET(${VAR} "" CACHE INTERNAL "Test ${FUNCTION}") |
| WRITE_FILE(${CMAKE_BINARY_DIR}/CMakeError.log |
| "Performing C SOURCE FILE Test ${VAR} failed with the following output:\n" |
| "${OUTPUT}\n" |
| "Source file was:\n${SOURCE}\n" APPEND) |
| ENDIF(${VAR}) |
| ENDIF("${VAR}" MATCHES "^${VAR}$") |
| ENDMACRO(CHECK_C_SOURCE_COMPILES) |
| |