| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying | |
| file Copyright.txt or https://cmake.org/licensing for details. */ | |
| #pragma once | |
| #include "cmConfigure.h" // IWYU pragma: keep | |
| #include <memory> | |
| #include <string> | |
| #include <vector> | |
| class cmGlobalGenerator; | |
| class cmMakefile; | |
| /** \class cmExternalMakefileProjectGenerator | |
| * \brief Base class for generators for "External Makefile based IDE projects". | |
| * | |
| * cmExternalMakefileProjectGenerator is a base class for generators | |
| * for "external makefile based projects", i.e. IDE projects which work | |
| * an already existing makefiles. | |
| * See cmExtraEclipseCDT4Generator as an example. | |
| * After the makefiles have been generated by one of the Makefile | |
| * generators, the Generate() method is called and this generator | |
| * can iterate over the local generators and/or projects to produce the | |
| * project files for the IDE. | |
| */ | |
| class cmExternalMakefileProjectGenerator | |
| { | |
| public: | |
| virtual ~cmExternalMakefileProjectGenerator() = default; | |
| virtual void EnableLanguage(std::vector<std::string> const& languages, | |
| cmMakefile*, bool optional); | |
| //! set the global generator which will generate the makefiles | |
| virtual void SetGlobalGenerator(cmGlobalGenerator* generator) | |
| { | |
| this->GlobalGenerator = generator; | |
| } | |
| //! Return the list of global generators supported by this extra generator | |
| const std::vector<std::string>& GetSupportedGlobalGenerators() const | |
| { | |
| return this->SupportedGlobalGenerators; | |
| } | |
| /** Create a full name from the given global generator name and the | |
| * extra generator name | |
| */ | |
| static std::string CreateFullGeneratorName( | |
| const std::string& globalGenerator, const std::string& extraGenerator); | |
| //! Generate the project files, the Makefiles have already been generated | |
| virtual void Generate() = 0; | |
| void SetName(const std::string& n) { this->Name = n; } | |
| std::string GetName() const { return this->Name; } | |
| virtual bool Open(const std::string& bindir, const std::string& projectName, | |
| bool dryRun); | |
| protected: | |
| //! Contains the names of the global generators support by this generator. | |
| std::vector<std::string> SupportedGlobalGenerators; | |
| //! the global generator which creates the makefiles | |
| const cmGlobalGenerator* GlobalGenerator = nullptr; | |
| std::string Name; | |
| }; | |
| class cmExternalMakefileProjectGeneratorFactory | |
| { | |
| public: | |
| cmExternalMakefileProjectGeneratorFactory(std::string n, std::string doc); | |
| virtual ~cmExternalMakefileProjectGeneratorFactory(); | |
| std::string GetName() const; | |
| std::string GetDocumentation() const; | |
| std::vector<std::string> GetSupportedGlobalGenerators() const; | |
| std::vector<std::string> Aliases; | |
| virtual std::unique_ptr<cmExternalMakefileProjectGenerator> | |
| CreateExternalMakefileProjectGenerator() const = 0; | |
| void AddSupportedGlobalGenerator(const std::string& base); | |
| private: | |
| std::string Name; | |
| std::string Documentation; | |
| std::vector<std::string> SupportedGlobalGenerators; | |
| }; | |
| template <class T> | |
| class cmExternalMakefileProjectGeneratorSimpleFactory | |
| : public cmExternalMakefileProjectGeneratorFactory | |
| { | |
| public: | |
| cmExternalMakefileProjectGeneratorSimpleFactory(const std::string& n, | |
| const std::string& doc) | |
| : cmExternalMakefileProjectGeneratorFactory(n, doc) | |
| { | |
| } | |
| std::unique_ptr<cmExternalMakefileProjectGenerator> | |
| CreateExternalMakefileProjectGenerator() const override | |
| { | |
| std::unique_ptr<cmExternalMakefileProjectGenerator> p(new T); | |
| p->SetName(this->GetName()); | |
| return p; | |
| } | |
| }; |