[Cmake-commits] CMake branch, next, updated. v2.8.4-1249-g9994cb4

Eric Noulard eric.noulard at gmail.com
Wed Mar 23 13:30:24 EDT 2011


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  9994cb432946f0f5e07dab14ed0d06d3c4e5602c (commit)
       via  6dfc818394d302d5966431fc72b4150777780b79 (commit)
      from  df4191ba35c43626f82814d24fe1090fc59d5548 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=9994cb432946f0f5e07dab14ed0d06d3c4e5602c
commit 9994cb432946f0f5e07dab14ed0d06d3c4e5602c
Merge: df4191b 6dfc818
Author:     Eric Noulard <eric.noulard at gmail.com>
AuthorDate: Wed Mar 23 13:30:12 2011 -0400
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Wed Mar 23 13:30:12 2011 -0400

    Merge topic 'CPack-fix11930-LeftOverComponents' into next
    
    6dfc818 CPack fix #11930 and simplifies component packaging options


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=6dfc818394d302d5966431fc72b4150777780b79
commit 6dfc818394d302d5966431fc72b4150777780b79
Author:     Eric NOULARD <eric.noulard at gmail.com>
AuthorDate: Wed Mar 23 18:28:05 2011 +0100
Commit:     Eric NOULARD <eric.noulard at gmail.com>
CommitDate: Wed Mar 23 18:28:05 2011 +0100

    CPack fix #11930 and simplifies component packaging options

diff --git a/Source/CPack/cmCPackArchiveGenerator.cxx b/Source/CPack/cmCPackArchiveGenerator.cxx
index b629c63..55d9890 100644
--- a/Source/CPack/cmCPackArchiveGenerator.cxx
+++ b/Source/CPack/cmCPackArchiveGenerator.cxx
@@ -207,7 +207,7 @@ int cmCPackArchiveGenerator::PackageComponents(bool ignoreGroup)
 }
 
 //----------------------------------------------------------------------
-int cmCPackArchiveGenerator::PackageComponentsAllInOne(bool allComponent)
+int cmCPackArchiveGenerator::PackageComponentsAllInOne()
 {
   // reset the package file names
   packageFileNames.clear();
@@ -221,38 +221,15 @@ int cmCPackArchiveGenerator::PackageComponentsAllInOne(bool allComponent)
       << std::endl);
   DECLARE_AND_OPEN_ARCHIVE(packageFileNames[0],archive);
 
-  // The ALL GROUP in ONE package case
-  if (! allComponent) {
-    // iterate over the component groups
-    std::map<std::string, cmCPackComponentGroup>::iterator compGIt;
-    for (compGIt=this->ComponentGroups.begin();
-        compGIt!=this->ComponentGroups.end(); ++compGIt)
-      {
-      cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Packaging component group: "
-          << compGIt->first
-          << std::endl);
-      // now iterate over the component of this group
-      std::vector<cmCPackComponent*>::iterator compIt;
-      for (compIt=(compGIt->second).Components.begin();
-          compIt!=(compGIt->second).Components.end();
-          ++compIt)
-        {
-        // Add the files of this component to the archive
-        addOneComponentToArchive(archive,*compIt);
-        }
-      }
-  }
-  // The ALL COMPONENT in ONE package case
-  else
+  // The ALL COMPONENTS in ONE package case
+  std::map<std::string, cmCPackComponent>::iterator compIt;
+  for (compIt=this->Components.begin();compIt!=this->Components.end();
+      ++compIt )
     {
-    std::map<std::string, cmCPackComponent>::iterator compIt;
-    for (compIt=this->Components.begin();compIt!=this->Components.end();
-         ++compIt )
-      {
-      // Add the files of this component to the archive
-      addOneComponentToArchive(archive,&(compIt->second));
-      }
+    // Add the files of this component to the archive
+    addOneComponentToArchive(archive,&(compIt->second));
     }
+
   // archive goes out of scope so it will finalized and closed.
   return 1;
 }
