Browse Source

ENH: Fixed INSTALL_FILES and INSTALL_PROGRAMS commands to not create targets. No targets of type cmTarget::INSTALL_FILES or cmTarget::INSTALL_PROGRAMS are created, so we do not need to check for them everywhere anymore.

Brad King 18 years ago
parent
commit
ba7780a3c4

+ 15 - 19
Source/cmExportLibraryDependencies.cxx

@@ -94,28 +94,24 @@ void cmExportLibraryDependenciesCommand::FinalPass()
     for(cmTargets::iterator l = tgts.begin();
         l != tgts.end(); ++l)
       {
-      if ((l->second.GetType() != cmTarget::INSTALL_FILES)
-          && (l->second.GetType() != cmTarget::INSTALL_PROGRAMS))
+      libDepName = l->first;
+      libDepName += "_LIB_DEPENDS";
+      const char* def = this->Makefile->GetDefinition(libDepName.c_str());
+      if(def)
         {
-        libDepName = l->first;
-        libDepName += "_LIB_DEPENDS";
-        const char* def = this->Makefile->GetDefinition(libDepName.c_str());
-        if(def)
+        fout << "SET(" << libDepName << " \"" << def << "\")\n";
+        // now for each dependency, check for link type
+        cmSystemTools::ExpandListArgument(def, depends);
+        for(std::vector<std::string>::const_iterator d = depends.begin();
+            d != depends.end(); ++d)
           {
-          fout << "SET(" << libDepName << " \"" << def << "\")\n";
-          // now for each dependency, check for link type
-          cmSystemTools::ExpandListArgument(def, depends);
-          for(std::vector<std::string>::const_iterator d = depends.begin();
-              d != depends.end(); ++d)
+          libDepName = *d;
+          libDepName += "_LINK_TYPE";
+          defType = this->Makefile->GetDefinition(libDepName.c_str());
+          libDepName = cmSystemTools::EscapeSpaces(libDepName.c_str());
+          if(defType)
             {
-            libDepName = *d;
-            libDepName += "_LINK_TYPE";
-            defType = this->Makefile->GetDefinition(libDepName.c_str());
-            libDepName = cmSystemTools::EscapeSpaces(libDepName.c_str());
-            if(defType)
-              {
-              fout << "SET(" << libDepName << " \"" << defType << "\")\n";
-              }
+            fout << "SET(" << libDepName << " \"" << defType << "\")\n";
             }
           }
         }

+ 0 - 4
Source/cmGlobalVisualStudio6Generator.cxx

@@ -256,9 +256,6 @@ void cmGlobalVisualStudio6Generator
         }
       else 
         {
-        if ((l->second.GetType() != cmTarget::INSTALL_FILES)
-            && (l->second.GetType() != cmTarget::INSTALL_PROGRAMS))
-          {
           bool skip = false;
           // skip ALL_BUILD and RUN_TESTS if they have already been added
           if(l->first == "ALL_BUILD" )
@@ -332,7 +329,6 @@ void cmGlobalVisualStudio6Generator
             this->WriteProject(fout, si->c_str(), dir.c_str(),l->second);
             }
           ++si;
-          }
         }
       }
     }

+ 1 - 6
Source/cmGlobalVisualStudio71Generator.cxx

@@ -134,9 +134,6 @@ void cmGlobalVisualStudio71Generator
         }
       else 
         {
-        if ((l->second.GetType() != cmTarget::INSTALL_FILES)
-            && (l->second.GetType() != cmTarget::INSTALL_PROGRAMS))
-          {
           bool skip = false;
           if(l->first == "ALL_BUILD" )
             {
@@ -224,7 +221,6 @@ void cmGlobalVisualStudio71Generator
               this->WriteProject(fout, dspname, dir.c_str(),l->second);
               }
             }
-          }
         }
       }
     }
@@ -254,8 +250,7 @@ void cmGlobalVisualStudio71Generator
         this->WriteProjectConfigurations(fout, project.c_str(),
                                          true);
         }
