diff options
author | Alexandru Croitor <alexandru.croitor@qt.io> | 2021-10-20 11:26:25 (GMT) |
---|---|---|
committer | Alexandru Croitor <alexandru.croitor@qt.io> | 2021-10-20 16:50:41 (GMT) |
commit | 91ec6eee58cdde3ad7994b5c7f96994427e65b68 (patch) | |
tree | 54da9829389349ecbf36a9fbb29e986334bce861 /Source | |
parent | 9be4c7f0c426c1445e48165f13ae2d31fa1f2940 (diff) | |
download | CMake-91ec6eee58cdde3ad7994b5c7f96994427e65b68.zip CMake-91ec6eee58cdde3ad7994b5c7f96994427e65b68.tar.gz CMake-91ec6eee58cdde3ad7994b5c7f96994427e65b68.tar.bz2 |
find_package: Don't reroot prefix that is equal to a root path
When both CMAKE_FIND_ROOT_PATH and CMAKE_PREFIX_PATH are set to
/opt/my_device_sysroot, cmFindCommon::RerootPaths would only look
for packages in /opt/my_device_sysroot/opt/my_device_sysroot
but would not try to look in /opt/my_device_sysroot.
Make sure to not reroot the prefix path in such a case.
Fixes: #21937
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmFindCommon.cxx | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/Source/cmFindCommon.cxx b/Source/cmFindCommon.cxx index bdc9207..e896a87 100644 --- a/Source/cmFindCommon.cxx +++ b/Source/cmFindCommon.cxx @@ -240,14 +240,20 @@ void cmFindCommon::RerootPaths(std::vector<std::string>& paths) std::vector<std::string> unrootedPaths = paths; paths.clear(); + auto isSameDirectoryOrSubDirectory = [](std::string const& l, + std::string const& r) { + return (cmSystemTools::GetRealPath(l) == cmSystemTools::GetRealPath(r)) || + cmSystemTools::IsSubDirectory(l, r); + }; + for (std::string const& r : roots) { for (std::string const& up : unrootedPaths) { // Place the unrooted path under the current root if it is not // already inside. Skip the unrooted path if it is relative to // a user home directory or is empty. std::string rootedDir; - if (cmSystemTools::IsSubDirectory(up, r) || - (stagePrefix && cmSystemTools::IsSubDirectory(up, *stagePrefix))) { + if (isSameDirectoryOrSubDirectory(up, r) || + (stagePrefix && isSameDirectoryOrSubDirectory(up, *stagePrefix))) { rootedDir = up; } else if (!up.empty() && up[0] != '~') { // Start with the new root. |