Imported Upstream version 3.25.0
[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 #include "cmCPackConfigure.h" // IWYU pragma: keep
12
13 class cmCPackGenerator;
14 class cmCPackLog;
15
16 /** \class cmCPackGeneratorFactory
17  * \brief A container for CPack generators
18  *
19  */
20 class cmCPackGeneratorFactory
21 {
22 public:
23   cmCPackGeneratorFactory();
24
25   //! Get the generator
26   std::unique_ptr<cmCPackGenerator> NewGenerator(const std::string& name);
27
28   using CreateGeneratorCall = cmCPackGenerator*();
29
30   void RegisterGenerator(const std::string& name,
31                          const char* generatorDescription,
32                          CreateGeneratorCall* createGenerator);
33
34   void SetLogger(cmCPackLog* logger) { this->Logger = logger; }
35
36   using DescriptionsMap = std::map<std::string, std::string>;
37   const DescriptionsMap& GetGeneratorsList() const
38   {
39     return this->GeneratorDescriptions;
40   }
41
42 private:
43   using t_GeneratorCreatorsMap = std::map<std::string, CreateGeneratorCall*>;
44   t_GeneratorCreatorsMap GeneratorCreators;
45   DescriptionsMap GeneratorDescriptions;
46   cmCPackLog* Logger{};
47 };