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"
8 #include "IFW/cmCPackIFWGenerator.h"
9 #ifdef HAVE_FREEBSD_PKG
10 # include "cmCPackFreeBSDGenerator.h"
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"
22 # include "cmCPackBundleGenerator.h"
23 # include "cmCPackDragNDropGenerator.h"
24 # include "cmCPackProductBuildGenerator.h"
28 # include "cmCPackCygwinBinaryGenerator.h"
29 # include "cmCPackCygwinSourceGenerator.h"
32 #if !defined(_WIN32) && !defined(__QNXNTO__) && !defined(__BEOS__) && \
34 # include "cmCPackRPMGenerator.h"
37 #if defined(_WIN32) || (defined(__CYGWIN__) && defined(HAVE_LIBUUID))
38 # include "WiX/cmCPackWIXGenerator.h"
41 cmCPackGeneratorFactory::cmCPackGeneratorFactory()
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);
59 if (cmCPackSTGZGenerator::CanGenerate()) {
60 this->RegisterGenerator("STGZ", "Self extracting Tar GZip compression",
61 cmCPackSTGZGenerator::CreateGenerator);
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);
69 if (cmCPackIFWGenerator::CanGenerate()) {
70 this->RegisterGenerator("IFW", "Qt Installer Framework",
71 cmCPackIFWGenerator::CreateGenerator);
74 if (cmCPackCygwinBinaryGenerator::CanGenerate()) {
75 this->RegisterGenerator("CygwinBinary", "Cygwin Binary Installer",
76 cmCPackCygwinBinaryGenerator::CreateGenerator);
78 if (cmCPackCygwinSourceGenerator::CanGenerate()) {
79 this->RegisterGenerator("CygwinSource", "Cygwin Source Installer",
80 cmCPackCygwinSourceGenerator::CreateGenerator);
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);
89 if (cmCPackDebGenerator::CanGenerate()) {
90 this->RegisterGenerator("DEB", "Debian packages",
91 cmCPackDebGenerator::CreateGenerator);
93 if (cmCPackNuGetGenerator::CanGenerate()) {
94 this->RegisterGenerator("NuGet", "NuGet packages",
95 cmCPackNuGetGenerator::CreateGenerator);
97 if (cmCPackExternalGenerator::CanGenerate()) {
98 this->RegisterGenerator("External", "CPack External packages",
99 cmCPackExternalGenerator::CreateGenerator);
102 if (cmCPackDragNDropGenerator::CanGenerate()) {
103 this->RegisterGenerator("DragNDrop", "Mac OSX Drag And Drop",
104 cmCPackDragNDropGenerator::CreateGenerator);
106 if (cmCPackBundleGenerator::CanGenerate()) {
107 this->RegisterGenerator("Bundle", "Mac OSX bundle",
108 cmCPackBundleGenerator::CreateGenerator);
110 if (cmCPackProductBuildGenerator::CanGenerate()) {
111 this->RegisterGenerator("productbuild", "Mac OSX pkg",
112 cmCPackProductBuildGenerator::CreateGenerator);
115 #if !defined(_WIN32) && !defined(__QNXNTO__) && !defined(__BEOS__) && \
117 if (cmCPackRPMGenerator::CanGenerate()) {
118 this->RegisterGenerator("RPM", "RPM packages",
119 cmCPackRPMGenerator::CreateGenerator);
122 #ifdef HAVE_FREEBSD_PKG
123 if (cmCPackFreeBSDGenerator::CanGenerate()) {
124 this->RegisterGenerator("FREEBSD", "FreeBSD pkg(8) packages",
125 cmCPackFreeBSDGenerator::CreateGenerator);
130 std::unique_ptr<cmCPackGenerator> cmCPackGeneratorFactory::NewGenerator(
131 const std::string& name)
133 auto it = this->GeneratorCreators.find(name);
134 if (it == this->GeneratorCreators.end()) {
137 std::unique_ptr<cmCPackGenerator> gen(it->second());
141 gen->SetLogger(this->Logger);
145 void cmCPackGeneratorFactory::RegisterGenerator(
146 const std::string& name, const char* generatorDescription,
147 CreateGeneratorCall* createGenerator)
149 if (!createGenerator) {
150 cmCPack_Log(this->Logger, cmCPackLog::LOG_ERROR,
151 "Cannot register generator" << std::endl);
154 this->GeneratorCreators[name] = createGenerator;
155 this->GeneratorDescriptions[name] = generatorDescription;