| 702 | } |
| 703 | |
| 704 | int cmCTest::ProcessSteps() |
| 705 | { |
| 706 | this->Impl->ExtraVerbose = this->Impl->Verbose; |
| 707 | this->Impl->Verbose = true; |
| 708 | this->Impl->ProduceXML = true; |
| 709 | |
| 710 | // Minimal dashboard client script configuration. |
| 711 | this->SetCTestConfiguration("BuildDirectory", this->Impl->BinaryDir); |
| 712 | |
| 713 | this->UpdateCTestConfiguration(); |
| 714 | this->BlockTestErrorDiagnostics(); |
| 715 | |
| 716 | if (this->GetCTestConfiguration("TimeOut").empty()) { |
| 717 | this->SetCTestConfiguration( |
| 718 | "TimeOut", |
| 719 | std::to_string(cmDurationTo<unsigned int>(cmCTest::MaxDuration())), |
| 720 | true); |
| 721 | } |
| 722 | |
| 723 | int res = 0; |
| 724 | cmCTestScriptHandler script(this); |
| 725 | script.CreateCMake(); |
| 726 | cmMakefile& mf = *script.GetMakefile(); |
| 727 | this->ReadCustomConfigurationFileTree(this->Impl->BinaryDir, &mf); |
| 728 | this->SetTimeLimit(mf.GetDefinition("CTEST_TIME_LIMIT")); |
| 729 | this->SetCMakeVariables(mf); |
| 730 | std::vector<cmListFileArgument> args{ |
| 731 | cmListFileArgument("RETURN_VALUE"_s, cmListFileArgument::Unquoted, 0), |
| 732 | cmListFileArgument("return_value"_s, cmListFileArgument::Unquoted, 0), |
| 733 | }; |
| 734 | |
| 735 | if (this->Impl->Parts[PartStart]) { |
| 736 | auto const func = cmListFileFunction( |
| 737 | "ctest_start", 0, 0, |
| 738 | { |
| 739 | { this->GetTestModelString(), cmListFileArgument::Unquoted, 0 }, |
| 740 | { "GROUP", cmListFileArgument::Unquoted, 0 }, |
| 741 | { this->GetTestGroupString(), cmListFileArgument::Unquoted, 0 }, |
| 742 | }); |
| 743 | auto status = cmExecutionStatus(mf); |
| 744 | if (!mf.ExecuteCommand(func, status)) { |
| 745 | return 12; |
| 746 | } |
| 747 | } else if (!this->ReadExistingTag(true) && !this->CreateNewTag(false)) { |
| 748 | cmCTestLog(this, ERROR_MESSAGE, |
| 749 | "Problem initializing the dashboard." << std::endl); |
| 750 | return 12; |
| 751 | } |
| 752 | |
| 753 | if (this->Impl->Parts[PartUpdate] && |
| 754 | (this->GetRemainingTimeAllowed() > std::chrono::minutes(2))) { |
| 755 | auto const func = cmListFileFunction("ctest_update", 0, 0, args); |
| 756 | auto status = cmExecutionStatus(mf); |
| 757 | if (!mf.ExecuteCommand(func, status)) { |
| 758 | res |= cmCTest::UPDATE_ERRORS; |
| 759 | } |
| 760 | } |
| 761 | if (this->Impl->TestModel == cmCTest::CONTINUOUS && |
no test coverage detected