You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
5.3 KiB
162 lines
5.3 KiB
/*============================================================================
|
|
CMake - Cross Platform Makefile Generator
|
|
Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
|
|
|
|
Distributed under the OSI-approved BSD License (the "License");
|
|
see accompanying file Copyright.txt for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even the
|
|
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
See the License for more information.
|
|
============================================================================*/
|
|
#include "cmCTestBuildCommand.h"
|
|
|
|
#include "cmCTest.h"
|
|
#include "cmCTestGenericHandler.h"
|
|
#include "cmCTestBuildHandler.h"
|
|
#include "cmake.h"
|
|
#include "cmGlobalGenerator.h"
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
cmCTestBuildCommand::cmCTestBuildCommand()
|
|
{
|
|
this->GlobalGenerator = 0;
|
|
this->Arguments[ctb_NUMBER_ERRORS] = "NUMBER_ERRORS";
|
|
this->Arguments[ctb_NUMBER_WARNINGS] = "NUMBER_WARNINGS";
|
|
this->Arguments[ctb_LAST] = 0;
|
|
this->Last = ctb_LAST;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
cmCTestBuildCommand::~cmCTestBuildCommand()
|
|
{
|
|
if ( this->GlobalGenerator )
|
|
{
|
|
delete this->GlobalGenerator;
|
|
this->GlobalGenerator = 0;
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
cmCTestGenericHandler* cmCTestBuildCommand::InitializeHandler()
|
|
{
|
|
cmCTestGenericHandler* handler
|
|
= this->CTest->GetInitializedHandler("build");
|
|
if ( !handler )
|
|
{
|
|
this->SetError("internal CTest error. Cannot instantiate build handler");
|
|
return 0;
|
|
}
|
|
this->Handler = (cmCTestBuildHandler*)handler;
|
|
const char* ctestBuildCommand
|
|
= this->Makefile->GetDefinition("CTEST_BUILD_COMMAND");
|
|
if ( ctestBuildCommand && *ctestBuildCommand )
|
|
{
|
|
this->CTest->SetCTestConfiguration("MakeCommand", ctestBuildCommand);
|
|
}
|
|
else
|
|
{
|
|
const char* cmakeGeneratorName
|
|
= this->Makefile->GetDefinition("CTEST_CMAKE_GENERATOR");
|
|
const char* cmakeProjectName
|
|
= this->Makefile->GetDefinition("CTEST_PROJECT_NAME");
|
|
const char* cmakeBuildConfiguration
|
|
= this->Makefile->GetDefinition("CTEST_BUILD_CONFIGURATION");
|
|
const char* cmakeBuildAdditionalFlags
|
|
= this->Makefile->GetDefinition("CTEST_BUILD_FLAGS");
|
|
const char* cmakeBuildTarget
|
|
= this->Makefile->GetDefinition("CTEST_BUILD_TARGET");
|
|
if ( cmakeGeneratorName && *cmakeGeneratorName &&
|
|
cmakeProjectName && *cmakeProjectName )
|
|
{
|
|
if ( !cmakeBuildConfiguration )
|
|
{
|
|
cmakeBuildConfiguration = "Release";
|
|
}
|
|
if ( this->GlobalGenerator )
|
|
{
|
|
if ( strcmp(this->GlobalGenerator->GetName(),
|
|
cmakeGeneratorName) != 0 )
|
|
{
|
|
delete this->GlobalGenerator;
|
|
this->GlobalGenerator = 0;
|
|
}
|
|
}
|
|
if ( !this->GlobalGenerator )
|
|
{
|
|
this->GlobalGenerator =
|
|
this->Makefile->GetCMakeInstance()->CreateGlobalGenerator(
|
|
cmakeGeneratorName);
|
|
}
|
|
this->GlobalGenerator->FindMakeProgram(this->Makefile);
|
|
const char* cmakeMakeProgram
|
|
= this->Makefile->GetDefinition("CMAKE_MAKE_PROGRAM");
|
|
if(strlen(cmakeBuildConfiguration) == 0)
|
|
{
|
|
const char* config = 0;
|
|
#ifdef CMAKE_INTDIR
|
|
config = CMAKE_INTDIR;
|
|
#endif
|
|
if(!config)
|
|
{
|
|
config = "Debug";
|
|
}
|
|
cmakeBuildConfiguration = config;
|
|
}
|
|
|
|
std::string buildCommand
|
|
= this->GlobalGenerator->
|
|
GenerateBuildCommand(cmakeMakeProgram,
|
|
cmakeProjectName,
|
|
cmakeBuildAdditionalFlags, cmakeBuildTarget,
|
|
cmakeBuildConfiguration, true, false);
|
|
cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
|
|
"SetMakeCommand:"
|
|
<< buildCommand.c_str() << "\n");
|
|
this->CTest->SetCTestConfiguration("MakeCommand", buildCommand.c_str());
|
|
}
|
|
else
|
|
{
|
|
cmOStringStream ostr;
|
|
ostr << "CTEST_BUILD_COMMAND or CTEST_CMAKE_GENERATOR not specified. "
|
|
"Please specify the CTEST_CMAKE_GENERATOR and CTEST_PROJECT_NAME 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 0;
|
|
}
|
|
}
|
|
|
|
if(const char* useLaunchers =
|
|
this->Makefile->GetDefinition("CTEST_USE_LAUNCHERS"))
|
|
{
|
|
this->CTest->SetCTestConfiguration("UseLaunchers", useLaunchers);
|
|
}
|
|
|
|
return handler;
|
|
}
|
|
|
|
|
|
bool cmCTestBuildCommand::InitialPass(std::vector<std::string> const& args,
|
|
cmExecutionStatus &status)
|
|
{
|
|
bool ret = cmCTestHandlerCommand::InitialPass(args, status);
|
|
if ( this->Values[ctb_NUMBER_ERRORS] && *this->Values[ctb_NUMBER_ERRORS])
|
|
{
|
|
cmOStringStream str;
|
|
str << this->Handler->GetTotalErrors();
|
|
this->Makefile->AddDefinition(
|
|
this->Values[ctb_NUMBER_ERRORS], str.str().c_str());
|
|
}
|
|
if ( this->Values[ctb_NUMBER_WARNINGS]
|
|
&& *this->Values[ctb_NUMBER_WARNINGS])
|
|
{
|
|
cmOStringStream str;
|
|
str << this->Handler->GetTotalWarnings();
|
|
this->Makefile->AddDefinition(
|
|
this->Values[ctb_NUMBER_WARNINGS], str.str().c_str());
|
|
}
|
|
return ret;
|
|
}
|