From f99cc9c389189f4137ca578a5abb1556bfb733d3 Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 9 Sep 2014 08:57:20 -0400 Subject: [PATCH] Tolerate symlinks during RPATH ordering (#13429) On Arch Linux, /lib and /lib64 are symlinks to /usr/lib. When ordering runtime library search paths, we must not consider these to be distinct directories. Before considering conflicts between two directories, check that they do not have the same 'realpath'. Inspired-by: Myles English --- Source/cmOrderDirectories.cxx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Source/cmOrderDirectories.cxx b/Source/cmOrderDirectories.cxx index 71a34978c..007364c1f 100644 --- a/Source/cmOrderDirectories.cxx +++ b/Source/cmOrderDirectories.cxx @@ -72,7 +72,10 @@ public: { // Check if this directory conflicts with the entry. std::string const& dir = this->OD->OriginalDirectories[i]; - if(dir != this->Directory && this->FindConflict(dir)) + if(dir != this->Directory && + cmSystemTools::GetRealPath(dir) != + cmSystemTools::GetRealPath(this->Directory) && + this->FindConflict(dir)) { // The library will be found in this directory but this is not // the directory named for it. Add an entry to make sure the @@ -90,7 +93,10 @@ public: { // Check if this directory conflicts with the entry. std::string const& dir = this->OD->OriginalDirectories[i]; - if(dir != this->Directory && this->FindConflict(dir)) + if(dir != this->Directory && + cmSystemTools::GetRealPath(dir) != + cmSystemTools::GetRealPath(this->Directory) && + this->FindConflict(dir)) { // The library will be found in this directory but it is // supposed to be found in an implicit search directory.