| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 | /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying   file Copyright.txt or https://cmake.org/licensing for details.  */#ifndef cmCTestBuildHandler_h#define cmCTestBuildHandler_h#include "cmConfigure.h" // IWYU pragma: keep#include "cmCTestGenericHandler.h"#include "cmDuration.h"#include "cmProcessOutput.h"#include "cmsys/RegularExpression.hxx"#include <chrono>#include <deque>#include <iosfwd>#include <stddef.h>#include <string>#include <vector>class cmMakefile;class cmXMLWriter;/** \class cmCTestBuildHandler * \brief A class that handles ctest -S invocations * */class cmCTestBuildHandler : public cmCTestGenericHandler{public:  typedef cmCTestGenericHandler Superclass;  typedef cmProcessOutput::Encoding Encoding;  /*   * The main entry point for this class   */  int ProcessHandler() override;  cmCTestBuildHandler();  void PopulateCustomVectors(cmMakefile* mf) override;  /**   * Initialize handler   */  void Initialize() override;  int GetTotalErrors() { return this->TotalErrors; }  int GetTotalWarnings() { return this->TotalWarnings; }private:  std::string GetMakeCommand();  //! 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::ostream& ofs,                     Encoding encoding = cmProcessOutput::Auto);  enum  {    b_REGULAR_LINE,    b_WARNING_LINE,    b_ERROR_LINE  };  class cmCTestCompileErrorWarningRex  {  public:    cmCTestCompileErrorWarningRex() {}    int FileIndex;    int LineIndex;    cmsys::RegularExpression RegularExpression;  };  struct cmCTestBuildErrorWarning  {    bool Error;    int LogLine;    std::string Text;    std::string SourceFile;    std::string SourceFileTail;    int LineNumber;    std::string PreContext;    std::string PostContext;  };  // generate the XML output  void GenerateXMLHeader(cmXMLWriter& xml);  void GenerateXMLLaunched(cmXMLWriter& xml);  void GenerateXMLLogScraped(cmXMLWriter& xml);  void GenerateXMLFooter(cmXMLWriter& xml, cmDuration elapsed_build_time);  bool IsLaunchedErrorFile(const char* fname);  bool IsLaunchedWarningFile(const char* fname);  std::string StartBuild;  std::string EndBuild;  std::chrono::system_clock::time_point StartBuildTime;  std::chrono::system_clock::time_point EndBuildTime;  std::vector<std::string> CustomErrorMatches;  std::vector<std::string> CustomErrorExceptions;  std::vector<std::string> CustomWarningMatches;  std::vector<std::string> CustomWarningExceptions;  std::vector<std::string> ReallyCustomWarningMatches;  std::vector<std::string> ReallyCustomWarningExceptions;  std::vector<cmCTestCompileErrorWarningRex> ErrorWarningFileLineRegex;  std::vector<cmsys::RegularExpression> ErrorMatchRegex;  std::vector<cmsys::RegularExpression> ErrorExceptionRegex;  std::vector<cmsys::RegularExpression> WarningMatchRegex;  std::vector<cmsys::RegularExpression> WarningExceptionRegex;  typedef std::deque<char> t_BuildProcessingQueueType;  void ProcessBuffer(const char* data, size_t length, size_t& tick,                     size_t tick_len, std::ostream& ofs,                     t_BuildProcessingQueueType* queue);  int ProcessSingleLine(const char* data);  t_BuildProcessingQueueType BuildProcessingQueue;  t_BuildProcessingQueueType BuildProcessingErrorQueue;  size_t BuildOutputLogSize;  std::vector<char> CurrentProcessingLine;  std::string SimplifySourceDir;  std::string SimplifyBuildDir;  size_t OutputLineCounter;  typedef std::vector<cmCTestBuildErrorWarning> t_ErrorsAndWarningsVector;  t_ErrorsAndWarningsVector ErrorsAndWarnings;  t_ErrorsAndWarningsVector::iterator LastErrorOrWarning;  size_t PostContextCount;  size_t MaxPreContext;  size_t MaxPostContext;  std::deque<std::string> PreContext;  int TotalErrors;  int TotalWarnings;  char LastTickChar;  bool ErrorQuotaReached;  bool WarningQuotaReached;  int MaxErrors;  int MaxWarnings;  bool UseCTestLaunch;  std::string CTestLaunchDir;  class LaunchHelper;  friend class LaunchHelper;  class FragmentCompare;};#endif
 |