summaryrefslogtreecommitdiffstats
path: root/Source/cmCTest.cxx
diff options
context:
space:
mode:
authorAndy Cedilnik <andy.cedilnik@kitware.com>2005-06-16 17:18:21 (GMT)
committerAndy Cedilnik <andy.cedilnik@kitware.com>2005-06-16 17:18:21 (GMT)
commit2cc5ed49d17e5a26308d3af288767e7ef405903b (patch)
treea918403b8c04e6058785876c71e8b79cffd36948 /Source/cmCTest.cxx
parentb156314ab3cedc7fa1c8198a320be4a05dd6ff8d (diff)
downloadCMake-2cc5ed49d17e5a26308d3af288767e7ef405903b.zip
CMake-2cc5ed49d17e5a26308d3af288767e7ef405903b.tar.gz
CMake-2cc5ed49d17e5a26308d3af288767e7ef405903b.tar.bz2
ENH: Several improvements to CTest:
1. Support for showing line numbers when debugging ctest --show-line-numbers 2. Modify the ctest initialization code, so that it can be delayed 3. Handlers now have corresponding command if they were invoked from the command (so far only update actually use that) 4. Start command is simplified and the functionality is moved to CTest 5. Update can perform initial checkout if CTEST_CHECKOUT_COMMAND is set 6. Add test that checks out kwsys and perform tests on the fresh checkout
Diffstat (limited to 'Source/cmCTest.cxx')
-rw-r--r--Source/cmCTest.cxx103
1 files changed, 97 insertions, 6 deletions
diff --git a/Source/cmCTest.cxx b/Source/cmCTest.cxx
index fe06804..f93091a 100644
--- a/Source/cmCTest.cxx
+++ b/Source/cmCTest.cxx
@@ -25,6 +25,7 @@
#include "cmGlob.h"
#include "cmDynamicLoader.h"
#include "cmGeneratedFileStream.h"
+#include "cmCTestCommand.h"
#include "cmCTestBuildHandler.h"
#include "cmCTestBuildAndTestHandler.h"
@@ -213,6 +214,7 @@ cmCTest::cmCTest()
m_TomorrowTag = false;
m_Verbose = false;
m_Debug = false;
+ m_ShowLineNumbers = false;
m_Quiet = false;
m_ExtraVerbose = false;
m_ProduceXML = false;
@@ -264,7 +266,7 @@ cmCTest::~cmCTest()
}
//----------------------------------------------------------------------
-int cmCTest::Initialize(const char* binary_dir, bool new_tag)
+int cmCTest::Initialize(const char* binary_dir, bool new_tag, bool verbose_tag)
{
if(!m_InteractiveDebugMode)
{
@@ -273,11 +275,25 @@ int cmCTest::Initialize(const char* binary_dir, bool new_tag)
m_BinaryDir = binary_dir;
cmSystemTools::ConvertToUnixSlashes(m_BinaryDir);
+
+ this->UpdateCTestConfiguration();
+
+ if ( m_ProduceXML )
+ {
+ cmCTestLog(this, DEBUG, "Produce XML is on" << std::endl);
+ if ( this->GetCTestConfiguration("NightlyStartTime").empty() )
+ {
+ cmCTestLog(this, DEBUG, "No nightly start time" << std::endl);
+ return 0;
+ }
+ }
+
if ( !this->ReadCustomConfigurationFileTree(m_BinaryDir.c_str()) )
{
+ cmCTestLog(this, DEBUG, "Cannot find custom configuration file tree" << std::endl);
return 0;
}
- this->UpdateCTestConfiguration();
+
if ( m_ProduceXML )
{
std::string testingDir = m_BinaryDir + "/Testing";
@@ -356,8 +372,11 @@ int cmCTest::Initialize(const char* binary_dir, bool new_tag)
ofs << this->GetTestModelString() << std::endl;
}
ofs.close();
- cmCTestLog(this, OUTPUT, "Create new tag: " << tag << " - "
- << this->GetTestModelString() << std::endl);
+ if ( verbose_tag )
+ {
+ cmCTestLog(this, OUTPUT, "Create new tag: " << tag << " - "
+ << this->GetTestModelString() << std::endl);
+ }
}
m_CurrentTag = tag;
}
@@ -365,6 +384,61 @@ int cmCTest::Initialize(const char* binary_dir, bool new_tag)
}
//----------------------------------------------------------------------
+bool cmCTest::InitializeFromCommand(cmCTestCommand* command, bool first)
+{
+ if ( !first && !m_CurrentTag.empty() )
+ {
+ return true;
+ }
+
+ const char* src_dir = this->GetCTestConfiguration("SourceDirectory").c_str();
+ const char* bld_dir = this->GetCTestConfiguration("BuildDirectory").c_str();
+
+ cmMakefile* mf = command->GetMakefile();
+ std::string fname = src_dir;
+ fname += "/CTestConfig.cmake";
+ cmSystemTools::ConvertToUnixSlashes(fname);
+ if ( cmSystemTools::FileExists(fname.c_str()) )
+ {
+ cmCTestLog(this, OUTPUT, " Reading ctest configuration file: " << fname.c_str() << std::endl);
+ bool readit = mf->ReadListFile(mf->GetCurrentListFile(),
+ fname.c_str() );
+ if(!readit)
+ {
+ std::string m = "Could not find include file: ";
+ m += fname;
+ command->SetError(m.c_str());
+ return false;
+ }
+ }
+ else if ( !first )
+ {
+ cmCTestLog(this, WARNING, "Cannot locate CTest configuration: " << fname.c_str() << std::endl);
+ }
+ else
+ {
+ cmCTestLog(this, HANDLER_OUTPUT, " Cannot locate CTest configuration: " << fname.c_str() << std::endl
+ << " Delay the initialization of CTest" << std::endl);
+ }
+
+ this->SetCTestConfigurationFromCMakeVariable(mf, "NightlyStartTime", "CTEST_NIGHTLY_START_TIME");
+ this->SetCTestConfigurationFromCMakeVariable(mf, "Site", "CTEST_SITE");
+ this->SetCTestConfigurationFromCMakeVariable(mf, "BuildName", "CTEST_BUILD_NAME");
+
+ if ( !this->Initialize(bld_dir, true, false) )
+ {
+ if ( this->GetCTestConfiguration("NightlyStartTime").empty() && first)
+ {
+ return true;
+ }
+ return false;
+ }
+ cmCTestLog(this, OUTPUT, " Use " << this->GetTestModelString() << " tag: " << this->GetCurrentTag() << std::endl);
+ return true;
+}
+
+
+//----------------------------------------------------------------------
bool cmCTest::UpdateCTestConfiguration()
{
if ( m_SuppressUpdatingCTestConfiguration )
@@ -1101,6 +1175,10 @@ int cmCTest::Run(std::vector<std::string>const& args, std::string* output)
{
this->m_Debug = true;
}
+ if( arg.find("--show-line-numbers",0) == 0 )
+ {
+ this->m_ShowLineNumbers = true;
+ }
if( arg.find("-Q",0) == 0 || arg.find("--quiet",0) == 0 )
{
this->m_Quiet = true;
@@ -1842,7 +1920,7 @@ bool cmCTest::RunCommand(
default:
done = true;
}
- if(m_ExtraVerbose)
+ if ( (res == cmsysProcess_Pipe_STDOUT || res == cmsysProcess_Pipe_STDERR) && m_ExtraVerbose )
{
cmSystemTools::Stdout(data, length);
}
@@ -1927,7 +2005,13 @@ static const char* cmCTestStringLogType[] =
# undef cout
#endif
-void cmCTest::Log(int logType, const char* msg)
+#define cmCTestLogOutputFileLine(stream) \
+ if ( m_ShowLineNumbers ) \
+ { \
+ (stream) << std::endl << file << ":" << line << " "; \
+ }
+
+void cmCTest::Log(int logType, const char* file, int line, const char* msg)
{
if ( !msg || !*msg )
{
@@ -1940,6 +2024,7 @@ void cmCTest::Log(int logType, const char* msg)
if ( logType == cmCTest::HANDLER_VERBOSE_OUTPUT && !m_Debug && !m_ExtraVerbose ) { display = false; }
if ( display )
{
+ cmCTestLogOutputFileLine(*m_OutputLogFile);
if ( logType != m_OutputLogFileLastTag )
{
*m_OutputLogFile << "[";
@@ -1968,6 +2053,7 @@ void cmCTest::Log(int logType, const char* msg)
case DEBUG:
if ( m_Debug )
{
+ cmCTestLogOutputFileLine(std::cout);
std::cout << msg;
std::cout.flush();
}
@@ -1975,6 +2061,7 @@ void cmCTest::Log(int logType, const char* msg)
case OUTPUT: case HANDLER_OUTPUT:
if ( m_Debug || m_Verbose )
{
+ cmCTestLogOutputFileLine(std::cout);
std::cout << msg;
std::cout.flush();
}
@@ -1982,19 +2069,23 @@ void cmCTest::Log(int logType, const char* msg)
case HANDLER_VERBOSE_OUTPUT:
if ( m_Debug || m_ExtraVerbose )
{
+ cmCTestLogOutputFileLine(std::cout);
std::cout << msg;
std::cout.flush();
}
break;
case WARNING:
+ cmCTestLogOutputFileLine(std::cerr);
std::cerr << msg;
std::cerr.flush();
break;
case ERROR_MESSAGE:
+ cmCTestLogOutputFileLine(std::cerr);
std::cerr << msg;
std::cerr.flush();
break;
default:
+ cmCTestLogOutputFileLine(std::cout);
std::cout << msg;
std::cout.flush();
}