2005-05-02 22:15:29 +04:00
/*=========================================================================
Program : CMake - Cross - Platform Makefile Generator
Module : $ RCSfile $
Language : C + +
Date : $ Date $
Version : $ Revision $
Copyright ( c ) 2002 Kitware , Inc . , Insight Consortium . All rights reserved .
See Copyright . txt or http : //www.cmake.org/HTML/Copyright.html for details.
This software is distributed WITHOUT ANY WARRANTY ; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE . See the above copyright notices for more information .
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
# include "cmCTestBuildCommand.h"
# include "cmCTest.h"
# include "cmCTestGenericHandler.h"
2005-05-02 23:51:58 +04:00
# include "cmake.h"
# include "cmGlobalGenerator.h"
2005-05-02 22:15:29 +04:00
2005-05-08 21:48:09 +04:00
//----------------------------------------------------------------------------
cmCTestBuildCommand : : cmCTestBuildCommand ( )
{
m_GlobalGenerator = 0 ;
}
//----------------------------------------------------------------------------
cmCTestBuildCommand : : ~ cmCTestBuildCommand ( )
{
if ( m_GlobalGenerator )
{
delete m_GlobalGenerator ;
m_GlobalGenerator = 0 ;
}
}
//----------------------------------------------------------------------------
2005-05-02 22:15:29 +04:00
bool cmCTestBuildCommand : : InitialPass (
std : : vector < std : : string > const & args )
{
2005-05-04 19:13:35 +04:00
const char * build_dir = 0 ;
const char * res_var = 0 ;
bool havereturn_variable = false ;
bool havesource = false ;
for ( size_t i = 0 ; i < args . size ( ) ; + + i )
2005-05-02 22:15:29 +04:00
{
2005-05-04 19:13:35 +04:00
if ( havereturn_variable )
{
res_var = args [ i ] . c_str ( ) ;
havereturn_variable = false ;
}
else if ( havesource )
{
build_dir = args [ i ] . c_str ( ) ;
havesource = false ;
}
else if ( args [ i ] = = " RETURN_VALUE " )
{
if ( res_var )
{
this - > SetError ( " called with incorrect number of arguments. RETURN_VALUE specified twice. " ) ;
return false ;
}
havereturn_variable = true ;
}
else if ( args [ i ] = = " BUILD " )
{
if ( build_dir )
{
this - > SetError ( " called with incorrect number of arguments. BUILD specified twice. " ) ;
return false ;
}
havesource = true ;
}
else
{
cmOStringStream str ;
str < < " called with incorrect number of arguments. Extra argument is: " < < args [ i ] . c_str ( ) < < " . " ;
this - > SetError ( str . str ( ) . c_str ( ) ) ;
return false ;
}
2005-05-02 22:15:29 +04:00
}
2005-05-04 19:13:35 +04:00
if ( build_dir )
{
m_CTest - > SetCTestConfiguration ( " BuildDirectory " , build_dir ) ;
}
2005-05-02 22:15:29 +04:00
2005-06-23 21:04:18 +04:00
cmCTestGenericHandler * handler = m_CTest - > GetInitializedHandler ( " build " ) ;
2005-05-02 22:15:29 +04:00
if ( ! handler )
{
this - > SetError ( " internal CTest error. Cannot instantiate build handler " ) ;
return false ;
}
2005-05-02 23:51:58 +04:00
const char * ctestBuildCommand = m_Makefile - > GetDefinition ( " CTEST_BUILD_COMMAND " ) ;
if ( ctestBuildCommand & & * ctestBuildCommand )
{
2005-05-03 17:40:16 +04:00
m_CTest - > SetCTestConfiguration ( " MakeCommand " , ctestBuildCommand ) ;
2005-05-02 23:51:58 +04:00
}
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 " ) ;
2005-12-01 19:41:00 +03:00
const char * cmakeBuildAdditionalFlags = m_Makefile - > GetDefinition ( " CTEST_BUILD_FLAGS " ) ;
2005-05-02 23:51:58 +04:00
if ( cmakeGeneratorName & & * cmakeGeneratorName & &
cmakeProjectName & & * cmakeProjectName )
{
if ( ! cmakeBuildConfiguration )
{
cmakeBuildConfiguration = " Release " ;
}
2005-05-08 21:48:09 +04:00
if ( m_GlobalGenerator )
{
if ( strcmp ( m_GlobalGenerator - > GetName ( ) , cmakeGeneratorName ) ! = 0 )
{
delete m_GlobalGenerator ;
m_GlobalGenerator = 0 ;
}
}
if ( ! m_GlobalGenerator )
{
m_GlobalGenerator =
m_Makefile - > GetCMakeInstance ( ) - > CreateGlobalGenerator ( cmakeGeneratorName ) ;
}
m_GlobalGenerator - > FindMakeProgram ( m_Makefile ) ;
2005-05-02 23:51:58 +04:00
const char * cmakeMakeProgram = m_Makefile - > GetDefinition ( " CMAKE_MAKE_PROGRAM " ) ;
2005-05-08 21:48:09 +04:00
std : : string buildCommand
= m_GlobalGenerator - > GenerateBuildCommand ( cmakeMakeProgram , cmakeProjectName ,
2005-12-01 19:41:00 +03:00
cmakeBuildAdditionalFlags , 0 , cmakeBuildConfiguration , true ) ;
2005-05-03 17:40:16 +04:00
m_CTest - > SetCTestConfiguration ( " MakeCommand " , buildCommand . c_str ( ) ) ;
2005-05-02 23:51:58 +04:00
}
else
{
cmOStringStream ostr ;
2005-06-16 21:18:21 +04:00
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. " ;
2005-05-02 23:51:58 +04:00
this - > SetError ( ostr . str ( ) . c_str ( ) ) ;
return false ;
}
}
2005-05-02 22:15:29 +04:00
int res = handler - > ProcessHandler ( ) ;
2005-05-04 19:13:35 +04:00
if ( res_var )
{
cmOStringStream str ;
str < < res ;
m_Makefile - > AddDefinition ( res_var , str . str ( ) . c_str ( ) ) ;
}
2005-05-02 22:15:29 +04:00
return true ;
}