@@ -265,19 +242,17 @@ int cmCPackArchiveGenerator::PackageFiles()
 
   if (SupportsComponentInstallation()) {
     // CASE 1 : COMPONENT ALL-IN-ONE package
-    // If ALL GROUPS or ALL COMPONENTS in ONE package has been requested
+    // If ALL COMPONENTS in ONE package has been requested
     // then the package file is unique and should be open here.
-    if (allComponentInOne ||
-        (allGroupInOne && (!this->ComponentGroups.empty()))
-       )
+    if (allComponentInOne)
       {
-      return PackageComponentsAllInOne(allComponentInOne);
+      return PackageComponentsAllInOne();
       }
     // CASE 2 : COMPONENT CLASSICAL package(s) (i.e. not all-in-one)
     // There will be 1 package for each component group
     // however one may require to ignore component group and
     // in this case you'll get 1 package for each component.
-    else if ((!this->ComponentGroups.empty()) || (ignoreComponentGroup))
+    else
       {
       return PackageComponents(ignoreComponentGroup);
       }
diff --git a/Source/CPack/cmCPackArchiveGenerator.h b/Source/CPack/cmCPackArchiveGenerator.h
index dc17257..b1bbb83 100644
--- a/Source/CPack/cmCPackArchiveGenerator.h
+++ b/Source/CPack/cmCPackArchiveGenerator.h
@@ -65,7 +65,7 @@ protected:
    * Special case of component install where all
    * components will be put in a single installer.
    */
-  int PackageComponentsAllInOne(bool allComponent);
+  int PackageComponentsAllInOne();
   virtual const char* GetOutputExtension() = 0;
   cmArchiveWrite::Compress Compress;
   cmArchiveWrite::Type Archive;
diff --git a/Source/CPack/cmCPackDebGenerator.cxx b/Source/CPack/cmCPackDebGenerator.cxx
index ca2185c..82038e9 100644
--- a/Source/CPack/cmCPackDebGenerator.cxx
+++ b/Source/CPack/cmCPackDebGenerator.cxx
@@ -51,6 +51,62 @@ int cmCPackDebGenerator::InitializeInternal()
 }
 
 //----------------------------------------------------------------------
+int cmCPackDebGenerator::PackageOnePack(std::string initialTopLevel,
+                                        std::string packageName)
+  {
+  int retval = 1;
+  // Begin the archive for this pack
+  std::string localToplevel(initialTopLevel);
+  std::string packageFileName(
+      cmSystemTools::GetParentDirectory(toplevel.c_str())
+  );
+  std::string outputFileName(
+      std::string(this->GetOption("CPACK_PACKAGE_FILE_NAME"))
+  +"-"+packageName + this->GetOutputExtension()
+  );
+
+  localToplevel += "/"+ packageName;
+  /* replace the TEMP DIRECTORY with the component one */
+  this->SetOption("CPACK_TEMPORARY_DIRECTORY",localToplevel.c_str());
+  packageFileName += "/"+ outputFileName;
+  /* replace proposed CPACK_OUTPUT_FILE_NAME */
+  this->SetOption("CPACK_OUTPUT_FILE_NAME",outputFileName.c_str());
+  /* replace the TEMPORARY package file name */
+  this->SetOption("CPACK_TEMPORARY_PACKAGE_FILE_NAME",
+      packageFileName.c_str());
+  // Tell CPackDeb.cmake the name of the component GROUP.
+  this->SetOption("CPACK_DEB_PACKAGE_COMPONENT",packageName.c_str());
+  if (!this->ReadListFile("CPackDeb.cmake"))
+    {
+    cmCPackLogger(cmCPackLog::LOG_ERROR,
+        "Error while execution CPackDeb.cmake" << std::endl);
+    retval = 0;
+    return retval;
+    }
+
+  cmsys::Glob gl;
+  std::string findExpr(this->GetOption("WDIR"));
+  findExpr += "/*";
+  gl.RecurseOn();
+  if ( !gl.FindFiles(findExpr) )
+    {
+    cmCPackLogger(cmCPackLog::LOG_ERROR,
+        "Cannot find any files in the installed directory" << std::endl);
+    return 0;
+    }
+  packageFiles = gl.GetFiles();
+
+  int res = createDeb();
+  if (res != 1)
+    {
+    retval = 0;
+    }
+  // add the generated package to package file names list
+  packageFileNames.push_back(packageFileName);
+  return retval;
+}
+
+//----------------------------------------------------------------------
 int cmCPackDebGenerator::PackageComponents(bool ignoreGroup)
 {
   int retval = 1;
@@ -71,53 +127,24 @@ int cmCPackDebGenerator::PackageComponents(bool ignoreGroup)
           << compGIt->first
           << std::endl);
       // Begin the archive for this group
