| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying | |
| file LICENSE.rst or https://cmake.org/licensing for details. */ | |
| #include "cmCTestMemCheckCommand.h" | |
| #include <utility> | |
| #include <cm/memory> | |
| #include <cmext/string_view> | |
| #include "cmArgumentParser.h" | |
| #include "cmCTest.h" | |
| #include "cmCTestMemCheckHandler.h" | |
| #include "cmCTestTestHandler.h" | |
| #include "cmExecutionStatus.h" | |
| #include "cmMakefile.h" | |
| std::unique_ptr<cmCTestTestHandler> | |
| cmCTestMemCheckCommand::InitializeActualHandler( | |
| HandlerArguments& args, cmExecutionStatus& status) const | |
| { | |
| cmMakefile& mf = status.GetMakefile(); | |
| auto handler = cm::make_unique<cmCTestMemCheckHandler>(this->CTest); | |
| this->CTest->SetCTestConfigurationFromCMakeVariable( | |
| &mf, "MemoryCheckType", "CTEST_MEMORYCHECK_TYPE", args.Quiet); | |
| this->CTest->SetCTestConfigurationFromCMakeVariable( | |
| &mf, "MemoryCheckSanitizerOptions", "CTEST_MEMORYCHECK_SANITIZER_OPTIONS", | |
| args.Quiet); | |
| this->CTest->SetCTestConfigurationFromCMakeVariable( | |
| &mf, "MemoryCheckCommand", "CTEST_MEMORYCHECK_COMMAND", args.Quiet); | |
| this->CTest->SetCTestConfigurationFromCMakeVariable( | |
| &mf, "MemoryCheckCommandOptions", "CTEST_MEMORYCHECK_COMMAND_OPTIONS", | |
| args.Quiet); | |
| this->CTest->SetCTestConfigurationFromCMakeVariable( | |
| &mf, "MemoryCheckSuppressionFile", "CTEST_MEMORYCHECK_SUPPRESSIONS_FILE", | |
| args.Quiet); | |
| handler->SetQuiet(args.Quiet); | |
| return std::unique_ptr<cmCTestTestHandler>(std::move(handler)); | |
| } | |
| void cmCTestMemCheckCommand::ProcessAdditionalValues( | |
| cmCTestGenericHandler* handler, HandlerArguments const& arguments, | |
| cmExecutionStatus& status) const | |
| { | |
| cmMakefile& mf = status.GetMakefile(); | |
| auto const& args = static_cast<MemCheckArguments const&>(arguments); | |
| if (!args.DefectCount.empty()) { | |
| mf.AddDefinition( | |
| args.DefectCount, | |
| std::to_string( | |
| static_cast<cmCTestMemCheckHandler*>(handler)->GetDefectCount())); | |
| } | |
| } | |
| bool cmCTestMemCheckCommand::InitialPass(std::vector<std::string> const& args, | |
| cmExecutionStatus& status) const | |
| { | |
| static auto const parser = | |
| cmArgumentParser<MemCheckArguments>{ MakeTestParser<MemCheckArguments>() } | |
| .Bind("DEFECT_COUNT"_s, &MemCheckArguments::DefectCount); | |
| return this->Invoke(parser, args, status, [&](MemCheckArguments& a) { | |
| return this->ExecuteHandlerCommand(a, status); | |
| }); | |
| } |