Browse Source

CPackWIX: Enabled patching of WIX <Feature> tags

Michael Stürmer 9 years ago
parent
commit
c0bccc51df

+ 5 - 0
Help/release/dev/wix-feature-patch.rst

@@ -0,0 +1,5 @@
+wix-feature-patch
+-----------------
+
+* The CPack WIX generator now supports
+  CPACK_WIX_PATCH_FILE fragments for Feature elements.

+ 1 - 1
Modules/CPackWIX.cmake

@@ -147,7 +147,7 @@
 #     }
 #
 #  Currently fragments can be injected into most
-#  Component, File and Directory elements.
+#  Component, File, Directory and Feature elements.
 #
 #  The following additional special Ids can be used:
 #

+ 2 - 2
Source/CPack/WiX/cmCPackWIXGenerator.cxx

@@ -628,7 +628,7 @@ bool cmCPackWIXGenerator::CreateFeatureHierarchy(
        i != ComponentGroups.end(); ++i) {
     cmCPackComponentGroup const& group = i->second;
     if (group.ParentGroup == 0) {
-      featureDefinitions.EmitFeatureForComponentGroup(group);
+      featureDefinitions.EmitFeatureForComponentGroup(group, *this->Patch);
     }
   }
 
@@ -638,7 +638,7 @@ bool cmCPackWIXGenerator::CreateFeatureHierarchy(
     cmCPackComponent const& component = i->second;
 
     if (!component.Group) {
-      featureDefinitions.EmitFeatureForComponent(component);
+      featureDefinitions.EmitFeatureForComponent(component, *this->Patch);
     }
   }
 

+ 8 - 4
Source/CPack/WiX/cmWIXFeaturesSourceWriter.cxx

@@ -42,7 +42,7 @@ void cmWIXFeaturesSourceWriter::CreateCMakePackageRegistryEntry(
 }
 
 void cmWIXFeaturesSourceWriter::EmitFeatureForComponentGroup(
-  cmCPackComponentGroup const& group)
+  cmCPackComponentGroup const& group, cmWIXPatch& patch)
 {
   BeginElement("Feature");
   AddAttribute("Id", "CM_G_" + group.Name);
@@ -57,20 +57,22 @@ void cmWIXFeaturesSourceWriter::EmitFeatureForComponentGroup(
   for (std::vector<cmCPackComponentGroup*>::const_iterator i =
          group.Subgroups.begin();
        i != group.Subgroups.end(); ++i) {
-    EmitFeatureForComponentGroup(**i);
+    EmitFeatureForComponentGroup(**i, patch);
   }
 
   for (std::vector<cmCPackComponent*>::const_iterator i =
          group.Components.begin();
        i != group.Components.end(); ++i) {
-    EmitFeatureForComponent(**i);
+    EmitFeatureForComponent(**i, patch);
   }
 
+  patch.ApplyFragment("CM_G_" + group.Name, *this);
+
   EndElement("Feature");
 }
 
 void cmWIXFeaturesSourceWriter::EmitFeatureForComponent(
-  cmCPackComponent const& component)
+  cmCPackComponent const& component, cmWIXPatch& patch)
 {
   BeginElement("Feature");
   AddAttribute("Id", "CM_C_" + component.Name);
@@ -90,6 +92,8 @@ void cmWIXFeaturesSourceWriter::EmitFeatureForComponent(
     AddAttribute("Level", "2");
   }
 
+  patch.ApplyFragment("CM_C_" + component.Name, *this);
+
   EndElement("Feature");
 }
 

+ 5 - 2
Source/CPack/WiX/cmWIXFeaturesSourceWriter.h

@@ -13,6 +13,7 @@
 #ifndef cmWIXFeaturesSourceWriter_h
 #define cmWIXFeaturesSourceWriter_h
 
+#include "cmWIXPatch.h"
 #include "cmWIXSourceWriter.h"
 
 #include <CPack/cmCPackGenerator.h>
@@ -29,9 +30,11 @@ public:
   void CreateCMakePackageRegistryEntry(std::string const& package,
                                        std::string const& upgradeGuid);
 
-  void EmitFeatureForComponentGroup(const cmCPackComponentGroup& group);
+  void EmitFeatureForComponentGroup(const cmCPackComponentGroup& group,
+                                    cmWIXPatch& patch);
 
-  void EmitFeatureForComponent(const cmCPackComponent& component);
+  void EmitFeatureForComponent(const cmCPackComponent& component,
+                               cmWIXPatch& patch);
 
   void EmitComponentRef(std::string const& id);
 };