Alexander Neundorf wrote: > On Saturday 17 November 2012, Alexander Neundorf wrote: >> Hi, >> >> maybe I am missing something, but here we go: >> >> on 64bit ArchLinux installations, /lib64/ is a symlink to /usr/lib/. >> /bin/ and /usr/bin/ are normal directories, no symlinks. >> >> Now if a Config.cmake files is installed into /usr/lib/foo/, and >> references other files of its installations using relative paths from its >> own location to e.g. /usr/bin/ (../../bin/ ), there is breakage. >> >> CMake finds FooConfig.cmake in /lib64/foo/FooConfig.cmake (which it seems >> to search before /usr/lib). Then it goes ../../bin/, but doesn't end up >> in /usr/bin/, where e.g. some executable is located, but instead it goes >> to /lib64/foo/../../bin/, which is /bin/, but the expected executable is >> not there, and so the FooConfig.cmake file fails. >> >> I'm not sure what the right way to deal with this is. >> Is this only on ArchLinux ? >> If so, maybe the best thing to do is to tell the ArchLinux developers to >> set up their symlinks in a different way ? >> Having e.g. /usr/lib64/ point to /usr/lib/ would make it work I think. >> Or if /lib64/ points to /usr/lib/, then maybe /bin/ should also point to >> /usr/bin/. >> Other ideas ? >> Or can CMake be tweaked to handle this ? >
I thought about a similar issue recently, namely that packagers packaging Qt5 might move the cmake config files to a different location. (eg from lib/cmake/ to share/) which would break the files (as they have relative paths too). I think that if packagers are moving files around like that, then they'll need to patch the config files too. They don't currently know that, so the solution would be to ship a README.PACKAGERS file which tells them that they need to make sure that cmake config files' relative paths are able to find what they refer to. This issue seems to be somewhat similar, in that a good description in a README.PACKAGERS file may have also alerted packagers to check that the relative paths are correct. CMake docs for find_package don't say anything about finding things in lib64/ dirs, and it doesn't seem to say anything about which prefixes are searched and in what order, so I'm not sure why it picks the config file which it eventually finds. Do we know if the people hitting this have set CMAKE_PREFIX_PATH themselves? The docs for find_package should get some mention of symlinks and how/whether they are followed (unless that is already elsewhere). A generic solution would be nice for this too, but I think it makes sense to find out how much of it is just a documentation issue first. Thanks, Steve. -- Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers
