CMake/Source/CTest/cmCTestConfigureCommand.cxx

133 lines
4.0 KiB
C++
Raw Normal View History

2009-10-02 01:21:28 +04:00
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
2009-10-02 01:21:28 +04:00
Distributed under the OSI-approved BSD License (the "License");
see accompanying file Copyright.txt for details.
2009-10-02 01:21:28 +04:00
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 "cmCTestConfigureCommand.h"
#include "cmCTest.h"
#include "cmCTestGenericHandler.h"
cmCTestConfigureCommand::cmCTestConfigureCommand()
{
this->Arguments[ctc_OPTIONS] = "OPTIONS";
this->Arguments[ctc_LAST] = 0;
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->Values[ct_BUILD] )
{
this->CTest->SetCTestConfiguration("BuildDirectory",
cmSystemTools::CollapseFullPath(
this->Values[ct_BUILD]).c_str());
}
else
{
this->CTest->SetCTestConfiguration("BuildDirectory",
cmSystemTools::CollapseFullPath(
this->Makefile->GetDefinition("CTEST_BINARY_DIRECTORY")).c_str());
}
if ( this->Values[ct_SOURCE] )
2005-05-04 19:13:35 +04:00
{
this->CTest->SetCTestConfiguration("SourceDirectory",
cmSystemTools::CollapseFullPath(
this->Values[ct_SOURCE]).c_str());
2005-05-04 19:13:35 +04:00
}
else
{
this->CTest->SetCTestConfiguration("SourceDirectory",
cmSystemTools::CollapseFullPath(
this->Makefile->GetDefinition("CTEST_SOURCE_DIRECTORY")).c_str());
}
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");
2006-03-29 21:33:41 +04:00
return 0;
}
2006-03-09 19:17:10 +03:00
const char* ctestConfigureCommand
2006-03-15 19:02:08 +03:00
= this->Makefile->GetDefinition("CTEST_CONFIGURE_COMMAND");
if ( ctestConfigureCommand && *ctestConfigureCommand )
{
2006-03-10 23:03:09 +03:00
this->CTest->SetCTestConfiguration("ConfigureCommand",
ctestConfigureCommand);
}
else
{
2006-03-09 19:17:10 +03:00
const char* cmakeGeneratorName
2006-03-15 19:02:08 +03:00
= 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");
2006-03-29 21:33:41 +04:00
return 0;
}
std::string cmakeConfigureCommand = "\"";
2006-03-10 23:03:09 +03:00
cmakeConfigureCommand += this->CTest->GetCMakeExecutable();
cmakeConfigureCommand += "\"";
std::vector<std::string>::const_iterator it;
std::string option;
for (it= options.begin(); it!=options.end(); ++it)
{
option = *it;
cmakeConfigureCommand += " \"";
cmakeConfigureCommand += option;
cmakeConfigureCommand += "\"";
}
cmakeConfigureCommand += " \"-G";
cmakeConfigureCommand += cmakeGeneratorName;
cmakeConfigureCommand += "\"";
cmakeConfigureCommand += " \"";
cmakeConfigureCommand += source_dir;
cmakeConfigureCommand += "\"";
2006-03-10 23:03:09 +03:00
this->CTest->SetCTestConfiguration("ConfigureCommand",
2006-03-09 19:17:10 +03:00
cmakeConfigureCommand.c_str());
}
else
{
2006-03-09 19:17:10 +03:00
this->SetError("Configure command is not specified. If this is a CMake "
"project, specify CTEST_CMAKE_GENERATOR, or if this is not CMake "
"project, specify CTEST_CONFIGURE_COMMAND.");
2006-03-29 21:33:41 +04:00
return 0;
}
}
2006-03-09 19:17:10 +03:00
cmCTestGenericHandler* handler
2006-03-10 23:03:09 +03:00
= this->CTest->GetInitializedHandler("configure");
if ( !handler )
{
2006-03-09 19:17:10 +03:00
this->SetError(
"internal CTest error. Cannot instantiate configure handler");
2006-03-29 21:33:41 +04:00
return 0;
}
return handler;
}