cmCPackWIXGenerator.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. /*============================================================================
  2. CMake - Cross Platform Makefile Generator
  3. Copyright 2012-2015 Kitware, Inc.
  4. Distributed under the OSI-approved BSD License (the "License");
  5. see accompanying file Copyright.txt for details.
  6. This software is distributed WITHOUT ANY WARRANTY; without even the
  7. implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  8. See the License for more information.
  9. ============================================================================*/
  10. #ifndef cmCPackWIXGenerator_h
  11. #define cmCPackWIXGenerator_h
  12. #include <CPack/cmCPackGenerator.h>
  13. #include "cmWIXPatch.h"
  14. #include "cmWIXShortcut.h"
  15. #include <map>
  16. #include <string>
  17. class cmWIXSourceWriter;
  18. class cmWIXDirectoriesSourceWriter;
  19. class cmWIXFilesSourceWriter;
  20. class cmWIXFeaturesSourceWriter;
  21. /** \class cmCPackWIXGenerator
  22. * \brief A generator for WIX files
  23. */
  24. class cmCPackWIXGenerator : public cmCPackGenerator
  25. {
  26. public:
  27. cmCPackTypeMacro(cmCPackWIXGenerator, cmCPackGenerator);
  28. cmCPackWIXGenerator();
  29. ~cmCPackWIXGenerator();
  30. protected:
  31. virtual int InitializeInternal();
  32. virtual int PackageFiles();
  33. virtual const char* GetOutputExtension() { return ".msi"; }
  34. virtual enum CPackSetDestdirSupport SupportsSetDestdir() const
  35. {
  36. return SETDESTDIR_UNSUPPORTED;
  37. }
  38. virtual bool SupportsAbsoluteDestination() const { return false; }
  39. virtual bool SupportsComponentInstallation() const { return true; }
  40. private:
  41. typedef std::map<std::string, std::string> id_map_t;
  42. typedef std::map<std::string, size_t> ambiguity_map_t;
  43. typedef std::set<std::string> extension_set_t;
  44. bool InitializeWiXConfiguration();
  45. bool PackageFilesImpl();
  46. void CreateWiXVariablesIncludeFile();
  47. void CreateWiXPropertiesIncludeFile();
  48. void CreateWiXProductFragmentIncludeFile();
  49. void CopyDefinition(cmWIXSourceWriter& source, std::string const& name);
  50. void AddDefinition(cmWIXSourceWriter& source, std::string const& name,
  51. std::string const& value);
  52. bool CreateWiXSourceFiles();
  53. std::string GetProgramFilesFolderId() const;
  54. bool GenerateMainSourceFileFromTemplate();
  55. bool CreateFeatureHierarchy(cmWIXFeaturesSourceWriter& featureDefinitions);
  56. bool AddComponentsToFeature(
  57. std::string const& rootPath, std::string const& featureId,
  58. cmWIXDirectoriesSourceWriter& directoryDefinitions,
  59. cmWIXFilesSourceWriter& fileDefinitions,
  60. cmWIXFeaturesSourceWriter& featureDefinitions, cmWIXShortcuts& shortcuts);
  61. bool CreateShortcuts(std::string const& cpackComponentName,
  62. std::string const& featureId,
  63. cmWIXShortcuts const& shortcuts,
  64. bool emitUninstallShortcut,
  65. cmWIXFilesSourceWriter& fileDefinitions,
  66. cmWIXFeaturesSourceWriter& featureDefinitions);
  67. bool CreateShortcutsOfSpecificType(
  68. cmWIXShortcuts::Type type, std::string const& cpackComponentName,
  69. std::string const& featureId, std::string const& idPrefix,
  70. cmWIXShortcuts const& shortcuts, bool emitUninstallShortcut,
  71. cmWIXFilesSourceWriter& fileDefinitions,
  72. cmWIXFeaturesSourceWriter& featureDefinitions);
  73. void AppendUserSuppliedExtraSources();
  74. void AppendUserSuppliedExtraObjects(std::ostream& stream);
  75. bool CreateLicenseFile();
  76. bool RunWiXCommand(std::string const& command);
  77. bool RunCandleCommand(std::string const& sourceFile,
  78. std::string const& objectFile);
  79. bool RunLightCommand(std::string const& objectFiles);
  80. void AddDirectoryAndFileDefinitons(
  81. std::string const& topdir, std::string const& directoryId,
  82. cmWIXDirectoriesSourceWriter& directoryDefinitions,
  83. cmWIXFilesSourceWriter& fileDefinitions,
  84. cmWIXFeaturesSourceWriter& featureDefinitions,
  85. std::vector<std::string> const& packageExecutables,
  86. std::vector<std::string> const& desktopExecutables,
  87. cmWIXShortcuts& shortcuts);
  88. bool RequireOption(std::string const& name, std::string& value) const;
  89. std::string GetArchitecture() const;
  90. static std::string GenerateGUID();
  91. static std::string QuotePath(std::string const& path);
  92. static std::string GetRightmostExtension(std::string const& filename);
  93. std::string PathToId(std::string const& path);
  94. std::string CreateNewIdForPath(std::string const& path);
  95. static std::string CreateHashedId(std::string const& path,
  96. std::string const& normalizedFilename);
  97. std::string NormalizeComponentForId(std::string const& component,
  98. size_t& replacementCount);
  99. static bool IsLegalIdCharacter(char c);
  100. void CollectExtensions(std::string const& variableName,
  101. extension_set_t& extensions);
  102. void AddCustomFlags(std::string const& variableName, std::ostream& stream);
  103. std::string RelativePathWithoutComponentPrefix(std::string const& path);
  104. std::vector<std::string> WixSources;
  105. id_map_t PathToIdMap;
  106. ambiguity_map_t IdAmbiguityCounter;
  107. extension_set_t CandleExtensions;
  108. extension_set_t LightExtensions;
  109. std::string CPackTopLevel;
  110. cmWIXPatch* Patch;
  111. };
  112. #endif