diff options
Diffstat (limited to 'Source/CPack/cmCPackExternalGenerator.h')
-rw-r--r-- | Source/CPack/cmCPackExternalGenerator.h | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/Source/CPack/cmCPackExternalGenerator.h b/Source/CPack/cmCPackExternalGenerator.h new file mode 100644 index 0000000..176d6a9 --- /dev/null +++ b/Source/CPack/cmCPackExternalGenerator.h @@ -0,0 +1,89 @@ +/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying + file Copyright.txt or https://cmake.org/licensing for details. */ +#ifndef cmCPackExternalGenerator_h +#define cmCPackExternalGenerator_h + +#include "cmCPackGenerator.h" +#include "cm_sys_stat.h" + +#include <memory> +#include <string> + +class cmGlobalGenerator; +namespace Json { +class Value; +} + +/** \class cmCPackExternalGenerator + * \brief A generator for CPack External packaging tools + */ +class cmCPackExternalGenerator : public cmCPackGenerator +{ +public: + cmCPackTypeMacro(cmCPackExternalGenerator, cmCPackGenerator); + + const char* GetOutputExtension() override { return ".json"; } + +protected: + int InitializeInternal() override; + + int PackageFiles() override; + + bool SupportsComponentInstallation() const override; + + int InstallProjectViaInstallCommands( + bool setDestDir, const std::string& tempInstallDirectory) override; + int InstallProjectViaInstallScript( + bool setDestDir, const std::string& tempInstallDirectory) override; + int InstallProjectViaInstalledDirectories( + bool setDestDir, const std::string& tempInstallDirectory, + const mode_t* default_dir_mode) override; + + int RunPreinstallTarget(const std::string& installProjectName, + const std::string& installDirectory, + cmGlobalGenerator* globalGenerator, + const std::string& buildConfig) override; + int InstallCMakeProject(bool setDestDir, const std::string& installDirectory, + const std::string& baseTempInstallDirectory, + const mode_t* default_dir_mode, + const std::string& component, bool componentInstall, + const std::string& installSubDirectory, + const std::string& buildConfig, + std::string& absoluteDestFiles) override; + +private: + bool StagingEnabled() const; + + class cmCPackExternalVersionGenerator + { + public: + cmCPackExternalVersionGenerator(cmCPackExternalGenerator* parent); + + virtual ~cmCPackExternalVersionGenerator() = default; + + virtual int WriteToJSON(Json::Value& root); + + protected: + virtual int GetVersionMajor() = 0; + virtual int GetVersionMinor() = 0; + + int WriteVersion(Json::Value& root); + + cmCPackExternalGenerator* Parent; + }; + + class cmCPackExternalVersion1Generator + : public cmCPackExternalVersionGenerator + { + public: + using cmCPackExternalVersionGenerator::cmCPackExternalVersionGenerator; + + protected: + int GetVersionMajor() override { return 1; } + int GetVersionMinor() override { return 0; } + }; + + std::unique_ptr<cmCPackExternalVersionGenerator> Generator; +}; + +#endif |