725ea8a735bbbf4c4882098bbfc659bd767d5c1f
[platform/upstream/cmake.git] / Source / CPack / cmCPackGeneratorFactory.cxx
1 /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
2    file Copyright.txt or https://cmake.org/licensing for details.  */
3 #include "cmCPackGeneratorFactory.h"
4
5 #include <ostream>
6 #include <utility>
7
8 #include "IFW/cmCPackIFWGenerator.h"
9 #ifdef HAVE_FREEBSD_PKG
10 #  include "cmCPackFreeBSDGenerator.h"
11 #endif
12 #include "cmCPackArchiveGenerator.h"
13 #include "cmCPackDebGenerator.h"
14 #include "cmCPackExternalGenerator.h"
15 #include "cmCPackGenerator.h"
16 #include "cmCPackLog.h"
17 #include "cmCPackNSISGenerator.h"
18 #include "cmCPackNuGetGenerator.h"
19 #include "cmCPackSTGZGenerator.h"
20
21 #ifdef __APPLE__
22 #  include "cmCPackBundleGenerator.h"
23 #  include "cmCPackDragNDropGenerator.h"
24 #  include "cmCPackProductBuildGenerator.h"
25 #endif
26
27 #ifdef __CYGWIN__
28 #  include "cmCPackCygwinBinaryGenerator.h"
29 #  include "cmCPackCygwinSourceGenerator.h"
30 #endif
31
32 #if !defined(_WIN32) && !defined(__QNXNTO__) && !defined(__BEOS__) &&         \
33   !defined(__HAIKU__)
34 #  include "cmCPackRPMGenerator.h"
35 #endif
36
37 #if defined(_WIN32) || (defined(__CYGWIN__) && defined(HAVE_LIBUUID))
38 #  include "WiX/cmCPackWIXGenerator.h"
39 #endif
40
41 cmCPackGeneratorFactory::cmCPackGeneratorFactory()
42 {
43   if (cmCPackArchiveGenerator::CanGenerate()) {
44     this->RegisterGenerator("7Z", "7-Zip file format",
45                             cmCPackArchiveGenerator::Create7ZGenerator);
46     this->RegisterGenerator("TBZ2", "Tar BZip2 compression",
47                             cmCPackArchiveGenerator::CreateTBZ2Generator);
48     this->RegisterGenerator("TGZ", "Tar GZip compression",
49                             cmCPackArchiveGenerator::CreateTGZGenerator);
50     this->RegisterGenerator("TXZ", "Tar XZ compression",
51                             cmCPackArchiveGenerator::CreateTXZGenerator);
52     this->RegisterGenerator("TZ", "Tar Compress compression",
53                             cmCPackArchiveGenerator::CreateTZGenerator);
54     this->RegisterGenerator("TZST", "Tar Zstandard compression",
55                             cmCPackArchiveGenerator::CreateTZSTGenerator);
56     this->RegisterGenerator("ZIP", "ZIP file format",
57                             cmCPackArchiveGenerator::CreateZIPGenerator);
58   }
59   if (cmCPackSTGZGenerator::CanGenerate()) {
60     this->RegisterGenerator("STGZ", "Self extracting Tar GZip compression",
61                             cmCPackSTGZGenerator::CreateGenerator);
62   }
63   if (cmCPackNSISGenerator::CanGenerate()) {
64     this->RegisterGenerator("NSIS", "Null Soft Installer",
65                             cmCPackNSISGenerator::CreateGenerator);
66     this->RegisterGenerator("NSIS64", "Null Soft Installer (64-bit)",
67                             cmCPackNSISGenerator::CreateGenerator64);
68   }
69   if (cmCPackIFWGenerator::CanGenerate()) {
70     this->RegisterGenerator("IFW", "Qt Installer Framework",
71                             cmCPackIFWGenerator::CreateGenerator);
72   }
73 #ifdef __CYGWIN__
74   if (cmCPackCygwinBinaryGenerator::CanGenerate()) {
75     this->RegisterGenerator("CygwinBinary", "Cygwin Binary Installer",
76                             cmCPackCygwinBinaryGenerator::CreateGenerator);
77   }
78   if (cmCPackCygwinSourceGenerator::CanGenerate()) {
79     this->RegisterGenerator("CygwinSource", "Cygwin Source Installer",
80                             cmCPackCygwinSourceGenerator::CreateGenerator);
81   }
82 #endif
83 #if defined(_WIN32) || (defined(__CYGWIN__) && defined(HAVE_LIBUUID))
84   if (cmCPackWIXGenerator::CanGenerate()) {
85     this->RegisterGenerator("WIX", "MSI file format via WiX tools",
86                             cmCPackWIXGenerator::CreateGenerator);
87   }
88 #endif
89   if (cmCPackDebGenerator::CanGenerate()) {
90     this->RegisterGenerator("DEB", "Debian packages",
91                             cmCPackDebGenerator::CreateGenerator);
92   }
93   if (cmCPackNuGetGenerator::CanGenerate()) {
94     this->RegisterGenerator("NuGet", "NuGet packages",
95                             cmCPackNuGetGenerator::CreateGenerator);
96   }
97   if (cmCPackExternalGenerator::CanGenerate()) {
98     this->RegisterGenerator("External", "CPack External packages",
99                             cmCPackExternalGenerator::CreateGenerator);
100   }
101 #ifdef __APPLE__
102   if (cmCPackDragNDropGenerator::CanGenerate()) {
103     this->RegisterGenerator("DragNDrop", "Mac OSX Drag And Drop",
104                             cmCPackDragNDropGenerator::CreateGenerator);
105   }
106   if (cmCPackBundleGenerator::CanGenerate()) {
107     this->RegisterGenerator("Bundle", "Mac OSX bundle",
108                             cmCPackBundleGenerator::CreateGenerator);
109   }
110   if (cmCPackProductBuildGenerator::CanGenerate()) {
111     this->RegisterGenerator("productbuild", "Mac OSX pkg",
112                             cmCPackProductBuildGenerator::CreateGenerator);
113   }
114 #endif
115 #if !defined(_WIN32) && !defined(__QNXNTO__) && !defined(__BEOS__) &&         \
116   !defined(__HAIKU__)
117   if (cmCPackRPMGenerator::CanGenerate()) {
118     this->RegisterGenerator("RPM", "RPM packages",
119                             cmCPackRPMGenerator::CreateGenerator);
120   }
121 #endif
122 #ifdef HAVE_FREEBSD_PKG
123   if (cmCPackFreeBSDGenerator::CanGenerate()) {
124     this->RegisterGenerator("FREEBSD", "FreeBSD pkg(8) packages",
125                             cmCPackFreeBSDGenerator::CreateGenerator);
126   }
127 #endif
128 }
129
130 std::unique_ptr<cmCPackGenerator> cmCPackGeneratorFactory::NewGenerator(
131   const std::string& name)
132 {
133   auto it = this->GeneratorCreators.find(name);
134   if (it == this->GeneratorCreators.end()) {
135     return nullptr;
136   }
137   std::unique_ptr<cmCPackGenerator> gen(it->second());
138   if (!gen) {
139     return nullptr;
140   }
141   gen->SetLogger(this->Logger);
142   return gen;
143 }
144
145 void cmCPackGeneratorFactory::RegisterGenerator(
146   const std::string& name, const char* generatorDescription,
147   CreateGeneratorCall* createGenerator)
148 {
149   if (!createGenerator) {
150     cmCPack_Log(this->Logger, cmCPackLog::LOG_ERROR,
151                 "Cannot register generator" << std::endl);
152     return;
153   }
154   this->GeneratorCreators[name] = createGenerator;
155   this->GeneratorDescriptions[name] = generatorDescription;
156 }