On Tuesday 04 December 2012, Stephen Kelly wrote:
> Alexander Neundorf wrote:
> > All install variables which are at cmake time somewhere below
> > CMAKE_INSTALL_PREFIX are treated as relative to CMAKE_INSTALL_PREFIX.
> > This is what the @PAKCAGE_INIT@ macro together with the @PACKAGE_FOO_DIR@
> > variables does.
> 
> Could your set_and_check macro be extended to warn in cases where a symlink
> is crossed?
> 
> eg:
> 
> File /lib64/cmake/foo/FooConfig.cmake
> contains set(Foo_Bar_Dir "../../../lib/libfoobar.so")
> 
> set and check walks up the path and checks at each step if it is a symlink.
> When it is at lib64/ which is a symlink and there is another '..', emit a
> warning? Similarly when climbing back up the path (eg if lib in the example
> above is a symlink). That should at least warn no matter which way around
> it is, right?
> 
> It's something that would need to be an option to cmsys::CollapseFullPath
> maybe. I'm still just brainstorming here really.
> 
> > Well, if you have a symlink, you don't know whether the symlink is the
> > correct location or the target of the symlink is the correct destination.
> 
> If you cross a symlink while processing a relative path, then something
> must have gone wrong.

I don't think so.

Let's assume /opt/foo/lib/ is a symlink to /usr/local/lib/.
The package has been installed to /opt/foo/ and is found via CMAKE_PREFIX_PATH 
in /opt/foo/lib/cmake/Foo/FooConfig.cmake.
Now when going up to the prefix, we will come across /opt/foo/lib/, which is a 
symlink, but everything will be fine, since going up will take us to 
/opt/foo/, from where we can correctly descend again.

If the package would have been found in 
/usr/local/lib/cmake/Foo/FooConfig.cmake (e.g. because CMAKE_PREFIX_PATH was 
not set), then we would get the problem, but here there would be no symlink 
(other than if it would be possible to test whether a directory is the 
destination of a symlink).

It's a problem if the symlinked location is not the location to which the 
package has been installed, but for whatever reason the symlinked location is 
found first.

Alex
--

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

Reply via email to