[cmake-commits] david.cole committed cmInstallCommand.cxx 1.34 1.35 cmInstallScriptGenerator.cxx 1.3 1.4 cmInstallScriptGenerator.h 1.2 1.3 cmLocalGenerator.cxx 1.237 1.238

cmake-commits at cmake.org cmake-commits at cmake.org
Mon Oct 15 07:08:12 EDT 2007


Update of /cvsroot/CMake/CMake/Source
In directory public:/mounts/ram/cvs-serv23742

Modified Files:
	cmInstallCommand.cxx cmInstallScriptGenerator.cxx 
	cmInstallScriptGenerator.h cmLocalGenerator.cxx 
Log Message:
BUG: Fix #5868 - add COMPONENT handling to the SCRIPT and CODE signatures of the INSTALL command.


Index: cmLocalGenerator.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmLocalGenerator.cxx,v
retrieving revision 1.237
retrieving revision 1.238
diff -u -d -r1.237 -r1.238
--- cmLocalGenerator.cxx	12 Oct 2007 14:58:59 -0000	1.237
+++ cmLocalGenerator.cxx	15 Oct 2007 11:08:10 -0000	1.238
@@ -2419,7 +2419,7 @@
     // Include the user-specified pre-install script for this target.
     if(const char* preinstall = l->second.GetProperty("PRE_INSTALL_SCRIPT"))
       {
-      cmInstallScriptGenerator g(preinstall);
+      cmInstallScriptGenerator g(preinstall, false, 0);
       g.Generate(os, config, configurationTypes);
       }
 
@@ -2472,7 +2472,7 @@
     // Include the user-specified post-install script for this target.
     if(const char* postinstall = l->second.GetProperty("POST_INSTALL_SCRIPT"))
       {
-      cmInstallScriptGenerator g(postinstall);
+      cmInstallScriptGenerator g(postinstall, false, 0);
       g.Generate(os, config, configurationTypes);
       }
     }

Index: cmInstallScriptGenerator.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmInstallScriptGenerator.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- cmInstallScriptGenerator.h	13 Apr 2006 02:04:50 -0000	1.2
+++ cmInstallScriptGenerator.h	15 Oct 2007 11:08:10 -0000	1.3
@@ -25,7 +25,8 @@
 class cmInstallScriptGenerator: public cmInstallGenerator
 {
 public:
-  cmInstallScriptGenerator(const char* script, bool code = false);
+  cmInstallScriptGenerator(const char* script, bool code,
+    const char* component);
   virtual ~cmInstallScriptGenerator();
 
 protected:

Index: cmInstallScriptGenerator.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmInstallScriptGenerator.cxx,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- cmInstallScriptGenerator.cxx	2 Jul 2007 18:56:57 -0000	1.3
+++ cmInstallScriptGenerator.cxx	15 Oct 2007 11:08:10 -0000	1.4
@@ -18,8 +18,9 @@
 
 //----------------------------------------------------------------------------
 cmInstallScriptGenerator
-::cmInstallScriptGenerator(const char* script, bool code):
-  cmInstallGenerator(0, std::vector<std::string>(), 0),
+::cmInstallScriptGenerator(const char* script, bool code,
+                           const char* component) :
+  cmInstallGenerator(0, std::vector<std::string>(), component),
   Script(script), Code(code)
 {
 }
@@ -33,12 +34,19 @@
 //----------------------------------------------------------------------------
 void cmInstallScriptGenerator::GenerateScript(std::ostream& os)
 {
+  Indent indent;
+  std::string component_test =
+    this->CreateComponentTest(this->Component.c_str());
+  os << indent << "IF(" << component_test << ")\n";
+
   if(this->Code)
     {
-    os << this->Script << "\n";
+    os << indent.Next() << this->Script << "\n";
     }
   else
     {
-    os << "INCLUDE(\"" << this->Script << "\")\n";
+    os << indent.Next() << "INCLUDE(\"" << this->Script << "\")\n";
     }
+
+  os << indent << "ENDIF(" << component_test << ")\n\n";
 }

Index: cmInstallCommand.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmInstallCommand.cxx,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -d -r1.34 -r1.35
--- cmInstallCommand.cxx	10 Oct 2007 15:06:14 -0000	1.34
+++ cmInstallCommand.cxx	15 Oct 2007 11:08:10 -0000	1.35
@@ -99,8 +99,34 @@
 //----------------------------------------------------------------------------
 bool cmInstallCommand::HandleScriptMode(std::vector<std::string> const& args)
 {
+  std::string component("Unspecified");
+  int componentCount = 0;
   bool doing_script = false;
   bool doing_code = false;
+
+  // Scan the args once for COMPONENT. Only allow one.
+  //
+  for(size_t i=0; i < args.size(); ++i)
+    {
+    if(args[i] == "COMPONENT" && i+1 < args.size())
+        {
+        ++componentCount;
+        ++i;
+        component = args[i];
+        }
+    }
+
+  if(componentCount>1)
+    {
+    this->SetError("given more than one COMPONENT for the SCRIPT or CODE "
+      "signature of the INSTALL command. "
+      "Use multiple INSTALL commands with one COMPONENT each.");
+    return false;
+    }
+
+  // Scan the args again, this time adding install generators each time we
+  // encounter a SCRIPT or CODE arg:
+  //
   for(size_t i=0; i < args.size(); ++i)
     {
     if(args[i] == "SCRIPT")
@@ -113,6 +139,11 @@
       doing_script = false;
       doing_code = true;
       }
+    else if(args[i] == "COMPONENT")
+      {
+      doing_script = false;
+      doing_code = false;
+      }
     else if(doing_script)
       {
       doing_script = false;
@@ -129,16 +160,17 @@
         return false;
         }
       this->Makefile->AddInstallGenerator(
-        new cmInstallScriptGenerator(script.c_str()));
+        new cmInstallScriptGenerator(script.c_str(), false, component.c_str()));
       }
     else if(doing_code)
       {
       doing_code = false;
       std::string code = args[i];
       this->Makefile->AddInstallGenerator(
-        new cmInstallScriptGenerator(code.c_str(), true));
+        new cmInstallScriptGenerator(code.c_str(), true, component.c_str()));
       }
     }
