|
@@ -198,6 +198,18 @@ bool cmCPackWIXGenerator::InitializeWiXConfiguration()
|
|
|
<< std::endl);
|
|
<< std::endl);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ if(GetOption("CPACK_WIX_UI_REF") == 0)
|
|
|
|
|
+ {
|
|
|
|
|
+ std::string defaultRef = "WixUI_InstallDir";
|
|
|
|
|
+
|
|
|
|
|
+ if(Components.size())
|
|
|
|
|
+ {
|
|
|
|
|
+ defaultRef = "WixUI_FeatureTree";
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ SetOption("CPACK_WIX_UI_REF", defaultRef.c_str());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
CollectExtensions("CPACK_WIX_EXTENSIONS", candleExtensions);
|
|
CollectExtensions("CPACK_WIX_EXTENSIONS", candleExtensions);
|
|
|
CollectExtensions("CPACK_WIX_CANDLE_EXTENSIONS", candleExtensions);
|
|
CollectExtensions("CPACK_WIX_CANDLE_EXTENSIONS", candleExtensions);
|
|
|
|
|
|
|
@@ -296,6 +308,7 @@ bool cmCPackWIXGenerator::CreateWiXVariablesIncludeFile()
|
|
|
SetOptionIfNotSet("CPACK_WIX_PROGRAM_MENU_FOLDER",
|
|
SetOptionIfNotSet("CPACK_WIX_PROGRAM_MENU_FOLDER",
|
|
|
GetOption("CPACK_PACKAGE_NAME"));
|
|
GetOption("CPACK_PACKAGE_NAME"));
|
|
|
CopyDefinition(includeFile, "CPACK_WIX_PROGRAM_MENU_FOLDER");
|
|
CopyDefinition(includeFile, "CPACK_WIX_PROGRAM_MENU_FOLDER");
|
|
|
|
|
+ CopyDefinition(includeFile, "CPACK_WIX_UI_REF");
|
|
|
|
|
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
@@ -401,40 +414,77 @@ bool cmCPackWIXGenerator::CreateWiXSourceFiles()
|
|
|
|
|
|
|
|
featureDefinitions.BeginElement("Feature");
|
|
featureDefinitions.BeginElement("Feature");
|
|
|
featureDefinitions.AddAttribute("Id", "ProductFeature");
|
|
featureDefinitions.AddAttribute("Id", "ProductFeature");
|
|
|
- featureDefinitions.AddAttribute("Title", Name);
|
|
|
|
|
|
|
+ featureDefinitions.AddAttribute("Display", "expand");
|
|
|
|
|
+ featureDefinitions.AddAttribute("ConfigurableDirectory", "INSTALL_ROOT");
|
|
|
|
|
+
|
|
|
|
|
+ std::string cpackPackageName;
|
|
|
|
|
+ if(!RequireOption("CPACK_PACKAGE_NAME", cpackPackageName))
|
|
|
|
|
+ {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ featureDefinitions.AddAttribute("Title", cpackPackageName);
|
|
|
|
|
+
|
|
|
featureDefinitions.AddAttribute("Level", "1");
|
|
featureDefinitions.AddAttribute("Level", "1");
|
|
|
|
|
+
|
|
|
|
|
+ CreateFeatureHierarchy(featureDefinitions);
|
|
|
|
|
+
|
|
|
featureDefinitions.EndElement("Feature");
|
|
featureDefinitions.EndElement("Feature");
|
|
|
|
|
|
|
|
- featureDefinitions.BeginElement("FeatureRef");
|
|
|
|
|
- featureDefinitions.AddAttribute("Id", "ProductFeature");
|
|
|
|
|
|
|
+ bool hasShortcuts = false;
|
|
|
|
|
|
|
|
- std::vector<std::string> cpackPackageExecutablesList;
|
|
|
|
|
- const char *cpackPackageExecutables = GetOption("CPACK_PACKAGE_EXECUTABLES");
|
|
|
|
|
- if(cpackPackageExecutables)
|
|
|
|
|
|
|
+ shortcut_map_t globalShortcuts;
|
|
|
|
|
+ if(Components.empty())
|
|
|
{
|
|
{
|
|
|
- cmSystemTools::ExpandListArgument(cpackPackageExecutables,
|
|
|
|
|
- cpackPackageExecutablesList);
|
|
|
|
|
- if(cpackPackageExecutablesList.size() % 2 != 0 )
|
|
|
|
|
|
|
+ AddComponentsToFeature(toplevel, "ProductFeature",
|
|
|
|
|
+ directoryDefinitions, fileDefinitions, featureDefinitions,
|
|
|
|
|
+ globalShortcuts);
|
|
|
|
|
+ if(globalShortcuts.size())
|
|
|
|
|
+ {
|
|
|
|
|
+ hasShortcuts = true;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ for(std::map<std::string, cmCPackComponent>::const_iterator
|
|
|
|
|
+ i = Components.begin(); i != Components.end(); ++i)
|
|
|
|
|
+ {
|
|
|
|
|
+ cmCPackComponent const& component = i->second;
|
|
|
|
|
+
|
|
|
|
|
+ std::string componentPath = toplevel;
|
|
|
|
|
+ componentPath += "/";
|
|
|
|
|
+ componentPath += component.Name;
|
|
|
|
|
+
|
|
|
|
|
+ std::string componentFeatureId = "CM_C_" + component.Name;
|
|
|
|
|
+
|
|
|
|
|
+ shortcut_map_t featureShortcuts;
|
|
|
|
|
+ AddComponentsToFeature(componentPath, componentFeatureId,
|
|
|
|
|
+ directoryDefinitions, fileDefinitions,
|
|
|
|
|
+ featureDefinitions, featureShortcuts);
|
|
|
|
|
+ if(featureShortcuts.size())
|
|
|
{
|
|
{
|
|
|
- cmCPackLogger(cmCPackLog::LOG_ERROR,
|
|
|
|
|
- "CPACK_PACKAGE_EXECUTABLES should contain pairs of <executable> and "
|
|
|
|
|
- "<text label>." << std::endl);
|
|
|
|
|
- return false;
|
|
|
|
|
|
|
+ hasShortcuts = true;
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
- AddDirectoryAndFileDefinitons(
|
|
|
|
|
- toplevel, "INSTALL_ROOT",
|
|
|
|
|
- directoryDefinitions, fileDefinitions, featureDefinitions,
|
|
|
|
|
- cpackPackageExecutablesList);
|
|
|
|
|
|
|
+ if(featureShortcuts.size())
|
|
|
|
|
+ {
|
|
|
|
|
+ if(!CreateStartMenuShortcuts(component.Name, componentFeatureId,
|
|
|
|
|
+ featureShortcuts, fileDefinitions, featureDefinitions))
|
|
|
|
|
+ {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- if(!CreateStartMenuShortcuts(
|
|
|
|
|
- directoryDefinitions, fileDefinitions, featureDefinitions))
|
|
|
|
|
|
|
+ if(hasShortcuts)
|
|
|
{
|
|
{
|
|
|
|
|
+ if(!CreateStartMenuShortcuts(std::string(), "ProductFeature",
|
|
|
|
|
+ globalShortcuts, fileDefinitions, featureDefinitions))
|
|
|
|
|
+ {
|
|
|
return false;
|
|
return false;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- featureDefinitions.EndElement("FeatureRef");
|
|
|
|
|
featureDefinitions.EndElement("Fragment");
|
|
featureDefinitions.EndElement("Fragment");
|
|
|
fileDefinitions.EndElement("Fragment");
|
|
fileDefinitions.EndElement("Fragment");
|
|
|
|
|
|
|
@@ -444,6 +494,12 @@ bool cmCPackWIXGenerator::CreateWiXSourceFiles()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
directoryDefinitions.EndElement("Directory");
|
|
directoryDefinitions.EndElement("Directory");
|
|
|
|
|
+
|
|
|
|
|
+ if(hasShortcuts)
|
|
|
|
|
+ {
|
|
|
|
|
+ CreateStartMenuFolder(directoryDefinitions);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
directoryDefinitions.EndElement("Directory");
|
|
directoryDefinitions.EndElement("Directory");
|
|
|
directoryDefinitions.EndElement("Fragment");
|
|
directoryDefinitions.EndElement("Fragment");
|
|
|
|
|
|
|
@@ -475,16 +531,154 @@ bool cmCPackWIXGenerator::CreateWiXSourceFiles()
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-bool cmCPackWIXGenerator::CreateStartMenuShortcuts(
|
|
|
|
|
|
|
+bool cmCPackWIXGenerator::CreateFeatureHierarchy(
|
|
|
|
|
+ cmWIXSourceWriter& featureDefinitions)
|
|
|
|
|
+{
|
|
|
|
|
+ for(std::map<std::string, cmCPackComponentGroup>::const_iterator
|
|
|
|
|
+ i = ComponentGroups.begin(); i != ComponentGroups.end(); ++i)
|
|
|
|
|
+ {
|
|
|
|
|
+ cmCPackComponentGroup const& group = i->second;
|
|
|
|
|
+ if(group.ParentGroup == 0)
|
|
|
|
|
+ {
|
|
|
|
|
+ if(!EmitFeatureForComponentGroup(featureDefinitions, group))
|
|
|
|
|
+ {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ for(std::map<std::string, cmCPackComponent>::const_iterator
|
|
|
|
|
+ i = Components.begin(); i != Components.end(); ++i)
|
|
|
|
|
+ {
|
|
|
|
|
+ cmCPackComponent const& component = i->second;
|
|
|
|
|
+
|
|
|
|
|
+ if(!component.Group)
|
|
|
|
|
+ {
|
|
|
|
|
+ if(!EmitFeatureForComponent(featureDefinitions, component))
|
|
|
|
|
+ {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return true;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+bool cmCPackWIXGenerator::EmitFeatureForComponentGroup(
|
|
|
|
|
+ cmWIXSourceWriter& featureDefinitions,
|
|
|
|
|
+ cmCPackComponentGroup const& group)
|
|
|
|
|
+{
|
|
|
|
|
+ featureDefinitions.BeginElement("Feature");
|
|
|
|
|
+ featureDefinitions.AddAttribute("Id", "CM_G_" + group.Name);
|
|
|
|
|
+
|
|
|
|
|
+ if(group.IsExpandedByDefault)
|
|
|
|
|
+ {
|
|
|
|
|
+ featureDefinitions.AddAttribute("Display", "expand");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ featureDefinitions.AddAttributeUnlessEmpty(
|
|
|
|
|
+ "Title", group.DisplayName);
|
|
|
|
|
+
|
|
|
|
|
+ featureDefinitions.AddAttributeUnlessEmpty(
|
|
|
|
|
+ "Description", group.Description);
|
|
|
|
|
+
|
|
|
|
|
+ for(std::vector<cmCPackComponentGroup*>::const_iterator
|
|
|
|
|
+ i = group.Subgroups.begin(); i != group.Subgroups.end(); ++i)
|
|
|
|
|
+ {
|
|
|
|
|
+ if(!EmitFeatureForComponentGroup(featureDefinitions, **i))
|
|
|
|
|
+ {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ for(std::vector<cmCPackComponent*>::const_iterator
|
|
|
|
|
+ i = group.Components.begin(); i != group.Components.end(); ++i)
|
|
|
|
|
+ {
|
|
|
|
|
+ if(!EmitFeatureForComponent(featureDefinitions, **i))
|
|
|
|
|
+ {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ featureDefinitions.EndElement("Feature");
|
|
|
|
|
+
|
|
|
|
|
+ return true;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+bool cmCPackWIXGenerator::EmitFeatureForComponent(
|
|
|
|
|
+ cmWIXSourceWriter& featureDefinitions,
|
|
|
|
|
+ cmCPackComponent const& component)
|
|
|
|
|
+{
|
|
|
|
|
+ featureDefinitions.BeginElement("Feature");
|
|
|
|
|
+ featureDefinitions.AddAttribute("Id", "CM_C_" + component.Name);
|
|
|
|
|
+
|
|
|
|
|
+ featureDefinitions.AddAttributeUnlessEmpty(
|
|
|
|
|
+ "Title", component.DisplayName);
|
|
|
|
|
+
|
|
|
|
|
+ featureDefinitions.AddAttributeUnlessEmpty(
|
|
|
|
|
+ "Description", component.Description);
|
|
|
|
|
+
|
|
|
|
|
+ if(component.IsRequired)
|
|
|
|
|
+ {
|
|
|
|
|
+ featureDefinitions.AddAttribute("Absent", "disallow");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if(component.IsHidden)
|
|
|
|
|
+ {
|
|
|
|
|
+ featureDefinitions.AddAttribute("Display", "hidden");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ featureDefinitions.EndElement("Feature");
|
|
|
|
|
+
|
|
|
|
|
+ return true;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+bool cmCPackWIXGenerator::AddComponentsToFeature(
|
|
|
|
|
+ std::string const& rootPath,
|
|
|
|
|
+ std::string const& featureId,
|
|
|
cmWIXSourceWriter& directoryDefinitions,
|
|
cmWIXSourceWriter& directoryDefinitions,
|
|
|
cmWIXSourceWriter& fileDefinitions,
|
|
cmWIXSourceWriter& fileDefinitions,
|
|
|
- cmWIXSourceWriter& featureDefinitions)
|
|
|
|
|
|
|
+ cmWIXSourceWriter& featureDefinitions,
|
|
|
|
|
+ shortcut_map_t& shortcutMap)
|
|
|
{
|
|
{
|
|
|
- if(shortcutMap.empty())
|
|
|
|
|
|
|
+ featureDefinitions.BeginElement("FeatureRef");
|
|
|
|
|
+ featureDefinitions.AddAttribute("Id", featureId);
|
|
|
|
|
+
|
|
|
|
|
+ std::vector<std::string> cpackPackageExecutablesList;
|
|
|
|
|
+ const char *cpackPackageExecutables = GetOption("CPACK_PACKAGE_EXECUTABLES");
|
|
|
|
|
+ if(cpackPackageExecutables)
|
|
|
{
|
|
{
|
|
|
- return true;
|
|
|
|
|
|
|
+ cmSystemTools::ExpandListArgument(cpackPackageExecutables,
|
|
|
|
|
+ cpackPackageExecutablesList);
|
|
|
|
|
+ if(cpackPackageExecutablesList.size() % 2 != 0 )
|
|
|
|
|
+ {
|
|
|
|
|
+ cmCPackLogger(cmCPackLog::LOG_ERROR,
|
|
|
|
|
+ "CPACK_PACKAGE_EXECUTABLES should contain pairs of <executable> and "
|
|
|
|
|
+ "<text label>." << std::endl);
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ AddDirectoryAndFileDefinitons(
|
|
|
|
|
+ rootPath, "INSTALL_ROOT",
|
|
|
|
|
+ directoryDefinitions, fileDefinitions, featureDefinitions,
|
|
|
|
|
+ cpackPackageExecutablesList, shortcutMap);
|
|
|
|
|
+
|
|
|
|
|
+ featureDefinitions.EndElement("FeatureRef");
|
|
|
|
|
+
|
|
|
|
|
+ return true;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+bool cmCPackWIXGenerator::CreateStartMenuShortcuts(
|
|
|
|
|
+ std::string const& cpackComponentName,
|
|
|
|
|
+ std::string const& featureId,
|
|
|
|
|
+ shortcut_map_t& shortcutMap,
|
|
|
|
|
+ cmWIXSourceWriter& fileDefinitions,
|
|
|
|
|
+ cmWIXSourceWriter& featureDefinitions)
|
|
|
|
|
+{
|
|
|
|
|
+ featureDefinitions.BeginElement("FeatureRef");
|
|
|
|
|
+ featureDefinitions.AddAttribute("Id", featureId);
|
|
|
|
|
+
|
|
|
std::string cpackVendor;
|
|
std::string cpackVendor;
|
|
|
if(!RequireOption("CPACK_PACKAGE_VENDOR", cpackVendor))
|
|
if(!RequireOption("CPACK_PACKAGE_VENDOR", cpackVendor))
|
|
|
{
|
|
{
|
|
@@ -497,10 +691,19 @@ bool cmCPackWIXGenerator::CreateStartMenuShortcuts(
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ std::string idSuffix;
|
|
|
|
|
+ if(!cpackComponentName.empty())
|
|
|
|
|
+ {
|
|
|
|
|
+ idSuffix += "_";
|
|
|
|
|
+ idSuffix += cpackComponentName;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ std::string componentId = "CM_SHORTCUT" + idSuffix;
|
|
|
|
|
+
|
|
|
fileDefinitions.BeginElement("DirectoryRef");
|
|
fileDefinitions.BeginElement("DirectoryRef");
|
|
|
fileDefinitions.AddAttribute("Id", "PROGRAM_MENU_FOLDER");
|
|
fileDefinitions.AddAttribute("Id", "PROGRAM_MENU_FOLDER");
|
|
|
fileDefinitions.BeginElement("Component");
|
|
fileDefinitions.BeginElement("Component");
|
|
|
- fileDefinitions.AddAttribute("Id", "SHORTCUT");
|
|
|
|
|
|
|
+ fileDefinitions.AddAttribute("Id", componentId);
|
|
|
fileDefinitions.AddAttribute("Guid", "*");
|
|
fileDefinitions.AddAttribute("Guid", "*");
|
|
|
|
|
|
|
|
for(shortcut_map_t::const_iterator
|
|
for(shortcut_map_t::const_iterator
|
|
@@ -522,10 +725,13 @@ bool cmCPackWIXGenerator::CreateStartMenuShortcuts(
|
|
|
fileDefinitions.EndElement("Shortcut");
|
|
fileDefinitions.EndElement("Shortcut");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- CreateUninstallShortcut(cpackPackageName, fileDefinitions);
|
|
|
|
|
|
|
+ if(cpackComponentName.empty())
|
|
|
|
|
+ {
|
|
|
|
|
+ CreateUninstallShortcut(cpackPackageName, fileDefinitions);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
fileDefinitions.BeginElement("RemoveFolder");
|
|
fileDefinitions.BeginElement("RemoveFolder");
|
|
|
- fileDefinitions.AddAttribute("Id", "PROGRAM_MENU_FOLDER");
|
|
|
|
|
|
|
+ fileDefinitions.AddAttribute("Id", "PROGRAM_MENU_FOLDER" + idSuffix);
|
|
|
fileDefinitions.AddAttribute("On", "uninstall");
|
|
fileDefinitions.AddAttribute("On", "uninstall");
|
|
|
fileDefinitions.EndElement("RemoveFolder");
|
|
fileDefinitions.EndElement("RemoveFolder");
|
|
|
|
|
|
|
@@ -535,7 +741,15 @@ bool cmCPackWIXGenerator::CreateStartMenuShortcuts(
|
|
|
fileDefinitions.BeginElement("RegistryValue");
|
|
fileDefinitions.BeginElement("RegistryValue");
|
|
|
fileDefinitions.AddAttribute("Root", "HKCU");
|
|
fileDefinitions.AddAttribute("Root", "HKCU");
|
|
|
fileDefinitions.AddAttribute("Key", registryKey);
|
|
fileDefinitions.AddAttribute("Key", registryKey);
|
|
|
- fileDefinitions.AddAttribute("Name", "installed");
|
|
|
|
|
|
|
+
|
|
|
|
|
+ std::string valueName;
|
|
|
|
|
+ if(!cpackComponentName.empty())
|
|
|
|
|
+ {
|
|
|
|
|
+ valueName = cpackComponentName + "_";
|
|
|
|
|
+ }
|
|
|
|
|
+ valueName += "installed";
|
|
|
|
|
+
|
|
|
|
|
+ fileDefinitions.AddAttribute("Name", valueName);
|
|
|
fileDefinitions.AddAttribute("Type", "integer");
|
|
fileDefinitions.AddAttribute("Type", "integer");
|
|
|
fileDefinitions.AddAttribute("Value", "1");
|
|
fileDefinitions.AddAttribute("Value", "1");
|
|
|
fileDefinitions.AddAttribute("KeyPath", "yes");
|
|
fileDefinitions.AddAttribute("KeyPath", "yes");
|
|
@@ -545,19 +759,10 @@ bool cmCPackWIXGenerator::CreateStartMenuShortcuts(
|
|
|
fileDefinitions.EndElement("DirectoryRef");
|
|
fileDefinitions.EndElement("DirectoryRef");
|
|
|
|
|
|
|
|
featureDefinitions.BeginElement("ComponentRef");
|
|
featureDefinitions.BeginElement("ComponentRef");
|
|
|
- featureDefinitions.AddAttribute("Id", "SHORTCUT");
|
|
|
|
|
|
|
+ featureDefinitions.AddAttribute("Id", componentId);
|
|
|
featureDefinitions.EndElement("ComponentRef");
|
|
featureDefinitions.EndElement("ComponentRef");
|
|
|
|
|
|
|
|
- directoryDefinitions.BeginElement("Directory");
|
|
|
|
|
- directoryDefinitions.AddAttribute("Id", "ProgramMenuFolder");
|
|
|
|
|
-
|
|
|
|
|
- directoryDefinitions.BeginElement("Directory");
|
|
|
|
|
- directoryDefinitions.AddAttribute("Id", "PROGRAM_MENU_FOLDER");
|
|
|
|
|
- const char *startMenuFolder = GetOption("CPACK_WIX_PROGRAM_MENU_FOLDER");
|
|
|
|
|
- directoryDefinitions.AddAttribute("Name", startMenuFolder);
|
|
|
|
|
- directoryDefinitions.EndElement("Directory");
|
|
|
|
|
-
|
|
|
|
|
- directoryDefinitions.EndElement("Directory");
|
|
|
|
|
|
|
+ featureDefinitions.EndElement("FeatureRef");
|
|
|
|
|
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
@@ -628,7 +833,8 @@ void cmCPackWIXGenerator::AddDirectoryAndFileDefinitons(
|
|
|
cmWIXSourceWriter& directoryDefinitions,
|
|
cmWIXSourceWriter& directoryDefinitions,
|
|
|
cmWIXSourceWriter& fileDefinitions,
|
|
cmWIXSourceWriter& fileDefinitions,
|
|
|
cmWIXSourceWriter& featureDefinitions,
|
|
cmWIXSourceWriter& featureDefinitions,
|
|
|
- const std::vector<std::string>& packageExecutables)
|
|
|
|
|
|
|
+ const std::vector<std::string>& packageExecutables,
|
|
|
|
|
+ shortcut_map_t& shortcutMap)
|
|
|
{
|
|
{
|
|
|
cmsys::Directory dir;
|
|
cmsys::Directory dir;
|
|
|
dir.Load(topdir.c_str());
|
|
dir.Load(topdir.c_str());
|
|
@@ -662,7 +868,8 @@ void cmCPackWIXGenerator::AddDirectoryAndFileDefinitons(
|
|
|
directoryDefinitions,
|
|
directoryDefinitions,
|
|
|
fileDefinitions,
|
|
fileDefinitions,
|
|
|
featureDefinitions,
|
|
featureDefinitions,
|
|
|
- packageExecutables);
|
|
|
|
|
|
|
+ packageExecutables,
|
|
|
|
|
+ shortcutMap);
|
|
|
|
|
|
|
|
directoryDefinitions.EndElement("Directory");
|
|
directoryDefinitions.EndElement("Directory");
|
|
|
}
|
|
}
|
|
@@ -922,3 +1129,18 @@ void cmCPackWIXGenerator::AddCustomFlags(
|
|
|
stream << " " << QuotePath(*i);
|
|
stream << " " << QuotePath(*i);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+void cmCPackWIXGenerator::CreateStartMenuFolder(
|
|
|
|
|
+ cmWIXSourceWriter& directoryDefinitions)
|
|
|
|
|
+{
|
|
|
|
|
+ directoryDefinitions.BeginElement("Directory");
|
|
|
|
|
+ directoryDefinitions.AddAttribute("Id", "ProgramMenuFolder");
|
|
|
|
|
+
|
|
|
|
|
+ directoryDefinitions.BeginElement("Directory");
|
|
|
|
|
+ directoryDefinitions.AddAttribute("Id", "PROGRAM_MENU_FOLDER");
|
|
|
|
|
+ const char *startMenuFolder = GetOption("CPACK_WIX_PROGRAM_MENU_FOLDER");
|
|
|
|
|
+ directoryDefinitions.AddAttribute("Name", startMenuFolder);
|
|
|
|
|
+ directoryDefinitions.EndElement("Directory");
|
|
|
|
|
+
|
|
|
|
|
+ directoryDefinitions.EndElement("Directory");
|
|
|
|
|
+}
|