[Cmake-commits] [cmake-commits] david.cole committed cmCPackPackageMakerGenerator.cxx 1.27 1.28 cmCPackPackageMakerGenerator.h 1.15 1.16

cmake-commits at cmake.org cmake-commits at cmake.org
Wed Jul 30 13:28:19 EDT 2008


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

Modified Files:
	cmCPackPackageMakerGenerator.cxx 
	cmCPackPackageMakerGenerator.h 
Log Message:
BUG: Fix issue #7414 - do not crash when given components with circular dependencies. Thanks to Doug Gregor for the patch.


Index: cmCPackPackageMakerGenerator.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/CPack/cmCPackPackageMakerGenerator.cxx,v
retrieving revision 1.27
retrieving revision 1.28
diff -C 2 -d -r1.27 -r1.28
*** cmCPackPackageMakerGenerator.cxx	9 Jul 2008 17:38:55 -0000	1.27
--- cmCPackPackageMakerGenerator.cxx	30 Jul 2008 17:28:17 -0000	1.28
***************
*** 830,835 ****
      // or E--will automatically cause C to get selected.
      out << "selected=\"my.choice.selected";
!     AddDependencyAttributes(component, out);
!     AddReverseDependencyAttributes(component, out);
      out << "\"";
      }
--- 830,837 ----
      // or E--will automatically cause C to get selected.
      out << "selected=\"my.choice.selected";
!     std::set<const cmCPackComponent *> visited;
!     AddDependencyAttributes(component, visited, out);
!     visited.clear();
!     AddReverseDependencyAttributes(component, visited, out);
      out << "\"";
      }
***************
*** 869,874 ****
  void 
  cmCPackPackageMakerGenerator::
! AddDependencyAttributes(const cmCPackComponent& component, cmOStringStream& out)
  {
    std::vector<cmCPackComponent *>::const_iterator dependIt;
    for (dependIt = component.Dependencies.begin();
--- 871,884 ----
  void 
  cmCPackPackageMakerGenerator::
! AddDependencyAttributes(const cmCPackComponent& component, 
!                         std::set<const cmCPackComponent *>& visited,
!                         cmOStringStream& out)
  {
+   if (visited.find(&component) != visited.end())
+     {
+     return;
+     }
+   visited.insert(&component);
+ 
    std::vector<cmCPackComponent *>::const_iterator dependIt;
    for (dependIt = component.Dependencies.begin();
***************
*** 877,881 ****
      {
      out << " &amp;&amp; choices['" << (*dependIt)->Name << "Choice'].selected";
!     AddDependencyAttributes(**dependIt, out);
      }
  }
--- 887,891 ----
      {
      out << " &amp;&amp; choices['" << (*dependIt)->Name << "Choice'].selected";
!     AddDependencyAttributes(**dependIt, visited, out);
      }
  }
***************
*** 885,890 ****
--- 895,907 ----
  cmCPackPackageMakerGenerator::
  AddReverseDependencyAttributes(const cmCPackComponent& component, 
+                                std::set<const cmCPackComponent *>& visited,
                                 cmOStringStream& out)
  {
+   if (visited.find(&component) != visited.end())
+     {
+     return;
+     }
+   visited.insert(&component);
+ 
    std::vector<cmCPackComponent *>::const_iterator dependIt;
    for (dependIt = component.ReverseDependencies.begin();
***************
*** 893,897 ****
      {
      out << " || choices['" << (*dependIt)->Name << "Choice'].selected";
!     AddReverseDependencyAttributes(**dependIt, out);
      }
  }
--- 910,914 ----
      {
      out << " || choices['" << (*dependIt)->Name << "Choice'].selected";
!     AddReverseDependencyAttributes(**dependIt, visited, out);
      }
  }

Index: cmCPackPackageMakerGenerator.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/CPack/cmCPackPackageMakerGenerator.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -C 2 -d -r1.15 -r1.16
*** cmCPackPackageMakerGenerator.h	9 Jul 2008 17:38:56 -0000	1.15
--- cmCPackPackageMakerGenerator.h	30 Jul 2008 17:28:17 -0000	1.16
***************
*** 89,98 ****
    // dependency attributes for inter-component dependencies.
    void AddDependencyAttributes(const cmCPackComponent& component,
                                 cmOStringStream& out);
  
    // Subroutine of WriteDistributionFile that writes out the
    // reverse dependency attributes for inter-component dependencies.
!   void AddReverseDependencyAttributes(const cmCPackComponent& component,
!                                       cmOStringStream& out);
  
    // Generates XML that encodes the hierarchy of component groups and
--- 89,101 ----
    // dependency attributes for inter-component dependencies.
    void AddDependencyAttributes(const cmCPackComponent& component,
+                                std::set<const cmCPackComponent *>& visited,
                                 cmOStringStream& out);
  
    // Subroutine of WriteDistributionFile that writes out the
    // reverse dependency attributes for inter-component dependencies.
!   void 
!   AddReverseDependencyAttributes(const cmCPackComponent& component,
!                                  std::set<const cmCPackComponent *>& visited,
!                                  cmOStringStream& out);
  
    // Generates XML that encodes the hierarchy of component groups and



More information about the Cmake-commits mailing list