Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Kitware
GitHub Repository: Kitware/CMake
Path: blob/master/Source/CPack/cmCPackArchiveGenerator.h
5000 views
1
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2
file LICENSE.rst or https://cmake.org/licensing for details. */
3
#pragma once
4
5
#include "cmConfigure.h" // IWYU pragma: keep
6
7
#include <iosfwd>
8
#include <string>
9
10
#include "cmArchiveWrite.h"
11
#include "cmCPackGenerator.h"
12
13
class cmCPackComponent;
14
15
/** \class cmCPackArchiveGenerator
16
* \brief A generator base for libarchive generation.
17
* The generator itself uses the libarchive wrapper
18
* \ref cmArchiveWrite.
19
*
20
*/
21
class cmCPackArchiveGenerator : public cmCPackGenerator
22
{
23
public:
24
using Superclass = cmCPackGenerator;
25
26
static cmCPackGenerator* Create7ZGenerator();
27
static cmCPackGenerator* Create7ZStoreGenerator();
28
static cmCPackGenerator* Create7ZDeflateGenerator();
29
static cmCPackGenerator* Create7ZBzip2Generator();
30
static cmCPackGenerator* Create7ZLzmaGenerator();
31
static cmCPackGenerator* Create7ZLzma2Generator();
32
static cmCPackGenerator* Create7ZZstdGenerator();
33
static cmCPackGenerator* Create7ZPPMdGenerator();
34
static cmCPackGenerator* CreateTBZ2Generator();
35
static cmCPackGenerator* CreateTGZGenerator();
36
static cmCPackGenerator* CreateTXZGenerator();
37
static cmCPackGenerator* CreateTZGenerator();
38
static cmCPackGenerator* CreateTZSTGenerator();
39
static cmCPackGenerator* CreateTarGenerator();
40
static cmCPackGenerator* CreateZIPGenerator();
41
static cmCPackGenerator* CreateZipStoreGenerator();
42
static cmCPackGenerator* CreateZipDeflateGenerator();
43
static cmCPackGenerator* CreateZipBzip2Generator();
44
static cmCPackGenerator* CreateZipLzmaGenerator();
45
static cmCPackGenerator* CreateZipLzma2Generator();
46
static cmCPackGenerator* CreateZipZstdGenerator();
47
48
/**
49
* Construct generator
50
*/
51
cmCPackArchiveGenerator(cmArchiveWrite::Compress t, std::string format,
52
std::string extension);
53
~cmCPackArchiveGenerator() override;
54
// Used to add a header to the archive
55
virtual int GenerateHeader(std::ostream* os);
56
// component support
57
bool SupportsComponentInstallation() const override;
58
59
private:
60
std::string GetArchiveFileName();
61
// get archive component filename
62
std::string GetArchiveComponentFileName(std::string const& component,
63
bool isGroupName);
64
65
class Deduplicator;
66
67
protected:
68
int InitializeInternal() override;
69
/**
70
* Add the files belonging to the specified component
71
* to the provided (already opened) archive.
72
* @param[in,out] archive the archive object
73
* @param[in] component the component whose file will be added to archive
74
* @param[in] deduplicator file deduplicator utility.
75
*/
76
int addOneComponentToArchive(cmArchiveWrite& archive,
77
cmCPackComponent* component,
78
Deduplicator* deduplicator);
79
80
/**
81
* The main package file method.
82
* If component install was required this
83
* method will call either PackageComponents or
84
* PackageComponentsAllInOne.
85
*/
86
int PackageFiles() override;
87
/**
88
* The method used to package files when component
89
* install is used. This will create one
90
* archive for each component group.
91
*/
92
int PackageComponents(bool ignoreGroup);
93
/**
94
* Special case of component install where all
95
* components will be put in a single installer.
96
*/
97
int PackageComponentsAllInOne();
98
99
private:
100
char const* GetNameOfClass() override { return "cmCPackArchiveGenerator"; }
101
102
char const* GetOutputExtension() override
103
{
104
return this->OutputExtension.c_str();
105
}
106
107
int GetThreadCount() const;
108
int GetCompressionLevel() const;
109
110
private:
111
cmArchiveWrite::Compress Compress;
112
std::string ArchiveFormat;
113
std::string OutputExtension;
114
int UID = 0;
115
int GID = 0;
116
};
117
118