| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- /*============================================================================
- CMake - Cross Platform Makefile Generator
- Copyright 2000-2009 Kitware, Inc.
- Distributed under the OSI-approved BSD License (the "License");
- see accompanying file Copyright.txt for details.
- This software is distributed WITHOUT ANY WARRANTY; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the License 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
- {
- friend class cmCTestRunTest;
- public:
- cmTypeMacro(cmCTestMemCheckHandler, cmCTestTestHandler);
- void PopulateCustomVectors(cmMakefile *mf);
- cmCTestMemCheckHandler();
- void Initialize();
- protected:
- virtual int PreProcessHandler();
- virtual int PostProcessHandler();
- virtual void GenerateTestCommand(std::vector<std::string>& args, int test);
- private:
- enum { // Memory checkers
- UNKNOWN = 0,
- VALGRIND,
- PURIFY,
- BOUNDS_CHECKER
- };
- public:
- 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
- };
- private:
- enum { // Program statuses
- NOT_RUN = 0,
- TIMEOUT,
- SEGFAULT,
- ILLEGAL,
- INTERRUPT,
- NUMERICAL,
- OTHER_FAULT,
- FAILED,
- BAD_COMMAND,
- COMPLETED
- };
- std::string BoundsCheckerDPBDFile;
- std::string BoundsCheckerXMLFile;
- std::string MemoryTester;
- std::vector<std::string> MemoryTesterDynamicOptions;
- std::vector<std::string> MemoryTesterOptions;
- int MemoryTesterStyle;
- std::string MemoryTesterOutputFile;
- int MemoryTesterGlobalResults[NO_MEMORY_FAULT];
- ///! Initialize memory checking subsystem.
- bool InitializeMemoryChecking();
- /**
- * Generate the Dart compatible output
- */
- void GenerateDartOutput(std::ostream& os);
- std::vector<std::string> CustomPreMemCheck;
- std::vector<std::string> CustomPostMemCheck;
- //! 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);
- bool ProcessMemCheckBoundsCheckerOutput(const std::string& str,
- std::string& log, int* results);
- void PostProcessPurifyTest(cmCTestTestResult& res, int test);
- void PostProcessBoundsCheckerTest(cmCTestTestResult& res, int test);
- void PostProcessValgrindTest(cmCTestTestResult& res, int test);
- ///! append MemoryTesterOutputFile to the test log
- void AppendMemTesterOutput(cmCTestTestHandler::cmCTestTestResult& res,
- int test);
- ///! generate the output filename for the given test index
- std::string TestOutputFileName(int test);
- };
- #endif
|