ENH: Report file names relative to source dir

This teaches cmCTestLaunch to report source files that lie under the top
source directory relative to the top.
This commit is contained in:
Brad King 2009-02-12 13:00:22 -05:00
parent 4f369610f5
commit 7435355ec8
3 changed files with 52 additions and 4 deletions

View File

@ -752,7 +752,7 @@ private:
cmCTestBuildHandler* Handler; cmCTestBuildHandler* Handler;
cmCTest* CTest; cmCTest* CTest;
void WriteScrapeMatchers(); void WriteLauncherConfig();
void WriteScrapeMatchers(const char* purpose, void WriteScrapeMatchers(const char* purpose,
std::vector<std::string> const& matchers); std::vector<std::string> const& matchers);
}; };
@ -784,7 +784,7 @@ cmCTestBuildHandler::LaunchHelper::LaunchHelper(cmCTestBuildHandler* handler):
{ {
// Enable launcher fragments. // Enable launcher fragments.
cmSystemTools::MakeDirectory(launchDir.c_str()); cmSystemTools::MakeDirectory(launchDir.c_str());
this->WriteScrapeMatchers(); this->WriteLauncherConfig();
std::string launchEnv = "CTEST_LAUNCH_LOGS="; std::string launchEnv = "CTEST_LAUNCH_LOGS=";
launchEnv += launchDir; launchEnv += launchDir;
cmSystemTools::PutEnv(launchEnv.c_str()); cmSystemTools::PutEnv(launchEnv.c_str());
@ -808,12 +808,19 @@ cmCTestBuildHandler::LaunchHelper::~LaunchHelper()
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmCTestBuildHandler::LaunchHelper::WriteScrapeMatchers() void cmCTestBuildHandler::LaunchHelper::WriteLauncherConfig()
{ {
this->WriteScrapeMatchers("Warning", this->WriteScrapeMatchers("Warning",
this->Handler->ReallyCustomWarningMatches); this->Handler->ReallyCustomWarningMatches);
this->WriteScrapeMatchers("WarningSuppress", this->WriteScrapeMatchers("WarningSuppress",
this->Handler->ReallyCustomWarningExceptions); this->Handler->ReallyCustomWarningExceptions);
// Give some testing configuration information to the launcher.
std::string fname = this->Handler->CTestLaunchDir;
fname += "/CTestLaunchConfig.cmake";
cmGeneratedFileStream fout(fname.c_str());
std::string srcdir = this->CTest->GetCTestConfiguration("SourceDirectory");
fout << "set(CTEST_SOURCE_DIRECTORY \"" << srcdir << "\")\n";
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------

View File

@ -292,6 +292,7 @@ int cmCTestLaunch::Run()
return this->ExitCode; return this->ExitCode;
} }
this->LoadConfig();
this->WriteXML(); this->WriteXML();
return this->ExitCode; return this->ExitCode;
@ -414,8 +415,21 @@ void cmCTestLaunch::WriteXMLAction(std::ostream& fxml)
// SourceFile // SourceFile
if(!this->OptionSource.empty()) if(!this->OptionSource.empty())
{ {
std::string source = this->OptionSource;
cmSystemTools::ConvertToUnixSlashes(source);
// If file is in source tree use its relative location.
if(cmSystemTools::FileIsFullPath(this->SourceDir.c_str()) &&
cmSystemTools::FileIsFullPath(source.c_str()) &&
cmSystemTools::IsSubDirectory(source.c_str(),
this->SourceDir.c_str()))
{
source = cmSystemTools::RelativePath(this->SourceDir.c_str(),
source.c_str());
}
fxml << "\t\t\t<SourceFile>" fxml << "\t\t\t<SourceFile>"
<< cmXMLSafe(this->OptionSource) << cmXMLSafe(source)
<< "</SourceFile>\n"; << "</SourceFile>\n";
} }
@ -678,3 +692,26 @@ int cmCTestLaunch::Main(int argc, const char* const argv[])
cmCTestLaunch self(argc, argv); cmCTestLaunch self(argc, argv);
return self.Run(); return self.Run();
} }
//----------------------------------------------------------------------------
#include "cmGlobalGenerator.h"
#include "cmLocalGenerator.h"
#include "cmMakefile.h"
#include "cmake.h"
#include <cmsys/auto_ptr.hxx>
void cmCTestLaunch::LoadConfig()
{
cmake cm;
cmGlobalGenerator gg;
gg.SetCMakeInstance(&cm);
cmsys::auto_ptr<cmLocalGenerator> lg(gg.CreateLocalGenerator());
cmMakefile* mf = lg->GetMakefile();
std::string fname = this->LogDir;
fname += "CTestLaunchConfig.cmake";
if(cmSystemTools::FileExists(fname.c_str()) &&
mf->ReadListFile(0, fname.c_str()))
{
this->SourceDir = mf->GetSafeDefinition("CTEST_SOURCE_DIRECTORY");
cmSystemTools::ConvertToUnixSlashes(this->SourceDir);
}
}

View File

@ -100,6 +100,10 @@ private:
void WriteXMLResult(std::ostream& fxml); void WriteXMLResult(std::ostream& fxml);
void WriteXMLLabels(std::ostream& fxml); void WriteXMLLabels(std::ostream& fxml);
void DumpFileToXML(std::ostream& fxml, std::string const& fname); void DumpFileToXML(std::ostream& fxml, std::string const& fname);
// Configuration
void LoadConfig();
std::string SourceDir;
}; };
#endif #endif