/* 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 #include #include #include "cmArgumentParser.h" #include "cmCTest.h" #include "cmCTestMemCheckHandler.h" #include "cmCTestTestHandler.h" #include "cmExecutionStatus.h" #include "cmMakefile.h" std::unique_ptr cmCTestMemCheckCommand::InitializeActualHandler( HandlerArguments& args, cmExecutionStatus& status) const { cmMakefile& mf = status.GetMakefile(); auto handler = cm::make_unique(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(std::move(handler)); } void cmCTestMemCheckCommand::ProcessAdditionalValues( cmCTestGenericHandler* handler, HandlerArguments const& arguments, cmExecutionStatus& status) const { cmMakefile& mf = status.GetMakefile(); auto const& args = static_cast(arguments); if (!args.DefectCount.empty()) { mf.AddDefinition( args.DefectCount, std::to_string( static_cast(handler)->GetDefectCount())); } } bool cmCTestMemCheckCommand::InitialPass(std::vector const& args, cmExecutionStatus& status) const { static auto const parser = cmArgumentParser{ MakeTestParser() } .Bind("DEFECT_COUNT"_s, &MemCheckArguments::DefectCount); return this->Invoke(parser, args, status, [&](MemCheckArguments& a) { return this->ExecuteHandlerCommand(a, status); }); }