diff --git a/src/kdeinit/kinit.cpp b/src/kdeinit/kinit.cpp index 3c3c913..f510620 100644 --- a/src/kdeinit/kinit.cpp +++ b/src/kdeinit/kinit.cpp @@ -652,15 +652,17 @@ static pid_t launch(int argc, const char *_name, const char *args, if (!libpath.isEmpty()) { if (!l.load()) { if (libpath_relative) { - // NB: Because Qt makes the actual dlopen() call, the - // RUNPATH of kdeinit is *not* respected - see - // https://sourceware.org/bugzilla/show_bug.cgi?id=13945 - // - so we try hacking it in ourselves - QString install_lib_dir = QFile::decodeName( - CMAKE_INSTALL_PREFIX "/" LIB_INSTALL_DIR "/"); - libpath = install_lib_dir + libpath; - l.setFileName(libpath); + // Use QT_PLUGIN_PATH to find shared library directories + // For KF5, the plugin path is /lib/plugins, so the kdeinit5 + // shared libraries should be in /lib/plugins/../ + const QRegExp pathSepRegExp(QString::fromLatin1("[:\b]")); + const QString up = QString::fromLocal8Bit("/../"); + const QStringList paths = QString::fromLocal8Bit(qgetenv("QT_PLUGIN_PATH")).split(pathSepRegExp, QString::KeepEmptyParts); + Q_FOREACH (const QString &path, paths) { + l.setFileName(path + up + libpath); l.load(); + if (l.isLoaded()) break; + } } } if (!l.isLoaded()) {