| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 | /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying   file Copyright.txt or https://cmake.org/licensing for details.  */#ifndef cmCTestScriptHandler_h#define cmCTestScriptHandler_h#include "cmConfigure.h" // IWYU pragma: keep#include "cmCTestGenericHandler.h"#include "cmDuration.h"#include <chrono>#include <memory>#include <string>#include <vector>class cmCTest;class cmCTestCommand;class cmGlobalGenerator;class cmMakefile;class cmake;/** \class cmCTestScriptHandler * \brief A class that handles ctest -S invocations * * CTest script is controlled using several variables that script has to * specify and some optional ones. Required ones are: *   CTEST_SOURCE_DIRECTORY - Source directory of the project *   CTEST_BINARY_DIRECTORY - Binary directory of the project *   CTEST_COMMAND          - Testing commands * * Optional variables are: *   CTEST_BACKUP_AND_RESTORE *   CTEST_CMAKE_COMMAND *   CTEST_CMAKE_OUTPUT_FILE_NAME *   CTEST_CONTINUOUS_DURATION *   CTEST_CONTINUOUS_MINIMUM_INTERVAL *   CTEST_CVS_CHECKOUT *   CTEST_CVS_COMMAND *   CTEST_UPDATE_COMMAND *   CTEST_DASHBOARD_ROOT *   CTEST_ENVIRONMENT *   CTEST_INITIAL_CACHE *   CTEST_START_WITH_EMPTY_BINARY_DIRECTORY *   CTEST_START_WITH_EMPTY_BINARY_DIRECTORY_ONCE * * In addition the following variables can be used. The number can be 1-10. *   CTEST_EXTRA_UPDATES_1 *   CTEST_EXTRA_UPDATES_2 *   ... *   CTEST_EXTRA_UPDATES_10 * * CTest script can use the following arguments CTest provides: *   CTEST_SCRIPT_ARG *   CTEST_SCRIPT_DIRECTORY *   CTEST_SCRIPT_NAME * */class cmCTestScriptHandler : public cmCTestGenericHandler{public:  typedef cmCTestGenericHandler Superclass;  /**   * Add a script to run, and if is should run in the current process   */  void AddConfigurationScript(const char*, bool pscope);  /**   * Run a dashboard using a specified confiuration script   */  int ProcessHandler() override;  /*   * Run a script   */  static bool RunScript(cmCTest* ctest, cmMakefile* mf, const char* script,                        bool InProcess, int* returnValue);  int RunCurrentScript();  /*   * Empty Binary Directory   */  static bool EmptyBinaryDirectory(const char* dir);  /*   * Write an initial CMakeCache.txt from the given contents.   */  static bool WriteInitialCache(const char* directory, const char* text);  /*   * Some elapsed time handling functions   */  static void SleepInSeconds(unsigned int secondsToWait);  void UpdateElapsedTime();  /**   * Return the time remaianing that the script is allowed to run in   * seconds if the user has set the variable CTEST_TIME_LIMIT. If that has   * not been set it returns a very large value.   */  cmDuration GetRemainingTimeAllowed();  cmCTestScriptHandler();  ~cmCTestScriptHandler() override;  void Initialize() override;  void CreateCMake();  cmake* GetCMake() { return this->CMake; }  void SetRunCurrentScript(bool value);private:  // reads in a script  int ReadInScript(const std::string& total_script_arg);  int ExecuteScript(const std::string& total_script_arg);  // extract vars from the script to set ivars  int ExtractVariables();  // perform a CVS checkout of the source dir  int CheckOutSourceDir();  // perform any extra cvs updates that were requested  int PerformExtraUpdates();  // backup and restore dirs  int BackupDirectories();  void RestoreBackupDirectories();  int RunConfigurationScript(const std::string& script, bool pscope);  int RunConfigurationDashboard();  // Add ctest command  void AddCTestCommand(std::string const& name,                       std::unique_ptr<cmCTestCommand> command);  // Try to remove the binary directory once  static bool TryToRemoveBinaryDirectoryOnce(const std::string& directoryPath);  std::vector<std::string> ConfigurationScripts;  std::vector<bool> ScriptProcessScope;  bool ShouldRunCurrentScript;  bool Backup;  bool EmptyBinDir;  bool EmptyBinDirOnce;  std::string SourceDir;  std::string BinaryDir;  std::string BackupSourceDir;  std::string BackupBinaryDir;  std::string CTestRoot;  std::string CVSCheckOut;  std::string CTestCmd;  std::string UpdateCmd;  std::string CTestEnv;  std::string InitialCache;  std::string CMakeCmd;  std::string CMOutFile;  std::vector<std::string> ExtraUpdates;  double MinimumInterval;  double ContinuousDuration;  // what time in seconds did this script start running  std::chrono::steady_clock::time_point ScriptStartTime;  cmMakefile* Makefile;  cmMakefile* ParentMakefile;  cmGlobalGenerator* GlobalGenerator;  cmake* CMake;};#endif
 |