瀏覽代碼

BUG: Use the DESTDIR prefix when creating the directory in CPack when CPACK_SET_DESTDIR is ON. Thanks to Petri Hodju for reporting this regression to the CMake mailing list: http://www.cmake.org/pipermail/cmake/2008-October/024563.html.

David Cole 17 年之前
父節點
當前提交
cc51ddd34b
共有 1 個文件被更改,包括 24 次插入8 次删除
  1. 24 8
      Source/CPack/cmCPackGenerator.cxx

+ 24 - 8
Source/CPack/cmCPackGenerator.cxx

@@ -646,6 +646,7 @@ int cmCPackGenerator::InstallProjectViaInstallCMakeProjects(
           // CMAKE_INSTALL_PREFIX underneath the tempInstallDirectory. The
           // value of the project's CMAKE_INSTALL_PREFIX is sent in here as
           // the value of the CPACK_INSTALL_PREFIX variable.
+          //
           std::string dir;
           if (this->GetOption("CPACK_INSTALL_PREFIX"))
             {
@@ -653,14 +654,6 @@ int cmCPackGenerator::InstallProjectViaInstallCMakeProjects(
             }
           mf->AddDefinition("CMAKE_INSTALL_PREFIX", dir.c_str());
 
-          if ( !cmsys::SystemTools::MakeDirectory(dir.c_str()))
-            {
-            cmCPackLogger(cmCPackLog::LOG_ERROR,
-                          "Problem creating temporary directory: " 
-                          << dir << std::endl);
-            return 0;
-            }
-
           cmCPackLogger(
             cmCPackLog::LOG_DEBUG,
             "- Using DESTDIR + CPACK_INSTALL_PREFIX... (mf->AddDefinition)"
@@ -668,6 +661,29 @@ int cmCPackGenerator::InstallProjectViaInstallCMakeProjects(
           cmCPackLogger(cmCPackLog::LOG_DEBUG,
                         "- Setting CMAKE_INSTALL_PREFIX to '" << dir << "'" 
                         << std::endl);
+
+          // Make sure that DESTDIR + CPACK_INSTALL_PREFIX directory
+          // exists:
+          //
+          if (cmSystemTools::StringStartsWith(dir.c_str(), "/"))
+            {
+            dir = tempInstallDirectory + dir;
+            }
+          else
+            {
+            dir = tempInstallDirectory + "/" + dir;
+            }
+
+          cmCPackLogger(cmCPackLog::LOG_DEBUG,
+                        "- Creating directory: '" << dir << "'" << std::endl);
+
+          if ( !cmsys::SystemTools::MakeDirectory(dir.c_str()))
+            {
+            cmCPackLogger(cmCPackLog::LOG_ERROR,
+                          "Problem creating temporary directory: " 
+                          << dir << std::endl);
+            return 0;
+            }
           }
         else
           {