cmCPackDragNDropGenerator.h 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. file Copyright.txt or https://cmake.org/licensing for details. */
  3. #pragma once
  4. #include "cmConfigure.h" // IWYU pragma: keep
  5. #include <cstddef>
  6. #include <sstream>
  7. #include <string>
  8. #include <vector>
  9. #include "cmCPackGenerator.h"
  10. class cmGeneratedFileStream;
  11. class cmXMLWriter;
  12. /** \class cmCPackDragNDropGenerator
  13. * \brief A generator for OSX drag-n-drop installs
  14. */
  15. class cmCPackDragNDropGenerator : public cmCPackGenerator
  16. {
  17. public:
  18. cmCPackTypeMacro(cmCPackDragNDropGenerator, cmCPackGenerator);
  19. cmCPackDragNDropGenerator();
  20. ~cmCPackDragNDropGenerator() override;
  21. protected:
  22. int InitializeInternal() override;
  23. const char* GetOutputExtension() override;
  24. int PackageFiles() override;
  25. bool SupportsComponentInstallation() const override;
  26. bool CopyFile(std::ostringstream& source, std::ostringstream& target);
  27. bool CreateEmptyFile(std::ostringstream& target, size_t size);
  28. bool RunCommand(std::string const& command, std::string* output = nullptr);
  29. std::string GetComponentInstallSuffix(
  30. const std::string& componentName) override;
  31. std::string GetComponentInstallDirNameSuffix(
  32. const std::string& componentName) override;
  33. int CreateDMG(const std::string& src_dir, const std::string& output_file);
  34. private:
  35. std::string slaDirectory;
  36. bool singleLicense;
  37. struct RezDict
  38. {
  39. std::string Name;
  40. size_t ID;
  41. std::vector<unsigned char> Data;
  42. };
  43. struct RezArray
  44. {
  45. std::string Key;
  46. std::vector<RezDict> Entries;
  47. };
  48. struct RezDoc
  49. {
  50. RezArray LPic = { "LPic", {} };
  51. RezArray Menu = { "STR#", {} };
  52. RezArray Text = { "TEXT", {} };
  53. RezArray RTF = { "RTF ", {} };
  54. };
  55. void WriteRezXML(std::string const& file, RezDoc const& rez);
  56. void WriteRezArray(cmXMLWriter& xml, RezArray const& array);
  57. void WriteRezDict(cmXMLWriter& xml, RezDict const& dict);
  58. bool WriteLicense(RezDoc& rez, size_t licenseNumber,
  59. std::string licenseLanguage,
  60. const std::string& licenseFile, std::string* error);
  61. void EncodeLicense(RezDict& dict, std::vector<std::string> const& lines);
  62. void EncodeMenu(RezDict& dict, std::vector<std::string> const& lines);
  63. bool ReadFile(std::string const& file, std::vector<std::string>& lines,
  64. std::string* error);
  65. bool BreakLongLine(const std::string& line, std::vector<std::string>& lines,
  66. std::string* error);
  67. };