f3e25a65d1a375b6f2223270c9e0629dcb790c21
[platform/upstream/cmake.git] / Source / CPack / cmCPackGeneratorFactory.h
1 /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
2    file Copyright.txt or https://cmake.org/licensing for details.  */
3 #pragma once
4
5 #include "cmConfigure.h" // IWYU pragma: keep
6
7 #include <map>
8 #include <memory>
9 #include <string>
10
11 class cmCPackGenerator;
12 class cmCPackLog;
13
14 /** \class cmCPackGeneratorFactory
15  * \brief A container for CPack generators
16  *
17  */
18 class cmCPackGeneratorFactory
19 {
20 public:
21   cmCPackGeneratorFactory();
22
23   //! Get the generator
24   std::unique_ptr<cmCPackGenerator> NewGenerator(const std::string& name);
25
26   using CreateGeneratorCall = cmCPackGenerator*();
27
28   void RegisterGenerator(const std::string& name,
29                          const char* generatorDescription,
30                          CreateGeneratorCall* createGenerator);
31
32   void SetLogger(cmCPackLog* logger) { this->Logger = logger; }
33
34   using DescriptionsMap = std::map<std::string, std::string>;
35   const DescriptionsMap& GetGeneratorsList() const
36   {
37     return this->GeneratorDescriptions;
38   }
39
40 private:
41   using t_GeneratorCreatorsMap = std::map<std::string, CreateGeneratorCall*>;
42   t_GeneratorCreatorsMap GeneratorCreators;
43   DescriptionsMap GeneratorDescriptions;
44   cmCPackLog* Logger{};
45 };