Merge topic 'clean-up-cmListFileArgument'
782657db cmListFileArgument: Remove FilePath member. a863c59f cmMakefile: Use GetExecutionFileStack method. 076760a6 cmMakefile: Add filename context to ExpandArguments. 569f4785 cmFunctionCommand: Store the FilePath when creating the prototype. f971ab04 cmMacroCommand: Store the FilePath when creating the prototype.
This commit is contained in:
commit
c7180e822b
@ -426,8 +426,7 @@ int CCONV cmExecuteCommand(void *arg, const char *name,
|
|||||||
{
|
{
|
||||||
// Assume all arguments are quoted.
|
// Assume all arguments are quoted.
|
||||||
lff.Arguments.push_back(
|
lff.Arguments.push_back(
|
||||||
cmListFileArgument(args[i], cmListFileArgument::Quoted,
|
cmListFileArgument(args[i], cmListFileArgument::Quoted, 0));
|
||||||
"[CMake-Plugin]", 0));
|
|
||||||
}
|
}
|
||||||
cmExecutionStatus status;
|
cmExecutionStatus status;
|
||||||
return mf->ExecuteCommand(lff,status);
|
return mf->ExecuteCommand(lff,status);
|
||||||
|
@ -43,6 +43,7 @@ public:
|
|||||||
newC->Args = this->Args;
|
newC->Args = this->Args;
|
||||||
newC->Functions = this->Functions;
|
newC->Functions = this->Functions;
|
||||||
newC->Policies = this->Policies;
|
newC->Policies = this->Policies;
|
||||||
|
newC->FilePath = this->FilePath;
|
||||||
return newC;
|
return newC;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,6 +72,7 @@ public:
|
|||||||
std::vector<std::string> Args;
|
std::vector<std::string> Args;
|
||||||
std::vector<cmListFileFunction> Functions;
|
std::vector<cmListFileFunction> Functions;
|
||||||
cmPolicies::PolicyMap Policies;
|
cmPolicies::PolicyMap Policies;
|
||||||
|
std::string FilePath;
|
||||||
};
|
};
|
||||||
|
|
||||||
bool cmFunctionHelperCommand::InvokeInitialPass
|
bool cmFunctionHelperCommand::InvokeInitialPass
|
||||||
@ -171,19 +173,9 @@ IsFunctionBlocked(const cmListFileFunction& lff, cmMakefile &mf,
|
|||||||
cmFunctionHelperCommand *f = new cmFunctionHelperCommand();
|
cmFunctionHelperCommand *f = new cmFunctionHelperCommand();
|
||||||
f->Args = this->Args;
|
f->Args = this->Args;
|
||||||
f->Functions = this->Functions;
|
f->Functions = this->Functions;
|
||||||
|
f->FilePath = this->GetStartingContext().FilePath;
|
||||||
mf.RecordPolicies(f->Policies);
|
mf.RecordPolicies(f->Policies);
|
||||||
|
|
||||||
// Set the FilePath on the arguments to match the function since it is
|
|
||||||
// not stored and the original values may be freed
|
|
||||||
for (unsigned int i = 0; i < f->Functions.size(); ++i)
|
|
||||||
{
|
|
||||||
for (unsigned int j = 0; j < f->Functions[i].Arguments.size(); ++j)
|
|
||||||
{
|
|
||||||
f->Functions[i].Arguments[j].FilePath =
|
|
||||||
f->Functions[i].FilePath.c_str();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string newName = "_" + this->Args[0];
|
std::string newName = "_" + this->Args[0];
|
||||||
mf.GetState()->RenameCommand(this->Args[0], newName);
|
mf.GetState()->RenameCommand(this->Args[0], newName);
|
||||||
mf.GetState()->AddCommand(f);
|
mf.GetState()->AddCommand(f);
|
||||||
@ -212,7 +204,8 @@ ShouldRemove(const cmListFileFunction& lff, cmMakefile &mf)
|
|||||||
if(!cmSystemTools::Strucmp(lff.Name.c_str(),"endfunction"))
|
if(!cmSystemTools::Strucmp(lff.Name.c_str(),"endfunction"))
|
||||||
{
|
{
|
||||||
std::vector<std::string> expandedArguments;
|
std::vector<std::string> expandedArguments;
|
||||||
mf.ExpandArguments(lff.Arguments, expandedArguments);
|
mf.ExpandArguments(lff.Arguments, expandedArguments,
|
||||||
|
this->GetStartingContext().FilePath.c_str());
|
||||||
// if the endfunction has arguments then make sure
|
// if the endfunction has arguments then make sure
|
||||||
// they match the ones in the opening function command
|
// they match the ones in the opening function command
|
||||||
if ((expandedArguments.empty() ||
|
if ((expandedArguments.empty() ||
|
||||||
|
@ -234,8 +234,7 @@ bool cmListFile::ParseFile(const char* filename,
|
|||||||
{
|
{
|
||||||
cmListFileFunction project;
|
cmListFileFunction project;
|
||||||
project.Name = "PROJECT";
|
project.Name = "PROJECT";
|
||||||
cmListFileArgument prj("Project", cmListFileArgument::Unquoted,
|
cmListFileArgument prj("Project", cmListFileArgument::Unquoted, 0);
|
||||||
filename, 0);
|
|
||||||
project.Arguments.push_back(prj);
|
project.Arguments.push_back(prj);
|
||||||
this->Functions.insert(this->Functions.begin(),project);
|
this->Functions.insert(this->Functions.begin(),project);
|
||||||
}
|
}
|
||||||
@ -375,7 +374,7 @@ bool cmListFileParser::ParseFunction(const char* name, long line)
|
|||||||
bool cmListFileParser::AddArgument(cmListFileLexer_Token* token,
|
bool cmListFileParser::AddArgument(cmListFileLexer_Token* token,
|
||||||
cmListFileArgument::Delimiter delim)
|
cmListFileArgument::Delimiter delim)
|
||||||
{
|
{
|
||||||
cmListFileArgument a(token->text, delim, this->FileName, token->line);
|
cmListFileArgument a(token->text, delim, token->line);
|
||||||
this->Function.Arguments.push_back(a);
|
this->Function.Arguments.push_back(a);
|
||||||
if(this->Separation == SeparationOkay)
|
if(this->Separation == SeparationOkay)
|
||||||
{
|
{
|
||||||
|
@ -33,12 +33,11 @@ struct cmListFileArgument
|
|||||||
Quoted,
|
Quoted,
|
||||||
Bracket
|
Bracket
|
||||||
};
|
};
|
||||||
cmListFileArgument(): Value(), Delim(Unquoted), FilePath(0), Line(0) {}
|
cmListFileArgument(): Value(), Delim(Unquoted), Line(0) {}
|
||||||
cmListFileArgument(const cmListFileArgument& r):
|
cmListFileArgument(const cmListFileArgument& r)
|
||||||
Value(r.Value), Delim(r.Delim), FilePath(r.FilePath), Line(r.Line) {}
|
: Value(r.Value), Delim(r.Delim), Line(r.Line) {}
|
||||||
cmListFileArgument(const std::string& v, Delimiter d, const char* file,
|
cmListFileArgument(const std::string& v, Delimiter d, long line)
|
||||||
long line): Value(v), Delim(d),
|
: Value(v), Delim(d), Line(line) {}
|
||||||
FilePath(file), Line(line) {}
|
|
||||||
bool operator == (const cmListFileArgument& r) const
|
bool operator == (const cmListFileArgument& r) const
|
||||||
{
|
{
|
||||||
return (this->Value == r.Value) && (this->Delim == r.Delim);
|
return (this->Value == r.Value) && (this->Delim == r.Delim);
|
||||||
@ -49,7 +48,6 @@ struct cmListFileArgument
|
|||||||
}
|
}
|
||||||
std::string Value;
|
std::string Value;
|
||||||
Delimiter Delim;
|
Delimiter Delim;
|
||||||
const char* FilePath;
|
|
||||||
long Line;
|
long Line;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -122,10 +122,6 @@ bool cmMacroHelperCommand::InvokeInitialPass
|
|||||||
sprintf(argvName,"${ARGV%i}",j);
|
sprintf(argvName,"${ARGV%i}",j);
|
||||||
argVs.push_back(argvName);
|
argVs.push_back(argvName);
|
||||||
}
|
}
|
||||||
if(!this->Functions.empty())
|
|
||||||
{
|
|
||||||
this->FilePath = this->Functions[0].FilePath;
|
|
||||||
}
|
|
||||||
// Invoke all the functions that were collected in the block.
|
// Invoke all the functions that were collected in the block.
|
||||||
cmListFileFunction newLFF;
|
cmListFileFunction newLFF;
|
||||||
// for each function
|
// for each function
|
||||||
@ -143,10 +139,6 @@ bool cmMacroHelperCommand::InvokeInitialPass
|
|||||||
this->Functions[c].Arguments.begin();
|
this->Functions[c].Arguments.begin();
|
||||||
k != this->Functions[c].Arguments.end(); ++k)
|
k != this->Functions[c].Arguments.end(); ++k)
|
||||||
{
|
{
|
||||||
// Set the FilePath on the arguments to match the function since it is
|
|
||||||
// not stored and the original values may be freed
|
|
||||||
k->FilePath = this->FilePath.c_str();
|
|
||||||
|
|
||||||
cmListFileArgument arg;
|
cmListFileArgument arg;
|
||||||
arg.Value = k->Value;
|
arg.Value = k->Value;
|
||||||
if(k->Delim != cmListFileArgument::Bracket)
|
if(k->Delim != cmListFileArgument::Bracket)
|
||||||
@ -177,7 +169,6 @@ bool cmMacroHelperCommand::InvokeInitialPass
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
arg.Delim = k->Delim;
|
arg.Delim = k->Delim;
|
||||||
arg.FilePath = k->FilePath;
|
|
||||||
arg.Line = k->Line;
|
arg.Line = k->Line;
|
||||||
newLFF.Arguments.push_back(arg);
|
newLFF.Arguments.push_back(arg);
|
||||||
}
|
}
|
||||||
@ -225,6 +216,7 @@ IsFunctionBlocked(const cmListFileFunction& lff, cmMakefile &mf,
|
|||||||
cmMacroHelperCommand *f = new cmMacroHelperCommand();
|
cmMacroHelperCommand *f = new cmMacroHelperCommand();
|
||||||
f->Args = this->Args;
|
f->Args = this->Args;
|
||||||
f->Functions = this->Functions;
|
f->Functions = this->Functions;
|
||||||
|
f->FilePath = this->GetStartingContext().FilePath;
|
||||||
mf.RecordPolicies(f->Policies);
|
mf.RecordPolicies(f->Policies);
|
||||||
std::string newName = "_" + this->Args[0];
|
std::string newName = "_" + this->Args[0];
|
||||||
mf.GetState()->RenameCommand(this->Args[0], newName);
|
mf.GetState()->RenameCommand(this->Args[0], newName);
|
||||||
@ -254,7 +246,8 @@ ShouldRemove(const cmListFileFunction& lff, cmMakefile &mf)
|
|||||||
if(!cmSystemTools::Strucmp(lff.Name.c_str(),"endmacro"))
|
if(!cmSystemTools::Strucmp(lff.Name.c_str(),"endmacro"))
|
||||||
{
|
{
|
||||||
std::vector<std::string> expandedArguments;
|
std::vector<std::string> expandedArguments;
|
||||||
mf.ExpandArguments(lff.Arguments, expandedArguments);
|
mf.ExpandArguments(lff.Arguments, expandedArguments,
|
||||||
|
this->GetStartingContext().FilePath.c_str());
|
||||||
// if the endmacro has arguments make sure they
|
// if the endmacro has arguments make sure they
|
||||||
// match the arguments of the macro
|
// match the arguments of the macro
|
||||||
if ((expandedArguments.empty() ||
|
if ((expandedArguments.empty() ||
|
||||||
|
@ -308,7 +308,7 @@ cmListFileContext cmMakefile::GetExecutionContext() const
|
|||||||
void cmMakefile::PrintCommandTrace(const cmListFileFunction& lff) const
|
void cmMakefile::PrintCommandTrace(const cmListFileFunction& lff) const
|
||||||
{
|
{
|
||||||
std::ostringstream msg;
|
std::ostringstream msg;
|
||||||
msg << lff.FilePath << "(" << lff.Line << "): ";
|
msg << this->GetExecutionFilePath() << "(" << lff.Line << "): ";
|
||||||
msg << lff.Name << "(";
|
msg << lff.Name << "(";
|
||||||
for(std::vector<cmListFileArgument>::const_iterator i =
|
for(std::vector<cmListFileArgument>::const_iterator i =
|
||||||
lff.Arguments.begin(); i != lff.Arguments.end(); ++i)
|
lff.Arguments.begin(); i != lff.Arguments.end(); ++i)
|
||||||
@ -3313,11 +3313,25 @@ bool cmMakefile::IsLoopBlock() const
|
|||||||
return !this->LoopBlockCounter.empty() && this->LoopBlockCounter.top() > 0;
|
return !this->LoopBlockCounter.empty() && this->LoopBlockCounter.top() > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string cmMakefile::GetExecutionFilePath() const
|
||||||
|
{
|
||||||
|
if (this->CallStack.empty())
|
||||||
|
{
|
||||||
|
return std::string();
|
||||||
|
}
|
||||||
|
return this->CallStack.back().Context->FilePath;
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
bool cmMakefile::ExpandArguments(
|
bool cmMakefile::ExpandArguments(
|
||||||
std::vector<cmListFileArgument> const& inArgs,
|
std::vector<cmListFileArgument> const& inArgs,
|
||||||
std::vector<std::string>& outArgs) const
|
std::vector<std::string>& outArgs, const char* filename) const
|
||||||
{
|
{
|
||||||
|
std::string efp = this->GetExecutionFilePath();
|
||||||
|
if (!filename)
|
||||||
|
{
|
||||||
|
filename = efp.c_str();
|
||||||
|
}
|
||||||
std::vector<cmListFileArgument>::const_iterator i;
|
std::vector<cmListFileArgument>::const_iterator i;
|
||||||
std::string value;
|
std::string value;
|
||||||
outArgs.reserve(inArgs.size());
|
outArgs.reserve(inArgs.size());
|
||||||
@ -3332,8 +3346,7 @@ bool cmMakefile::ExpandArguments(
|
|||||||
// Expand the variables in the argument.
|
// Expand the variables in the argument.
|
||||||
value = i->Value;
|
value = i->Value;
|
||||||
this->ExpandVariablesInString(value, false, false, false,
|
this->ExpandVariablesInString(value, false, false, false,
|
||||||
i->FilePath, i->Line,
|
filename, i->Line, false, false);
|
||||||
false, false);
|
|
||||||
|
|
||||||
// If the argument is quoted, it should be one argument.
|
// If the argument is quoted, it should be one argument.
|
||||||
// Otherwise, it may be a list of arguments.
|
// Otherwise, it may be a list of arguments.
|
||||||
@ -3352,8 +3365,13 @@ bool cmMakefile::ExpandArguments(
|
|||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
bool cmMakefile::ExpandArguments(
|
bool cmMakefile::ExpandArguments(
|
||||||
std::vector<cmListFileArgument> const& inArgs,
|
std::vector<cmListFileArgument> const& inArgs,
|
||||||
std::vector<cmExpandedCommandArgument>& outArgs) const
|
std::vector<cmExpandedCommandArgument>& outArgs, const char* filename) const
|
||||||
{
|
{
|
||||||
|
std::string efp = this->GetExecutionFilePath();
|
||||||
|
if (!filename)
|
||||||
|
{
|
||||||
|
filename = efp.c_str();
|
||||||
|
}
|
||||||
std::vector<cmListFileArgument>::const_iterator i;
|
std::vector<cmListFileArgument>::const_iterator i;
|
||||||
std::string value;
|
std::string value;
|
||||||
outArgs.reserve(inArgs.size());
|
outArgs.reserve(inArgs.size());
|
||||||
@ -3368,8 +3386,7 @@ bool cmMakefile::ExpandArguments(
|
|||||||
// Expand the variables in the argument.
|
// Expand the variables in the argument.
|
||||||
value = i->Value;
|
value = i->Value;
|
||||||
this->ExpandVariablesInString(value, false, false, false,
|
this->ExpandVariablesInString(value, false, false, false,
|
||||||
i->FilePath, i->Line,
|
filename, i->Line, false, false);
|
||||||
false, false);
|
|
||||||
|
|
||||||
// If the argument is quoted, it should be one argument.
|
// If the argument is quoted, it should be one argument.
|
||||||
// Otherwise, it may be a list of arguments.
|
// Otherwise, it may be a list of arguments.
|
||||||
|
@ -662,10 +662,12 @@ public:
|
|||||||
* variable replacement and list expansion.
|
* variable replacement and list expansion.
|
||||||
*/
|
*/
|
||||||
bool ExpandArguments(std::vector<cmListFileArgument> const& inArgs,
|
bool ExpandArguments(std::vector<cmListFileArgument> const& inArgs,
|
||||||
std::vector<std::string>& outArgs) const;
|
std::vector<std::string>& outArgs,
|
||||||
|
const char* filename = 0) const;
|
||||||
|
|
||||||
bool ExpandArguments(std::vector<cmListFileArgument> const& inArgs,
|
bool ExpandArguments(std::vector<cmListFileArgument> const& inArgs,
|
||||||
std::vector<cmExpandedCommandArgument>& outArgs) const;
|
std::vector<cmExpandedCommandArgument>& outArgs,
|
||||||
|
const char* filename = 0) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the instance
|
* Get the instance
|
||||||
@ -840,6 +842,8 @@ public:
|
|||||||
|
|
||||||
const char* GetDefineFlagsCMP0059() const;
|
const char* GetDefineFlagsCMP0059() const;
|
||||||
|
|
||||||
|
std::string GetExecutionFilePath() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// add link libraries and directories to the target
|
// add link libraries and directories to the target
|
||||||
void AddGlobalLinkInformation(const std::string& name, cmTarget& target);
|
void AddGlobalLinkInformation(const std::string& name, cmTarget& target);
|
||||||
|
@ -49,21 +49,21 @@ static void cmVariableWatchCommandVariableAccessed(
|
|||||||
newLFF.Arguments.clear();
|
newLFF.Arguments.clear();
|
||||||
newLFF.Arguments.push_back(
|
newLFF.Arguments.push_back(
|
||||||
cmListFileArgument(variable, cmListFileArgument::Quoted,
|
cmListFileArgument(variable, cmListFileArgument::Quoted,
|
||||||
"unknown", 9999));
|
9999));
|
||||||
newLFF.Arguments.push_back(
|
newLFF.Arguments.push_back(
|
||||||
cmListFileArgument(accessString, cmListFileArgument::Quoted,
|
cmListFileArgument(accessString, cmListFileArgument::Quoted,
|
||||||
"unknown", 9999));
|
9999));
|
||||||
newLFF.Arguments.push_back(
|
newLFF.Arguments.push_back(
|
||||||
cmListFileArgument(newValue?newValue:"", cmListFileArgument::Quoted,
|
cmListFileArgument(newValue?newValue:"", cmListFileArgument::Quoted,
|
||||||
"unknown", 9999));
|
9999));
|
||||||
newLFF.Arguments.push_back(
|
newLFF.Arguments.push_back(
|
||||||
cmListFileArgument(currentListFile, cmListFileArgument::Quoted,
|
cmListFileArgument(currentListFile, cmListFileArgument::Quoted,
|
||||||
"unknown", 9999));
|
9999));
|
||||||
newLFF.Arguments.push_back(
|
newLFF.Arguments.push_back(
|
||||||
cmListFileArgument(stack, cmListFileArgument::Quoted,
|
cmListFileArgument(stack, cmListFileArgument::Quoted,
|
||||||
"unknown", 9999));
|
9999));
|
||||||
newLFF.Name = data->Command;
|
newLFF.Name = data->Command;
|
||||||
newLFF.FilePath = "Some weird path";
|
newLFF.FilePath = "unknown";
|
||||||
newLFF.Line = 9999;
|
newLFF.Line = 9999;
|
||||||
cmExecutionStatus status;
|
cmExecutionStatus status;
|
||||||
if(!makefile->ExecuteCommand(newLFF,status))
|
if(!makefile->ExecuteCommand(newLFF,status))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user