kwsysPlatformTests.cmake 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. # Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. # file Copyright.txt or https://cmake.org/licensing#kwsys for details.
  3. SET(KWSYS_PLATFORM_TEST_FILE_C kwsysPlatformTestsC.c)
  4. SET(KWSYS_PLATFORM_TEST_FILE_CXX kwsysPlatformTestsCXX.cxx)
  5. MACRO(KWSYS_PLATFORM_TEST lang var description invert)
  6. IF(NOT DEFINED ${var}_COMPILED)
  7. MESSAGE(STATUS "${description}")
  8. TRY_COMPILE(${var}_COMPILED
  9. ${CMAKE_CURRENT_BINARY_DIR}
  10. ${CMAKE_CURRENT_SOURCE_DIR}/${KWSYS_PLATFORM_TEST_FILE_${lang}}
  11. COMPILE_DEFINITIONS -DTEST_${var} ${KWSYS_PLATFORM_TEST_DEFINES} ${KWSYS_PLATFORM_TEST_EXTRA_FLAGS}
  12. CMAKE_FLAGS "-DLINK_LIBRARIES:STRING=${KWSYS_PLATFORM_TEST_LINK_LIBRARIES}"
  13. OUTPUT_VARIABLE OUTPUT)
  14. IF(${var}_COMPILED)
  15. FILE(APPEND
  16. ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
  17. "${description} compiled with the following output:\n${OUTPUT}\n\n")
  18. ELSE()
  19. FILE(APPEND
  20. ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
  21. "${description} failed to compile with the following output:\n${OUTPUT}\n\n")
  22. ENDIF()
  23. IF(${invert} MATCHES INVERT)
  24. IF(${var}_COMPILED)
  25. MESSAGE(STATUS "${description} - no")
  26. ELSE()
  27. MESSAGE(STATUS "${description} - yes")
  28. ENDIF()
  29. ELSE()
  30. IF(${var}_COMPILED)
  31. MESSAGE(STATUS "${description} - yes")
  32. ELSE()
  33. MESSAGE(STATUS "${description} - no")
  34. ENDIF()
  35. ENDIF()
  36. ENDIF()
  37. IF(${invert} MATCHES INVERT)
  38. IF(${var}_COMPILED)
  39. SET(${var} 0)
  40. ELSE()
  41. SET(${var} 1)
  42. ENDIF()
  43. ELSE()
  44. IF(${var}_COMPILED)
  45. SET(${var} 1)
  46. ELSE()
  47. SET(${var} 0)
  48. ENDIF()
  49. ENDIF()
  50. ENDMACRO()
  51. MACRO(KWSYS_PLATFORM_TEST_RUN lang var description invert)
  52. IF(NOT DEFINED ${var})
  53. MESSAGE(STATUS "${description}")
  54. TRY_RUN(${var} ${var}_COMPILED
  55. ${CMAKE_CURRENT_BINARY_DIR}
  56. ${CMAKE_CURRENT_SOURCE_DIR}/${KWSYS_PLATFORM_TEST_FILE_${lang}}
  57. COMPILE_DEFINITIONS -DTEST_${var} ${KWSYS_PLATFORM_TEST_DEFINES} ${KWSYS_PLATFORM_TEST_EXTRA_FLAGS}
  58. OUTPUT_VARIABLE OUTPUT)
  59. # Note that ${var} will be a 0 return value on success.
  60. IF(${var}_COMPILED)
  61. IF(${var})
  62. FILE(APPEND
  63. ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
  64. "${description} compiled but failed to run with the following output:\n${OUTPUT}\n\n")
  65. ELSE()
  66. FILE(APPEND
  67. ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
  68. "${description} compiled and ran with the following output:\n${OUTPUT}\n\n")
  69. ENDIF()
  70. ELSE()
  71. FILE(APPEND
  72. ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
  73. "${description} failed to compile with the following output:\n${OUTPUT}\n\n")
  74. SET(${var} -1 CACHE INTERNAL "${description} failed to compile.")
  75. ENDIF()
  76. IF(${invert} MATCHES INVERT)
  77. IF(${var}_COMPILED)
  78. IF(${var})
  79. MESSAGE(STATUS "${description} - yes")
  80. ELSE()
  81. MESSAGE(STATUS "${description} - no")
  82. ENDIF()
  83. ELSE()
  84. MESSAGE(STATUS "${description} - failed to compile")
  85. ENDIF()
  86. ELSE()
  87. IF(${var}_COMPILED)
  88. IF(${var})
  89. MESSAGE(STATUS "${description} - no")
  90. ELSE()
  91. MESSAGE(STATUS "${description} - yes")
  92. ENDIF()
  93. ELSE()
  94. MESSAGE(STATUS "${description} - failed to compile")
  95. ENDIF()
  96. ENDIF()
  97. ENDIF()
  98. IF(${invert} MATCHES INVERT)
  99. IF(${var}_COMPILED)
  100. IF(${var})
  101. SET(${var} 1)
  102. ELSE()
  103. SET(${var} 0)
  104. ENDIF()
  105. ELSE()
  106. SET(${var} 1)
  107. ENDIF()
  108. ELSE()
  109. IF(${var}_COMPILED)
  110. IF(${var})
  111. SET(${var} 0)
  112. ELSE()
  113. SET(${var} 1)
  114. ENDIF()
  115. ELSE()
  116. SET(${var} 0)
  117. ENDIF()
  118. ENDIF()
  119. ENDMACRO()
  120. MACRO(KWSYS_PLATFORM_C_TEST var description invert)
  121. SET(KWSYS_PLATFORM_TEST_DEFINES ${KWSYS_PLATFORM_C_TEST_DEFINES})
  122. SET(KWSYS_PLATFORM_TEST_EXTRA_FLAGS ${KWSYS_PLATFORM_C_TEST_EXTRA_FLAGS})
  123. KWSYS_PLATFORM_TEST(C "${var}" "${description}" "${invert}")
  124. SET(KWSYS_PLATFORM_TEST_DEFINES)
  125. SET(KWSYS_PLATFORM_TEST_EXTRA_FLAGS)
  126. ENDMACRO()
  127. MACRO(KWSYS_PLATFORM_C_TEST_RUN var description invert)
  128. SET(KWSYS_PLATFORM_TEST_DEFINES ${KWSYS_PLATFORM_C_TEST_DEFINES})
  129. SET(KWSYS_PLATFORM_TEST_EXTRA_FLAGS ${KWSYS_PLATFORM_C_TEST_EXTRA_FLAGS})
  130. KWSYS_PLATFORM_TEST_RUN(C "${var}" "${description}" "${invert}")
  131. SET(KWSYS_PLATFORM_TEST_DEFINES)
  132. SET(KWSYS_PLATFORM_TEST_EXTRA_FLAGS)
  133. ENDMACRO()
  134. MACRO(KWSYS_PLATFORM_CXX_TEST var description invert)
  135. SET(KWSYS_PLATFORM_TEST_DEFINES ${KWSYS_PLATFORM_CXX_TEST_DEFINES})
  136. SET(KWSYS_PLATFORM_TEST_EXTRA_FLAGS ${KWSYS_PLATFORM_CXX_TEST_EXTRA_FLAGS})
  137. SET(KWSYS_PLATFORM_TEST_LINK_LIBRARIES ${KWSYS_PLATFORM_CXX_TEST_LINK_LIBRARIES})
  138. KWSYS_PLATFORM_TEST(CXX "${var}" "${description}" "${invert}")
  139. SET(KWSYS_PLATFORM_TEST_DEFINES)
  140. SET(KWSYS_PLATFORM_TEST_EXTRA_FLAGS)
  141. SET(KWSYS_PLATFORM_TEST_LINK_LIBRARIES)
  142. ENDMACRO()
  143. MACRO(KWSYS_PLATFORM_CXX_TEST_RUN var description invert)
  144. SET(KWSYS_PLATFORM_TEST_DEFINES ${KWSYS_PLATFORM_CXX_TEST_DEFINES})
  145. SET(KWSYS_PLATFORM_TEST_EXTRA_FLAGS ${KWSYS_PLATFORM_CXX_TEST_EXTRA_FLAGS})
  146. KWSYS_PLATFORM_TEST_RUN(CXX "${var}" "${description}" "${invert}")
  147. SET(KWSYS_PLATFORM_TEST_DEFINES)
  148. SET(KWSYS_PLATFORM_TEST_EXTRA_FLAGS)
  149. ENDMACRO()
  150. #-----------------------------------------------------------------------------
  151. # KWSYS_PLATFORM_INFO_TEST(lang var description)
  152. #
  153. # Compile test named by ${var} and store INFO strings extracted from binary.
  154. MACRO(KWSYS_PLATFORM_INFO_TEST lang var description)
  155. # We can implement this macro on CMake 2.6 and above.
  156. IF("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.6)
  157. SET(${var} "")
  158. ELSE()
  159. # Choose a location for the result binary.
  160. SET(KWSYS_PLATFORM_INFO_FILE
  161. ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_FILES_DIRECTORY}/${var}.bin)
  162. # Compile the test binary.
  163. IF(NOT EXISTS ${KWSYS_PLATFORM_INFO_FILE})
  164. MESSAGE(STATUS "${description}")
  165. TRY_COMPILE(${var}_COMPILED
  166. ${CMAKE_CURRENT_BINARY_DIR}
  167. ${CMAKE_CURRENT_SOURCE_DIR}/${KWSYS_PLATFORM_TEST_FILE_${lang}}
  168. COMPILE_DEFINITIONS -DTEST_${var}
  169. ${KWSYS_PLATFORM_${lang}_TEST_DEFINES}
  170. ${KWSYS_PLATFORM_${lang}_TEST_EXTRA_FLAGS}
  171. OUTPUT_VARIABLE OUTPUT
  172. COPY_FILE ${KWSYS_PLATFORM_INFO_FILE}
  173. )
  174. IF(${var}_COMPILED)
  175. FILE(APPEND
  176. ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
  177. "${description} compiled with the following output:\n${OUTPUT}\n\n")
  178. ELSE()
  179. FILE(APPEND
  180. ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
  181. "${description} failed to compile with the following output:\n${OUTPUT}\n\n")
  182. ENDIF()
  183. IF(${var}_COMPILED)
  184. MESSAGE(STATUS "${description} - compiled")
  185. ELSE()
  186. MESSAGE(STATUS "${description} - failed")
  187. ENDIF()
  188. ENDIF()
  189. # Parse info strings out of the compiled binary.
  190. IF(${var}_COMPILED)
  191. FILE(STRINGS ${KWSYS_PLATFORM_INFO_FILE} ${var} REGEX "INFO:[A-Za-z0-9]+\\[[^]]*\\]")
  192. ELSE()
  193. SET(${var} "")
  194. ENDIF()
  195. SET(KWSYS_PLATFORM_INFO_FILE)
  196. ENDIF()
  197. ENDMACRO()