RunCMakeTest.cmake 5.5 KB

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