File: cmCPackInnoSetupGenerator.h

package info (click to toggle)
cmake 4.1.2-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 147,412 kB
  • sloc: ansic: 403,924; cpp: 290,826; sh: 4,091; python: 3,357; yacc: 3,106; lex: 1,189; f90: 532; asm: 471; lisp: 375; cs: 270; java: 266; fortran: 230; perl: 217; objc: 215; xml: 198; makefile: 98; javascript: 83; pascal: 63; tcl: 55; php: 25; ruby: 22
file content (123 lines) | stat: -rw-r--r-- 3,681 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
file LICENSE.rst or https://cmake.org/licensing for details. */

#pragma once

#include <map>
#include <string>
#include <vector>

#include "cmCPackGenerator.h"
#include "cmValue.h"

using cmCPackInnoSetupKeyValuePairs = std::map<std::string, std::string>;

class cmCPackComponentGroup;
class cmCPackComponent;

/** \class cmCPackInnoSetupGenerator
 * \brief A generator for Inno Setup
 *
 * https://jrsoftware.org/isinfo.php
 */
class cmCPackInnoSetupGenerator : public cmCPackGenerator
{
public:
  cmCPackTypeMacro(cmCPackInnoSetupGenerator, cmCPackGenerator);

  /**
   * Construct generator
   */
  cmCPackInnoSetupGenerator();
  ~cmCPackInnoSetupGenerator() override;

  static bool CanGenerate();

protected:
  int InitializeInternal() override;
  int PackageFiles() override;

  inline char const* GetOutputExtension() override { return ".exe"; }

  inline cmCPackGenerator::CPackSetDestdirSupport SupportsSetDestdir()
    const override
  {
    return cmCPackGenerator::SETDESTDIR_UNSUPPORTED;
  }

  inline bool SupportsAbsoluteDestination() const override { return false; }
  inline bool SupportsComponentInstallation() const override { return true; }

private:
  enum class PathType
  {
    Windows,
    Native,
  };

  bool ProcessSetupSection();
  bool ProcessFiles();
  bool ProcessComponents();

  bool ConfigureISScript();
  bool Compile();

  bool BuildDownloadedComponentArchive(cmCPackComponent* component,
                                       std::string const& uploadDirectory,
                                       std::string* hash);

  /**
   * Returns the option's value or an empty string if the option isn't set.
   */
  cmValue RequireOption(std::string const& key);

  std::string CustomComponentInstallDirectory(
    cmCPackComponent const* component);

  /**
   * Translates boolean expressions into "yes" or "no", as required in
   * Inno Setup (only if "CPACK_INNOSETUP_USE_CMAKE_BOOL_FORMAT" is on).
   */
  std::string TranslateBool(std::string const& value);

  /**
   * Creates a typical line of key and value pairs using the given map.
   *
   * (e.g.: Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}";
   * GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked)
   */
  std::string ISKeyValueLine(cmCPackInnoSetupKeyValuePairs const& params);

  std::string CreateRecursiveComponentPath(cmCPackComponentGroup* group,
                                           std::string const& path = "");

  void CreateRecursiveComponentGroups(cmCPackComponentGroup* group);

  /**
   * These functions add quotes if the given value hasn't already quotes.
   * Paths are converted into the format used by Windows before.
   */
  std::string Quote(std::string const& string);
  std::string QuotePath(std::string const& path,
                        PathType type = PathType::Windows);

  /**
   * This function replaces the following 5 characters with their %-encoding:
   * '|'  '}'  ','  '%'  '"'
   * Required for Inno Setup constants like {cm:...}
   */
  std::string PrepareForConstant(std::string const& string);

  std::vector<std::string> includeDirectives;
  cmCPackInnoSetupKeyValuePairs setupDirectives;
  bool toplevelProgramFolder;
  std::vector<std::string> languageInstructions;
  std::vector<std::string> fileInstructions;
  std::vector<std::string> dirInstructions;
  std::vector<std::string> typeInstructions;
  std::vector<std::string> componentInstructions;
  std::vector<std::string> iconInstructions;
  std::vector<std::string> desktopIconComponents;
  std::vector<std::string> runInstructions;
  std::vector<std::string> codeIncludes;
};