Browse Source

CPack fix #11930 and simplifies component packaging options

Eric NOULARD 14 years ago
parent
commit
6dfc818394

+ 12 - 37
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);
       }

+ 1 - 1
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;

+ 79 - 114
Source/CPack/cmCPackDebGenerator.cxx

@@ -50,6 +50,62 @@ int cmCPackDebGenerator::InitializeInternal()
   return this->Superclass::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)
 {
@@ -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
       {

+ 5 - 1
Source/CPack/cmCPackDebGenerator.h

@@ -33,6 +33,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
@@ -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;

+ 9 - 18
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
         << ")"

+ 0 - 5
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
@@ -238,10 +237,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.
    */

+ 62 - 82
Source/CPack/cmCPackRPMGenerator.cxx

@@ -49,6 +49,45 @@ int cmCPackRPMGenerator::InitializeInternal()
   return this->Superclass::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)
 {
@@ -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
       {

+ 5 - 1
Source/CPack/cmCPackRPMGenerator.h

@@ -38,6 +38,10 @@ public:
 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
@@ -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(

+ 0 - 1
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})

+ 0 - 22
Tests/CPackComponentsForAll/MyLibCPackConfig-AllGroupsInOne.cmake.in

@@ -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)

+ 20 - 21
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)