2005-01-27 23:54:47 +03:00
|
|
|
/*=========================================================================
|
|
|
|
|
|
|
|
Program: CMake - Cross-Platform Makefile Generator
|
|
|
|
Module: $RCSfile$
|
|
|
|
Language: C++
|
|
|
|
Date: $Date$
|
|
|
|
Version: $Revision$
|
|
|
|
|
|
|
|
Copyright (c) 2002 Kitware, Inc. All rights reserved.
|
|
|
|
See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
|
|
|
|
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
|
|
PURPOSE. See the above copyright notices for more information.
|
|
|
|
|
|
|
|
=========================================================================*/
|
|
|
|
|
|
|
|
#ifndef cmCTestMemCheckHandler_h
|
|
|
|
#define cmCTestMemCheckHandler_h
|
|
|
|
|
|
|
|
|
|
|
|
#include "cmCTestTestHandler.h"
|
|
|
|
#include "cmListFileCache.h"
|
|
|
|
|
|
|
|
class cmMakefile;
|
|
|
|
|
|
|
|
/** \class cmCTestMemCheckHandler
|
|
|
|
* \brief A class that handles ctest -S invocations
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
class cmCTestMemCheckHandler : public cmCTestTestHandler
|
|
|
|
{
|
2009-08-28 23:08:03 +04:00
|
|
|
friend class cmCTestRunTest;
|
2005-01-27 23:54:47 +03:00
|
|
|
public:
|
2005-06-17 21:04:56 +04:00
|
|
|
cmTypeMacro(cmCTestMemCheckHandler, cmCTestTestHandler);
|
|
|
|
|
2005-01-27 23:54:47 +03:00
|
|
|
void PopulateCustomVectors(cmMakefile *mf);
|
|
|
|
|
|
|
|
cmCTestMemCheckHandler();
|
|
|
|
|
2005-06-17 21:04:56 +04:00
|
|
|
void Initialize();
|
2005-01-27 23:54:47 +03:00
|
|
|
protected:
|
|
|
|
virtual int PreProcessHandler();
|
|
|
|
virtual int PostProcessHandler();
|
2009-08-28 23:08:03 +04:00
|
|
|
virtual void GenerateTestCommand(std::vector<std::string>& args);
|
2005-01-27 23:54:47 +03:00
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
enum { // Memory checkers
|
|
|
|
UNKNOWN = 0,
|
|
|
|
VALGRIND,
|
|
|
|
PURIFY,
|
|
|
|
BOUNDS_CHECKER
|
|
|
|
};
|
2007-07-24 22:43:31 +04:00
|
|
|
public:
|
2005-01-27 23:54:47 +03:00
|
|
|
enum { // Memory faults
|
|
|
|
ABR = 0,
|
|
|
|
ABW,
|
|
|
|
ABWL,
|
|
|
|
COR,
|
|
|
|
EXU,
|
|
|
|
FFM,
|
|
|
|
FIM,
|
|
|
|
FMM,
|
|
|
|
FMR,
|
|
|
|
FMW,
|
|
|
|
FUM,
|
|
|
|
IPR,
|
|
|
|
IPW,
|
|
|
|
MAF,
|
|
|
|
MLK,
|
|
|
|
MPK,
|
|
|
|
NPR,
|
|
|
|
ODS,
|
|
|
|
PAR,
|
|
|
|
PLK,
|
|
|
|
UMC,
|
|
|
|
UMR,
|
|
|
|
NO_MEMORY_FAULT
|
|
|
|
};
|
2007-07-24 22:43:31 +04:00
|
|
|
private:
|
2005-01-27 23:54:47 +03:00
|
|
|
enum { // Program statuses
|
|
|
|
NOT_RUN = 0,
|
|
|
|
TIMEOUT,
|
|
|
|
SEGFAULT,
|
|
|
|
ILLEGAL,
|
|
|
|
INTERRUPT,
|
|
|
|
NUMERICAL,
|
|
|
|
OTHER_FAULT,
|
|
|
|
FAILED,
|
|
|
|
BAD_COMMAND,
|
|
|
|
COMPLETED
|
|
|
|
};
|
2007-07-24 22:43:31 +04:00
|
|
|
std::string BoundsCheckerDPBDFile;
|
|
|
|
std::string BoundsCheckerXMLFile;
|
2006-03-10 23:03:09 +03:00
|
|
|
std::string MemoryTester;
|
|
|
|
std::vector<cmStdString> MemoryTesterOptionsParsed;
|
|
|
|
std::string MemoryTesterOptions;
|
|
|
|
int MemoryTesterStyle;
|
|
|
|
std::string MemoryTesterOutputFile;
|
|
|
|
int MemoryTesterGlobalResults[NO_MEMORY_FAULT];
|
2005-01-27 23:54:47 +03:00
|
|
|
|
|
|
|
///! Initialize memory checking subsystem.
|
|
|
|
bool InitializeMemoryChecking();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Generate the Dart compatible output
|
|
|
|
*/
|
|
|
|
void GenerateDartOutput(std::ostream& os);
|
|
|
|
|
2006-03-10 23:03:09 +03:00
|
|
|
std::vector<cmStdString> CustomPreMemCheck;
|
|
|
|
std::vector<cmStdString> CustomPostMemCheck;
|
2005-01-27 23:54:47 +03:00
|
|
|
|
|
|
|
//! Parse Valgrind/Purify/Bounds Checker result out of the output
|
|
|
|
//string. After running, log holds the output and results hold the
|
|
|
|
//different memmory errors.
|
|
|
|
bool ProcessMemCheckOutput(const std::string& str,
|
|
|
|
std::string& log, int* results);
|
|
|
|
bool ProcessMemCheckValgrindOutput(const std::string& str,
|
|
|
|
std::string& log, int* results);
|
|
|
|
bool ProcessMemCheckPurifyOutput(const std::string& str,
|
|
|
|
std::string& log, int* results);
|
2007-07-24 22:43:31 +04:00
|
|
|
bool ProcessMemCheckBoundsCheckerOutput(const std::string& str,
|
|
|
|
std::string& log, int* results);
|
2009-08-28 23:08:03 +04:00
|
|
|
|
2007-07-24 22:43:31 +04:00
|
|
|
void PostProcessPurifyTest(cmCTestTestResult& res);
|
|
|
|
void PostProcessBoundsCheckerTest(cmCTestTestResult& res);
|
2005-01-27 23:54:47 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|