1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
/*=========================================================================
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 cmCTestBuildHandler_h
#define cmCTestBuildHandler_h
#include "cmCTestGenericHandler.h"
#include "cmListFileCache.h"
#include <cmsys/RegularExpression.hxx>
class cmMakefile;
/** \class cmCTestBuildHandler
* \brief A class that handles ctest -S invocations
*
*/
class cmCTestBuildHandler : public cmCTestGenericHandler
{
public:
cmTypeMacro(cmCTestBuildHandler, cmCTestGenericHandler);
/*
* The main entry point for this class
*/
int ProcessHandler();
cmCTestBuildHandler();
void PopulateCustomVectors(cmMakefile *mf);
/**
* Initialize handler
*/
virtual void Initialize();
private:
//! Run command specialized for make and configure. Returns process status
// and retVal is return value or exception.
int RunMakeCommand(const char* command,
int* retVal, const char* dir, int timeout,
std::ofstream& ofs);
enum {
b_REGULAR_LINE,
b_WARNING_LINE,
b_ERROR_LINE
};
class cmCTestCompileErrorWarningRex
{
public:
cmCTestCompileErrorWarningRex() {}
int m_FileIndex;
int m_LineIndex;
cmsys::RegularExpression m_RegularExpression;
};
struct cmCTestBuildErrorWarning
{
bool m_Error;
int m_LogLine;
std::string m_Text;
std::string m_SourceFile;
std::string m_SourceFileTail;
int m_LineNumber;
std::string m_PreContext;
std::string m_PostContext;
};
// generate the XML output
void GenerateDartBuildOutput(std::ostream& os,
std::vector<cmCTestBuildErrorWarning>,
double elapsed_time);
std::string m_StartBuild;
std::string m_EndBuild;
std::vector<cmStdString> m_CustomErrorMatches;
std::vector<cmStdString> m_CustomErrorExceptions;
std::vector<cmStdString> m_CustomWarningMatches;
std::vector<cmStdString> m_CustomWarningExceptions;
std::vector<cmCTestCompileErrorWarningRex> m_ErrorWarningFileLineRegex;
std::vector<cmsys::RegularExpression> m_ErrorMatchRegex;
std::vector<cmsys::RegularExpression> m_ErrorExceptionRegex;
std::vector<cmsys::RegularExpression> m_WarningMatchRegex;
std::vector<cmsys::RegularExpression> m_WarningExceptionRegex;
void ProcessBuffer(const char* data, int length, size_t& tick, size_t tick_len,
std::ofstream& ofs);
int ProcessSingleLine(const char* data);
typedef std::deque<char> t_BuildProcessingQueueType;
t_BuildProcessingQueueType m_BuildProcessingQueue;
t_BuildProcessingQueueType::iterator m_BuildProcessingQueueLocation;
size_t m_BuildOutputLogSize;
std::vector<char> m_CurrentProcessingLine;
cmStdString m_SimplifySourceDir;
cmStdString m_SimplifyBuildDir;
size_t m_OutputLineCounter;
typedef std::vector<cmCTestBuildErrorWarning> t_ErrorsAndWarningsVector;
t_ErrorsAndWarningsVector m_ErrorsAndWarnings;
t_ErrorsAndWarningsVector::iterator m_LastErrorOrWarning;
size_t m_PostContextCount;
size_t m_MaxPreContext;
size_t m_MaxPostContext;
std::deque<cmStdString> m_PreContext;
int m_TotalErrors;
int m_TotalWarnings;
char m_LastTickChar;
bool m_ErrorQuotaReached;
bool m_WarningQuotaReached;
int m_MaxErrors;
int m_MaxWarnings;
};
#endif
|