Browse Source

Correctly handle libraries in subdirectories (#328)

Leave libs that are already in the AppDir in their current location
master
M-Mueller 6 years ago
committed by probonopd
parent
commit
3381c6c667
  1. 23
      tools/linuxdeployqt/shared.cpp

23
tools/linuxdeployqt/shared.cpp

@ -520,7 +520,11 @@ LibraryInfo parseLddLibraryLine(const QString &line, const QString &appDirPath,
info.deployedInstallName = "$ORIGIN"; // + info.binaryName;
info.libraryPath = info.libraryDirectory + info.binaryName;
info.sourceFilePath = info.libraryPath;
info.libraryDestinationDirectory = bundleLibraryDirectory + "/";
if (info.libraryPath.contains(appDirPath))
// leave libs that are already in the appdir in their current location
info.libraryDestinationDirectory = QDir(appDirPath).relativeFilePath(info.libraryDirectory);
else
info.libraryDestinationDirectory = bundleLibraryDirectory + "/";
info.binaryDestinationDirectory = info.libraryDestinationDirectory;
info.binaryDirectory = info.libraryDirectory;
info.binaryPath = info.libraryPath;
@ -841,8 +845,21 @@ void changeIdentification(const QString &id, const QString &binaryPath)
setenv("LD_LIBRARY_PATH",newPath.toUtf8().constData(),1);
}
}
LogNormal() << "Changing rpath in" << binaryPath << "to" << id;
runPatchelf(QStringList() << "--set-rpath" << id << binaryPath);
QStringList rpath = oldRpath.split(":", QString::SkipEmptyParts);
rpath.prepend(id);
rpath.removeDuplicates();
foreach(QString path, QStringList(rpath)) {
// remove any non-relative path that would point outside the package
if (!path.startsWith("$ORIGIN"))
{
LogWarning() << "Removing absolute rpath of " << path << " in " << binaryPath;
rpath.removeAll(path);
}
}
LogNormal() << "Changing rpath in" << binaryPath << "to" << rpath.join(":");
runPatchelf(QStringList() << "--set-rpath" << rpath.join(":") << binaryPath);
// qt_prfxpath:
if (binaryPath.contains("libQt5Core")) {

Loading…
Cancel
Save