diff options
author | Daniel Pfeifer <daniel@pfeifer-mail.de> | 2016-12-28 22:15:41 (GMT) |
---|---|---|
committer | Regina Pfeifer <regina@mailbox.org> | 2019-07-18 09:53:46 (GMT) |
commit | a74dad3bd3e5e4bbf09764a0b6bdedfe842442a7 (patch) | |
tree | 4aff5150f21f38f36c0c4d99243949f5b11602e5 | |
parent | d26e6cb1c2f352da12200727a887e940aac463a7 (diff) | |
download | CMake-a74dad3bd3e5e4bbf09764a0b6bdedfe842442a7.zip CMake-a74dad3bd3e5e4bbf09764a0b6bdedfe842442a7.tar.gz CMake-a74dad3bd3e5e4bbf09764a0b6bdedfe842442a7.tar.bz2 |
cmMakefile: decouple FinalAction from cmCommand
-rw-r--r-- | Source/cmMakefile.cxx | 25 | ||||
-rw-r--r-- | Source/cmMakefile.h | 13 |
2 files changed, 32 insertions, 6 deletions
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 501ea69..a350789 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -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. diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h index 1b4ead7..166a697 100644 --- a/Source/cmMakefile.h +++ b/Source/cmMakefile.h @@ -7,6 +7,7 @@ #include "cmsys/RegularExpression.hxx" #include <deque> +#include <functional> #include <map> #include <memory> #include <set> @@ -30,7 +31,6 @@ # include "cmSourceGroup.h" #endif -class cmCommand; class cmCompiledGeneratorExpression; class cmCustomCommandLines; class cmExecutionStatus; @@ -125,6 +125,13 @@ public: bool EnforceUniqueName(std::string const& name, std::string& msg, bool isCustom = false) const; + using FinalAction = std::function<void(cmMakefile&)>; + + /** + * Register an action that is executed during FinalPass + */ + void AddFinalAction(FinalAction action); + /** * Perform FinalPass, Library dependency analysis etc before output of the * makefile. @@ -132,7 +139,7 @@ public: void ConfigureFinalPass(); /** - * run the final pass on all commands. + * run all FinalActions. */ void FinalPass(); @@ -937,7 +944,7 @@ protected: size_t ObjectLibrariesSourceGroupIndex; #endif - std::vector<std::unique_ptr<cmCommand>> FinalPassCommands; + std::vector<FinalAction> FinalActions; cmGlobalGenerator* GlobalGenerator; bool IsFunctionBlocked(const cmListFileFunction& lff, cmExecutionStatus& status); |