Browse Source

ENH: Deprecate CPACK_BINARY_DIR and add CPACK_INSTALL_CMAKE_PROJECTS

Andy Cedilnik 19 years ago
parent
commit
0bad15c302
2 changed files with 45 additions and 2 deletions
  1. 2 0
      Modules/CPack.cmake
  2. 43 2
      Source/CPack/cmCPackGenericGenerator.cxx

+ 2 - 0
Modules/CPack.cmake

@@ -68,6 +68,8 @@ ENDIF(NOT CPACK_GENERATOR)
 
 # Set some other variables
 cpack_set_if_not_set(CPACK_BINARY_DIR "${CMAKE_BINARY_DIR}")
+cpack_set_if_not_set(CPACK_INSTALL_CMAKE_PROJECTS
+  "${CMAKE_BINARY_DIR};${CMAKE_PROJECT_NAME}")
 
 SET(_CPACK_UNUSED_VARIABLES_)
 GET_CMAKE_PROPERTY(res VARIABLES)

+ 43 - 2
Source/CPack/cmCPackGenericGenerator.cxx

@@ -119,7 +119,7 @@ int cmCPackGenericGenerator::PrepareNames()
 //----------------------------------------------------------------------
 int cmCPackGenericGenerator::InstallProject()
 {
-  cmCPackLogger(cmCPackLog::LOG_OUTPUT, "Install project" << std::endl);
+  cmCPackLogger(cmCPackLog::LOG_OUTPUT, "Install projects" << std::endl);
   const char* tempInstallDirectory
     = this->GetOption("CPACK_TEMPORARY_INSTALL_DIRECTORY");
   int res = 1;
@@ -229,8 +229,49 @@ int cmCPackGenericGenerator::InstallProject()
         }
       }
     }
+  const char* cmakeProjects
+    = this->GetOption("CPACK_INSTALL_CMAKE_PROJECTS");
+  if ( cmakeProjects )
+    {
+    std::vector<std::string> cmakeProjectsVector;
+    cmSystemTools::ExpandListArgument(cmakeProjects,
+      cmakeProjectsVector);
+    std::vector<std::string>::iterator it;
+    for ( it = cmakeProjectsVector.begin();
+      it != cmakeProjectsVector.end();
+      ++it )
+      {
+      std::string installDirectory = it->c_str();
+      ++it;
+      std::string installProjectName = it->c_str();
+      cmCPackLogger(cmCPackLog::LOG_OUTPUT,
+        "- Install project: " << installProjectName << std::endl);
+      std::string installFile = installDirectory + "/cmake_install.cmake";
+      cmake cm;
+      cmGlobalGenerator gg;
+      gg.SetCMakeInstance(&cm);
+      std::auto_ptr<cmLocalGenerator> lg(gg.CreateLocalGenerator());
+      lg->SetGlobalGenerator(&gg);
+      cmMakefile *mf = lg->GetMakefile();
+      if ( movable )
+        {
+        mf->AddDefinition("CMAKE_INSTALL_PREFIX", tempInstallDirectory);
+        }
+      const char* buildConfig = this->GetOption("CPACK_BUILD_CONFIG");
+      if ( buildConfig && *buildConfig )
+        {
+        mf->AddDefinition("BUILD_TYPE", buildConfig);
+        }
+
+      res = mf->ReadListFile(0, installFile.c_str());
+      if ( cmSystemTools::GetErrorOccuredFlag() )
+        {
+        res = 0;
+        }
+      }
+    }
   const char* binaryDirectories = this->GetOption("CPACK_BINARY_DIR");
-  if ( binaryDirectories )
+  if ( binaryDirectories && !cmakeProjects )
     {
     std::vector<std::string> binaryDirectoriesVector;
     cmSystemTools::ExpandListArgument(binaryDirectories,