Browse Source

CPackWiX: added new CPACK_WIX_CMAKE_PACKAGE_REGISTRY variable

Allows automatic registration of installed packages with
the cmake package registry.
Nils Gladitz 11 years ago
parent
commit
92c4d4039e

+ 11 - 0
Modules/CPackWIX.cmake

@@ -205,6 +205,17 @@
 #
 #  ``<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.

+ 42 - 1
Source/CPack/WiX/cmCPackWIXGenerator.cxx

@@ -437,7 +437,15 @@ bool cmCPackWIXGenerator::CreateWiXSourceFiles()
 
   featureDefinitions.AddAttribute("Level", "1");
 
-  CreateFeatureHierarchy(featureDefinitions);
+  if(!CreateCMakePackageRegistryEntry(featureDefinitions))
+    {
+    return false;
+    }
+
+  if(!CreateFeatureHierarchy(featureDefinitions))
+    {
+    return false;
+    }
 
   featureDefinitions.EndElement("Feature");
 
@@ -564,6 +572,39 @@ bool cmCPackWIXGenerator::CreateWiXSourceFiles()
   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(
   cmWIXSourceWriter& featureDefinitions)
 {

+ 3 - 0
Source/CPack/WiX/cmCPackWIXGenerator.h

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