summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@theqtcompany.com>2015-06-15 11:39:06 +0200
committerJani Heikkinen <jani.heikkinen@theqtcompany.com>2015-06-15 10:34:01 +0000
commitd7f40baf8866eeb9840608b43bd84e27818824af (patch)
treeea83455cdb40f68ccc569fd4d3efdc8524764b43
parent6c8954b07807e31dbc8967ba6d92d4d022073087 (diff)
macdeployqt: Fix rpath setting for additional executables
Additional executables can lie anywhere within the app bundle, so we have to individually calculate the corresponding rpath instead of hard coding to @loader_path/../Frameworks. Task-number: QTBUG-46660 Change-Id: If213ad002b38a6690a30e7aeae47e201fdc4800c Reviewed-by: Morten Johan Sørvig <morten.sorvig@theqtcompany.com>
-rw-r--r--src/macdeployqt/shared/shared.cpp16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/macdeployqt/shared/shared.cpp b/src/macdeployqt/shared/shared.cpp
index 647b09f3a..e2c4a19bc 100644
--- a/src/macdeployqt/shared/shared.cpp
+++ b/src/macdeployqt/shared/shared.cpp
@@ -739,13 +739,17 @@ void changeInstallName(const QString &bundlePath, const FrameworkInfo &framework
}
}
-void deployRPaths(const QSet<QString> &rpaths, const QString &binaryPath, bool useLoaderPath)
+void deployRPaths(const QString &bundlePath, const QSet<QString> &rpaths, const QString &binaryPath, bool useLoaderPath)
{
+ const QString absFrameworksPath = QFileInfo(bundlePath).absoluteFilePath()
+ + QLatin1String("/Contents/Frameworks");
+ const QString relativeFrameworkPath = QFileInfo(binaryPath).absoluteDir().relativeFilePath(absFrameworksPath);
+ const QString loaderPathToFrameworks = QLatin1String("@loader_path/") + relativeFrameworkPath;
bool rpathToFrameworksFound = false;
QStringList args;
foreach (const QString &rpath, getBinaryRPaths(binaryPath, false)) {
if (rpath == "@executable_path/../Frameworks" ||
- rpath == "@loader_path/../Frameworks") {
+ rpath == loaderPathToFrameworks) {
rpathToFrameworksFound = true;
continue;
}
@@ -760,7 +764,7 @@ void deployRPaths(const QSet<QString> &rpaths, const QString &binaryPath, bool u
if (!useLoaderPath) {
args << "-add_rpath" << "@executable_path/../Frameworks";
} else {
- args << "-add_rpath" << "@loader_path/../Frameworks";
+ args << "-add_rpath" << loaderPathToFrameworks;
}
}
LogDebug() << "Using install_name_tool:";
@@ -769,10 +773,10 @@ void deployRPaths(const QSet<QString> &rpaths, const QString &binaryPath, bool u
runInstallNameTool(QStringList() << args << binaryPath);
}
-void deployRPaths(const QSet<QString> &rpaths, const QStringList &binaryPaths, bool useLoaderPath)
+void deployRPaths(const QString &bundlePath, const QSet<QString> &rpaths, const QStringList &binaryPaths, bool useLoaderPath)
{
foreach (const QString &binary, binaryPaths) {
- deployRPaths(rpaths, binary, useLoaderPath);
+ deployRPaths(bundlePath, rpaths, binary, useLoaderPath);
}
}
@@ -874,7 +878,7 @@ DeploymentInfo deployQtFrameworks(QList<FrameworkInfo> frameworks,
}
}
deploymentInfo.deployedFrameworks = copiedFrameworks;
- deployRPaths(rpathsUsed, binaryPaths, useLoaderPath);
+ deployRPaths(bundlePath, rpathsUsed, binaryPaths, useLoaderPath);
deploymentInfo.rpathsUsed += rpathsUsed;
return deploymentInfo;
}