-      std::string localToplevel(initialTopLevel);
-      std::string packageFileName(
-          cmSystemTools::GetParentDirectory(toplevel.c_str())
-                                 );
-      std::string outputFileName(
-          std::string(this->GetOption("CPACK_PACKAGE_FILE_NAME"))
-          +"-"+compGIt->first + this->GetOutputExtension()
-                                );
-
-      localToplevel += "/"+ compGIt->first;
-      /* replace the TEMP DIRECTORY with the component one */
-      this->SetOption("CPACK_TEMPORARY_DIRECTORY",localToplevel.c_str());
-      packageFileName += "/"+ outputFileName;
-      /* replace proposed CPACK_OUTPUT_FILE_NAME */
-      this->SetOption("CPACK_OUTPUT_FILE_NAME",outputFileName.c_str());
-      /* replace the TEMPORARY package file name */
-      this->SetOption("CPACK_TEMPORARY_PACKAGE_FILE_NAME",
-                      packageFileName.c_str());
-      // Tell CPackDeb.cmake the name of the component GROUP.
-      this->SetOption("CPACK_DEB_PACKAGE_COMPONENT",compGIt->first.c_str());
-      if (!this->ReadListFile("CPackDeb.cmake"))
-        {
-        cmCPackLogger(cmCPackLog::LOG_ERROR,
-            "Error while execution CPackDeb.cmake" << std::endl);
-        retval = 0;
-        return retval;
-        }
-
-      cmsys::Glob gl;
-      std::string findExpr(this->GetOption("WDIR"));
-      findExpr += "/*";
-      gl.RecurseOn();
-      if ( !gl.FindFiles(findExpr) )
-        {
-        cmCPackLogger(cmCPackLog::LOG_ERROR,
-            "Cannot find any files in the installed directory" << std::endl);
-        return 0;
-        }
-      packageFiles = gl.GetFiles();
-
-      int res = createDeb();
-      if (res != 1)
+      retval &= PackageOnePack(initialTopLevel,compGIt->first);
+      }
+    // Handle Orphan components (components not belonging to any groups)
+    std::map<std::string, cmCPackComponent>::iterator compIt;
+    for (compIt=this->Components.begin();
+        compIt!=this->Components.end(); ++compIt )
+      {
+      // Does the component belong to a group?
+      if (compIt->second.Group==NULL)
         {
-        retval = 0;
+        cmCPackLogger(cmCPackLog::LOG_VERBOSE,
+            "Component <"
+            << compIt->second.Name
+            << "> does not belong to any group, package it separately."
+            << std::endl);
+        // Begin the archive for this orphan component
+        retval &= PackageOnePack(initialTopLevel,compIt->first);
         }
-      // add the generated package to package file names list
-      packageFileNames.push_back(packageFileName);
       }
     }
   // CPACK_COMPONENTS_IGNORE_GROUPS is set
@@ -128,59 +155,14 @@ int cmCPackDebGenerator::PackageComponents(bool ignoreGroup)
     for (compIt=this->Components.begin();
          compIt!=this->Components.end(); ++compIt )
       {
-      std::string localToplevel(initialTopLevel);
-      std::string packageFileName(
-          cmSystemTools::GetParentDirectory(toplevel.c_str())
-                                 );
-      std::string outputFileName(
-          std::string(this->GetOption("CPACK_PACKAGE_FILE_NAME")
-                                )
-        +"-"+compIt->first + this->GetOutputExtension());
-
-      localToplevel += "/"+ compIt->first;
-      /* replace the TEMP DIRECTORY with the component one */
-      this->SetOption("CPACK_TEMPORARY_DIRECTORY",localToplevel.c_str());
-      packageFileName += "/"+ outputFileName;
-      /* replace proposed CPACK_OUTPUT_FILE_NAME */
-      this->SetOption("CPACK_OUTPUT_FILE_NAME",outputFileName.c_str());
-      /* replace the TEMPORARY package file name */
-      this->SetOption("CPACK_TEMPORARY_PACKAGE_FILE_NAME",
-                      packageFileName.c_str());
-
-      this->SetOption("CPACK_DEB_PACKAGE_COMPONENT",compIt->first.c_str());
-      if (!this->ReadListFile("CPackDeb.cmake"))
-        {
-        cmCPackLogger(cmCPackLog::LOG_ERROR,
-                      "Error while execution CPackDeb.cmake" << std::endl);
-        retval = 0;
-        return retval;
-        }
-      cmsys::Glob gl;
-      std::string findExpr(this->GetOption("WDIR"));
-      findExpr += "/*";
-      gl.RecurseOn();
-      if ( !gl.FindFiles(findExpr) )
-        {
-        cmCPackLogger(cmCPackLog::LOG_ERROR,
-          "Cannot find any files in the installed directory" << std::endl);
-        return 0;
-        }
-      packageFiles = gl.GetFiles();
-
-      int res = createDeb();
-      if (res != 1)
-        {
-        retval = 0;
-        }
-      // add the generated package to package file names list
-      packageFileNames.push_back(packageFileName);
+      retval &= PackageOnePack(initialTopLevel,compIt->first);
       }
     }
   return retval;
 }
 
 //----------------------------------------------------------------------
