#pragma once
#include "cmConfigure.h"
#include <map>
#include <set>
#include <string>
#include <vector>
#include "cmCPackGenerator.h"
#include "cmCPackIFWCommon.h"
#include "cmCPackIFWInstaller.h"
#include "cmCPackIFWPackage.h"
#include "cmCPackIFWRepository.h"
class cmCPackComponent;
class cmCPackComponentGroup;
class cmCPackIFWGenerator
: public cmCPackGenerator
, public cmCPackIFWCommon
{
public:
cmCPackTypeMacro(cmCPackIFWGenerator, cmCPackGenerator);
using PackagesMap = std::map<std::string, cmCPackIFWPackage>;
using RepositoriesMap = std::map<std::string, cmCPackIFWRepository>;
using DependenceMap =
std::map<std::string, cmCPackIFWPackage::DependenceStruct>;
using cmCPackIFWCommon::GetOption;
using cmCPackIFWCommon::IsOn;
using cmCPackIFWCommon::IsSetToOff;
using cmCPackIFWCommon::IsSetToEmpty;
cmCPackIFWGenerator();
~cmCPackIFWGenerator() override;
protected:
int InitializeInternal() override;
int PackageFiles() override;
char const* GetPackagingInstallPrefix() override;
char const* GetOutputExtension() override;
std::string GetComponentInstallSuffix(
std::string const& componentName) override;
std::string GetComponentInstallDirNameSuffix(
std::string const& componentName) override;
cmCPackComponent* GetComponent(std::string const& projectName,
std::string const& componentName) override;
cmCPackComponentGroup* GetComponentGroup(
std::string const& projectName, std::string const& groupName) override;
enum cmCPackGenerator::CPackSetDestdirSupport SupportsSetDestdir()
const override;
bool SupportsAbsoluteDestination() const override;
bool SupportsComponentInstallation() const override;
protected:
bool IsOnePackage() const;
std::string GetRootPackageName();
std::string GetGroupPackageName(cmCPackComponentGroup* group) const;
std::string GetComponentPackageName(cmCPackComponent* component) const;
cmCPackIFWPackage* GetGroupPackage(cmCPackComponentGroup* group) const;
cmCPackIFWPackage* GetComponentPackage(cmCPackComponent* component) const;
cmCPackIFWRepository* GetRepository(std::string const& repositoryName);
protected:
friend class cmCPackIFWPackage;
friend class cmCPackIFWCommon;
friend class cmCPackIFWInstaller;
friend class cmCPackIFWRepository;
cmCPackIFWInstaller Installer;
cmCPackIFWRepository Repository;
PackagesMap Packages;
RepositoriesMap Repositories;
std::set<cmCPackIFWPackage*> BinaryPackages;
std::set<cmCPackIFWPackage*> DownloadedPackages;
DependenceMap DependentPackages;
std::map<cmCPackComponent*, cmCPackIFWPackage*> ComponentPackages;
std::map<cmCPackComponentGroup*, cmCPackIFWPackage*> GroupPackages;
private:
std::vector<std::string> BuildRepogenCommand();
int RunRepogen(std::string const& ifwTmpFile);
std::vector<std::string> BuildBinaryCreatorCommand();
int RunBinaryCreator(std::string const& ifwTmpFile);
std::string RepoGen;
std::string BinCreator;
std::string FrameworkVersion;
std::string ExecutableSuffix;
std::string OutputExtension;
std::string ArchiveFormat;
std::string ArchiveCompression;
bool OnlineOnly{};
bool ResolveDuplicateNames{};
std::vector<std::string> PkgsDirsVector;
std::vector<std::string> RepoDirsVector;
};