TryCompileFromSource.cmake 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. MACRO(TRY_COMPILE_FROM_SOURCE SOURCE VAR)
  2. IF("${VAR}" MATCHES "^${VAR}$" OR "${VAR}" MATCHES "UNKNOWN")
  3. SET(MACRO_CHECK_FUNCTION_DEFINITIONS
  4. "-D${VAR} ${CMAKE_REQUIRED_FLAGS}")
  5. IF(CMAKE_REQUIRED_LIBRARIES)
  6. SET(TRY_COMPILE_FROM_SOURCE_ADD_LIBRARIES
  7. "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
  8. ENDIF(CMAKE_REQUIRED_LIBRARIES)
  9. SET(src "")
  10. FOREACH(def ${EXTRA_DEFINES})
  11. SET(src "${src}#define ${def} 1\n")
  12. ENDFOREACH(def)
  13. FOREACH(inc ${HEADER_INCLUDES})
  14. SET(src "${src}#include <${inc}>\n")
  15. ENDFOREACH(inc)
  16. SET(src "${src}\nint main() { ${SOURCE} ; return 0; }")
  17. FILE(WRITE "${CMAKE_BINARY_DIR}/CMakeFiles/CMakeTmp/src2.c"
  18. "${src}")
  19. EXEC_PROGRAM("${CMAKE_COMMAND}" "${CMAKE_BINARY_DIR}/CMakeFiles/CMakeTmp"
  20. ARGS -E copy src2.c src.c)
  21. MESSAGE(STATUS "Performing Test ${VAR}")
  22. TRY_COMPILE(${VAR}
  23. ${CMAKE_BINARY_DIR}
  24. ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeTmp/src.c
  25. CMAKE_FLAGS
  26. "${TRY_COMPILE_FROM_SOURCE_ADD_LIBRARIES}"
  27. OUTPUT_VARIABLE OUTPUT)
  28. IF(${VAR})
  29. SET(${VAR} 1 CACHE INTERNAL "Test ${FUNCTION}")
  30. MESSAGE(STATUS "Performing Test ${VAR} - Success")
  31. WRITE_FILE(${CMAKE_BINARY_DIR}/CMakeFiles/CMakeOutput.log
  32. "Performing C SOURCE FILE Test ${VAR} succeded with the following output:\n"
  33. "${OUTPUT}\n"
  34. "Source file was:\n${src}\n" APPEND)
  35. ELSE(${VAR})
  36. MESSAGE(STATUS "Performing Test ${VAR} - Failed")
  37. SET(${VAR} "" CACHE INTERNAL "Test ${FUNCTION}")
  38. WRITE_FILE(${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log
  39. "Performing C SOURCE FILE Test ${VAR} failed with the following output:\n"
  40. "${OUTPUT}\n"
  41. "Source file was:\n${src}\n" APPEND)
  42. ENDIF(${VAR})
  43. ENDIF("${VAR}" MATCHES "^${VAR}$" OR "${VAR}" MATCHES "UNKNOWN")
  44. ENDMACRO(TRY_COMPILE_FROM_SOURCE)