-      else if ((l->second.GetType() != cmTarget::INSTALL_FILES)
-               && (l->second.GetType() != cmTarget::INSTALL_PROGRAMS))
+      else
         {
         bool partOfDefaultBuild = this->IsPartOfDefaultBuild(
           root->GetMakefile()->GetProjectName(),

+ 2 - 8
Source/cmGlobalVisualStudio7Generator.cxx

@@ -341,9 +341,6 @@ void cmGlobalVisualStudio7Generator
         }
       else 
         {
-        if ((l->second.GetType() != cmTarget::INSTALL_FILES)
-            && (l->second.GetType() != cmTarget::INSTALL_PROGRAMS))
-          {
           bool skip = false;
           if(l->first == "ALL_BUILD" )
             {
@@ -420,7 +417,6 @@ void cmGlobalVisualStudio7Generator
               this->WriteProject(fout, dspname, dir.c_str(),l->second);
               }
             }
-          }
         }
       }
     }
@@ -476,8 +472,7 @@ void cmGlobalVisualStudio7Generator
            depcount++;
            }
          }
-       else if ((l->second.GetType() != cmTarget::INSTALL_FILES)
-                && (l->second.GetType() != cmTarget::INSTALL_PROGRAMS))
+       else
         {
         const char *dspname = 
           l->second.GetProperty("GENERATOR_FILE_NAME");
@@ -513,8 +508,7 @@ void cmGlobalVisualStudio7Generator
         this->WriteProjectConfigurations(fout, name.c_str(),
                                          true);
         }
