/*========================================================================= Program: CMake - Cross-Platform Makefile Generator Module: $RCSfile$ Language: C++ Date: $Date$ Version: $Revision$ Copyright (c) 2002 Kitware, Inc., Insight Consortium. 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 cmCTestMultiProcessHandler_h #define cmCTestMultiProcessHandler_h class cmProcess; #include #include /** \class cmCTestMultiProcessHandler * \brief run parallel ctest * * cmCTestMultiProcessHandler */ class cmCTestMultiProcessHandler { public: struct TestSet : public std::set {}; struct TestMap : public std::map {}; cmCTestMultiProcessHandler(); // Set the tests void SetTests(TestMap& tests, std::map& testNames); // Set the max number of tests that can be run at the same time. void SetParallelLevel(size_t); void RunTests(); void PrintTests(); void SetCTestCommand(const char* c) { this->CTestCommand = c;} void SetTestCacheFile(const char* c) { this->CTestCacheFile = c;} void SetPassFailVectors(std::vector* passed, std::vector* failed) { this->Passed = passed; this->Failed = failed; } void SetTestResults(std::vector* r) { this->TestResults = r; } void SetCTest(cmCTest* ctest) { this->CTest = ctest;} protected: cmCTest* CTest; // Start the next test or tests as many as are allowed by // ParallelLevel void StartNextTests(); void StartTestProcess(int test); bool StartTest(int test); void EndTest(cmProcess*); // Return true if there are still tests running // check all running processes for output and exit case bool CheckOutput(); // map from test number to set of depend tests TestMap Tests; std::map TestNames; std::map TestRunningMap; std::map TestFinishMap; std::map TestOutput; std::string CTestCommand; std::string CTestCacheFile; std::vector* Passed; std::vector* Failed; std::vector* TestResults; int ProcessId; size_t ParallelLevel; // max number of process that can be run at once std::set RunningTests; // current running tests }; #endif