/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file LICENSE.rst or https://cmake.org/licensing for details. */ #pragma once #include #include #include #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 FindFile(std::string const& filename) const; /** * @brief AppImage format requires a desktop file */ cm::optional FindDesktopFile() const; /** * @brief Parses a desktop file [Desktop Entry] */ std::unordered_map 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; };