mirror of
https://github.com/Kitware/CMake.git
synced 2026-02-21 14:40:26 -06:00
cmOrderDirectories: Consider symlinks when checking implicit directories
When checking whether a directory is "implicit" (e.g. implicit link directory or implicit rpath directory), resolve the real path of both sides of the comparison. Otherwise we will not recognize paths like `/usr/lib32` as implicit when `/usr/lib` is implicit and `lib32` is actually a symlink to `lib`. This can lead to addition of unnecessary entries to the RPATH of a binary, for example. Fixes: #16682
This commit is contained in:
@@ -345,12 +345,17 @@ void cmOrderDirectories::AddLanguageDirectories(
|
||||
void cmOrderDirectories::SetImplicitDirectories(
|
||||
std::set<std::string> const& implicitDirs)
|
||||
{
|
||||
this->ImplicitDirectories = implicitDirs;
|
||||
this->ImplicitDirectories.clear();
|
||||
for (std::set<std::string>::const_iterator i = implicitDirs.begin();
|
||||
i != implicitDirs.end(); ++i) {
|
||||
this->ImplicitDirectories.insert(this->GetRealPath(*i));
|
||||
}
|
||||
}
|
||||
|
||||
bool cmOrderDirectories::IsImplicitDirectory(std::string const& dir)
|
||||
{
|
||||
return this->ImplicitDirectories.find(dir) !=
|
||||
std::string const& real = this->GetRealPath(dir);
|
||||
return this->ImplicitDirectories.find(real) !=
|
||||
this->ImplicitDirectories.end();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user