-int cmCPackDebGenerator::PackageComponentsAllInOne(bool allComponent)
+int cmCPackDebGenerator::PackageComponentsAllInOne()
 {
   int retval = 1;
   std::string compInstDirName;
@@ -189,15 +171,7 @@ int cmCPackDebGenerator::PackageComponentsAllInOne(bool allComponent)
   packageFileNames.clear();
   std::string initialTopLevel(this->GetOption("CPACK_TEMPORARY_DIRECTORY"));
 
-  // all GROUP in one vs all COMPONENT in one
-  if (allComponent)
-    {
-    compInstDirName = "ALL_COMPONENTS_IN_ONE";
-    }
-  else
-    {
-    compInstDirName = "ALL_GROUPS_IN_ONE";
-    }
+  compInstDirName = "ALL_COMPONENTS_IN_ONE";
 
   cmCPackLogger(cmCPackLog::LOG_VERBOSE,
                 "Packaging all groups in one package..."
@@ -266,17 +240,15 @@ int cmCPackDebGenerator::PackageFiles()
     // CASE 1 : COMPONENT ALL-IN-ONE package
     // If ALL GROUPS or ALL COMPONENTS in ONE package has been requested
     // then the package file is unique and should be open here.
-    if (allComponentInOne ||
-        (allGroupInOne && (!this->ComponentGroups.empty()))
-       )
+    if (allComponentInOne)
       {
-      return PackageComponentsAllInOne(allComponentInOne);
+      return PackageComponentsAllInOne();
       }
     // CASE 2 : COMPONENT CLASSICAL package(s) (i.e. not all-in-one)
     // There will be 1 package for each component group
     // however one may require to ignore component group and
     // in this case you'll get 1 package for each component.
-    else if ((!this->ComponentGroups.empty()) || (ignoreComponentGroup))
+    else
       {
       return PackageComponents(ignoreComponentGroup);
       }
@@ -601,14 +573,7 @@ std::string cmCPackDebGenerator::GetComponentInstallDirNameSuffix(
         cmSystemTools::UpperCase(componentName) + "_GROUP";
     if (NULL != GetOption(groupVar.c_str()))
       {
-      if (allGroupInOne)
-        {
-        return std::string("ALL_GROUPS_IN_ONE");
-        }
-      else
-        {
-        return std::string(GetOption(groupVar.c_str()));
-        }
+      return std::string(GetOption(groupVar.c_str()));
       }
     else
       {
diff --git a/Source/CPack/cmCPackDebGenerator.h b/Source/CPack/cmCPackDebGenerator.h
index de1ea77..f536c47 100644
--- a/Source/CPack/cmCPackDebGenerator.h
+++ b/Source/CPack/cmCPackDebGenerator.h
@@ -34,6 +34,10 @@ public:
 protected:
   virtual int InitializeInternal();
   /**
+   * This method factors out the work done in component packaging case.
+   */
+  int PackageOnePack(std::string initialToplevel, std::string packageName);
+  /**
    * The method used to package files when component
    * install is used. This will create one
    * archive for each component group.
@@ -43,7 +47,7 @@ protected:
    * Special case of component install where all
    * components will be put in a single installer.
    */
-  int PackageComponentsAllInOne(bool allComponent);
+  int PackageComponentsAllInOne();
   virtual int PackageFiles();
   virtual const char* GetOutputExtension() { return ".deb"; }
   virtual bool SupportsComponentInstallation() const;
diff --git a/Source/CPack/cmCPackGenerator.cxx b/Source/CPack/cmCPackGenerator.cxx
index c343acf..691092f 100644
--- a/Source/CPack/cmCPackGenerator.cxx
+++ b/Source/CPack/cmCPackGenerator.cxx
@@ -36,7 +36,6 @@ cmCPackGenerator::cmCPackGenerator()
   this->GeneratorVerbose = false;
   this->MakefileMap = 0;
   this->Logger = 0;
-  this->allGroupInOne = false;
   this->allComponentInOne = false;
   this->ignoreComponentGroup = false;
 }
@@ -1266,15 +1265,12 @@ int cmCPackGenerator::PrepareGroupingKind()
 {
   // The default behavior is to create 1 package by component group
   // unless the user asked to put all COMPONENTS in a single package
-  allGroupInOne = (NULL !=
-                    (this->GetOption(
-                      "CPACK_COMPONENTS_ALL_GROUPS_IN_ONE_PACKAGE")));
-  allComponentInOne = (NULL !=
-                        (this->GetOption(
-                          "CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE")));
-  ignoreComponentGroup = (NULL !=
-                           (this->GetOption(
-                             "CPACK_COMPONENTS_IGNORE_GROUPS")));
+  allComponentInOne = (NULL != (this->GetOption(
+                                      "CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE"))
+                      );
+  ignoreComponentGroup = (NULL != (this->GetOption(
+                                         "CPACK_COMPONENTS_IGNORE_GROUPS"))
+                         );
 
   std::string groupingType;
 
@@ -1288,11 +1284,7 @@ int cmCPackGenerator::PrepareGroupingKind()
     cmCPackLogger(cmCPackLog::LOG_VERBOSE,  "["
         << this->Name << "]"
         << " requested component grouping = "<< groupingType <<std::endl);
-    if (groupingType == "ALL_GROUPS_IN_ONE")
-      {
-      allGroupInOne = true;
-      }
-    else if (groupingType == "ALL_COMPONENTS_IN_ONE")
+    if (groupingType == "ALL_COMPONENTS_IN_ONE")
       {
       allComponentInOne = true;
       }
@@ -1305,15 +1297,14 @@ int cmCPackGenerator::PrepareGroupingKind()
       cmCPackLogger(cmCPackLog::LOG_WARNING, "["
               << this->Name << "]"
               << " requested component grouping type <"<< groupingType
-              << "> UNKNOWN not in (ALL_GROUPS_IN_ONE,"
-                    "ALL_COMPONENTS_IN_ONE,IGNORE)" <<std::endl);
+              << "> UNKNOWN not in (ALL_COMPONENTS_IN_ONE,IGNORE)"
+              << std::endl);
       }
     }
 
   cmCPackLogger(cmCPackLog::LOG_VERBOSE,  "["
         << this->Name << "]"
         << " requested component grouping = ("
-        << "ALL_GROUPS_IN_ONE=" << allGroupInOne
         << ", ALL_COMPONENTS_IN_ONE=" << allComponentInOne
         << ", IGNORE_GROUPS=" << ignoreComponentGroup
         << ")"
diff --git a/Source/CPack/cmCPackGenerator.h b/Source/CPack/cmCPackGenerator.h
index 0497d1c..9549d0b 100644
--- a/Source/CPack/cmCPackGenerator.h
+++ b/Source/CPack/cmCPackGenerator.h
@@ -122,7 +122,6 @@ protected:
 
   /**
    * Prepare requested grouping kind from CPACK_xxx vars
-   * CPACK_COMPONENTS_ALL_GROUPS_IN_ONE_PACKAGE
    * CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE
    * CPACK_COMPONENTS_IGNORE_GROUPS
    * or
@@ -239,10 +238,6 @@ protected:
   std::map<std::string, cmCPackComponent> Components;
   std::map<std::string, cmCPackComponentGroup> ComponentGroups;
   /**
-   * If true All component groups will be put in a single package.
-   */
-  bool allGroupInOne;
-  /**
    * If true All component will be put in a single package.
    */
   bool allComponentInOne;
diff --git a/Source/CPack/cmCPackRPMGenerator.cxx b/Source/CPack/cmCPackRPMGenerator.cxx
index 0b0c6b1..c926be6 100644
--- a/Source/CPack/cmCPackRPMGenerator.cxx
+++ b/Source/CPack/cmCPackRPMGenerator.cxx
@@ -50,6 +50,45 @@ int cmCPackRPMGenerator::InitializeInternal()
 }
 
 //----------------------------------------------------------------------
+int cmCPackRPMGenerator::PackageOnePack(std::string initialToplevel,
+                                        std::string packageName)
+{
+  int retval = 1;
+  // Begin the archive for this pack
+  std::string localToplevel(initialToplevel);
+  std::string packageFileName(
+      cmSystemTools::GetParentDirectory(toplevel.c_str())
+                             );
+  std::string outputFileName(
+   GetComponentPackageFileName(this->GetOption("CPACK_PACKAGE_FILE_NAME"),
+                               packageName,
+                               true)
+                               + this->GetOutputExtension()
+                            );
+
+  localToplevel += "/"+ packageName;
+  /* replace the TEMP DIRECTORY with the component one */
+  this->SetOption("CPACK_TEMPORARY_DIRECTORY",localToplevel.c_str());
+  packageFileName += "/"+ outputFileName;
+  /* replace proposed CPACK_OUTPUT_FILE_NAME */
+  this->SetOption("CPACK_OUTPUT_FILE_NAME",outputFileName.c_str());
+  /* replace the TEMPORARY package file name */
+  this->SetOption("CPACK_TEMPORARY_PACKAGE_FILE_NAME",
+                  packageFileName.c_str());
+  // Tell CPackRPM.cmake the name of the component NAME.
+  this->SetOption("CPACK_RPM_PACKAGE_COMPONENT",packageName.c_str());
+  if (!this->ReadListFile("CPackRPM.cmake"))
+    {
+    cmCPackLogger(cmCPackLog::LOG_ERROR,
+        "Error while execution CPackRPM.cmake" << std::endl);
+    retval = 0;
+    }
+  // add the generated package to package file names list
+  packageFileNames.push_back(packageFileName);
+  return retval;
+}
+
+//----------------------------------------------------------------------
 int cmCPackRPMGenerator::PackageComponents(bool ignoreGroup)
 {
   int retval = 1;
@@ -69,37 +108,23 @@ int cmCPackRPMGenerator::PackageComponents(bool ignoreGroup)
       cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Packaging component group: "
           << compGIt->first
           << std::endl);
-      // Begin the archive for this group
-      std::string localToplevel(initialTopLevel);
-      std::string packageFileName(
-          cmSystemTools::GetParentDirectory(toplevel.c_str())
-                                 );
-      std::string outputFileName(
-       GetComponentPackageFileName(this->GetOption("CPACK_PACKAGE_FILE_NAME"),
-                                   compGIt->first,
-                                   true)
-                                   + this->GetOutputExtension()
-                                );
-
-      localToplevel += "/"+ compGIt->first;
-      /* replace the TEMP DIRECTORY with the component one */
-      this->SetOption("CPACK_TEMPORARY_DIRECTORY",localToplevel.c_str());
-      packageFileName += "/"+ outputFileName;
-      /* replace proposed CPACK_OUTPUT_FILE_NAME */
-      this->SetOption("CPACK_OUTPUT_FILE_NAME",outputFileName.c_str());
-      /* replace the TEMPORARY package file name */
-      this->SetOption("CPACK_TEMPORARY_PACKAGE_FILE_NAME",
-                      packageFileName.c_str());
-      // Tell CPackRPM.cmake the name of the component GROUP.
-      this->SetOption("CPACK_RPM_PACKAGE_COMPONENT",compGIt->first.c_str());
-      if (!this->ReadListFile("CPackRPM.cmake"))
+      retval &= PackageOnePack(initialTopLevel,compGIt->first);
+      }
+    // Handle Orphan components (components not belonging to any groups)
+    std::map<std::string, cmCPackComponent>::iterator compIt;
+    for (compIt=this->Components.begin();
+        compIt!=this->Components.end(); ++compIt )
+      {
+      // Does the component belong to a group?
+      if (compIt->second.Group==NULL)
         {
-        cmCPackLogger(cmCPackLog::LOG_ERROR,
-            "Error while execution CPackRPM.cmake" << std::endl);
-        retval = 0;
+        cmCPackLogger(cmCPackLog::LOG_VERBOSE,
+            "Component <"
+            << compIt->second.Name
+            << "> does not belong to any group, package it separately."
+            << std::endl);
+        retval &= PackageOnePack(initialTopLevel,compIt->first);
         }
-      // add the generated package to package file names list
-      packageFileNames.push_back(packageFileName);
       }
     }
   // CPACK_COMPONENTS_IGNORE_GROUPS is set
