[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 << " && choices['" << (*dependIt)->Name << "Choice'].selected";
! AddDependencyAttributes(**dependIt, out);
}
}
--- 887,891 ----
{
out << " && 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