Windeployqt: Add a check for LLVM-MinGW runtimes
The compilerRuntimeLibs now pays attention to if the user is running MinGW, or LLVM-MinGW, before deploying the corresponding runtimes from the Qt binary folder, or from the path if it cannot find any in the Qt binaries. [ChangeLog][QtTools][Windeployqt] Windeployqt now supports LLVM-MingGW runtimes. Pick-to: 6.5 Change-Id: I9c464cdb933795e491992f5d1adb18bcc7d69f02 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io> Reviewed-by: Yuhang Zhao <yuhangzhao@deepin.org>
This commit is contained in:
parent
daa77824b3
commit
3d0fb2cea9
@ -1084,32 +1084,48 @@ static QString vcRedistDir()
|
|||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QStringList findMinGWRuntimePaths(const QString &qtBinDir, Platform platform, const QStringList &runtimeFilters)
|
||||||
|
{
|
||||||
|
//MinGW: Add runtime libraries. Check first for the Qt binary directory, and default to path if nothing is found.
|
||||||
|
QStringList result;
|
||||||
|
const bool isClang = platform == WindowsDesktopClangMinGW;
|
||||||
|
QStringList filters;
|
||||||
|
const QString suffix = u'*' + sharedLibrarySuffix(platform);
|
||||||
|
for (const auto &minGWRuntime : runtimeFilters)
|
||||||
|
filters.append(minGWRuntime + suffix);
|
||||||
|
|
||||||
|
QFileInfoList dlls = QDir(qtBinDir).entryInfoList(filters, QDir::Files);
|
||||||
|
if (dlls.isEmpty()) {
|
||||||
|
std::wcerr << "Warning: Runtime libraries not found in Qt binary folder, defaulting to looking in path\n";
|
||||||
|
const QString binaryPath = isClang ? findInPath("clang++.exe"_L1) : findInPath("g++.exe"_L1);
|
||||||
|
if (binaryPath.isEmpty()) {
|
||||||
|
std::wcerr << "Warning: Cannot find " << (isClang ? "Clang" : "GCC") << " installation directory, " << (isClang ? "clang++" : "g++") << ".exe must be in the path\n";
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
const QString binaryFolder = QFileInfo(binaryPath).absolutePath();
|
||||||
|
dlls = QDir(binaryFolder).entryInfoList(filters, QDir::Files);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const QFileInfo &dllFi : dlls)
|
||||||
|
result.append(dllFi.absoluteFilePath());
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
static QStringList compilerRunTimeLibs(const QString &qtBinDir, Platform platform, bool isDebug, unsigned short machineArch)
|
static QStringList compilerRunTimeLibs(const QString &qtBinDir, Platform platform, bool isDebug, unsigned short machineArch)
|
||||||
{
|
{
|
||||||
QStringList result;
|
QStringList result;
|
||||||
switch (platform) {
|
switch (platform) {
|
||||||
case WindowsDesktopMinGW: { // MinGW: Add runtime libraries. Check first for the Qt binary directory, and default to path if nothing is found.
|
case WindowsDesktopMinGW: {
|
||||||
static const char *minGwRuntimes[] = {"*gcc_", "*stdc++", "*winpthread"};
|
const QStringList minGWRuntimes = { "*gcc_"_L1, "*stdc++"_L1, "*winpthread"_L1 };
|
||||||
QStringList filters;
|
result.append(findMinGWRuntimePaths(qtBinDir, platform, minGWRuntimes));
|
||||||
const QString suffix = u'*' + sharedLibrarySuffix(platform);
|
|
||||||
for (auto minGwRuntime : minGwRuntimes)
|
|
||||||
filters.append(QLatin1StringView(minGwRuntime) + suffix);
|
|
||||||
|
|
||||||
QFileInfoList dlls = QDir(qtBinDir).entryInfoList(filters, QDir::Files);
|
|
||||||
if (dlls.isEmpty()) {
|
|
||||||
std::wcerr << "Warning: Runtime libraries not found in Qt binary folder, defaulting to path\n";
|
|
||||||
const QString gcc = findInPath(QStringLiteral("g++.exe"));
|
|
||||||
if (gcc.isEmpty()) {
|
|
||||||
std::wcerr << "Warning: Cannot find GCC installation directory. g++.exe must be in the path.\n";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
const QString binPath = QFileInfo(gcc).absolutePath();
|
|
||||||
dlls = QDir(binPath).entryInfoList(filters, QDir::Files);
|
|
||||||
}
|
|
||||||
for (const QFileInfo &dllFi : dlls)
|
|
||||||
result.append(dllFi.absoluteFilePath());
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
case WindowsDesktopClangMinGW: {
|
||||||
|
const QStringList clangMinGWRuntimes = { "*unwind"_L1, "*c++"_L1 };
|
||||||
|
result.append(findMinGWRuntimePaths(qtBinDir, platform, clangMinGWRuntimes));
|
||||||
|
break;
|
||||||
|
}
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
case WindowsDesktopMsvc: { // MSVC/Desktop: Add redistributable packages.
|
case WindowsDesktopMsvc: { // MSVC/Desktop: Add redistributable packages.
|
||||||
QString vcRedistDirName = vcRedistDir();
|
QString vcRedistDirName = vcRedistDir();
|
||||||
|
Loading…
Reference in New Issue
Block a user