summaryrefslogtreecommitdiffstats
path: root/Source/CTest/cmCTestBuildCommand.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Source/CTest/cmCTestBuildCommand.cxx')
-rw-r--r--Source/CTest/cmCTestBuildCommand.cxx39
1 files changed, 39 insertions, 0 deletions
diff --git a/Source/CTest/cmCTestBuildCommand.cxx b/Source/CTest/cmCTestBuildCommand.cxx
index e1c3d66..52c90e5 100644
--- a/Source/CTest/cmCTestBuildCommand.cxx
+++ b/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;