@@ -110,42 +135,14 @@ int cmCPackRPMGenerator::PackageComponents(bool ignoreGroup)
     for (compIt=this->Components.begin();
          compIt!=this->Components.end(); ++compIt )
       {
-      std::string localToplevel(initialTopLevel);
-      std::string packageFileName(
-          cmSystemTools::GetParentDirectory(toplevel.c_str())
-                                 );
-      std::string outputFileName(
-       GetComponentPackageFileName(this->GetOption("CPACK_PACKAGE_FILE_NAME"),
-                                   compIt->first,
-                                   false)
-       + this->GetOutputExtension());
-
-      localToplevel += "/"+ compIt->first;
-      /* replace the TEMP DIRECTORY with the component one */
-      this->SetOption("CPACK_TEMPORARY_DIRECTORY",localToplevel.c_str());
-      packageFileName += "/"+ outputFileName;
-      /* replace proposed CPACK_OUTPUT_FILE_NAME */
-      this->SetOption("CPACK_OUTPUT_FILE_NAME",outputFileName.c_str());
-      /* replace the TEMPORARY package file name */
-      this->SetOption("CPACK_TEMPORARY_PACKAGE_FILE_NAME",
-                      packageFileName.c_str());
-
-      this->SetOption("CPACK_RPM_PACKAGE_COMPONENT",compIt->first.c_str());
-      if (!this->ReadListFile("CPackRPM.cmake"))
-        {
-        cmCPackLogger(cmCPackLog::LOG_ERROR,
-                      "Error while execution CPackRPM.cmake" << std::endl);
-        retval = 0;
-        }
-      // add the generated package to package file names list
-      packageFileNames.push_back(packageFileName);
+      retval &= PackageOnePack(initialTopLevel,compIt->first);
       }
     }
   return retval;
 }
 
 //----------------------------------------------------------------------
