kwsysPlatformTests.cmake 7.5 KB

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