diff options
author | Bill Hoffman <bill.hoffman@kitware.com> | 2008-07-03 13:31:33 (GMT) |
---|---|---|
committer | Bill Hoffman <bill.hoffman@kitware.com> | 2008-07-03 13:31:33 (GMT) |
commit | bb7b27e417b72d0387af5393b81ed35deab52c4b (patch) | |
tree | 42d2efd6a2131935eefbe540cd15e8bcb0ed2ac7 /Source/CTest/cmCTestMultiProcessHandler.h | |
parent | ea71721b805708f82898c32e007aa3e29e6f458f (diff) | |
download | CMake-bb7b27e417b72d0387af5393b81ed35deab52c4b.zip CMake-bb7b27e417b72d0387af5393b81ed35deab52c4b.tar.gz CMake-bb7b27e417b72d0387af5393b81ed35deab52c4b.tar.bz2 |
ENH: add initial ctest -j feature
Diffstat (limited to 'Source/CTest/cmCTestMultiProcessHandler.h')
-rw-r--r-- | Source/CTest/cmCTestMultiProcessHandler.h | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/Source/CTest/cmCTestMultiProcessHandler.h b/Source/CTest/cmCTestMultiProcessHandler.h new file mode 100644 index 0000000..9f7976d --- /dev/null +++ b/Source/CTest/cmCTestMultiProcessHandler.h @@ -0,0 +1,84 @@ +/*========================================================================= + + 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 + +#include <set> +#include <map> +#include <string> +#include <vector> +class cmProcess; +#include <cmStandardIncludes.h> +#include <cmCTestTestHandler.h> + +/** \class cmCTestMultiProcessHandler + * \brief run parallel ctest + * + * cmCTestMultiProcessHandler + */ +class cmCTestMultiProcessHandler +{ +public: + cmCTestMultiProcessHandler(); + // Set the tests + void SetTests(std::map<int, std::set<int> >& tests, + std::map<int, cmStdString>& 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<cmStdString>* passed, + std::vector<cmStdString>* failed) + { + this->Passed = passed; + this->Failed = failed; + } + void SetTestResults(std::vector<cmCTestTestHandler::cmCTestTestResult>* 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 + std::map<int, std::set<int> > Tests; + std::map<int, cmStdString> TestNames; + std::map<int, bool> TestRunningMap; + std::map<int, bool> TestFinishMap; + std::map<int, cmStdString> TestOutput; + std::string CTestCommand; + std::string CTestCacheFile; + std::vector<cmStdString>* Passed; + std::vector<cmStdString>* Failed; + std::vector<cmCTestTestHandler::cmCTestTestResult>* TestResults; + int ProcessId; + size_t ParallelLevel; // max number of process that can be run at once + std::set<cmProcess*> RunningTests; // current running tests +}; + +#endif |