/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file LICENSE.rst or https://cmake.org/licensing for details. */ #pragma once #include "cmConfigure.h" // IWYU pragma: keep #include #include #include class cmCTest; class cmGlobalGenerator; class cmMakefile; class cmake; /** \class cmCTestScriptHandler * \brief A class that handles ctest -S invocations */ class cmCTestScriptHandler { public: /** * Add a script to run, and if is should run in the current process */ void AddConfigurationScript(std::string const&, bool pscope); /** * Run a dashboard using a specified configuration script */ int ProcessHandler(); /* * Run a script */ static bool RunScript(cmCTest* ctest, cmMakefile* mf, std::string const& script, bool InProcess, int* returnValue); /* * Some elapsed time handling functions */ void UpdateElapsedTime(); cmCTestScriptHandler(cmCTest* ctest); cmCTestScriptHandler(cmCTestScriptHandler const&) = delete; cmCTestScriptHandler const& operator=(cmCTestScriptHandler const&) = delete; ~cmCTestScriptHandler(); void CreateCMake(); cmake* GetCMake() { return this->CMake.get(); } cmMakefile* GetMakefile() { return this->Makefile.get(); } private: // reads in a script int ReadInScript(std::string const& total_script_arg); int ExecuteScript(std::string const& total_script_arg); int RunConfigurationScript(std::string const& script, bool pscope); cmCTest* CTest = nullptr; std::vector ConfigurationScripts; std::vector ScriptProcessScope; std::unique_ptr Makefile; cmMakefile* ParentMakefile = nullptr; std::unique_ptr GlobalGenerator; std::unique_ptr CMake; };