Browse Source

Merge topic 'ifw-installer-icon-filenames'

761b6e2466 CPackIFW: Avoid colliding names for icons / logos

Acked-by: Kitware Robot <[email protected]>
Merge-request: !6613
Craig Scott 4 years ago
parent
commit
c5ae200d94
1 changed files with 12 additions and 4 deletions
  1. 12 4
      Source/CPack/IFW/cmCPackIFWInstaller.cxx

+ 12 - 4
Source/CPack/IFW/cmCPackIFWInstaller.cxx

@@ -381,7 +381,9 @@ void cmCPackIFWInstaller::GenerateInstallerFile()
 
   // Logo
   if (!this->Logo.empty()) {
-    std::string name = cmSystemTools::GetFilenameName(this->Logo);
+    std::string srcName = cmSystemTools::GetFilenameName(this->Logo);
+    std::string suffix = cmSystemTools::GetFilenameLastExtension(srcName);
+    std::string name = "cm_logo." + suffix;
     std::string path = this->Directory + "/config/" + name;
     cmsys::SystemTools::CopyFileIfDifferent(this->Logo, path);
     xout.Element("Logo", name);
@@ -415,19 +417,25 @@ void cmCPackIFWInstaller::GenerateInstallerFile()
   if (!this->IsVersionLess("1.4")) {
     // ApplicationIcon
     if (!this->InstallerApplicationIcon.empty()) {
-      std::string name =
+      std::string srcName =
         cmSystemTools::GetFilenameName(this->InstallerApplicationIcon);
+      std::string suffix = cmSystemTools::GetFilenameLastExtension(srcName);
+      std::string name = "cm_appicon." + suffix;
       std::string path = this->Directory + "/config/" + name;
-      name = cmSystemTools::GetFilenameWithoutExtension(name);
       cmsys::SystemTools::CopyFileIfDifferent(this->InstallerApplicationIcon,
                                               path);
+      // The actual file is looked up by attaching a '.icns' (macOS),
+      // '.ico' (Windows). No functionality on Unix.
+      name = cmSystemTools::GetFilenameWithoutExtension(name);
       xout.Element("InstallerApplicationIcon", name);
     }
 
     // WindowIcon
     if (!this->InstallerWindowIcon.empty()) {
-      std::string name =
+      std::string srcName =
         cmSystemTools::GetFilenameName(this->InstallerWindowIcon);
+      std::string suffix = cmSystemTools::GetFilenameLastExtension(srcName);
+      std::string name = "cm_winicon." + suffix;
       std::string path = this->Directory + "/config/" + name;
       cmsys::SystemTools::CopyFileIfDifferent(this->InstallerWindowIcon, path);
       xout.Element("InstallerWindowIcon", name);