Browse Source

ENH: Make ctest build command work

Andy Cedilnik 21 years ago
parent
commit
eb3857ce83
3 changed files with 41 additions and 0 deletions
  1. 1 0
      CTestConfig.cmake
  2. 39 0
      Source/CTest/cmCTestBuildCommand.cxx
  3. 1 0
      Source/CTest/cmCTestScriptHandler.cxx

+ 1 - 0
CTestConfig.cmake

@@ -1,3 +1,4 @@
+SET (CTEST_PROJECT_NAME "CMake")
 SET (CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
 SET (CTEST_DROP_SITE "public.kitware.com")
 SET (CTEST_DROP_LOCATION "/cgi-bin/HTTPUploadDartFile.cgi")

+ 39 - 0
Source/CTest/cmCTestBuildCommand.cxx

@@ -18,6 +18,8 @@
 
 #include "cmCTest.h"
 #include "cmCTestGenericHandler.h"
+#include "cmake.h"
+#include "cmGlobalGenerator.h"
 
 bool cmCTestBuildCommand::InitialPass(
   std::vector<std::string> const& args)
@@ -38,6 +40,43 @@ bool cmCTestBuildCommand::InitialPass(
     this->SetError("internal CTest error. Cannot instantiate build handler");
     return false;
     }
+ 
+  const char* ctestBuildCommand = m_Makefile->GetDefinition("CTEST_BUILD_COMMAND");
+  if ( ctestBuildCommand && *ctestBuildCommand )
+    {
+    m_CTest->SetDartConfiguration("MakeCommand", ctestBuildCommand);
+    }
+  else
+    {
+    const char* cmakeGeneratorName = m_Makefile->GetDefinition("CTEST_CMAKE_GENERATOR");
+    const char* cmakeProjectName = m_Makefile->GetDefinition("CTEST_PROJECT_NAME");
+    const char* cmakeBuildConfiguration = m_Makefile->GetDefinition("CTEST_BUILD_CONFIGURATION");
+    if ( cmakeGeneratorName && *cmakeGeneratorName &&
+      cmakeProjectName && *cmakeProjectName )
+      {
+      if ( !cmakeBuildConfiguration )
+        {
+        cmakeBuildConfiguration = "Release";
+        }
+      cmGlobalGenerator* gen = 
+        m_Makefile->GetCMakeInstance()->CreateGlobalGenerator(cmakeGeneratorName);
+      gen->FindMakeProgram(m_Makefile);
+      const char* cmakeMakeProgram = m_Makefile->GetDefinition("CMAKE_MAKE_PROGRAM");
+      std::cout << "CMake Make program is: " << cmakeMakeProgram << std::endl;
+      std::string buildCommand = gen->GenerateBuildCommand(cmakeMakeProgram, cmakeProjectName,
+        0, cmakeBuildConfiguration, true);
+
+      m_CTest->SetDartConfiguration("MakeCommand", buildCommand.c_str());
+      }
+    else
+      {
+      cmOStringStream ostr;
+      ostr << "CTEST_BUILD_COMMAND or CTEST_CMAKE_GENERATOR not specified. Please specify the CTEST_CMAKE_GENERATOR if this is a CMake project, or specify the CTEST_BUILD_COMMAND for cmake or any other project.";
+      this->SetError(ostr.str().c_str());
+      return false;
+      }
+    }
+  
   int res = handler->ProcessHandler();
   cmOStringStream str;
   str << res;

+ 1 - 0
Source/CTest/cmCTestScriptHandler.cxx

@@ -202,6 +202,7 @@ int cmCTestScriptHandler::ReadInScript(const std::string& total_script_arg)
     delete m_LocalGenerator;
     }
   m_CMake = new cmake;
+  m_CMake->AddCMakePaths(m_CTest->GetCTestExecutable());
   m_GlobalGenerator = new cmGlobalGenerator;
   m_GlobalGenerator->SetCMakeInstance(m_CMake);