diff options
Diffstat (limited to 'src/tools/macdeployqt/shared/shared.cpp')
-rw-r--r-- | src/tools/macdeployqt/shared/shared.cpp | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/src/tools/macdeployqt/shared/shared.cpp b/src/tools/macdeployqt/shared/shared.cpp index f637416cf2..6ff269b36d 100644 --- a/src/tools/macdeployqt/shared/shared.cpp +++ b/src/tools/macdeployqt/shared/shared.cpp @@ -152,7 +152,7 @@ OtoolInfo findDependencyInfo(const QString &binaryPath) LogDebug() << " inspecting" << binaryPath; QProcess otool; otool.start("otool", QStringList() << "-L" << binaryPath); - otool.waitForFinished(); + otool.waitForFinished(-1); if (otool.exitStatus() != QProcess::NormalExit || otool.exitCode() != 0) { LogError() << otool.readAllStandardError(); @@ -172,7 +172,7 @@ OtoolInfo findDependencyInfo(const QString &binaryPath) outputLines.removeFirst(); // remove line containing the binary path if (binaryPath.contains(".framework/") || binaryPath.endsWith(".dylib")) { - const auto match = regexp.match(outputLines.first()); + const auto match = regexp.match(outputLines.constFirst()); if (match.hasMatch()) { QString installname = match.captured(1); if (QFileInfo(binaryPath).fileName() == QFileInfo(installname).fileName()) { @@ -184,7 +184,7 @@ OtoolInfo findDependencyInfo(const QString &binaryPath) info.installName = binaryPath; } } else { - LogDebug() << "Could not parse otool output line:" << outputLines.first(); + LogDebug() << "Could not parse otool output line:" << outputLines.constFirst(); outputLines.removeFirst(); } } @@ -435,7 +435,7 @@ QStringList findAppLibraries(const QString &appBundlePath) { QStringList result; // dylibs - QDirIterator iter(appBundlePath, QStringList() << QString::fromLatin1("*.dylib"), + QDirIterator iter(appBundlePath, QStringList() << QString::fromLatin1("*.dylib") << QString::fromLatin1("*.so"), QDir::Files | QDir::NoSymLinks, QDirIterator::Subdirectories); while (iter.hasNext()) { iter.next(); @@ -598,10 +598,14 @@ QStringList getBinaryDependencies(const QString executablePath, QString binary = QDir::cleanPath(executablePath + trimmedLine.mid(QStringLiteral("@executable_path/").length())); if (binary != path) binaries.append(binary); + } else if (trimmedLine.startsWith("@loader_path/")) { + QString binary = QDir::cleanPath(QFileInfo(path).path() + "/" + trimmedLine.mid(QStringLiteral("@loader_path/").length())); + if (binary != path) + binaries.append(binary); } else if (trimmedLine.startsWith("@rpath/")) { if (!rpathsLoaded) { rpaths = getBinaryRPaths(path, true, executablePath); - foreach (const QString &binaryPath, additionalBinariesContainingRpaths) + for (const QString &binaryPath : additionalBinariesContainingRpaths) rpaths += getBinaryRPaths(binaryPath, true); rpaths.removeDuplicates(); rpathsLoaded = true; @@ -630,15 +634,16 @@ QStringList getBinaryDependencies(const QString executablePath, bool recursiveCopy(const QString &sourcePath, const QString &destinationPath, const QRegularExpression &ignoreRegExp = QRegularExpression()) { - if (!QDir(sourcePath).exists()) + const QDir sourceDir(sourcePath); + if (!sourceDir.exists()) return false; QDir().mkpath(destinationPath); LogNormal() << "copy:" << sourcePath << destinationPath; - QStringList files = QDir(sourcePath).entryList(QStringList() << "*", QDir::Files | QDir::NoDotAndDotDot); + const QStringList files = sourceDir.entryList(QStringList() << "*", QDir::Files | QDir::NoDotAndDotDot); const bool hasValidRegExp = ignoreRegExp.isValid() && ignoreRegExp.pattern().length() > 0; - foreach (QString file, files) { + for (const QString &file : files) { if (hasValidRegExp && ignoreRegExp.match(file).hasMatch()) continue; const QString fileSourcePath = sourcePath + "/" + file; @@ -646,7 +651,7 @@ bool recursiveCopy(const QString &sourcePath, const QString &destinationPath, copyFilePrintStatus(fileSourcePath, fileDestinationPath); } - QStringList subdirs = QDir(sourcePath).entryList(QStringList() << "*", QDir::Dirs | QDir::NoDotAndDotDot); + const QStringList subdirs = sourceDir.entryList(QStringList() << "*", QDir::Dirs | QDir::NoDotAndDotDot); for (const QString &dir : subdirs) { recursiveCopy(sourcePath + "/" + dir, destinationPath + "/" + dir); } @@ -660,7 +665,9 @@ void recursiveCopyAndDeploy(const QString &appBundlePath, const QList<QString> & LogNormal() << "copy:" << sourcePath << destinationPath; const bool isDwarfPath = sourcePath.endsWith("DWARF"); - QStringList files = QDir(sourcePath).entryList(QStringList() << QStringLiteral("*"), QDir::Files | QDir::NoDotAndDotDot); + const QDir sourceDir(sourcePath); + + const QStringList files = sourceDir.entryList(QStringList() << QStringLiteral("*"), QDir::Files | QDir::NoDotAndDotDot); for (const QString &file : files) { const QString fileSourcePath = sourcePath + u'/' + file; @@ -706,7 +713,7 @@ void recursiveCopyAndDeploy(const QString &appBundlePath, const QList<QString> & } } - QStringList subdirs = QDir(sourcePath).entryList(QStringList() << QStringLiteral("*"), QDir::Dirs | QDir::NoDotAndDotDot); + const QStringList subdirs = sourceDir.entryList(QStringList() << QStringLiteral("*"), QDir::Dirs | QDir::NoDotAndDotDot); for (const QString &dir : subdirs) { recursiveCopyAndDeploy(appBundlePath, rpaths, sourcePath + u'/' + dir, destinationPath + u'/' + dir); } |