CheckSymbolExists.cmake 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #
  2. # Check if the symbol exists in include files
  3. #
  4. # CHECK_SYMBOL_EXISTS - macro which checks the symbol exists in include files.
  5. # SYMBOL - symbol
  6. # FILES - include files to check
  7. # VARIABLE - variable to return result
  8. #
  9. MACRO(CHECK_SYMBOL_EXISTS SYMBOL FILES VARIABLE)
  10. IF("${VARIABLE}" MATCHES "^${VARIABLE}$")
  11. SET(CHECK_SYMBOL_EXISTS_CONTENT "/* */\n")
  12. SET(MACRO_CHECK_SYMBOL_EXISTS_FLAGS ${CMAKE_REQUIRED_FLAGS})
  13. IF(CMAKE_REQUIRED_LIBRARIES)
  14. SET(CHECK_SYMBOL_EXISTS_LIBS
  15. "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
  16. ENDIF(CMAKE_REQUIRED_LIBRARIES)
  17. FOREACH(FILE ${FILES})
  18. SET(CHECK_SYMBOL_EXISTS_CONTENT
  19. "${CHECK_SYMBOL_EXISTS_CONTENT}#include <${FILE}>\n")
  20. ENDFOREACH(FILE)
  21. SET(CHECK_SYMBOL_EXISTS_CONTENT
  22. "${CHECK_SYMBOL_EXISTS_CONTENT}\nvoid cmakeRequireSymbol(int dummy,...){(void)dummy;}\nint main()\n{\n#ifndef ${SYMBOL}\n cmakeRequireSymbol(0,&${SYMBOL});\n#endif\n return 0;\n}\n")
  23. FILE(WRITE ${CMAKE_BINARY_DIR}/CMakeTmp/CheckSymbolExists.c
  24. "${CHECK_SYMBOL_EXISTS_CONTENT}")
  25. MESSAGE(STATUS "Looking for ${SYMBOL}")
  26. TRY_COMPILE(${VARIABLE}
  27. ${CMAKE_BINARY_DIR}
  28. ${CMAKE_BINARY_DIR}/CMakeTmp/CheckSymbolExists.c
  29. CMAKE_FLAGS
  30. -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_SYMBOL_EXISTS_FLAGS}
  31. "${CHECK_SYMBOL_EXISTS_LIBS}"
  32. OUTPUT_VARIABLE OUTPUT)
  33. IF(${VARIABLE})
  34. MESSAGE(STATUS "Looking for ${SYMBOL} - found")
  35. SET(${VARIABLE} 1 CACHE INTERNAL "Have symbol ${SYMBOL}")
  36. FILE(APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeOutput.log
  37. "Determining if the ${SYMBOL} "
  38. "exist passed with the following output:\n"
  39. "${OUTPUT}\nFile ${CMAKE_BINARY_DIR}/CMakeTmp/CheckSymbolExists.c:\n"
  40. "${CHECK_SYMBOL_EXISTS_CONTENT}\n")
  41. ELSE(${VARIABLE})
  42. MESSAGE(STATUS "Looking for ${SYMBOL} - not found.")
  43. SET(${VARIABLE} "" CACHE INTERNAL "Have symbol ${SYMBOL}")
  44. FILE(APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log
  45. "Determining if the ${SYMBOL} "
  46. "exist failed with the following output:\n"
  47. "${OUTPUT}\nFile ${CMAKE_BINARY_DIR}/CMakeTmp/CheckSymbolExists.c:\n"
  48. "${CHECK_SYMBOL_EXISTS_CONTENT}\n")
  49. ENDIF(${VARIABLE})
  50. ENDIF("${VARIABLE}" MATCHES "^${VARIABLE}$")
  51. ENDMACRO(CHECK_SYMBOL_EXISTS)