|
|
@@ -355,6 +355,20 @@ private:
|
|
|
cmMakefile* Makefile;
|
|
|
};
|
|
|
|
|
|
+class cmFinalPassAction
|
|
|
+{
|
|
|
+public:
|
|
|
+ cmFinalPassAction(std::unique_ptr<cmCommand> command)
|
|
|
+ : Command(std::move(command))
|
|
|
+ {
|
|
|
+ }
|
|
|
+
|
|
|
+ void operator()(cmMakefile&) { this->Command->FinalPass(); }
|
|
|
+
|
|
|
+private:
|
|
|
+ std::shared_ptr<cmCommand> Command;
|
|
|
+};
|
|
|
+
|
|
|
bool cmMakefile::ExecuteCommand(const cmListFileFunction& lff,
|
|
|
cmExecutionStatus& status)
|
|
|
{
|
|
|
@@ -417,7 +431,7 @@ bool cmMakefile::ExecuteCommand(const cmListFileFunction& lff,
|
|
|
}
|
|
|
} else if (pcmd->HasFinalPass()) {
|
|
|
// use the command
|
|
|
- this->FinalPassCommands.push_back(std::move(pcmd));
|
|
|
+ this->AddFinalAction(cmFinalPassAction(std::move(pcmd)));
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
@@ -768,6 +782,11 @@ struct file_not_persistent
|
|
|
};
|
|
|
}
|
|
|
|
|
|
+void cmMakefile::AddFinalAction(FinalAction action)
|
|
|
+{
|
|
|
+ this->FinalActions.push_back(std::move(action));
|
|
|
+}
|
|
|
+
|
|
|
void cmMakefile::FinalPass()
|
|
|
{
|
|
|
// do all the variable expansions here
|
|
|
@@ -775,8 +794,8 @@ void cmMakefile::FinalPass()
|
|
|
|
|
|
// give all the commands a chance to do something
|
|
|
// after the file has been parsed before generation
|
|
|
- for (auto& command : this->FinalPassCommands) {
|
|
|
- command->FinalPass();
|
|
|
+ for (FinalAction& action : this->FinalActions) {
|
|
|
+ action(*this);
|
|
|
}
|
|
|
|
|
|
// go through all configured files and see which ones still exist.
|