cmake: add --trace-expand option

The --trace option is helpful, but sometimes, what you're looking for is
deep under many layers of function calls and figuring out what instance
of the function call you're looking at is tedious to determine (usually
involving patching and message()). Instead, add a --trace-expand option
to trace while expanding commands into what CMake actually sees.
This commit is contained in:
Ben Boeckel 2015-07-21 17:18:53 -04:00
parent 265b9db7c2
commit 594bafe527
10 changed files with 46 additions and 7 deletions

View File

@ -113,14 +113,18 @@ Options
``--debug-output``
Put cmake in a debug mode.
Print extra stuff during the cmake run like stack traces with
Print extra information during the cmake run like stack traces with
message(send_error ) calls.
``--trace``
Put cmake in trace mode.
Print a trace of all calls made and from where with
message(send_error ) calls.
Print a trace of all calls made and from where.
``--trace-expand``
Put cmake in trace mode.
Like ``--trace``, but with variables expanded.
``--warn-uninitialized``
Warn about uninitialized values.

View File

@ -0,0 +1,5 @@
trace-expand
------------
* Add ``--trace-expand`` argument to CMake. Acts like ``--trace``, but expands
variable references in the output.

View File

@ -17,5 +17,5 @@ warn by default:
This variable should not be set by a project in CMake code. Project
developers running CMake may set this variable in their cache to
enable the warning (e.g. ``-DCMAKE_POLICY_WARNING_CMP<NNNN>=ON``).
Alternatively, running :manual:`cmake(1)` with the ``--debug-output``
or ``--trace`` option will also enable the warning.
Alternatively, running :manual:`cmake(1)` with the ``--debug-output``,
``--trace``, or ``--trace-expand`` option will also enable the warning.

View File

@ -307,10 +307,21 @@ void cmMakefile::PrintCommandTrace(const cmListFileFunction& lff) const
std::ostringstream msg;
msg << this->GetExecutionFilePath() << "(" << lff.Line << "): ";
msg << lff.Name << "(";
bool expand = this->GetCMakeInstance()->GetTraceExpand();
std::string temp;
for(std::vector<cmListFileArgument>::const_iterator i =
lff.Arguments.begin(); i != lff.Arguments.end(); ++i)
{
msg << i->Value;
if (expand)
{
temp = i->Value;
this->ExpandVariablesInString(temp);
msg << temp;
}
else
{
msg << i->Value;
}
msg << " ";
}
msg << ")";
@ -4802,7 +4813,8 @@ bool cmMakefile::PolicyOptionalWarningEnabled(std::string const& var)
return cmSystemTools::IsOn(val);
}
}
// Enable optional policy warnings with --debug-output or --trace.
// Enable optional policy warnings with --debug-output, --trace,
// or --trace-expand.
cmake* cm = this->GetCMakeInstance();
return cm->GetDebugOutput() || cm->GetTrace();
}

View File

@ -121,6 +121,7 @@ void cmWarnUnusedCliWarning(const std::string& variable,
cmake::cmake()
{
this->Trace = false;
this->TraceExpand = false;
this->WarnUninitialized = false;
this->WarnUnused = false;
this->WarnUnusedCli = true;
@ -617,10 +618,17 @@ void cmake::SetArgs(const std::vector<std::string>& args,
std::cout << "Running with debug output on.\n";
this->SetDebugOutputOn(true);
}
else if(arg.find("--trace-expand",0) == 0)
{
std::cout << "Running with expanded trace output on.\n";
this->SetTrace(true);
this->SetTraceExpand(true);
}
else if(arg.find("--trace",0) == 0)
{
std::cout << "Running with trace output on.\n";
this->SetTrace(true);
this->SetTraceExpand(false);
}
else if(arg.find("--warn-uninitialized",0) == 0)
{

View File

@ -270,6 +270,8 @@ class cmake
// Do we want trace output during the cmake run.
bool GetTrace() { return this->Trace;}
void SetTrace(bool b) { this->Trace = b;}
bool GetTraceExpand() { return this->TraceExpand;}
void SetTraceExpand(bool b) { this->TraceExpand = b;}
bool GetWarnUninitialized() { return this->WarnUninitialized;}
void SetWarnUninitialized(bool b) { this->WarnUninitialized = b;}
bool GetWarnUnused() { return this->WarnUnused;}
@ -378,6 +380,7 @@ private:
WorkingMode CurrentWorkingMode;
bool DebugOutput;
bool Trace;
bool TraceExpand;
bool WarnUninitialized;
bool WarnUnused;
bool WarnUnusedCli;

View File

@ -83,6 +83,7 @@ static const char * cmDocumentationOptions[][2] =
"useful on one try_compile at a time."},
{"--debug-output", "Put cmake in a debug mode."},
{"--trace", "Put cmake in trace mode."},
{"--trace-expand", "Put cmake in trace mode with variable expansion."},
{"--warn-uninitialized", "Warn about uninitialized values."},
{"--warn-unused-vars", "Warn about unused variables."},
{"--no-warn-unused-cli", "Don't warn about command line options."},

View File

@ -140,6 +140,10 @@ set(RunCMake_TEST_OPTIONS --trace)
run_cmake(trace)
unset(RunCMake_TEST_OPTIONS)
set(RunCMake_TEST_OPTIONS --trace-expand)
run_cmake(trace-expand)
unset(RunCMake_TEST_OPTIONS)
set(RunCMake_TEST_OPTIONS --debug-trycompile)
run_cmake(debug-trycompile)
unset(RunCMake_TEST_OPTIONS)

View File

@ -0,0 +1,2 @@
^.*/Tests/RunCMake/CommandLine/CMakeLists.txt\(1\): cmake_minimum_required\(VERSION 3.0 \)
.*/Tests/RunCMake/CommandLine/CMakeLists.txt\(2\): project\(trace-expand NONE \)