-      else if ((l->second.GetType() != cmTarget::INSTALL_FILES)
-          && (l->second.GetType() != cmTarget::INSTALL_PROGRAMS))
+      else
         {    
         bool partOfDefaultBuild = this->IsPartOfDefaultBuild(
           root->GetMakefile()->GetProjectName(),

+ 1 - 9
Source/cmGlobalXCodeGenerator.cxx

@@ -596,12 +596,6 @@ cmGlobalXCodeGenerator::CreateXCodeTargets(cmLocalGenerator* gen,
        cmtarget.GetType() == cmTarget::GLOBAL_TARGET)
       {
       targets.push_back(this->CreateUtilityTarget(cmtarget));
-      }
-    if(cmtarget.GetType() == cmTarget::UTILITY ||
-       cmtarget.GetType() == cmTarget::GLOBAL_TARGET ||
-       cmtarget.GetType() == cmTarget::INSTALL_FILES ||
-       cmtarget.GetType() == cmTarget::INSTALL_PROGRAMS)
-      {
       continue;
       }
 
@@ -2498,9 +2492,7 @@ cmGlobalXCodeGenerator::OutputXCodeProject(cmLocalGenerator* root,
         for(cmTargets::iterator l = tgts.begin(); 
             l != tgts.end(); l++)
           {
-          if ((l->second.GetType() != cmTarget::INSTALL_FILES)
-              && (l->second.GetType() != cmTarget::INSTALL_PROGRAMS)
-              && (strncmp(l->first.c_str(), 
+          if ((strncmp(l->first.c_str(), 
                           "INCLUDE_EXTERNAL_MSPROJECT", 26) != 0)
               && banned.find(l->second.GetName()) == banned.end())
             {

+ 18 - 13
Source/cmInstallFilesCommand.cxx

@@ -16,6 +16,8 @@
 =========================================================================*/
 #include "cmInstallFilesCommand.h"
 
+#include "cmInstallFilesGenerator.h"
+
 // cmExecutableCommand
 bool cmInstallFilesCommand
 ::InitialPass(std::vector<std::string> const& argsIn)
@@ -33,14 +35,8 @@ bool cmInstallFilesCommand
   std::vector<std::string> args;
   this->Makefile->ExpandSourceListArguments(argsIn, args, 2);
 
-  // Create an INSTALL_FILES target specifically for this path.
-  this->TargetName = "INSTALL_FILES_"+args[0];
-  cmTarget& target = this->Makefile->GetTargets()[this->TargetName];
-  target.SetType(cmTarget::INSTALL_FILES, this->TargetName.c_str());
-  target.SetMakefile(this->Makefile);
-  target.SetProperty("EXCLUDE_FROM_ALL","TRUE");
-  target.SetInstallPath(args[0].c_str());
-  
+  this->Destination = args[0];
+
   if((args.size() > 1) && (args[1] == "FILES"))
     {
     this->IsFilesForm = true;    
@@ -49,7 +45,7 @@ bool cmInstallFilesCommand
       {
       // Find the source location for each file listed.
       std::string f = this->FindInstallSource(s->c_str());
-      target.GetSourceLists().push_back(f);
+      this->Files.push_back(f);
       }
     }
   else
@@ -75,8 +71,6 @@ void cmInstallFilesCommand::FinalPass()
   
   std::string testf;
   std::string ext = this->FinalArgs[0];
-  std::vector<std::string>& targetSourceLists =
-    this->Makefile->GetTargets()[this->TargetName].GetSourceLists();
   
   // two different options
   if (this->FinalArgs.size() > 1)
@@ -100,7 +94,7 @@ void cmInstallFilesCommand::FinalPass()
         }
       
       // add to the result
-      targetSourceLists.push_back(this->FindInstallSource(testf.c_str()));
+      this->Files.push_back(this->FindInstallSource(testf.c_str()));
       }
     }
   else     // reg exp list
@@ -114,9 +108,20 @@ void cmInstallFilesCommand::FinalPass()
     // for each argument, get the files 
     for (;s != files.end(); ++s)
       {
-      targetSourceLists.push_back(this->FindInstallSource(s->c_str()));
+      this->Files.push_back(this->FindInstallSource(s->c_str()));
       }
     }
+
+  // Use a file install generator.
+  const char* no_permissions = "";
+  const char* no_rename = "";
+  const char* no_component = "";
+  std::vector<std::string> no_configurations;
+  this->Makefile->AddInstallGenerator(
+    new cmInstallFilesGenerator(this->Files,
+                                this->Destination.c_str(), false,
+                                no_permissions, no_configurations,
+                                no_component, no_rename));
 }
 
 /**

+ 2 - 1
Source/cmInstallFilesCommand.h

@@ -106,9 +106,10 @@ protected:
   std::string FindInstallSource(const char* name) const;
   
  private:
-  std::string TargetName;
   std::vector<std::string> FinalArgs;
   bool IsFilesForm;
+  std::string Destination;
+  std::vector<std::string> Files;
 };
 
 

+ 14 - 12
Source/cmInstallProgramsCommand.cxx

@@ -30,13 +30,7 @@ bool cmInstallProgramsCommand
   this->Makefile->GetLocalGenerator()
     ->GetGlobalGenerator()->EnableInstallTarget();
 
-  // Create an INSTALL_PROGRAMS target specifically for this path.
-  this->TargetName = "INSTALL_PROGRAMS_"+args[0];
-  cmTarget& target = this->Makefile->GetTargets()[this->TargetName];
-  target.SetType(cmTarget::INSTALL_PROGRAMS, this->TargetName.c_str());
-  target.SetMakefile(this->Makefile);
-  target.SetProperty("EXCLUDE_FROM_ALL","TRUE");
-  target.SetInstallPath(args[0].c_str());
+  this->Destination = args[0];
 
   std::vector<std::string>::const_iterator s = args.begin();
   for (++s;s != args.end(); ++s)
@@ -49,9 +43,6 @@ bool cmInstallProgramsCommand
 
 void cmInstallProgramsCommand::FinalPass() 
 {
-  std::vector<std::string>& targetSourceLists =
-    this->Makefile->GetTargets()[this->TargetName].GetSourceLists();
-
   bool files_mode = false;
   if(!this->FinalArgs.empty() && this->FinalArgs[0] == "FILES")
     {
@@ -71,7 +62,7 @@ void cmInstallProgramsCommand::FinalPass()
     for(;s != this->FinalArgs.end(); ++s)
       {
       // add to the result
-      targetSourceLists.push_back(this->FindInstallSource(s->c_str()));
+      this->Files.push_back(this->FindInstallSource(s->c_str()));
       }
     }
   else     // reg exp list
@@ -84,9 +75,20 @@ void cmInstallProgramsCommand::FinalPass()
     // for each argument, get the programs 
     for (;s != programs.end(); ++s)
       {
-      targetSourceLists.push_back(this->FindInstallSource(s->c_str()));
+      this->Files.push_back(this->FindInstallSource(s->c_str()));
       }
     }
+
+  // Use a file install generator.
+  const char* no_permissions = "";
+  const char* no_rename = "";
+  const char* no_component = "";
+  std::vector<std::string> no_configurations;
+  this->Makefile->AddInstallGenerator(
+    new cmInstallFilesGenerator(this->Files,
+                                this->Destination.c_str(), true,
+                                no_permissions, no_configurations,
+                                no_component, no_rename));
 }
 
 /**

+ 2 - 1
Source/cmInstallProgramsCommand.h

@@ -101,8 +101,9 @@ public:
 protected:
   std::string FindInstallSource(const char* name) const;
 private:
-  std::string TargetName;
   std::vector<std::string> FinalArgs;
+  std::string Destination;
+  std::vector<std::string> Files;
 };
 
 

+ 1 - 4
Source/cmLocalGenerator.cxx

@@ -145,10 +145,7 @@ void cmLocalGenerator::TraceDependencies()
     {
     // INCLUDE_EXTERNAL_MSPROJECT command only affects the workspace
     // so don't build a projectfile for it
-    if ((t->second.GetType() != cmTarget::INSTALL_FILES)
-        && (t->second.GetType() != cmTarget::INSTALL_PROGRAMS)
-        && (t->second.GetType() != cmTarget::INSTALL_DIRECTORY)
-        && (strncmp(t->first.c_str(), "INCLUDE_EXTERNAL_MSPROJECT", 26) != 0))
+    if (strncmp(t->first.c_str(), "INCLUDE_EXTERNAL_MSPROJECT", 26) != 0)
       {
       std::string projectFilename;
       if (this->IsMakefileGenerator == false)  // only use of this variable

+ 1 - 7
Source/cmLocalVisualStudio6Generator.cxx

@@ -141,19 +141,13 @@ void cmLocalVisualStudio6Generator::OutputDSPFile()
       case cmTarget::GLOBAL_TARGET:
         this->SetBuildType(UTILITY, l->first.c_str(), l->second);
         break;
-      case cmTarget::INSTALL_FILES:
-        break;
-      case cmTarget::INSTALL_PROGRAMS:
-        break;
       default:
         cmSystemTools::Error("Bad target type", l->first.c_str());
         break;
       }
     // INCLUDE_EXTERNAL_MSPROJECT command only affects the workspace
     // so don't build a projectfile for it
-    if ((l->second.GetType() != cmTarget::INSTALL_FILES)
-        && (l->second.GetType() != cmTarget::INSTALL_PROGRAMS)
-        && (strncmp(l->first.c_str(), "INCLUDE_EXTERNAL_MSPROJECT", 26) != 0))
+    if (strncmp(l->first.c_str(), "INCLUDE_EXTERNAL_MSPROJECT", 26) != 0)
       {
       // check to see if the dsp is going into a sub-directory
       std::string::size_type pos = l->first.rfind('/');

+ 1 - 3
Source/cmLocalVisualStudio7Generator.cxx

@@ -134,9 +134,7 @@ void cmLocalVisualStudio7Generator::OutputVCProjFile()
     {
     // INCLUDE_EXTERNAL_MSPROJECT command only affects the workspace
     // so don't build a projectfile for it
-    if ((l->second.GetType() != cmTarget::INSTALL_FILES)
-        && (l->second.GetType() != cmTarget::INSTALL_PROGRAMS)
-        && (strncmp(l->first.c_str(), "INCLUDE_EXTERNAL_MSPROJECT", 26) != 0))
+    if (strncmp(l->first.c_str(), "INCLUDE_EXTERNAL_MSPROJECT", 26) != 0)
       {
       this->CreateSingleVCProj(l->first.c_str(),l->second);
       }

+ 0 - 2
Source/cmMakefile.cxx

@@ -1317,8 +1317,6 @@ void cmMakefile::AddGlobalLinkInformation(const char* name, cmTarget& target)
     {
     case cmTarget::UTILITY: 
     case cmTarget::GLOBAL_TARGET: 
-    case cmTarget::INSTALL_FILES: 
-    case cmTarget::INSTALL_PROGRAMS: 
       return;
     default:;
     }

+ 6 - 6
Source/cmTarget.cxx

@@ -337,6 +337,12 @@ void cmTarget::DefineProperties(cmake *cm)
 void cmTarget::SetType(TargetType type, const char* name)
 {
   this->Name = name;
+  if(type == cmTarget::INSTALL_FILES ||
+     type == cmTarget::INSTALL_PROGRAMS ||
+     type == cmTarget::INSTALL_DIRECTORY)
+    {
+    abort();
+    }
   // only add dependency information for library targets
   this->TargetTypeValue = type;
   if(this->TargetTypeValue >= STATIC_LIBRARY 
@@ -664,12 +670,6 @@ void cmTarget::GenerateSourceFilesFromSourceLists( cmMakefile &mf)
     {
     return;
     }
-  // this is only done for non install targets
-  if ((this->TargetTypeValue == cmTarget::INSTALL_FILES)
-      || (this->TargetTypeValue == cmTarget::INSTALL_PROGRAMS))
-    {
-    return;
-    }
   // for each src lists add the classes
   for (std::vector<std::string>::const_iterator s = this->SourceLists.begin();
        s != this->SourceLists.end(); ++s)