CPackWiX: added new CPACK_WIX_CMAKE_PACKAGE_REGISTRY variable

Allows automatic registration of installed packages with
the cmake package registry.
This commit is contained in:
Nils Gladitz 2014-01-08 01:28:24 +01:00
parent 855e8759fd
commit 92c4d4039e
3 changed files with 56 additions and 1 deletions

View File

@ -205,6 +205,17 @@
# #
# ``<TOOL>`` can be either LIGHT or CANDLE. # ``<TOOL>`` can be either LIGHT or CANDLE.
# #
# .. variable:: CPACK_WIX_CMAKE_PACKAGE_REGISTRY
#
# If this variable is set the generated installer will create
# an entry in the windows registry key
# ``HKEY_LOCAL_MACHINE\Software\Kitware\CMake\Packages\<package>``
# The value for ``<package>`` is provided by this variable.
#
# Assuming you also install a CMake configuration file this will
# allow other CMake projects to find your package with
# the :command:`find_package` command.
#
#============================================================================= #=============================================================================
# Copyright 2013 Kitware, Inc. # Copyright 2013 Kitware, Inc.

View File

@ -437,7 +437,15 @@ bool cmCPackWIXGenerator::CreateWiXSourceFiles()
featureDefinitions.AddAttribute("Level", "1"); featureDefinitions.AddAttribute("Level", "1");
CreateFeatureHierarchy(featureDefinitions); if(!CreateCMakePackageRegistryEntry(featureDefinitions))
{
return false;
}
if(!CreateFeatureHierarchy(featureDefinitions))
{
return false;
}
featureDefinitions.EndElement("Feature"); featureDefinitions.EndElement("Feature");
@ -564,6 +572,39 @@ bool cmCPackWIXGenerator::CreateWiXSourceFiles()
return true; return true;
} }
bool cmCPackWIXGenerator::CreateCMakePackageRegistryEntry(
cmWIXSourceWriter& featureDefinitions)
{
const char* package = GetOption("CPACK_WIX_CMAKE_PACKAGE_REGISTRY");
if(!package)
{
return true;
}
featureDefinitions.BeginElement("Component");
featureDefinitions.AddAttribute("Id", "CM_PACKAGE_REGISTRY");
featureDefinitions.AddAttribute("Directory", "TARGETDIR");
featureDefinitions.AddAttribute("Guid", "*");
std::string registryKey =
std::string("Software\\Kitware\\CMake\\Packages\\") + package;
std::string upgradeGuid = GetOption("CPACK_WIX_UPGRADE_GUID");
featureDefinitions.BeginElement("RegistryValue");
featureDefinitions.AddAttribute("Root", "HKLM");
featureDefinitions.AddAttribute("Key", registryKey);
featureDefinitions.AddAttribute("Name", upgradeGuid);
featureDefinitions.AddAttribute("Type", "string");
featureDefinitions.AddAttribute("Value", "[INSTALL_ROOT]");
featureDefinitions.AddAttribute("KeyPath", "yes");
featureDefinitions.EndElement("RegistryValue");
featureDefinitions.EndElement("Component");
return true;
}
bool cmCPackWIXGenerator::CreateFeatureHierarchy( bool cmCPackWIXGenerator::CreateFeatureHierarchy(
cmWIXSourceWriter& featureDefinitions) cmWIXSourceWriter& featureDefinitions)
{ {

View File

@ -81,6 +81,9 @@ private:
bool CreateWiXSourceFiles(); bool CreateWiXSourceFiles();
bool CreateCMakePackageRegistryEntry(
cmWIXSourceWriter& featureDefinitions);
bool CreateFeatureHierarchy( bool CreateFeatureHierarchy(
cmWIXSourceWriter& featureDefinitions); cmWIXSourceWriter& featureDefinitions);