summaryrefslogtreecommitdiffstats
path: root/Source/cmake.cxx
diff options
context:
space:
mode:
authorIgor Ivanov <artalus-mail@yandex.ru>2019-08-10 08:41:53 (GMT)
committerIgor Ivanov <artalus-mail@yandex.ru>2019-08-10 08:41:53 (GMT)
commit3c94069660112f841df3bae66891e05bfc7bad00 (patch)
treed173ed0adfdfddb1cf4da0f2230960b0165a8b7c /Source/cmake.cxx
parent2327cc0e0575175e8dec4b7a6fa6cafd5d0f7ca9 (diff)
downloadCMake-3c94069660112f841df3bae66891e05bfc7bad00.zip
CMake-3c94069660112f841df3bae66891e05bfc7bad00.tar.gz
CMake-3c94069660112f841df3bae66891e05bfc7bad00.tar.bz2
Add --trace-redirect parameter to redirect trace output to a file
Diffstat (limited to 'Source/cmake.cxx')
-rw-r--r--Source/cmake.cxx20
1 files changed, 20 insertions, 0 deletions
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index a81b7e4..98dfd21 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -140,6 +140,7 @@ cmake::cmake(Role role, cmState::Mode mode)
, State(cm::make_unique<cmState>())
, Messenger(cm::make_unique<cmMessenger>())
{
+ this->TraceFile.close();
this->State->SetMode(mode);
this->CurrentSnapshot = this->State->CreateBaseSnapshot();
@@ -740,6 +741,11 @@ void cmake::SetArgs(const std::vector<std::string>& args)
cmSystemTools::ConvertToUnixSlashes(file);
this->AddTraceSource(file);
this->SetTrace(true);
+ } else if (arg.find("--trace-redirect=", 0) == 0) {
+ std::string file = arg.substr(strlen("--trace-redirect="));
+ cmSystemTools::ConvertToUnixSlashes(file);
+ this->SetTraceFile(file);
+ this->SetTrace(true);
} else if (arg.find("--trace", 0) == 0) {
std::cout << "Running with trace output on.\n";
this->SetTrace(true);
@@ -870,6 +876,20 @@ cmake::LogLevel cmake::StringToLogLevel(const std::string& levelStr)
return (it != levels.cend()) ? it->second : LogLevel::LOG_UNDEFINED;
}
+void cmake::SetTraceFile(const std::string& file)
+{
+ this->TraceFile.close();
+ this->TraceFile.open(file.c_str());
+ if (!this->TraceFile) {
+ std::stringstream ss;
+ ss << "Error opening trace file " << file << ": "
+ << cmSystemTools::GetLastSystemError();
+ cmSystemTools::Error(ss.str());
+ return;
+ }
+ std::cout << "Trace will be written to " << file << "\n";
+}
+
void cmake::SetDirectoriesFromFile(const std::string& arg)
{
// Check if the argument refers to a CMakeCache.txt or