ENH: allow ctest_build to return error and warning counts
This commit is contained in:
parent
e92d99d05c
commit
82c3afcf6f
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
#include "cmCTest.h"
|
#include "cmCTest.h"
|
||||||
#include "cmCTestGenericHandler.h"
|
#include "cmCTestGenericHandler.h"
|
||||||
|
#include "cmCTestBuildHandler.h"
|
||||||
#include "cmake.h"
|
#include "cmake.h"
|
||||||
#include "cmGlobalGenerator.h"
|
#include "cmGlobalGenerator.h"
|
||||||
|
|
||||||
@ -26,6 +27,10 @@
|
|||||||
cmCTestBuildCommand::cmCTestBuildCommand()
|
cmCTestBuildCommand::cmCTestBuildCommand()
|
||||||
{
|
{
|
||||||
this->GlobalGenerator = 0;
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
@ -48,7 +53,7 @@ cmCTestGenericHandler* cmCTestBuildCommand::InitializeHandler()
|
|||||||
this->SetError("internal CTest error. Cannot instantiate build handler");
|
this->SetError("internal CTest error. Cannot instantiate build handler");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
this->Handler = (cmCTestBuildHandler*)handler;
|
||||||
const char* ctestBuildCommand
|
const char* ctestBuildCommand
|
||||||
= this->Makefile->GetDefinition("CTEST_BUILD_COMMAND");
|
= this->Makefile->GetDefinition("CTEST_BUILD_COMMAND");
|
||||||
if ( ctestBuildCommand && *ctestBuildCommand )
|
if ( ctestBuildCommand && *ctestBuildCommand )
|
||||||
@ -132,3 +137,24 @@ cmCTestGenericHandler* cmCTestBuildCommand::InitializeHandler()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include "cmCTestHandlerCommand.h"
|
#include "cmCTestHandlerCommand.h"
|
||||||
|
|
||||||
class cmGlobalGenerator;
|
class cmGlobalGenerator;
|
||||||
|
class cmCTestBuildHandler;
|
||||||
|
|
||||||
/** \class cmCTestBuild
|
/** \class cmCTestBuild
|
||||||
* \brief Run a ctest script
|
* \brief Run a ctest script
|
||||||
@ -56,14 +57,16 @@ public:
|
|||||||
{
|
{
|
||||||
return "Builds the repository.";
|
return "Builds the repository.";
|
||||||
}
|
}
|
||||||
|
virtual bool InitialPass(std::vector<std::string> const& args,
|
||||||
|
cmExecutionStatus &status);
|
||||||
/**
|
/**
|
||||||
* More documentation.
|
* More documentation.
|
||||||
*/
|
*/
|
||||||
virtual const char* GetFullDocumentation()
|
virtual const char* GetFullDocumentation()
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
" ctest_build([BUILD build_dir] [RETURN_VALUE res])\n"
|
" ctest_build([BUILD build_dir] [RETURN_VALUE res] "
|
||||||
|
" [NUMBER_ERRORS val] [NUMBER_WARNINGS val])\n"
|
||||||
"Builds the given build directory and stores results in Build.xml.";
|
"Builds the given build directory and stores results in Build.xml.";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -72,6 +75,14 @@ public:
|
|||||||
cmGlobalGenerator* GlobalGenerator;
|
cmGlobalGenerator* GlobalGenerator;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
cmCTestBuildHandler* Handler;
|
||||||
|
enum {
|
||||||
|
ctb_BUILD = ct_LAST,
|
||||||
|
ctb_NUMBER_ERRORS,
|
||||||
|
ctb_NUMBER_WARNINGS,
|
||||||
|
ctb_LAST
|
||||||
|
};
|
||||||
|
|
||||||
cmCTestGenericHandler* InitializeHandler();
|
cmCTestGenericHandler* InitializeHandler();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -475,7 +475,7 @@ int cmCTestBuildHandler::ProcessHandler()
|
|||||||
}
|
}
|
||||||
this->GenerateDartBuildOutput(
|
this->GenerateDartBuildOutput(
|
||||||
xofs, this->ErrorsAndWarnings, elapsed_build_time);
|
xofs, this->ErrorsAndWarnings, elapsed_build_time);
|
||||||
return 0;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
@ -724,6 +724,7 @@ int cmCTestBuildHandler::RunMakeCommand(const char* command,
|
|||||||
errorwarning.Error = false;
|
errorwarning.Error = false;
|
||||||
this->ErrorsAndWarnings.push_back(errorwarning);
|
this->ErrorsAndWarnings.push_back(errorwarning);
|
||||||
this->TotalWarnings ++;
|
this->TotalWarnings ++;
|
||||||
|
return *retVal; // return the program return value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -734,11 +735,13 @@ int cmCTestBuildHandler::RunMakeCommand(const char* command,
|
|||||||
*retVal = cmsysProcess_GetExitException(cp);
|
*retVal = cmsysProcess_GetExitException(cp);
|
||||||
cmCTestLog(this->CTest, WARNING, "There was an exception: " << *retVal
|
cmCTestLog(this->CTest, WARNING, "There was an exception: " << *retVal
|
||||||
<< std::endl);
|
<< std::endl);
|
||||||
|
return *retVal;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(result == cmsysProcess_State_Expired)
|
else if(result == cmsysProcess_State_Expired)
|
||||||
{
|
{
|
||||||
cmCTestLog(this->CTest, WARNING, "There was a timeout" << std::endl);
|
cmCTestLog(this->CTest, WARNING, "There was a timeout" << std::endl);
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
else if(result == cmsysProcess_State_Error)
|
else if(result == cmsysProcess_State_Error)
|
||||||
{
|
{
|
||||||
@ -754,11 +757,12 @@ int cmCTestBuildHandler::RunMakeCommand(const char* command,
|
|||||||
this->TotalErrors ++;
|
this->TotalErrors ++;
|
||||||
cmCTestLog(this->CTest, ERROR_MESSAGE, "There was an error: "
|
cmCTestLog(this->CTest, ERROR_MESSAGE, "There was an error: "
|
||||||
<< cmsysProcess_GetErrorString(cp) << std::endl);
|
<< cmsysProcess_GetErrorString(cp) << std::endl);
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
cmsysProcess_Delete(cp);
|
cmsysProcess_Delete(cp);
|
||||||
|
|
||||||
return result;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//######################################################################
|
//######################################################################
|
||||||
|
@ -49,6 +49,8 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual void Initialize();
|
virtual void Initialize();
|
||||||
|
|
||||||
|
int GetTotalErrors() { return this->TotalErrors;}
|
||||||
|
int GetTotalWarnings() { return this->TotalWarnings;}
|
||||||
private:
|
private:
|
||||||
//! Run command specialized for make and configure. Returns process status
|
//! Run command specialized for make and configure. Returns process status
|
||||||
// and retVal is return value or exception.
|
// and retVal is return value or exception.
|
||||||
|
@ -213,7 +213,7 @@ bool cmProcess::IsRunning()
|
|||||||
cmsysProcess_WaitForExit(this->Process, 0);
|
cmsysProcess_WaitForExit(this->Process, 0);
|
||||||
this->ExitValue = cmsysProcess_GetExitValue(this->Process);
|
this->ExitValue = cmsysProcess_GetExitValue(this->Process);
|
||||||
this->TotalTime = cmSystemTools::GetTime() - this->StartTime;
|
this->TotalTime = cmSystemTools::GetTime() - this->StartTime;
|
||||||
// std::cerr << "Time to run: " << this->TotalTime << "\n";
|
std::cerr << "Time to run: " << this->TotalTime << "\n";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user