From 1b68c76b1978b8edd4703d31b8c2befc65b60a0f Mon Sep 17 00:00:00 2001 From: Andy Cedilnik Date: Wed, 2 Mar 2005 11:48:58 -0500 Subject: [PATCH] BUG: Attempt to fix sorting stability using more deterministic compare function --- Source/cmOrderLinkDirectories.cxx | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/Source/cmOrderLinkDirectories.cxx b/Source/cmOrderLinkDirectories.cxx index 86a7cbe9b..09f1f85f7 100644 --- a/Source/cmOrderLinkDirectories.cxx +++ b/Source/cmOrderLinkDirectories.cxx @@ -158,17 +158,20 @@ struct cmOrderLinkDirectoriesCompare const cmStdString& right ) const { - bool ret = This->CanBeBefore(left, right); - if(!ret) + bool LBeforeR= This->CanBeBefore(left, right); + bool RBeforeL= This->CanBeBefore(right, left); + + if ( !LBeforeR && !RBeforeL ) { // check for the case when both libraries have to come // before each other - if(!This->CanBeBefore(right, left)) - { - This->AddImpossible(right, left); - } + This->AddImpossible(right, left); } - return ret; + if ( LBeforeR == RBeforeL ) + { + return strcmp(left.c_str(), right.c_str()) < 0; + } + return LBeforeR; } cmOrderLinkDirectories* This; }; @@ -189,7 +192,8 @@ void cmOrderLinkDirectories::OrderPaths(std::vector& comp.This = this; // for some reason when cmake is run on InsightApplication // if std::sort is used here cmake crashes, but stable_sort works - std::stable_sort(orderedPaths.begin(), orderedPaths.end(), comp); + // + std::sort(orderedPaths.begin(), orderedPaths.end(), comp); } //-------------------------------------------------------------------