RunCMakeTest.cmake 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. include(RunCTest)
  2. set(SITE test-site)
  3. set(BUILDNAME test-build)
  4. set(COVERAGE_COMMAND "")
  5. unset(ENV{CTEST_PARALLEL_LEVEL})
  6. function(run_mc_test CASE_NAME CHECKER_COMMAND)
  7. run_ctest(${CASE_NAME} ${ARGN})
  8. endfunction()
  9. unset(CTEST_EXTRA_CONFIG)
  10. unset(CTEST_EXTRA_CODE)
  11. unset(CTEST_SUFFIX_CODE)
  12. unset(CTEST_MEMCHECK_ARGS)
  13. unset(CMAKELISTS_EXTRA_CODE)
  14. #-----------------------------------------------------------------------------
  15. # add ThreadSanitizer test
  16. set(CTEST_EXTRA_CODE
  17. "set(CTEST_MEMORYCHECK_SANITIZER_OPTIONS \"report_bugs=1:history_size=5:exitcode=55\")
  18. ")
  19. set(CMAKELISTS_EXTRA_CODE
  20. "add_test(NAME TestSan COMMAND \"\${CMAKE_COMMAND}\"
  21. -P \"${RunCMake_SOURCE_DIR}/testThreadSanitizer.cmake\")
  22. ")
  23. run_mc_test(DummyThreadSanitizer "" -DMEMCHECK_TYPE=ThreadSanitizer)
  24. unset(CMAKELISTS_EXTRA_CODE)
  25. unset(CTEST_EXTRA_CODE)
  26. #-----------------------------------------------------------------------------
  27. # add standalone LeakSanitizer test
  28. set(CTEST_EXTRA_CODE
  29. "set(CTEST_MEMORYCHECK_SANITIZER_OPTIONS \"simulate_sanitizer=1:report_bugs=1:history_size=5:exitcode=55\")
  30. ")
  31. set(CMAKELISTS_EXTRA_CODE
  32. "add_test(NAME TestSan COMMAND \"${CMAKE_COMMAND}\"
  33. -P \"${RunCMake_SOURCE_DIR}/testLeakSanitizer.cmake\")
  34. ")
  35. run_mc_test(DummyLeakSanitizer "" -DMEMCHECK_TYPE=LeakSanitizer)
  36. unset(CMAKELISTS_EXTRA_CODE)
  37. unset(CTEST_EXTRA_CODE)
  38. #-----------------------------------------------------------------------------
  39. # add AddressSanitizer test
  40. set(CTEST_EXTRA_CODE
  41. "set(CTEST_MEMORYCHECK_SANITIZER_OPTIONS \"simulate_sanitizer=1:report_bugs=1:history_size=5:exitcode=55\")
  42. ")
  43. set(CMAKELISTS_EXTRA_CODE
  44. "add_test(NAME TestSan COMMAND \"\${CMAKE_COMMAND}\"
  45. -P \"${RunCMake_SOURCE_DIR}/testAddressSanitizer.cmake\")
  46. ")
  47. run_mc_test(DummyAddressSanitizer "" -DMEMCHECK_TYPE=AddressSanitizer)
  48. unset(CMAKELISTS_EXTRA_CODE)
  49. unset(CTEST_EXTRA_CODE)
  50. #-----------------------------------------------------------------------------
  51. # add AddressSanitizer/LeakSanitizer test
  52. set(CTEST_EXTRA_CODE
  53. "set(CTEST_MEMORYCHECK_SANITIZER_OPTIONS \"simulate_sanitizer=1:report_bugs=1:history_size=5:exitcode=55\")
  54. ")
  55. set(CMAKELISTS_EXTRA_CODE
  56. "add_test(NAME TestSan COMMAND \"${CMAKE_COMMAND}\"
  57. -P \"${RunCMake_SOURCE_DIR}/testAddressLeakSanitizer.cmake\")
  58. ")
  59. run_mc_test(DummyAddressLeakSanitizer "" -DMEMCHECK_TYPE=AddressSanitizer)
  60. unset(CMAKELISTS_EXTRA_CODE)
  61. unset(CTEST_EXTRA_CODE)
  62. #-----------------------------------------------------------------------------
  63. # add MemorySanitizer test
  64. set(CTEST_EXTRA_CODE
  65. "set(CTEST_MEMORYCHECK_SANITIZER_OPTIONS \"simulate_sanitizer=1:report_bugs=1:history_size=5:exitcode=55\")
  66. ")
  67. set(CMAKELISTS_EXTRA_CODE
  68. "add_test(NAME TestSan COMMAND \"\${CMAKE_COMMAND}\"
  69. -P \"${RunCMake_SOURCE_DIR}/testMemorySanitizer.cmake\")
  70. ")
  71. run_mc_test(DummyMemorySanitizer "" -DMEMCHECK_TYPE=MemorySanitizer)
  72. unset(CMAKELISTS_EXTRA_CODE)
  73. unset(CTEST_EXTRA_CODE)
  74. #-----------------------------------------------------------------------------
  75. # add UndefinedBehaviorSanitizer test
  76. set(CTEST_EXTRA_CODE
  77. "set(CTEST_MEMORYCHECK_SANITIZER_OPTIONS \"simulate_sanitizer=1\")
  78. ")
  79. set(CMAKELISTS_EXTRA_CODE
  80. "add_test(NAME TestSan COMMAND \"\${CMAKE_COMMAND}\"
  81. -P \"${RunCMake_SOURCE_DIR}/testUndefinedBehaviorSanitizer.cmake\")
  82. ")
  83. run_mc_test(DummyUndefinedBehaviorSanitizer "" -DMEMCHECK_TYPE=UndefinedBehaviorSanitizer)
  84. unset(CMAKELISTS_EXTRA_CODE)
  85. unset(CTEST_EXTRA_CODE)
  86. #-----------------------------------------------------------------------------
  87. set(CTEST_EXTRA_CODE "string(REPLACE \" \" \"\\\\ \" PRE_POST_COMMAND \"\${CTEST_MEMORYCHECK_COMMAND}\")
  88. set(CTEST_CUSTOM_PRE_MEMCHECK \"\${PRE_POST_COMMAND} pre command\")
  89. set(CTEST_CUSTOM_POST_MEMCHECK \"\${PRE_POST_COMMAND} post command \")
  90. ")
  91. run_mc_test(DummyValgrindPrePost "${PSEUDO_VALGRIND}")
  92. unset(CTEST_EXTRA_CODE)
  93. #-----------------------------------------------------------------------------
  94. set(CTEST_EXTRA_CODE "set(CTEST_CUSTOM_POST_MEMCHECK \"${MEMCHECK_FAIL}\")")
  95. run_mc_test(DummyValgrindFailPost "${PSEUDO_VALGRIND}")
  96. unset(CTEST_EXTRA_CODE)
  97. #-----------------------------------------------------------------------------
  98. set(CTEST_EXTRA_CODE "set(CTEST_CUSTOM_PRE_MEMCHECK \"${MEMCHECK_FAIL}\")")
  99. run_mc_test(DummyValgrindFailPre "${PSEUDO_VALGRIND}")
  100. unset(CTEST_EXTRA_CODE)
  101. #-----------------------------------------------------------------------------
  102. set(CTEST_EXTRA_CONFIG "set(CTEST_CUSTOM_MEMCHECK_IGNORE RunCMakeAgain)\n")
  103. set(CMAKELISTS_EXTRA_CODE "add_test(NAME RunCMakeAgain COMMAND \"\${CMAKE_COMMAND}\" --version)")
  104. run_mc_test(DummyValgrindIgnoreMemcheck "${PSEUDO_VALGRIND}")
  105. unset(CTEST_EXTRA_CONFIG)
  106. unset(CMAKELISTS_EXTRA_CODE)
  107. #-----------------------------------------------------------------------------
  108. set(CMAKELISTS_EXTRA_CODE "add_test(NAME RunCMakeAgain COMMAND \"\${CMAKE_COMMAND}\" --version)")
  109. run_mc_test(DummyValgrindTwoTargets "${PSEUDO_VALGRIND}" "-VV")
  110. unset(CMAKELISTS_EXTRA_CODE)
  111. #-----------------------------------------------------------------------------
  112. set(CTEST_EXTRA_CONFIG "set(CTEST_MEMORYCHECK_SUPPRESSIONS_FILE \"\${CMAKE_CURRENT_BINARY_DIR}/does-not-exist\")")
  113. run_mc_test(DummyValgrindInvalidSupFile "${PSEUDO_VALGRIND}")
  114. unset(CTEST_EXTRA_CONFIG)
  115. #-----------------------------------------------------------------------------
  116. # CTest will add the logfile option before any custom options. Set the logfile
  117. # again, this time to an empty string. This will cause the logfile to be
  118. # missing, which will be the prove for us that the custom option is indeed used.
  119. set(CTEST_EXTRA_CONFIG "set(CTEST_MEMORYCHECK_COMMAND_OPTIONS \"--log-file=\")")
  120. run_mc_test(DummyValgrindCustomOptions "${PSEUDO_VALGRIND}")
  121. unset(CTEST_EXTRA_CONFIG)
  122. #-----------------------------------------------------------------------------
  123. run_mc_test(DummyPurify "${PSEUDO_PURIFY}")
  124. run_mc_test(DummyValgrind "${PSEUDO_VALGRIND}")
  125. run_mc_test(DummyBC "${PSEUDO_BC}")
  126. run_mc_test(DummyPurifyNoLogFile "${PSEUDO_PURIFY_NOLOG}")
  127. run_mc_test(DummyValgrindNoLogFile "${PSEUDO_VALGRIND_NOLOG}")
  128. run_mc_test(DummyBCNoLogFile "${PSEUDO_BC_NOLOG}")
  129. run_mc_test(NotExist "\${CTEST_BINARY_DIRECTORY}/no-memcheck-exe")
  130. run_mc_test(Unknown "\${CMAKE_COMMAND}")
  131. #----------------------------------------------------------------------------
  132. set(CTEST_MEMCHECK_ARGS QUIET)
  133. run_mc_test(DummyQuiet "${PSEUDO_VALGRIND}")
  134. unset(CTEST_MEMCHECK_ARGS)
  135. #-----------------------------------------------------------------------------
  136. set(CTEST_SUFFIX_CODE "message(\"Defect count: \${defect_count}\")")
  137. set(CTEST_MEMCHECK_ARGS "DEFECT_COUNT defect_count")
  138. run_mc_test(DummyValgrindNoDefects "${PSEUDO_VALGRIND}")
  139. unset(CTEST_MEMCHECK_ARGS)
  140. unset(CTEST_SUFFIX_CODE)
  141. #-----------------------------------------------------------------------------
  142. set(CTEST_SUFFIX_CODE "message(\"Defect count: \${defect_count}\")")
  143. set(CTEST_MEMCHECK_ARGS "DEFECT_COUNT defect_count")
  144. set(CTEST_EXTRA_CODE
  145. "set(CTEST_MEMORYCHECK_SANITIZER_OPTIONS \"simulate_sanitizer=1:report_bugs=1:history_size=5:exitcode=55\")
  146. ")
  147. set(CMAKELISTS_EXTRA_CODE
  148. "add_test(NAME TestSan COMMAND \"${CMAKE_COMMAND}\"
  149. -P \"${RunCMake_SOURCE_DIR}/testLeakSanitizer.cmake\")
  150. ")
  151. run_mc_test(DummyLeakSanitizerPrintDefects "" -DMEMCHECK_TYPE=LeakSanitizer)
  152. unset(CMAKELISTS_EXTRA_CODE)
  153. unset(CTEST_EXTRA_CODE)
  154. unset(CTEST_MEMCHECK_ARGS)
  155. unset(CTEST_SUFFIX_CODE)