| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying |
| file LICENSE.rst or https://cmake.org/licensing for details. */ |
| #pragma once |
| |
| #include <string> |
| #include <unordered_map> |
| |
| #include <cm/optional> |
| |
| #include "cmCPackGenerator.h" |
| |
| /** \class cmCPackAppImageGenerator |
| * \brief A generator for creating AppImages with CPack |
| */ |
| class cmCPackAppImageGenerator : public cmCPackGenerator |
| { |
| public: |
| cmCPackTypeMacro(cmCPackAppImageGenerator, cmCPackGenerator); |
| |
| char const* GetOutputExtension() override { return ".AppImage"; } |
| |
| cmCPackAppImageGenerator(); |
| ~cmCPackAppImageGenerator() override; |
| |
| protected: |
| /** |
| * @brief Initializes the CPack engine with our defaults |
| */ |
| int InitializeInternal() override; |
| |
| /** |
| * @brief AppImages are for single applications |
| */ |
| bool SupportsComponentInstallation() const override { return false; } |
| |
| /** |
| * Main Packaging step |
| */ |
| int PackageFiles() override; |
| |
| private: |
| /** |
| * @brief Finds the first installed file by it's name |
| */ |
| cm::optional<std::string> FindFile(std::string const& filename) const; |
| |
| /** |
| * @brief AppImage format requires a desktop file |
| */ |
| cm::optional<std::string> FindDesktopFile() const; |
| |
| /** |
| * @brief Parses a desktop file [Desktop Entry] |
| */ |
| std::unordered_map<std::string, std::string> ParseDesktopFile( |
| std::string const& filePath) const; |
| |
| /** |
| * @brief changes the RPATH so that AppImage can find it's libraries |
| */ |
| bool ChangeRPath(); |
| |
| bool PatchElfSetRPath(std::string const& file, |
| std::string const& rpath) const; |
| |
| std::string AppimagetoolPath; |
| std::string PatchElfPath; |
| }; |