mirror of
https://github.com/Kitware/CMake.git
synced 2026-04-24 15:18:26 -05:00
cmFunctionCommand: Introduce CMAKE_CURRENT_FUNCTION* variables
`CMAKE_CURRENT_FUNCTION` Can be used for diagnostic or debugging messages like the `__PRETTY_FUNCTION__` macro of GCC. `CMAKE_CURRENT_FUNCTION_LIST_DIR` Eliminates the necessity of the additional "global" variables inside a module used to access additional "resource" files from functions defined in the module. ...
This commit is contained in:
@@ -18,11 +18,19 @@
|
||||
#include "cmRange.h"
|
||||
#include "cmState.h"
|
||||
#include "cmStringAlgorithms.h"
|
||||
#include "cmSystemTools.h"
|
||||
|
||||
namespace {
|
||||
std::string const ARGC = "ARGC";
|
||||
std::string const ARGN = "ARGN";
|
||||
std::string const ARGV = "ARGV";
|
||||
std::string const CMAKE_CURRENT_FUNCTION = "CMAKE_CURRENT_FUNCTION";
|
||||
std::string const CMAKE_CURRENT_FUNCTION_LIST_FILE =
|
||||
"CMAKE_CURRENT_FUNCTION_LIST_FILE";
|
||||
std::string const CMAKE_CURRENT_FUNCTION_LIST_DIR =
|
||||
"CMAKE_CURRENT_FUNCTION_LIST_DIR";
|
||||
std::string const CMAKE_CURRENT_FUNCTION_LIST_LINE =
|
||||
"CMAKE_CURRENT_FUNCTION_LIST_LINE";
|
||||
|
||||
// define the class for function commands
|
||||
class cmFunctionHelperCommand
|
||||
@@ -39,6 +47,7 @@ public:
|
||||
std::vector<cmListFileFunction> Functions;
|
||||
cmPolicies::PolicyMap Policies;
|
||||
std::string FilePath;
|
||||
long Line;
|
||||
};
|
||||
|
||||
bool cmFunctionHelperCommand::operator()(
|
||||
@@ -89,6 +98,17 @@ bool cmFunctionHelperCommand::operator()(
|
||||
makefile.AddDefinition(ARGN, argnDef);
|
||||
makefile.MarkVariableAsUsed(ARGN);
|
||||
|
||||
makefile.AddDefinition(CMAKE_CURRENT_FUNCTION, this->Args.front());
|
||||
makefile.MarkVariableAsUsed(CMAKE_CURRENT_FUNCTION);
|
||||
makefile.AddDefinition(CMAKE_CURRENT_FUNCTION_LIST_FILE, this->FilePath);
|
||||
makefile.MarkVariableAsUsed(CMAKE_CURRENT_FUNCTION_LIST_FILE);
|
||||
makefile.AddDefinition(CMAKE_CURRENT_FUNCTION_LIST_DIR,
|
||||
cmSystemTools::GetFilenamePath(this->FilePath));
|
||||
makefile.MarkVariableAsUsed(CMAKE_CURRENT_FUNCTION_LIST_DIR);
|
||||
makefile.AddDefinition(CMAKE_CURRENT_FUNCTION_LIST_LINE,
|
||||
std::to_string(this->Line));
|
||||
makefile.MarkVariableAsUsed(CMAKE_CURRENT_FUNCTION_LIST_LINE);
|
||||
|
||||
// Invoke all the functions that were collected in the block.
|
||||
// for each function
|
||||
for (cmListFileFunction const& func : this->Functions) {
|
||||
@@ -143,6 +163,7 @@ bool cmFunctionFunctionBlocker::Replay(
|
||||
f.Args = this->Args;
|
||||
f.Functions = std::move(functions);
|
||||
f.FilePath = this->GetStartingContext().FilePath;
|
||||
f.Line = this->GetStartingContext().Line;
|
||||
mf.RecordPolicies(f.Policies);
|
||||
mf.GetState()->AddScriptedCommand(this->Args.front(), std::move(f));
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user