Просмотр исходного кода

ENH: Adding install/local global target for Makefile generators. This runs installation only in the current directory and not subdirectories.

Brad King 19 лет назад
Родитель
Сommit
eef327b944

+ 14 - 0
Source/cmGlobalGenerator.cxx

@@ -1495,6 +1495,20 @@ void cmGlobalGenerator::CreateDefaultGlobalTargets(cmTargets* targets)
     this->CreateGlobalTarget(
       this->GetInstallTargetName(), "Install the project...",
       &cpackCommandLines, depends);
+
+  // install_local
+  if(const char* install_local = this->GetInstallLocalTargetName())
+    {
+    singleLine.insert(singleLine.begin()+1, "-DCMAKE_INSTALL_LOCAL_ONLY=1");
+    cpackCommandLines.erase(cpackCommandLines.begin(),
+                            cpackCommandLines.end());
+    cpackCommandLines.push_back(singleLine);
+
+    (*targets)[install_local] =
+      this->CreateGlobalTarget(
+        install_local, "Installing only the local directory...",
+        &cpackCommandLines, depends);
+    }
 }
 
 cmTarget cmGlobalGenerator::CreateGlobalTarget(

+ 1 - 0
Source/cmGlobalGenerator.h

@@ -186,6 +186,7 @@ public:
 
   virtual const char* GetAllTargetName()          { return "ALL_BUILD"; }
   virtual const char* GetInstallTargetName()      { return "INSTALL"; }
+  virtual const char* GetInstallLocalTargetName() { return 0; }
   virtual const char* GetPreinstallTargetName()   { return 0; }
   virtual const char* GetTestTargetName()         { return "RUN_TESTS"; }
   virtual const char* GetPackageTargetName()      { return "PACKAGE"; }

+ 1 - 0
Source/cmGlobalUnixMakefileGenerator3.h

@@ -159,6 +159,7 @@ protected:
   // Setup target names
   virtual const char* GetAllTargetName()          { return "all"; }
   virtual const char* GetInstallTargetName()      { return "install"; }
+  virtual const char* GetInstallLocalTargetName() { return "install/local"; }
   virtual const char* GetPreinstallTargetName()   { return "preinstall"; }
   virtual const char* GetTestTargetName()         { return "test"; }
   virtual const char* GetPackageTargetName()      { return "package"; }

+ 4 - 2
Source/cmLocalGenerator.cxx

@@ -397,7 +397,8 @@ void cmLocalGenerator::GenerateInstallRules()
   // Include install scripts from subdirectories.
   if(!this->Children.empty())
     {
-    fout << "# Include the install script for each subdirectory.\n";
+    fout << "IF(NOT CMAKE_INSTALL_LOCAL_ONLY)\n";
+    fout << "  # Include the install script for each subdirectory.\n";
     for(std::vector<cmLocalGenerator*>::const_iterator
           ci = this->Children.begin(); ci != this->Children.end(); ++ci)
       {
@@ -405,11 +406,12 @@ void cmLocalGenerator::GenerateInstallRules()
         {
         std::string odir = (*ci)->GetMakefile()->GetStartOutputDirectory();
         cmSystemTools::ConvertToUnixSlashes(odir);
-        fout << "INCLUDE(\"" <<  odir.c_str()
+        fout << "  INCLUDE(\"" <<  odir.c_str()
              << "/cmake_install.cmake\")" << std::endl;
         }
       }
     fout << "\n";
+    fout << "ENDIF(NOT CMAKE_INSTALL_LOCAL_ONLY)\n";
     }
 
   // Record the install manifest.

+ 1 - 1
Source/cmLocalUnixMakefileGenerator3.cxx

@@ -1481,7 +1481,7 @@ void cmLocalUnixMakefileGenerator3
 
       // Provide a "/fast" version of the target.
       depends.clear();
-      if(targetName == "install")
+      if((targetName == "install") || (targetName == "install_local"))
         {
         // Provide a fast install target that does not depend on all
         // but has the same command.