Browse Source

CPack: Fix packaging of source tarballs with symbolic links

When staging the package installation, if the first file in a directory
happens to be a symbolic link, make sure we create the directory before
trying to create the link.
Bill Hoffman 10 years ago
parent
commit
81221b80e2
1 changed files with 12 additions and 0 deletions
  1. 12 0
      Source/CPack/cmCPackGenerator.cxx

+ 12 - 0
Source/CPack/cmCPackGenerator.cxx

@@ -437,6 +437,18 @@ int cmCPackGenerator::InstallProjectViaInstalledDirectories(
           cmCPackLogger(cmCPackLog::LOG_DEBUG, "Will create a symlink: "
                          << symlinkedIt->second << "--> "
                          << symlinkedIt->first << std::endl);
+          // make sure directory exists for symlink
+          std::string destDir =
+            cmSystemTools::GetFilenamePath(symlinkedIt->second);
+          if(!destDir.empty() && !cmSystemTools::MakeDirectory(destDir))
+            {
+            cmCPackLogger(cmCPackLog::LOG_ERROR, "Cannot create dir: "
+                          << destDir
+                          << "\nTrying to create symlink: "
+                          << symlinkedIt->second << "--> "
+                          << symlinkedIt->first
+                          << std::endl);
+            }
           if (!cmSystemTools::CreateSymlink(symlinkedIt->first,
                                             symlinkedIt->second))
             {