ENH: Add commands for memory checking and coverage
This commit is contained in:
parent
40d289dd68
commit
04f0a634a5
|
@ -203,14 +203,16 @@ INCLUDE_DIRECTORIES(
|
|||
# Sources for CTestLib
|
||||
#
|
||||
SET(CMTEST_SRCS cmCTest.cxx
|
||||
CTest/cmCTestBuildAndTestHandler.cxx
|
||||
CTest/cmCTestBuildCommand.cxx
|
||||
CTest/cmCTestBuildHandler.cxx
|
||||
CTest/cmCTestBuildAndTestHandler.cxx
|
||||
CTest/cmCTestConfigureCommand.cxx
|
||||
CTest/cmCTestConfigureHandler.cxx
|
||||
CTest/cmCTestCoverageCommand.cxx
|
||||
CTest/cmCTestCoverageHandler.cxx
|
||||
CTest/cmCTestEmptyBinaryDirectoryCommand.cxx
|
||||
CTest/cmCTestGenericHandler.cxx
|
||||
CTest/cmCTestMemCheckCommand.cxx
|
||||
CTest/cmCTestMemCheckHandler.cxx
|
||||
CTest/cmCTestRunScriptCommand.cxx
|
||||
CTest/cmCTestScriptHandler.cxx
|
||||
|
|
|
@ -0,0 +1,94 @@
|
|||
/*=========================================================================
|
||||
|
||||
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 "cmCTestCoverageCommand.h"
|
||||
|
||||
#include "cmCTest.h"
|
||||
#include "cmCTestGenericHandler.h"
|
||||
|
||||
bool cmCTestCoverageCommand::InitialPass(
|
||||
std::vector<std::string> const& args)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
if ( build_dir )
|
||||
{
|
||||
m_CTest->SetCTestConfiguration("BuildDirectory", build_dir);
|
||||
}
|
||||
|
||||
cmCTestGenericHandler* handler = m_CTest->GetHandler("coverage");
|
||||
if ( !handler )
|
||||
{
|
||||
this->SetError("internal CTest error. Cannot instantiate test handler");
|
||||
return false;
|
||||
}
|
||||
std::string current_dir = cmSystemTools::GetCurrentWorkingDirectory();
|
||||
cmSystemTools::ChangeDirectory(m_CTest->GetCTestConfiguration("BuildDirectory").c_str());
|
||||
int res = handler->ProcessHandler();
|
||||
if ( res_var )
|
||||
{
|
||||
cmOStringStream str;
|
||||
str << res;
|
||||
m_Makefile->AddDefinition(res_var, str.str().c_str());
|
||||
}
|
||||
cmSystemTools::ChangeDirectory(current_dir.c_str());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,80 @@
|
|||
/*=========================================================================
|
||||
|
||||
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.
|
||||
|
||||
=========================================================================*/
|
||||
#ifndef cmCTestCoverageCommand_h
|
||||
#define cmCTestCoverageCommand_h
|
||||
|
||||
#include "cmCTestCommand.h"
|
||||
|
||||
/** \class cmCTestCoverage
|
||||
* \brief Run a ctest script
|
||||
*
|
||||
* cmCTestCoverageCommand defineds the command to test the project.
|
||||
*/
|
||||
class cmCTestCoverageCommand : public cmCTestCommand
|
||||
{
|
||||
public:
|
||||
|
||||
cmCTestCoverageCommand() {}
|
||||
|
||||
/**
|
||||
* This is a virtual constructor for the command.
|
||||
*/
|
||||
virtual cmCommand* Clone()
|
||||
{
|
||||
cmCTestCoverageCommand* ni = new cmCTestCoverageCommand;
|
||||
ni->m_CTest = this->m_CTest;
|
||||
ni->m_CTestScriptHandler = this->m_CTestScriptHandler;
|
||||
return ni;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is called when the command is first encountered in
|
||||
* the CMakeLists.txt file.
|
||||
*/
|
||||
virtual bool InitialPass(std::vector<std::string> const& args);
|
||||
|
||||
/**
|
||||
* The name of the command as specified in CMakeList.txt.
|
||||
*/
|
||||
virtual const char* GetName() { return "CTEST_COVERAGE";}
|
||||
|
||||
/**
|
||||
* Succinct documentation.
|
||||
*/
|
||||
virtual const char* GetTerseDocumentation()
|
||||
{
|
||||
return "Tests the repository.";
|
||||
}
|
||||
|
||||
/**
|
||||
* More documentation.
|
||||
*/
|
||||
virtual const char* GetFullDocumentation()
|
||||
{
|
||||
return
|
||||
" CTEST_COVERAGE([BUILD build_dir] [RETURN_VALUE res])\n"
|
||||
"Perform the coverage of the given build directory and stores results in "
|
||||
"Coverage.xml. The second argument is a variable that will hold value.";
|
||||
}
|
||||
|
||||
cmTypeMacro(cmCTestCoverageCommand, cmCTestCommand);
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,94 @@
|
|||
/*=========================================================================
|
||||
|
||||
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 "cmCTestMemCheckCommand.h"
|
||||
|
||||
#include "cmCTest.h"
|
||||
#include "cmCTestGenericHandler.h"
|
||||
|
||||
bool cmCTestMemCheckCommand::InitialPass(
|
||||
std::vector<std::string> const& args)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
if ( build_dir )
|
||||
{
|
||||
m_CTest->SetCTestConfiguration("BuildDirectory", build_dir);
|
||||
}
|
||||
|
||||
cmCTestGenericHandler* handler = m_CTest->GetHandler("memcheck");
|
||||
if ( !handler )
|
||||
{
|
||||
this->SetError("internal CTest error. Cannot instantiate test handler");
|
||||
return false;
|
||||
}
|
||||
std::string current_dir = cmSystemTools::GetCurrentWorkingDirectory();
|
||||
cmSystemTools::ChangeDirectory(m_CTest->GetCTestConfiguration("BuildDirectory").c_str());
|
||||
int res = handler->ProcessHandler();
|
||||
if ( res_var )
|
||||
{
|
||||
cmOStringStream str;
|
||||
str << res;
|
||||
m_Makefile->AddDefinition(res_var, str.str().c_str());
|
||||
}
|
||||
cmSystemTools::ChangeDirectory(current_dir.c_str());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,81 @@
|
|||
/*=========================================================================
|
||||
|
||||
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.
|
||||
|
||||
=========================================================================*/
|
||||
#ifndef cmCTestMemCheckCommand_h
|
||||
#define cmCTestMemCheckCommand_h
|
||||
|
||||
#include "cmCTestCommand.h"
|
||||
|
||||
/** \class cmCTestMemCheck
|
||||
* \brief Run a ctest script
|
||||
*
|
||||
* cmCTestMemCheckCommand defineds the command to test the project.
|
||||
*/
|
||||
class cmCTestMemCheckCommand : public cmCTestCommand
|
||||
{
|
||||
public:
|
||||
|
||||
cmCTestMemCheckCommand() {}
|
||||
|
||||
/**
|
||||
* This is a virtual constructor for the command.
|
||||
*/
|
||||
virtual cmCommand* Clone()
|
||||
{
|
||||
cmCTestMemCheckCommand* ni = new cmCTestMemCheckCommand;
|
||||
ni->m_CTest = this->m_CTest;
|
||||
ni->m_CTestScriptHandler = this->m_CTestScriptHandler;
|
||||
return ni;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is called when the command is first encountered in
|
||||
* the CMakeLists.txt file.
|
||||
*/
|
||||
virtual bool InitialPass(std::vector<std::string> const& args);
|
||||
|
||||
/**
|
||||
* The name of the command as specified in CMakeList.txt.
|
||||
*/
|
||||
virtual const char* GetName() { return "CTEST_MEMCHECK";}
|
||||
|
||||
/**
|
||||
* Succinct documentation.
|
||||
*/
|
||||
virtual const char* GetTerseDocumentation()
|
||||
{
|
||||
return "Tests the repository.";
|
||||
}
|
||||
|
||||
/**
|
||||
* More documentation.
|
||||
*/
|
||||
virtual const char* GetFullDocumentation()
|
||||
{
|
||||
return
|
||||
" CTEST_MEMCHECK([BUILD build_dir] [RETURN_VALUE res])\n"
|
||||
"Performs a memory checking of tests in the given build directory and "
|
||||
"stores results in MemCheck.xml. The second argument is a variable that "
|
||||
"will hold value.";
|
||||
}
|
||||
|
||||
cmTypeMacro(cmCTestMemCheckCommand, cmCTestCommand);
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
|
@ -45,13 +45,15 @@
|
|||
|
||||
#include "cmCTestBuildCommand.h"
|
||||
#include "cmCTestConfigureCommand.h"
|
||||
#include "cmCTestCoverageCommand.h"
|
||||
#include "cmCTestEmptyBinaryDirectoryCommand.h"
|
||||
#include "cmCTestMemCheckCommand.h"
|
||||
#include "cmCTestRunScriptCommand.h"
|
||||
#include "cmCTestSleepCommand.h"
|
||||
#include "cmCTestStartCommand.h"
|
||||
#include "cmCTestUpdateCommand.h"
|
||||
#include "cmCTestTestCommand.h"
|
||||
#include "cmCTestSubmitCommand.h"
|
||||
#include "cmCTestTestCommand.h"
|
||||
#include "cmCTestUpdateCommand.h"
|
||||
|
||||
#define CTEST_INITIAL_CMAKE_OUTPUT_FILE_NAME "CTestInitialCMakeOutput.log"
|
||||
|
||||
|
@ -228,7 +230,9 @@ int cmCTestScriptHandler::ReadInScript(const std::string& total_script_arg)
|
|||
// created with the same format lets do that - ken
|
||||
this->AddCTestCommand(new cmCTestBuildCommand);
|
||||
this->AddCTestCommand(new cmCTestConfigureCommand);
|
||||
this->AddCTestCommand(new cmCTestCoverageCommand);
|
||||
this->AddCTestCommand(new cmCTestEmptyBinaryDirectoryCommand);
|
||||
this->AddCTestCommand(new cmCTestMemCheckCommand);
|
||||
this->AddCTestCommand(new cmCTestRunScriptCommand);
|
||||
this->AddCTestCommand(new cmCTestSleepCommand);
|
||||
this->AddCTestCommand(new cmCTestStartCommand);
|
||||
|
|
Loading…
Reference in New Issue