CheckCSourceCompiles.cmake 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. # - Check if the source code provided in the SOURCE argument compiles.
  2. # CHECK_C_SOURCE_COMPILES(SOURCE VAR)
  3. # - macro which checks if the source code compiles
  4. # SOURCE - source code to try to compile
  5. # VAR - variable to store size if the type exists.
  6. # Checks the following optional VARIABLES (not arguments)
  7. # CMAKE_REQUIRED_LIBRARIES - Link to extra libraries
  8. # CMAKE_REQUIRED_FLAGS - Extra flags to C compiler
  9. #
  10. MACRO(CHECK_C_SOURCE_COMPILES SOURCE VAR)
  11. IF("${VAR}" MATCHES "^${VAR}$")
  12. SET(MACRO_CHECK_FUNCTION_DEFINITIONS
  13. "-D${VAR} ${CMAKE_REQUIRED_FLAGS}")
  14. IF(CMAKE_REQUIRED_LIBRARIES)
  15. SET(CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES
  16. "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
  17. ENDIF(CMAKE_REQUIRED_LIBRARIES)
  18. IF(CMAKE_REQUIRED_INCLUDES)
  19. SET(CHECK_C_SOURCE_COMPILES_ADD_INCLUDES
  20. "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
  21. ENDIF(CMAKE_REQUIRED_INCLUDES)
  22. FILE(WRITE "${CMAKE_BINARY_DIR}/CMakeFiles/CMakeTmp/src.c"
  23. "${SOURCE}")
  24. MESSAGE(STATUS "Performing Test ${VAR}")
  25. TRY_COMPILE(${VAR}
  26. ${CMAKE_BINARY_DIR}
  27. ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeTmp/src.c
  28. CMAKE_FLAGS
  29. "${CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES}"
  30. "${CHECK_C_SOURCE_COMPILES_ADD_INCLUDES}"
  31. OUTPUT_VARIABLE OUTPUT)
  32. IF(${VAR})
  33. SET(${VAR} 1 CACHE INTERNAL "Test ${FUNCTION}")
  34. MESSAGE(STATUS "Performing Test ${VAR} - Success")
  35. WRITE_FILE(${CMAKE_BINARY_DIR}/CMakeOutput.log
  36. "Performing C SOURCE FILE Test ${VAR} succeded with the following output:\n"
  37. "${OUTPUT}\n"
  38. "Source file was:\n${SOURCE}\n" APPEND)
  39. ELSE(${VAR})
  40. MESSAGE(STATUS "Performing Test ${VAR} - Failed")
  41. SET(${VAR} "" CACHE INTERNAL "Test ${FUNCTION}")
  42. WRITE_FILE(${CMAKE_BINARY_DIR}/CMakeError.log
  43. "Performing C SOURCE FILE Test ${VAR} failed with the following output:\n"
  44. "${OUTPUT}\n"
  45. "Source file was:\n${SOURCE}\n" APPEND)
  46. ENDIF(${VAR})
  47. ENDIF("${VAR}" MATCHES "^${VAR}$")
  48. ENDMACRO(CHECK_C_SOURCE_COMPILES)