CPackWIX: Enabled patching of WIX <Feature> tags

This commit is contained in:
Michael Stürmer 2016-09-09 10:53:26 +02:00 committed by Nils Gladitz
parent d62a5dfc86
commit c0bccc51df
5 changed files with 21 additions and 9 deletions

View File

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

View File

@ -147,7 +147,7 @@
# } # }
# #
# Currently fragments can be injected into most # 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: # The following additional special Ids can be used:
# #

View File

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

View File

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

View File

@ -13,6 +13,7 @@
#ifndef cmWIXFeaturesSourceWriter_h #ifndef cmWIXFeaturesSourceWriter_h
#define cmWIXFeaturesSourceWriter_h #define cmWIXFeaturesSourceWriter_h
#include "cmWIXPatch.h"
#include "cmWIXSourceWriter.h" #include "cmWIXSourceWriter.h"
#include <CPack/cmCPackGenerator.h> #include <CPack/cmCPackGenerator.h>
@ -29,9 +30,11 @@ public:
void CreateCMakePackageRegistryEntry(std::string const& package, void CreateCMakePackageRegistryEntry(std::string const& package,
std::string const& upgradeGuid); 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); void EmitComponentRef(std::string const& id);
}; };