+
   if(doing_script)
     {
     this->SetError("given no value for SCRIPT argument.");
@@ -149,6 +181,11 @@
     this->SetError("given no value for CODE argument.");
     return false;
     }
+
+  //Tell the global generator about any installation component names specified.
+  this->Makefile->GetLocalGenerator()->GetGlobalGenerator()
+                             ->AddInstallComponent(component.c_str());
+
   return true;
 }
 
@@ -169,15 +206,15 @@
 
   cmCommandArgumentsHelper argHelper;
   cmCommandArgumentGroup group;
-  cmCAStringVector genericArgVector     (&argHelper, 0);
-  cmCAStringVector archiveArgVector     (&argHelper, "ARCHIVE", &group);
-  cmCAStringVector libraryArgVector     (&argHelper, "LIBRARY", &group);
-  cmCAStringVector runtimeArgVector     (&argHelper, "RUNTIME", &group);
-  cmCAStringVector frameworkArgVector   (&argHelper, "FRAMEWORK", &group);
-  cmCAStringVector bundleArgVector      (&argHelper, "BUNDLE", &group);
-  cmCAStringVector privateHeaderArgVector(&argHelper,"PRIVATE_HEADER", &group);
-  cmCAStringVector publicHeaderArgVector(&argHelper, "PUBLIC_HEADER", &group);
-  cmCAStringVector resourceArgVector   (&argHelper, "RESOURCE", &group);
+  cmCAStringVector genericArgVector      (&argHelper,0);
+  cmCAStringVector archiveArgVector      (&argHelper,"ARCHIVE",&group);
+  cmCAStringVector libraryArgVector      (&argHelper,"LIBRARY",&group);
+  cmCAStringVector runtimeArgVector      (&argHelper,"RUNTIME",&group);
+  cmCAStringVector frameworkArgVector    (&argHelper,"FRAMEWORK",&group);
+  cmCAStringVector bundleArgVector       (&argHelper,"BUNDLE",&group);
+  cmCAStringVector privateHeaderArgVector(&argHelper,"PRIVATE_HEADER",&group);
+  cmCAStringVector publicHeaderArgVector (&argHelper,"PUBLIC_HEADER",&group);
+  cmCAStringVector resourceArgVector     (&argHelper,"RESOURCE",&group);
   genericArgVector.Follows(0);
   group.Follows(&genericArgVector);
 



More information about the Cmake-commits mailing list