about rpath "automagic" (CMAKE_INSTALL_RPATH)
René J. V. Bertin
rjvbertin at gmail.com
Wed Jan 27 14:59:42 UTC 2016
Hello,
I've been building KF5 projects on OS X and Linux, using /opt/local as the
install prefix, but with Qt5 tucked away partly into /opt/local/libexec/qt5 in
order to allow it to co-exist with Qt4 in the same prefix.
The build system I use (MacPorts) will typically turn on explicit rpaths if such
a build option exists, but that isn't even always necessary on OS X as shared
libraries (can) contain their own absolute install path. (In that case it's the
link editor that adds the info to the product's rpath.)
IOW, -DCMAKE_INSTALL_RPATH=/opt/local/lib is added to the CMake arguments by
default.
This is not enough on Linux, I just realised. For example, when I build QtCurve
in "Qt only" mode, it will not contain a runtime search path for the Qt
libraries, and the dynamic loader will thus find the system libraries (or none).
When I build with KF5 support enabled though, the correct Qt libraries are found
all of a sudden. In both cases the actual link command uses the full path to the
correct Qt libraries, so it's not the build system that finds the wrong library
versions.
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?!
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 ?
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 ...
Thanks,
René
More information about the Kde-buildsystem
mailing list