| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 | 
							- /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
 
-    file Copyright.txt or https://cmake.org/licensing for details.  */
 
- #include "cmCTestConfigureCommand.h"
 
- #include "cmCTest.h"
 
- #include "cmCTestGenericHandler.h"
 
- #include "cmGlobalGenerator.h"
 
- #include "cmMakefile.h"
 
- #include "cmSystemTools.h"
 
- #include "cmake.h"
 
- #include <sstream>
 
- #include <string.h>
 
- #include <vector>
 
- cmCTestConfigureCommand::cmCTestConfigureCommand()
 
- {
 
-   this->Arguments[ctc_OPTIONS] = "OPTIONS";
 
-   this->Arguments[ctc_LAST] = nullptr;
 
-   this->Last = ctc_LAST;
 
- }
 
- cmCTestGenericHandler* cmCTestConfigureCommand::InitializeHandler()
 
- {
 
-   std::vector<std::string> options;
 
-   if (this->Values[ctc_OPTIONS]) {
 
-     cmSystemTools::ExpandListArgument(this->Values[ctc_OPTIONS], options);
 
-   }
 
-   if (this->CTest->GetCTestConfiguration("BuildDirectory").empty()) {
 
-     this->SetError(
 
-       "Build directory not specified. Either use BUILD "
 
-       "argument to CTEST_CONFIGURE command or set CTEST_BINARY_DIRECTORY "
 
-       "variable");
 
-     return nullptr;
 
-   }
 
-   const char* ctestConfigureCommand =
 
-     this->Makefile->GetDefinition("CTEST_CONFIGURE_COMMAND");
 
-   if (ctestConfigureCommand && *ctestConfigureCommand) {
 
-     this->CTest->SetCTestConfiguration("ConfigureCommand",
 
-                                        ctestConfigureCommand, this->Quiet);
 
-   } else {
 
-     const char* cmakeGeneratorName =
 
-       this->Makefile->GetDefinition("CTEST_CMAKE_GENERATOR");
 
-     if (cmakeGeneratorName && *cmakeGeneratorName) {
 
-       const std::string& source_dir =
 
-         this->CTest->GetCTestConfiguration("SourceDirectory");
 
-       if (source_dir.empty()) {
 
-         this->SetError(
 
-           "Source directory not specified. Either use SOURCE "
 
-           "argument to CTEST_CONFIGURE command or set CTEST_SOURCE_DIRECTORY "
 
-           "variable");
 
-         return nullptr;
 
-       }
 
-       const std::string cmakelists_file = source_dir + "/CMakeLists.txt";
 
-       if (!cmSystemTools::FileExists(cmakelists_file.c_str())) {
 
-         std::ostringstream e;
 
-         e << "CMakeLists.txt file does not exist [" << cmakelists_file << "]";
 
-         this->SetError(e.str());
 
-         return nullptr;
 
-       }
 
-       bool multiConfig = false;
 
-       bool cmakeBuildTypeInOptions = false;
 
-       cmGlobalGenerator* gg =
 
-         this->Makefile->GetCMakeInstance()->CreateGlobalGenerator(
 
-           cmakeGeneratorName);
 
-       if (gg) {
 
-         multiConfig = gg->IsMultiConfig();
 
-         delete gg;
 
-       }
 
-       std::string cmakeConfigureCommand = "\"";
 
-       cmakeConfigureCommand += cmSystemTools::GetCMakeCommand();
 
-       cmakeConfigureCommand += "\"";
 
-       for (std::string const& option : options) {
 
-         cmakeConfigureCommand += " \"";
 
-         cmakeConfigureCommand += option;
 
-         cmakeConfigureCommand += "\"";
 
-         if ((nullptr != strstr(option.c_str(), "CMAKE_BUILD_TYPE=")) ||
 
-             (nullptr != strstr(option.c_str(), "CMAKE_BUILD_TYPE:STRING="))) {
 
-           cmakeBuildTypeInOptions = true;
 
-         }
 
-       }
 
-       if (!multiConfig && !cmakeBuildTypeInOptions &&
 
-           !this->CTest->GetConfigType().empty()) {
 
-         cmakeConfigureCommand += " \"-DCMAKE_BUILD_TYPE:STRING=";
 
-         cmakeConfigureCommand += this->CTest->GetConfigType();
 
-         cmakeConfigureCommand += "\"";
 
-       }
 
-       if (this->Makefile->IsOn("CTEST_USE_LAUNCHERS")) {
 
-         cmakeConfigureCommand += " \"-DCTEST_USE_LAUNCHERS:BOOL=TRUE\"";
 
-       }
 
-       cmakeConfigureCommand += " \"-G";
 
-       cmakeConfigureCommand += cmakeGeneratorName;
 
-       cmakeConfigureCommand += "\"";
 
-       const char* cmakeGeneratorPlatform =
 
-         this->Makefile->GetDefinition("CTEST_CMAKE_GENERATOR_PLATFORM");
 
-       if (cmakeGeneratorPlatform && *cmakeGeneratorPlatform) {
 
-         cmakeConfigureCommand += " \"-A";
 
-         cmakeConfigureCommand += cmakeGeneratorPlatform;
 
-         cmakeConfigureCommand += "\"";
 
-       }
 
-       const char* cmakeGeneratorToolset =
 
-         this->Makefile->GetDefinition("CTEST_CMAKE_GENERATOR_TOOLSET");
 
-       if (cmakeGeneratorToolset && *cmakeGeneratorToolset) {
 
-         cmakeConfigureCommand += " \"-T";
 
-         cmakeConfigureCommand += cmakeGeneratorToolset;
 
-         cmakeConfigureCommand += "\"";
 
-       }
 
-       cmakeConfigureCommand += " \"";
 
-       cmakeConfigureCommand += source_dir;
 
-       cmakeConfigureCommand += "\"";
 
-       this->CTest->SetCTestConfiguration(
 
-         "ConfigureCommand", cmakeConfigureCommand.c_str(), this->Quiet);
 
-     } else {
 
-       this->SetError(
 
-         "Configure command is not specified. If this is a "
 
-         "\"built with CMake\" project, set CTEST_CMAKE_GENERATOR. If not, "
 
-         "set CTEST_CONFIGURE_COMMAND.");
 
-       return nullptr;
 
-     }
 
-   }
 
-   if (const char* labelsForSubprojects =
 
-         this->Makefile->GetDefinition("CTEST_LABELS_FOR_SUBPROJECTS")) {
 
-     this->CTest->SetCTestConfiguration("LabelsForSubprojects",
 
-                                        labelsForSubprojects, this->Quiet);
 
-   }
 
-   cmCTestGenericHandler* handler =
 
-     this->CTest->GetInitializedHandler("configure");
 
-   if (!handler) {
 
-     this->SetError(
 
-       "internal CTest error. Cannot instantiate configure handler");
 
-     return nullptr;
 
-   }
 
-   handler->SetQuiet(this->Quiet);
 
-   return handler;
 
- }
 
 
  |