File 0001-Let-Qt-find-qt.conf-on-Windows-also-on-dll-path.patch of Package mingw64-libqt5-qtbase
From bbd6e1f146ee154fc242c80e7f95fe40dc91d1a6 Mon Sep 17 00:00:00 2001
From: Ralf Habacker <ralf.habacker@freenet.de>
Date: Wed, 29 May 2024 08:25:36 +0200
Subject: [PATCH] Let Qt find qt.conf on Windows also on dll path
---
src/corelib/global/qlibraryinfo.cpp | 41 ++++++++++++++++++++++++++---
1 file changed, 37 insertions(+), 4 deletions(-)
diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp
index a1558a6ab..aabf4cb00 100644
--- a/src/corelib/global/qlibraryinfo.cpp
+++ b/src/corelib/global/qlibraryinfo.cpp
@@ -180,6 +180,34 @@ void QLibrarySettings::load()
}
}
+#ifdef Q_OS_WIN
+#include <windows.h>
+
+QString findMe()
+{
+ WCHAR path[MAX_PATH];
+ HMODULE handle;
+ if (GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
+ reinterpret_cast<LPWSTR>(&findMe), &handle)) {
+ GetModuleFileNameW(handle, path, sizeof(path));
+ return QDir::fromNativeSeparators(QString::fromUtf16(reinterpret_cast<const ushort*>(path)));
+ }
+ return QString();
+}
+#endif
+
+QSettings *findQtConf(const QString &path)
+{
+ QDir pwd(path);
+ QString qtconfig = pwd.filePath(QLatin1String("qt5.conf"));
+ if (QFile::exists(qtconfig))
+ return new QSettings(qtconfig, QSettings::IniFormat);
+ qtconfig = pwd.filePath(QLatin1String("qt.conf"));
+ if (QFile::exists(qtconfig))
+ return new QSettings(qtconfig, QSettings::IniFormat);
+ return nullptr;
+}
+
QSettings *QLibraryInfoPrivate::findConfiguration()
{
#ifdef QT_BUILD_QMAKE
@@ -206,13 +234,15 @@ QSettings *QLibraryInfoPrivate::findConfiguration()
}
#endif
if (QCoreApplication::instance()) {
- QDir pwd(QCoreApplication::applicationDirPath());
- qtconfig = pwd.filePath(QLatin1String("qt5.conf"));
- if (QFile::exists(qtconfig))
- return new QSettings(qtconfig, QSettings::IniFormat);
- qtconfig = pwd.filePath(QLatin1String("qt.conf"));
- if (QFile::exists(qtconfig))
- return new QSettings(qtconfig, QSettings::IniFormat);
+ QSettings *settings = findQtConf(QCoreApplication::applicationDirPath());
+ if (settings)
+ return settings;
+#ifdef Q_OS_WIN
+ QFileInfo fi(findMe());
+ settings = findQtConf(fi.absolutePath());
+ if (settings)
+ return settings;
+#endif
}
#endif
return nullptr; //no luck
--
2.44.0