فهرست منبع

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 سال پیش
والد
کامیت
fe530ff5e9
2فایلهای تغییر یافته به همراه34 افزوده شده و 1 حذف شده
  1. 33 0
      Source/CPack/cmCPackArchiveGenerator.cxx
  2. 1 1
      Tests/CPackComponentsForAll/RunCPackVerifyResult.cmake

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