1 /*=========================================================================
3 Program: CMake - Cross-Platform Makefile Generator
4 Module: $RCSfile: cmCTestCoverageHandler.h,v $
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
37 cmTypeMacro(cmCTestCoverageHandler
, cmCTestGenericHandler
);
40 * The main entry point for this class
44 cmCTestCoverageHandler();
46 virtual void Initialize();
49 * This method is called when reading CTest custom file
51 void PopulateCustomVectors(cmMakefile
*mf
);
54 bool ShouldIDoCoverage(const char* file
, const char* srcDir
,
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
,
73 std::string
& outputFile
);
74 bool ParseBullsEyeCovsrcLine(
75 std::string
const& inputLine
,
76 std::string
& sourceFile
,
83 bool GetNextInt(std::string
const& inputLine
,
84 std::string::size_type
& pos
,
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
98 this->AbsolutePath
= "";
100 this->Covered
= false;
106 cmCTestCoverage(const cmCTestCoverage
& rhs
) :
107 AbsolutePath(rhs
.AbsolutePath
),
108 FullPath(rhs
.FullPath
),
109 Covered(rhs
.Covered
),
111 UnTested(rhs
.UnTested
),
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
;
127 std::string AbsolutePath
;
128 std::string FullPath
;
132 std::vector
<int> Lines
;
136 std::vector
<cmStdString
> CustomCoverageExclude
;
137 std::vector
<cmsys::RegularExpression
> CustomCoverageExcludeRegex
;
139 typedef std::map
<std::string
, cmCTestCoverage
> CoverageMap
;