summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2009-02-12 13:00:22 -0500
committerBrad King <brad.king@kitware.com>2009-02-12 13:00:22 -0500
commit7435355ec8ca10d3d6ef07d975e1f0d9a60b681d (patch)
treec9474211de01f33a296ebea49eb27ab665d02629
parent4f369610f58c165fbf80ab75a93d45a1d9af6362 (diff)
downloadcmake-7435355ec8ca10d3d6ef07d975e1f0d9a60b681d.tar.gz
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.
-rw-r--r--Source/CTest/cmCTestBuildHandler.cxx13
-rw-r--r--Source/CTest/cmCTestLaunch.cxx39
-rw-r--r--Source/CTest/cmCTestLaunch.h4
3 files changed, 52 insertions, 4 deletions
diff --git a/Source/CTest/cmCTestBuildHandler.cxx b/Source/CTest/cmCTestBuildHandler.cxx
index a576960ae7..d85df86167 100644
--- a/Source/CTest/cmCTestBuildHandler.cxx
+++ b/Source/CTest/cmCTestBuildHandler.cxx
@@ -752,7 +752,7 @@ private:
cmCTestBuildHandler* Handler;
cmCTest* CTest;
- void WriteScrapeMatchers();
+ void WriteLauncherConfig();
void WriteScrapeMatchers(const char* purpose,
std::vector<std::string> const& matchers);
};
@@ -784,7 +784,7 @@ cmCTestBuildHandler::LaunchHelper::LaunchHelper(cmCTestBuildHandler* handler):
{
// Enable launcher fragments.
cmSystemTools::MakeDirectory(launchDir.c_str());
- this->WriteScrapeMatchers();
+ this->WriteLauncherConfig();
std::string launchEnv = "CTEST_LAUNCH_LOGS=";
launchEnv += launchDir;
cmSystemTools::PutEnv(launchEnv.c_str());
@@ -808,12 +808,19 @@ cmCTestBuildHandler::LaunchHelper::~LaunchHelper()
}
//----------------------------------------------------------------------------
-void cmCTestBuildHandler::LaunchHelper::WriteScrapeMatchers()
+void cmCTestBuildHandler::LaunchHelper::WriteLauncherConfig()
{
this->WriteScrapeMatchers("Warning",
this->Handler->ReallyCustomWarningMatches);
this->WriteScrapeMatchers("WarningSuppress",
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";
}
//----------------------------------------------------------------------------
diff --git a/Source/CTest/cmCTestLaunch.cxx b/Source/CTest/cmCTestLaunch.cxx
index e68f5243bb..1f99aaa4de 100644
--- a/Source/CTest/cmCTestLaunch.cxx
+++ b/Source/CTest/cmCTestLaunch.cxx
@@ -292,6 +292,7 @@ int cmCTestLaunch::Run()
return this->ExitCode;
}
+ this->LoadConfig();
this->WriteXML();
return this->ExitCode;
@@ -414,8 +415,21 @@ void cmCTestLaunch::WriteXMLAction(std::ostream& fxml)
// SourceFile
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>"
- << cmXMLSafe(this->OptionSource)
+ << cmXMLSafe(source)
<< "</SourceFile>\n";
}
@@ -678,3 +692,26 @@ int cmCTestLaunch::Main(int argc, const char* const argv[])
cmCTestLaunch self(argc, argv);
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);
+ }
+}
diff --git a/Source/CTest/cmCTestLaunch.h b/Source/CTest/cmCTestLaunch.h
index 14668708d0..9e92452269 100644
--- a/Source/CTest/cmCTestLaunch.h
+++ b/Source/CTest/cmCTestLaunch.h
@@ -100,6 +100,10 @@ private:
void WriteXMLResult(std::ostream& fxml);
void WriteXMLLabels(std::ostream& fxml);
void DumpFileToXML(std::ostream& fxml, std::string const& fname);
+
+ // Configuration
+ void LoadConfig();
+ std::string SourceDir;
};
#endif