1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- /* 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;
- };
|