Browse Source

CPackIFW: Command cpack_ifw_configure_component learned ESSENTIAL option

Konstantin Podsvirov 9 years ago
parent
commit
06ca7795f4

+ 5 - 2
Modules/CPackIFW.cmake

@@ -189,7 +189,7 @@
 #
 # ::
 #
-#   cpack_ifw_configure_component(<compname> [COMMON]
+#   cpack_ifw_configure_component(<compname> [COMMON] [ESSENTIAL]
 #                       [NAME <name>]
 #                       [VERSION <version>]
 #                       [SCRIPT <script>]
@@ -202,6 +202,9 @@
 # ``COMMON`` if set, then the component will be packaged and installed as part
 # of a group to which it belongs.
 #
+# ``ESSENTIAL`` if set, then the package manager stays disabled until that
+# component is updated.
+#
 # ``NAME`` is used to create domain-like identification for this component.
 # By default used origin component name.
 #
@@ -545,7 +548,7 @@ macro(cpack_ifw_configure_component compname)
 
   string(TOUPPER ${compname} _CPACK_IFWCOMP_UNAME)
 
-  set(_IFW_OPT COMMON)
+  set(_IFW_OPT COMMON ESSENTIAL)
   set(_IFW_ARGS NAME VERSION SCRIPT PRIORITY)
   set(_IFW_MULTI_ARGS DEPENDS LICENSES)
   cmake_parse_arguments(CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME} "${_IFW_OPT}" "${_IFW_ARGS}" "${_IFW_MULTI_ARGS}" ${ARGN})

+ 11 - 0
Source/CPack/IFW/cmCPackIFWPackage.cxx

@@ -146,6 +146,7 @@ void cmCPackIFWPackage::DefaultConfiguration()
   Licenses.clear();
   SortingPriority = "";
   Default = "";
+  Essential = "";
   Virtual = "";
   ForcedInstallation = "";
 }
@@ -267,6 +268,11 @@ int cmCPackIFWPackage::ConfigureFromComponent(cmCPackComponent* component)
   // Default
   Default = component->IsDisabledByDefault ? "false" : "true";
 
+  // Essential
+  if (this->IsOn(prefix + "ESSENTIAL")) {
+    Essential = "true";
+  }
+
   // Virtual
   Virtual = component->IsHidden ? "true" : "";
 
@@ -452,6 +458,11 @@ void cmCPackIFWPackage::GeneratePackageFile()
     xout.Element("Default", Default);
   }
 
+  // Essential
+  if (!Essential.empty()) {
+    xout.Element("Essential", Essential);
+  }
+
   // Priority
   if (!SortingPriority.empty()) {
     xout.Element("SortingPriority", SortingPriority);

+ 3 - 0
Source/CPack/IFW/cmCPackIFWPackage.h

@@ -101,6 +101,9 @@ public:
   /// Set to true to preselect the component in the installer
   std::string Default;
 
+  /// Marks the package as essential to force a restart of the MaintenanceTool
+  std::string Essential;
+
   /// Set to true to hide the component from the installer
   std::string Virtual;