Browse Source

CPackWiX: Implement CPACK_NEVER_OVERWRITE and CPACK_PERMANENT properties

Nils Gladitz 11 years ago
parent
commit
d0b1d2a65b

+ 3 - 0
Help/manual/cmake-properties.7.rst

@@ -308,3 +308,6 @@ Properties on Installed Files
 
 .. toctree::
    :maxdepth: 1
+
+   /prop_inst/CPACK_NEVER_OVERWRITE.rst
+   /prop_inst/CPACK_PERMANENT.rst

+ 6 - 0
Help/prop_inst/CPACK_NEVER_OVERWRITE.rst

@@ -0,0 +1,6 @@
+CPACK_NEVER_OVERWRITE
+---------------------
+
+Request that this file not be overwritten on install or reinstall.
+
+The property is currently only supported by the WIX generator.

+ 6 - 0
Help/prop_inst/CPACK_PERMANENT.rst

@@ -0,0 +1,6 @@
+CPACK_PERMANENT
+---------------
+
+Request that this file not be removed on uninstall.
+
+The property is currently only supported by the WIX generator.

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

@@ -15,6 +15,7 @@
 #include <cmSystemTools.h>
 #include <cmGeneratedFileStream.h>
 #include <cmCryptoHash.h>
+#include <cmInstalledFile.h>
 #include <CPack/cmCPackLog.h>
 #include <CPack/cmCPackComponentGroup.h>
 
@@ -871,8 +872,11 @@ void cmCPackWIXGenerator::AddDirectoryAndFileDefinitons(
       }
     else
       {
+      cmInstalledFile const* installedFile =
+        this->GetInstalledFile(relativePath);
+
       std::string componentId = fileDefinitions.EmitComponentFile(
-        directoryId, id, fullPath, *(this->Patch));
+        directoryId, id, fullPath, *(this->Patch), installedFile);
 
       featureDefinitions.EmitComponentRef(componentId);
 

+ 16 - 1
Source/CPack/WiX/cmWIXFilesSourceWriter.cxx

@@ -12,6 +12,8 @@
 
 #include "cmWIXFilesSourceWriter.h"
 
+#include <cmInstalledFile.h>
+
 #include <sys/types.h>
 #include <sys/stat.h>
 
@@ -135,7 +137,8 @@ std::string cmWIXFilesSourceWriter::EmitComponentFile(
   std::string const& directoryId,
   std::string const& id,
   std::string const& filePath,
-  cmWIXPatch &patch)
+  cmWIXPatch &patch,
+  cmInstalledFile const* installedFile)
 {
   std::string componentId = std::string("CM_C") + id;
   std::string fileId = std::string("CM_F") + id;
@@ -147,6 +150,18 @@ std::string cmWIXFilesSourceWriter::EmitComponentFile(
   AddAttribute("Id", componentId);
   AddAttribute("Guid", "*");
 
+  if(installedFile)
+    {
+    if(installedFile->GetPropertyAsBool("CPACK_NEVER_OVERWRITE"))
+      {
+      AddAttribute("NeverOverwrite", "yes");
+      }
+    if(installedFile->GetPropertyAsBool("CPACK_PERMANENT"))
+      {
+      AddAttribute("Permanent", "yes");
+      }
+    }
+
   BeginElement("File");
   AddAttribute("Id", fileId);
   AddAttribute("Source", filePath);

+ 2 - 1
Source/CPack/WiX/cmWIXFilesSourceWriter.h

@@ -53,7 +53,8 @@ public:
     std::string const& directoryId,
     std::string const& id,
     std::string const& filePath,
-    cmWIXPatch &patch);
+    cmWIXPatch &patch,
+    cmInstalledFile const* installedFile);
 
 private:
   void EmitInstallRegistryValue(