-int cmCPackRPMGenerator::PackageComponentsAllInOne(bool allComponent)
+int cmCPackRPMGenerator::PackageComponentsAllInOne()
 {
   int retval = 1;
   std::string compInstDirName;
@@ -154,15 +151,7 @@ int cmCPackRPMGenerator::PackageComponentsAllInOne(bool allComponent)
   packageFileNames.clear();
   std::string initialTopLevel(this->GetOption("CPACK_TEMPORARY_DIRECTORY"));
 
-  // all GROUP in one vs all COMPONENT in one
-  if (allComponent)
-    {
-    compInstDirName = "ALL_COMPONENTS_IN_ONE";
-    }
-  else
-    {
-    compInstDirName = "ALL_GROUPS_IN_ONE";
-    }
+  compInstDirName = "ALL_COMPONENTS_IN_ONE";
 
   cmCPackLogger(cmCPackLog::LOG_VERBOSE,
                 "Packaging all groups in one package..."
@@ -214,19 +203,17 @@ int cmCPackRPMGenerator::PackageFiles()
   /* Are we in the component packaging case */
   if (SupportsComponentInstallation()) {
     // CASE 1 : COMPONENT ALL-IN-ONE package
-    // If ALL GROUPS or ALL COMPONENTS in ONE package has been requested
+    // If ALL COMPONENTS in ONE package has been requested
     // then the package file is unique and should be open here.
-    if (allComponentInOne ||
-        (allGroupInOne && (!this->ComponentGroups.empty()))
-       )
+    if (allComponentInOne)
       {
-      return PackageComponentsAllInOne(allComponentInOne);
+      return PackageComponentsAllInOne();
       }
     // CASE 2 : COMPONENT CLASSICAL package(s) (i.e. not all-in-one)
     // There will be 1 package for each component group
     // however one may require to ignore component group and
     // in this case you'll get 1 package for each component.
-    else if ((!this->ComponentGroups.empty()) || (ignoreComponentGroup))
+    else
       {
       return PackageComponents(ignoreComponentGroup);
       }
@@ -278,14 +265,7 @@ std::string cmCPackRPMGenerator::GetComponentInstallDirNameSuffix(
         cmSystemTools::UpperCase(componentName) + "_GROUP";
     if (NULL != GetOption(groupVar.c_str()))
       {
-      if (allGroupInOne)
-        {
-        return std::string("ALL_GROUPS_IN_ONE");
-        }
-      else
-        {
-        return std::string(GetOption(groupVar.c_str()));
-        }
+      return std::string(GetOption(groupVar.c_str()));
       }
     else
       {
diff --git a/Source/CPack/cmCPackRPMGenerator.h b/Source/CPack/cmCPackRPMGenerator.h
index 7c2e434..4883a0d 100644
--- a/Source/CPack/cmCPackRPMGenerator.h
+++ b/Source/CPack/cmCPackRPMGenerator.h
@@ -39,6 +39,10 @@ protected:
   virtual int InitializeInternal();
   virtual int PackageFiles();
   /**
+   * This method factors out the work done in component packaging case.
+   */
+  int PackageOnePack(std::string initialToplevel, std::string packageName);
+  /**
    * The method used to package files when component
    * install is used. This will create one
    * archive for each component group.
@@ -48,7 +52,7 @@ protected:
    * Special case of component install where all
    * components will be put in a single installer.
    */
-  int PackageComponentsAllInOne(bool allComponent);
+  int PackageComponentsAllInOne();
   virtual const char* GetOutputExtension() { return ".rpm"; }
   virtual bool SupportsComponentInstallation() const;
   virtual std::string GetComponentInstallDirNameSuffix(
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 77c5752..016b213 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -583,7 +583,6 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     list(APPEND CWAYLST "OnePackPerGroup")
     list(APPEND CWAYLST "IgnoreGroup")
     list(APPEND CWAYLST "AllInOne")
-    list(APPEND CWAYLST "AllGroupsInOne")
     foreach(CPackGen ${GENLST})
       set(CPackRun_CPackGen  "-DCPackGen=${CPackGen}")
       foreach(CPackComponentWay ${CWAYLST})
diff --git a/Tests/CPackComponentsForAll/MyLibCPackConfig-AllGroupsInOne.cmake.in b/Tests/CPackComponentsForAll/MyLibCPackConfig-AllGroupsInOne.cmake.in
deleted file mode 100644
index 85626be..0000000
--- a/Tests/CPackComponentsForAll/MyLibCPackConfig-AllGroupsInOne.cmake.in
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# Activate component packaging
-#
-if(CPACK_GENERATOR MATCHES "ZIP")
-   set(CPACK_ARCHIVE_COMPONENT_INSTALL "ON")
-endif(CPACK_GENERATOR MATCHES "ZIP")
-
-if(CPACK_GENERATOR MATCHES "RPM")
-   set(CPACK_RPM_COMPONENT_INSTALL "ON")
-endif(CPACK_GENERATOR MATCHES "RPM")
-
-if(CPACK_GENERATOR MATCHES "DEB")
-   set(CPACK_DEB_COMPONENT_INSTALL "ON")
-endif(CPACK_GENERATOR MATCHES "DEB")
-
-#
-# Choose grouping way
-#
-set(CPACK_COMPONENTS_ALL_GROUPS_IN_ONE_PACKAGE 1)
-#set(CPACK_COMPONENTS_GROUPING)
-#set(CPACK_COMPONENTS_IGNORE_GROUPS 1)
-#set(CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE 1)
diff --git a/Tests/CPackComponentsForAll/RunCPackVerifyResult.cmake b/Tests/CPackComponentsForAll/RunCPackVerifyResult.cmake
index ae0ee1a..77a1979 100644
--- a/Tests/CPackComponentsForAll/RunCPackVerifyResult.cmake
+++ b/Tests/CPackComponentsForAll/RunCPackVerifyResult.cmake
@@ -37,38 +37,37 @@ if(CPackGen MATCHES "ZIP")
     set(expected_file_mask "${CPackComponentsForAll_BINARY_DIR}/MyLib-*.zip")
     if (${CPackComponentWay} STREQUAL "default")
         set(expected_count 1)
-    endif(${CPackComponentWay} STREQUAL "default")
-    if (${CPackComponentWay} STREQUAL "OnePackPerGroup")
+    elseif (${CPackComponentWay} STREQUAL "OnePackPerGroup")
         set(expected_count 3)
-    endif (${CPackComponentWay} STREQUAL "OnePackPerGroup")
-    if (${CPackComponentWay} STREQUAL "IgnoreGroup")
+    elseif (${CPackComponentWay} STREQUAL "IgnoreGroup")
         set(expected_count 4)
-    endif (${CPackComponentWay} STREQUAL "IgnoreGroup")
-    if (${CPackComponentWay} STREQUAL "AllInOne")
+    elseif (${CPackComponentWay} STREQUAL "AllInOne")
         set(expected_count 1)
-    endif (${CPackComponentWay} STREQUAL "AllInOne")
-    if (${CPackComponentWay} STREQUAL "AllGroupsInOne")
-        set(expected_count 1)
-    endif (${CPackComponentWay} STREQUAL "AllGroupsInOne")
+    endif ()
 elseif (CPackGen MATCHES "RPM")
     set(config_verbose -D "CPACK_RPM_PACKAGE_DEBUG=1")
     set(expected_file_mask "${CPackComponentsForAll_BINARY_DIR}/MyLib-*.rpm")
     if (${CPackComponentWay} STREQUAL "default")
         set(expected_count 1)
-    endif (${CPackComponentWay} STREQUAL "default")
-    if (${CPackComponentWay} STREQUAL "OnePackPerGroup")
-        set(expected_count 2)
-    endif (${CPackComponentWay} STREQUAL "OnePackPerGroup")
-    if (${CPackComponentWay} STREQUAL "IgnoreGroup")
+    elseif (${CPackComponentWay} STREQUAL "OnePackPerGroup")
+        set(expected_count 3)
+    elseif (${CPackComponentWay} STREQUAL "IgnoreGroup")
         set(expected_count 4)
-    endif (${CPackComponentWay} STREQUAL "IgnoreGroup")
-    if (${CPackComponentWay} STREQUAL "AllInOne")
+    elseif (${CPackComponentWay} STREQUAL "AllInOne")
+        set(expected_count 1)
+    endif ()
+elseif (CPackGen MATCHES "DEB")
+    set(expected_file_mask "${CPackComponentsForAll_BINARY_DIR}/MyLib-*.deb")
+    if (${CPackComponentWay} STREQUAL "default")
         set(expected_count 1)
-    endif (${CPackComponentWay} STREQUAL "AllInOne")
-    if (${CPackComponentWay} STREQUAL "AllGroupsInOne")
+    elseif (${CPackComponentWay} STREQUAL "OnePackPerGroup")
+        set(expected_count 3)
+    elseif (${CPackComponentWay} STREQUAL "IgnoreGroup")
+        set(expected_count 4)
+    elseif (${CPackComponentWay} STREQUAL "AllInOne")
         set(expected_count 1)
-    endif (${CPackComponentWay} STREQUAL "AllGroupsInOne")
-endif(CPackGen MATCHES "ZIP")
+    endif ()
+endif()
 
 # clean-up previously CPack generated files
 if(expected_file_mask)

-----------------------------------------------------------------------

Summary of changes:
 Source/CPack/cmCPackArchiveGenerator.cxx           |   49 ++----
 Source/CPack/cmCPackArchiveGenerator.h             |    2 +-
 Source/CPack/cmCPackDebGenerator.cxx               |  193 ++++++++------------
 Source/CPack/cmCPackDebGenerator.h                 |    6 +-
 Source/CPack/cmCPackGenerator.cxx                  |   27 +--
 Source/CPack/cmCPackGenerator.h                    |    5 -
 Source/CPack/cmCPackRPMGenerator.cxx               |  144 +++++++---------
 Source/CPack/cmCPackRPMGenerator.h                 |    6 +-
 Tests/CMakeLists.txt                               |    1 -
 .../MyLibCPackConfig-AllGroupsInOne.cmake.in       |   22 ---
 .../RunCPackVerifyResult.cmake                     |   41 ++--
 11 files changed, 193 insertions(+), 303 deletions(-)
 delete mode 100644 Tests/CPackComponentsForAll/MyLibCPackConfig-AllGroupsInOne.cmake.in


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list