ENH: keep cleaning up Tcl/Tk modules
[cmake.git] / Source / CTest / cmCTestCoverageHandler.h
blob6f68d5f2115b2e1bf66a262a542a4b5a4300fde4
1 /*=========================================================================
3 Program: CMake - Cross-Platform Makefile Generator
4 Module: $RCSfile: cmCTestCoverageHandler.h,v $
5 Language: C++
6 Date: $Date: 2007-06-08 16:29:40 $
7 Version: $Revision: 1.17 $
9 Copyright (c) 2002 Kitware, Inc. All rights reserved.
10 See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
12 This software is distributed WITHOUT ANY WARRANTY; without even
13 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14 PURPOSE. See the above copyright notices for more information.
16 =========================================================================*/
18 #ifndef cmCTestCoverageHandler_h
19 #define cmCTestCoverageHandler_h
22 #include "cmCTestGenericHandler.h"
23 #include "cmListFileCache.h"
25 #include <cmsys/RegularExpression.hxx>
27 class cmGeneratedFileStream;
28 class cmCTestCoverageHandlerContainer;
30 /** \class cmCTestCoverageHandler
31 * \brief A class that handles coverage computaiton for ctest
34 class cmCTestCoverageHandler : public cmCTestGenericHandler
36 public:
37 cmTypeMacro(cmCTestCoverageHandler, cmCTestGenericHandler);
40 * The main entry point for this class
42 int ProcessHandler();
44 cmCTestCoverageHandler();
46 virtual void Initialize();
48 /**
49 * This method is called when reading CTest custom file
51 void PopulateCustomVectors(cmMakefile *mf);
53 private:
54 bool ShouldIDoCoverage(const char* file, const char* srcDir,
55 const char* binDir);
56 bool StartCoverageLogFile(cmGeneratedFileStream& ostr, int logFileCount);
57 void EndCoverageLogFile(cmGeneratedFileStream& ostr, int logFileCount);
59 //! Handle coverage using GCC's GCov
60 int HandleGCovCoverage(cmCTestCoverageHandlerContainer* cont);
62 //! Handle coverage using Bullseye
63 int HandleBullseyeCoverage(cmCTestCoverageHandlerContainer* cont);
64 int RunBullseyeSourceSummary(cmCTestCoverageHandlerContainer* cont);
65 int RunBullseyeCoverageBranch(cmCTestCoverageHandlerContainer* cont,
66 std::set<cmStdString>& coveredFileNames,
67 std::vector<std::string>& files,
68 std::vector<std::string>& filesFullPath);
69 int RunBullseyeCommand(
70 cmCTestCoverageHandlerContainer* cont,
71 const char* cmd,
72 const char* arg,
73 std::string& outputFile);
74 bool ParseBullsEyeCovsrcLine(
75 std::string const& inputLine,
76 std::string& sourceFile,
77 int& functionsCalled,
78 int& totalFunctions,
79 int& percentFunction,
80 int& branchCovered,
81 int& totalBranches,
82 int& percentBranch);
83 bool GetNextInt(std::string const& inputLine,
84 std::string::size_type& pos,
85 int& value);
86 //! Handle Python coverage using Python's Trace.py
87 int HandleTracePyCoverage(cmCTestCoverageHandlerContainer* cont);
89 // Find the source file based on the source and build tree. This is used for
90 // Trace.py mode, since that one does not tell us where the source file is.
91 std::string FindFile(cmCTestCoverageHandlerContainer* cont,
92 std::string fileName);
94 struct cmCTestCoverage
96 cmCTestCoverage()
98 this->AbsolutePath = "";
99 this->FullPath = "";
100 this->Covered = false;
101 this->Tested = 0;
102 this->UnTested = 0;
103 this->Lines.clear();
104 this->Show = false;
106 cmCTestCoverage(const cmCTestCoverage& rhs) :
107 AbsolutePath(rhs.AbsolutePath),
108 FullPath(rhs.FullPath),
109 Covered(rhs.Covered),
110 Tested(rhs.Tested),
111 UnTested(rhs.UnTested),
112 Lines(rhs.Lines),
113 Show(rhs.Show)
116 cmCTestCoverage& operator=(const cmCTestCoverage& rhs)
118 this->AbsolutePath = rhs.AbsolutePath;
119 this->FullPath = rhs.FullPath;
120 this->Covered = rhs.Covered;
121 this->Tested = rhs.Tested;
122 this->UnTested = rhs.UnTested;
123 this->Lines = rhs.Lines;
124 this->Show = rhs.Show;
125 return *this;
127 std::string AbsolutePath;
128 std::string FullPath;
129 bool Covered;
130 int Tested;
131 int UnTested;
132 std::vector<int> Lines;
133 bool Show;
136 std::vector<cmStdString> CustomCoverageExclude;
137 std::vector<cmsys::RegularExpression> CustomCoverageExcludeRegex;
139 typedef std::map<std::string, cmCTestCoverage> CoverageMap;
142 #endif