about rpath "automagic" (CMAKE_INSTALL_RPATH)

Alex Merry alex.merry at kde.org
Sun Feb 7 11:50:45 UTC 2016


On 2016-01-27 14:59, René J. V.  Bertin wrote:
> There is no explicit CMAKE_INSTALL_RPATH reconfiguration in QtCurve's 
> CMake
> files, so whatever happens is handled automatically, somewhere. That 
> somewhere
> must be in a KF5 cmake file and not one from Qt itself. 
> KDECMakeSettings.cmake
> seems the most likely candidate, and I'd like to ask some questions 
> about that
> file (hoping this is the right place):
> 
> 1) I see it does `set(CMAKE_INSTALL_RPATH "${_abs_LIB_INSTALL_DIR}")` .
> Shouldn't that be `set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH;
> ${_abs_LIB_INSTALL_DIR}"), IOW, shouldn't the additional path be 
> appended (or
> prepended...) to the existing RPATH?!

Quite possibly. I suspect the original author didn't account for the 
possibility that someone might want to explicitly specify such a path on 
the command line.

> 2) I did find that I have to set 
> `-DCMAKE_INSTALL_RPATH="/opt/local/lib/x86_64-
> linux-gnu\;/opt/local/lib"` on Linux, presumably because Kubuntu's 
> multi-arch
> configuration is detected. Why does the build system not pick that fact 
> up,
> while it clearly does pick up the non-standard Qt library locations? 
> Maybe it
> considers /opt/local/lib/x86_64-linux-gnu a system location because
> cmake itself
> is installed under /opt/local ?

The mechanism by which packages are found is completely independent, and 
(more or less) involves CMake searching the filesystem recursively for 
*Config.cmake files, which then tell it where to find, say, Qt. Our 
RPATH handling logic isn't clever enough to account for found packages, 
though.

It's possible that CMake could figure out the necessary RPATH settings 
itself. It's worth re-visiting this, I think.

> 3) If KDECMakeSettings.cmake alters CMAKE_INSTALL_RPATH, is that 
> supposed to be
> visible in CMakeCache.txt ? That cache file only shows the setting I 
> passed on
> the commandline. If that means KDECMakeSettings.cmake doesn't do its 
> job in my
> set-up, then the mystery stands how KF5 builds manage to add
> /opt/local/libexec/qt5/lib to the rpath ...

No. The fact that it is in the CMakeCache.txt at all is just an artifact 
of you passing it on the command line. The lookup sequence for variables 
is to check runtime-set variables, and only fall back to the cache if a 
variable hasn't been set at runtime.

Alex


More information about the Kde-buildsystem mailing list