#pragma once
#include "cmConfigure.h"
#include <iosfwd>
#include <string>
#include "cmArchiveWrite.h"
#include "cmCPackGenerator.h"
class cmCPackComponent;
class cmCPackArchiveGenerator : public cmCPackGenerator
{
public:
using Superclass = cmCPackGenerator;
static cmCPackGenerator* Create7ZGenerator();
static cmCPackGenerator* Create7ZStoreGenerator();
static cmCPackGenerator* Create7ZDeflateGenerator();
static cmCPackGenerator* Create7ZBzip2Generator();
static cmCPackGenerator* Create7ZLzmaGenerator();
static cmCPackGenerator* Create7ZLzma2Generator();
static cmCPackGenerator* Create7ZZstdGenerator();
static cmCPackGenerator* Create7ZPPMdGenerator();
static cmCPackGenerator* CreateTBZ2Generator();
static cmCPackGenerator* CreateTGZGenerator();
static cmCPackGenerator* CreateTXZGenerator();
static cmCPackGenerator* CreateTZGenerator();
static cmCPackGenerator* CreateTZSTGenerator();
static cmCPackGenerator* CreateTarGenerator();
static cmCPackGenerator* CreateZIPGenerator();
static cmCPackGenerator* CreateZipStoreGenerator();
static cmCPackGenerator* CreateZipDeflateGenerator();
static cmCPackGenerator* CreateZipBzip2Generator();
static cmCPackGenerator* CreateZipLzmaGenerator();
static cmCPackGenerator* CreateZipLzma2Generator();
static cmCPackGenerator* CreateZipZstdGenerator();
cmCPackArchiveGenerator(cmArchiveWrite::Compress t, std::string format,
std::string extension);
~cmCPackArchiveGenerator() override;
virtual int GenerateHeader(std::ostream* os);
bool SupportsComponentInstallation() const override;
private:
std::string GetArchiveFileName();
std::string GetArchiveComponentFileName(std::string const& component,
bool isGroupName);
class Deduplicator;
protected:
int InitializeInternal() override;
int addOneComponentToArchive(cmArchiveWrite& archive,
cmCPackComponent* component,
Deduplicator* deduplicator);
int PackageFiles() override;
int PackageComponents(bool ignoreGroup);
int PackageComponentsAllInOne();
private:
char const* GetNameOfClass() override { return "cmCPackArchiveGenerator"; }
char const* GetOutputExtension() override
{
return this->OutputExtension.c_str();
}
int GetThreadCount() const;
int GetCompressionLevel() const;
private:
cmArchiveWrite::Compress Compress;
std::string ArchiveFormat;
std::string OutputExtension;
int UID = 0;
int GID = 0;
};