cmCTestMemCheckCommand.cxx 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. file Copyright.txt or https://cmake.org/licensing for details. */
  3. #include "cmCTestMemCheckCommand.h"
  4. #include <utility>
  5. #include <cm/memory>
  6. #include <cmext/string_view>
  7. #include "cmArgumentParser.h"
  8. #include "cmCTest.h"
  9. #include "cmCTestMemCheckHandler.h"
  10. #include "cmCTestTestHandler.h"
  11. #include "cmExecutionStatus.h"
  12. #include "cmMakefile.h"
  13. std::unique_ptr<cmCTestTestHandler>
  14. cmCTestMemCheckCommand::InitializeActualHandler(
  15. HandlerArguments& args, cmExecutionStatus& status) const
  16. {
  17. cmMakefile& mf = status.GetMakefile();
  18. auto handler = cm::make_unique<cmCTestMemCheckHandler>(this->CTest);
  19. this->CTest->SetCTestConfigurationFromCMakeVariable(
  20. &mf, "MemoryCheckType", "CTEST_MEMORYCHECK_TYPE", args.Quiet);
  21. this->CTest->SetCTestConfigurationFromCMakeVariable(
  22. &mf, "MemoryCheckSanitizerOptions", "CTEST_MEMORYCHECK_SANITIZER_OPTIONS",
  23. args.Quiet);
  24. this->CTest->SetCTestConfigurationFromCMakeVariable(
  25. &mf, "MemoryCheckCommand", "CTEST_MEMORYCHECK_COMMAND", args.Quiet);
  26. this->CTest->SetCTestConfigurationFromCMakeVariable(
  27. &mf, "MemoryCheckCommandOptions", "CTEST_MEMORYCHECK_COMMAND_OPTIONS",
  28. args.Quiet);
  29. this->CTest->SetCTestConfigurationFromCMakeVariable(
  30. &mf, "MemoryCheckSuppressionFile", "CTEST_MEMORYCHECK_SUPPRESSIONS_FILE",
  31. args.Quiet);
  32. handler->SetQuiet(args.Quiet);
  33. return std::unique_ptr<cmCTestTestHandler>(std::move(handler));
  34. }
  35. void cmCTestMemCheckCommand::ProcessAdditionalValues(
  36. cmCTestGenericHandler* handler, HandlerArguments const& arguments,
  37. cmExecutionStatus& status) const
  38. {
  39. cmMakefile& mf = status.GetMakefile();
  40. auto const& args = static_cast<MemCheckArguments const&>(arguments);
  41. if (!args.DefectCount.empty()) {
  42. mf.AddDefinition(
  43. args.DefectCount,
  44. std::to_string(
  45. static_cast<cmCTestMemCheckHandler*>(handler)->GetDefectCount()));
  46. }
  47. }
  48. bool cmCTestMemCheckCommand::InitialPass(std::vector<std::string> const& args,
  49. cmExecutionStatus& status) const
  50. {
  51. static auto const parser =
  52. cmArgumentParser<MemCheckArguments>{ MakeTestParser<MemCheckArguments>() }
  53. .Bind("DEFECT_COUNT"_s, &MemCheckArguments::DefectCount);
  54. return this->Invoke(parser, args, status, [&](MemCheckArguments& a) {
  55. return this->ExecuteHandlerCommand(a, status);
  56. });
  57. }