diff options
author | Brad King <brad.king@kitware.com> | 2016-11-11 15:44:13 (GMT) |
---|---|---|
committer | CMake Topic Stage <kwrobot@kitware.com> | 2016-11-11 15:44:13 (GMT) |
commit | 6338652a87c3985188ba94d7eedc84a05563750d (patch) | |
tree | 3d65aa98c9bdeb925e87202ea3760e92aca2d128 /Source/CTest | |
parent | 8715157c73b243d2e4f7a0dc83a3a91d780a7a0b (diff) | |
parent | 3a523eec7814dfbed2361da298849a5b5964318a (diff) | |
download | CMake-6338652a87c3985188ba94d7eedc84a05563750d.zip CMake-6338652a87c3985188ba94d7eedc84a05563750d.tar.gz CMake-6338652a87c3985188ba94d7eedc84a05563750d.tar.bz2 |
Merge topic 'ctest_memcheck_defect_count'
3a523eec ctest_memcheck: Add DEFECT_COUNT option to capture defect count
Diffstat (limited to 'Source/CTest')
-rw-r--r-- | Source/CTest/cmCTestHandlerCommand.cxx | 5 | ||||
-rw-r--r-- | Source/CTest/cmCTestHandlerCommand.h | 2 | ||||
-rw-r--r-- | Source/CTest/cmCTestMemCheckCommand.cxx | 20 | ||||
-rw-r--r-- | Source/CTest/cmCTestMemCheckCommand.h | 10 | ||||
-rw-r--r-- | Source/CTest/cmCTestMemCheckHandler.cxx | 13 | ||||
-rw-r--r-- | Source/CTest/cmCTestMemCheckHandler.h | 3 |
6 files changed, 50 insertions, 3 deletions
diff --git a/Source/CTest/cmCTestHandlerCommand.cxx b/Source/CTest/cmCTestHandlerCommand.cxx index 2e5b56a..a989b12 100644 --- a/Source/CTest/cmCTestHandlerCommand.cxx +++ b/Source/CTest/cmCTestHandlerCommand.cxx @@ -226,6 +226,7 @@ bool cmCTestHandlerCommand::InitialPass(std::vector<std::string> const& args, this->Makefile->AddDefinition(this->Values[ct_RETURN_VALUE], str.str().c_str()); } + this->ProcessAdditionalValues(handler); // log the error message if there was an error if (capureCMakeError) { const char* returnString = "0"; @@ -246,6 +247,10 @@ bool cmCTestHandlerCommand::InitialPass(std::vector<std::string> const& args, return true; } +void cmCTestHandlerCommand::ProcessAdditionalValues(cmCTestGenericHandler*) +{ +} + bool cmCTestHandlerCommand::CheckArgumentKeyword(std::string const& arg) { // Look for non-value arguments common to all commands. diff --git a/Source/CTest/cmCTestHandlerCommand.h b/Source/CTest/cmCTestHandlerCommand.h index 92748af..c86841f 100644 --- a/Source/CTest/cmCTestHandlerCommand.h +++ b/Source/CTest/cmCTestHandlerCommand.h @@ -45,6 +45,8 @@ public: protected: virtual cmCTestGenericHandler* InitializeHandler() = 0; + virtual void ProcessAdditionalValues(cmCTestGenericHandler* handler); + // Command argument handling. virtual bool CheckArgumentKeyword(std::string const& arg); virtual bool CheckArgumentValue(std::string const& arg); diff --git a/Source/CTest/cmCTestMemCheckCommand.cxx b/Source/CTest/cmCTestMemCheckCommand.cxx index 05d0a53..5e4c5ae 100644 --- a/Source/CTest/cmCTestMemCheckCommand.cxx +++ b/Source/CTest/cmCTestMemCheckCommand.cxx @@ -4,6 +4,15 @@ #include "cmCTest.h" #include "cmCTestGenericHandler.h" +#include "cmCTestMemCheckHandler.h" +#include "cmMakefile.h" + +cmCTestMemCheckCommand::cmCTestMemCheckCommand() +{ + this->Arguments[ctm_DEFECT_COUNT] = "DEFECT_COUNT"; + this->Arguments[ctm_LAST] = CM_NULLPTR; + this->Last = ctm_LAST; +} cmCTestGenericHandler* cmCTestMemCheckCommand::InitializeActualHandler() { @@ -28,3 +37,14 @@ cmCTestGenericHandler* cmCTestMemCheckCommand::InitializeActualHandler() handler->SetQuiet(this->Quiet); return handler; } + +void cmCTestMemCheckCommand::ProcessAdditionalValues( + cmCTestGenericHandler* handler) +{ + if (this->Values[ctm_DEFECT_COUNT] && *this->Values[ctm_DEFECT_COUNT]) { + std::ostringstream str; + str << static_cast<cmCTestMemCheckHandler*>(handler)->GetDefectCount(); + this->Makefile->AddDefinition(this->Values[ctm_DEFECT_COUNT], + str.str().c_str()); + } +} diff --git a/Source/CTest/cmCTestMemCheckCommand.h b/Source/CTest/cmCTestMemCheckCommand.h index 30d9e2b..458ebb0 100644 --- a/Source/CTest/cmCTestMemCheckCommand.h +++ b/Source/CTest/cmCTestMemCheckCommand.h @@ -20,7 +20,7 @@ class cmCommand; class cmCTestMemCheckCommand : public cmCTestTestCommand { public: - cmCTestMemCheckCommand() {} + cmCTestMemCheckCommand(); /** * This is a virtual constructor for the command. @@ -40,6 +40,14 @@ public: protected: cmCTestGenericHandler* InitializeActualHandler() CM_OVERRIDE; + + void ProcessAdditionalValues(cmCTestGenericHandler* handler) CM_OVERRIDE; + + enum + { + ctm_DEFECT_COUNT = ctt_LAST, + ctm_LAST + }; }; #endif diff --git a/Source/CTest/cmCTestMemCheckHandler.cxx b/Source/CTest/cmCTestMemCheckHandler.cxx index 0052a16..c18e20c 100644 --- a/Source/CTest/cmCTestMemCheckHandler.cxx +++ b/Source/CTest/cmCTestMemCheckHandler.cxx @@ -127,6 +127,7 @@ void cmCTestMemCheckHandler::Initialize() this->MemoryTesterOptions.clear(); this->MemoryTesterStyle = UNKNOWN; this->MemoryTesterOutputFile = ""; + this->DefectCount = 0; } int cmCTestMemCheckHandler::PreProcessHandler() @@ -279,6 +280,11 @@ void cmCTestMemCheckHandler::PopulateCustomVectors(cmMakefile* mf) this->Quiet); } +int cmCTestMemCheckHandler::GetDefectCount() +{ + return this->DefectCount; +} + void cmCTestMemCheckHandler::GenerateDartOutput(cmXMLWriter& xml) { if (!this->CTest->GetProduceXML()) { @@ -702,6 +708,7 @@ bool cmCTestMemCheckHandler::ProcessMemCheckSanitizerOutput( ostr << *i << std::endl; } log = ostr.str(); + this->DefectCount += defects; return defects == 0; } bool cmCTestMemCheckHandler::ProcessMemCheckPurifyOutput( @@ -743,6 +750,7 @@ bool cmCTestMemCheckHandler::ProcessMemCheckPurifyOutput( } log = ostr.str(); + this->DefectCount += defects; return defects == 0; } @@ -878,6 +886,7 @@ bool cmCTestMemCheckHandler::ProcessMemCheckValgrindOutput( << (cmSystemTools::GetTime() - sttime) << std::endl, this->Quiet); log = ostr.str(); + this->DefectCount += defects; return defects == 0; } @@ -923,9 +932,9 @@ bool cmCTestMemCheckHandler::ProcessMemCheckBoundsCheckerOutput( // only put the output of Bounds Checker if there were // errors or leaks detected log = parser.Log; - return false; } - return true; + this->DefectCount += defects; + return defects == 0; } // PostProcessTest memcheck results diff --git a/Source/CTest/cmCTestMemCheckHandler.h b/Source/CTest/cmCTestMemCheckHandler.h index b12da28..5faace0 100644 --- a/Source/CTest/cmCTestMemCheckHandler.h +++ b/Source/CTest/cmCTestMemCheckHandler.h @@ -30,6 +30,8 @@ public: void Initialize() CM_OVERRIDE; + int GetDefectCount(); + protected: int PreProcessHandler() CM_OVERRIDE; int PostProcessHandler() CM_OVERRIDE; @@ -105,6 +107,7 @@ private: std::vector<std::string> ResultStringsLong; std::vector<int> GlobalResults; bool LogWithPID; // does log file add pid + int DefectCount; std::vector<int>::size_type FindOrAddWarning(const std::string& warning); // initialize the ResultStrings and ResultStringsLong for |