Browse Source

CPackArchive package all components specified in CPACK_COMPONENTS_ALL

When asking for group packaging the components not belonging to
any group should be packaged separately.
Eric NOULARD 14 years ago
parent
commit
fe530ff5e9

+ 33 - 0
Source/CPack/cmCPackArchiveGenerator.cxx

@@ -143,6 +143,39 @@ int cmCPackArchiveGenerator::PackageComponents(bool ignoreGroup)
       // add the generated package to package file names list
       packageFileNames.push_back(packageFileName);
       }
+    // 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_VERBOSE,
+            "Component <"
+              << compIt->second.Name
+              << "> does not belong to any group, package it separately."
+              << std::endl);
+        std::string localToplevel(
+          this->GetOption("CPACK_TEMPORARY_DIRECTORY")
+                                 );
+        std::string packageFileName = std::string(toplevel);
+
+        localToplevel += "/"+ compIt->first;
+        packageFileName += "/"+
+        GetComponentPackageFileName(this->GetOption("CPACK_PACKAGE_FILE_NAME"),
+                                    compIt->first,
+                                    false)
+                              + this->GetOutputExtension();
+        {
+          DECLARE_AND_OPEN_ARCHIVE(packageFileName,archive);
+          // Add the files of this component to the archive
+          addOneComponentToArchive(archive,&(compIt->second));
+        }
+        // add the generated package to package file names list
+        packageFileNames.push_back(packageFileName);
+        }
+      }
     }
   // CPACK_COMPONENTS_IGNORE_GROUPS is set
   // We build 1 package per component

+ 1 - 1
Tests/CPackComponentsForAll/RunCPackVerifyResult.cmake

@@ -39,7 +39,7 @@ if(CPackGen MATCHES "ZIP")
         set(expected_count 1)
     endif(${CPackComponentWay} STREQUAL "default")
     if (${CPackComponentWay} STREQUAL "OnePackPerGroup")
-        set(expected_count 2)
+        set(expected_count 3)
     endif (${CPackComponentWay} STREQUAL "OnePackPerGroup")
     if (${CPackComponentWay} STREQUAL "IgnoreGroup")
         set(expected_count 4)