From bdb2f20154c1fa1f0962a46a22afdee453a2db1e Mon Sep 17 00:00:00 2001 From: Alexey Edelev Date: Tue, 27 Feb 2024 17:57:05 +0100 Subject: [PATCH] Fix the qtpath issue with lto enabled Move qtconfManualPath pointer to the unnamed namespace, so it's never exported. Add the static setQtconfManualPath method that sets the pointer at runtime. Fixes: QTBUG-122739 Pick-to: 6.5 6.6 6.7 Change-Id: Icfc631f9680ad5f484920b0fdf3e408b7657c108 Reviewed-by: Joerg Bornemann Reviewed-by: Thiago Macieira --- qmake/option.cpp | 2 +- src/corelib/global/qlibraryinfo.cpp | 15 +++++++++++---- src/corelib/global/qlibraryinfo_p.h | 2 +- src/tools/qtpaths/qtpaths.cpp | 2 +- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/qmake/option.cpp b/qmake/option.cpp index 584161818fe..0e2d199232f 100644 --- a/qmake/option.cpp +++ b/qmake/option.cpp @@ -188,7 +188,7 @@ Option::parseCommandLine(QStringList &args, QMakeCmdLineParserState &state) return Option::QMAKE_CMDLINE_SHOW_USAGE | Option::QMAKE_CMDLINE_ERROR; } if (!globals->qtconf.isEmpty()) - QLibraryInfoPrivate::qtconfManualPath = &globals->qtconf; + QLibraryInfoPrivate::setQtconfManualPath(&globals->qtconf); if (cmdRet == QMakeGlobals::ArgumentsOk) break; Q_ASSERT(cmdRet == QMakeGlobals::ArgumentUnknown); diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp index ab49835601d..92729b06f1f 100644 --- a/src/corelib/global/qlibraryinfo.cpp +++ b/src/corelib/global/qlibraryinfo.cpp @@ -87,10 +87,19 @@ void QLibrarySettings::load() } } +namespace { +const QString *qtconfManualPath = nullptr; +} + +void QLibraryInfoPrivate::setQtconfManualPath(const QString *path) +{ + qtconfManualPath = path; +} + static QSettings *findConfiguration() { - if (QLibraryInfoPrivate::qtconfManualPath) - return new QSettings(*QLibraryInfoPrivate::qtconfManualPath, QSettings::IniFormat); + if (qtconfManualPath) + return new QSettings(*qtconfManualPath, QSettings::IniFormat); QString qtconfig = QStringLiteral(":/qt/etc/qt.conf"); if (QFile::exists(qtconfig)) @@ -122,8 +131,6 @@ static QSettings *findConfiguration() return nullptr; //no luck } -const QString *QLibraryInfoPrivate::qtconfManualPath = nullptr; - QSettings *QLibraryInfoPrivate::configuration() { QLibrarySettings *ls = qt_library_settings(); diff --git a/src/corelib/global/qlibraryinfo_p.h b/src/corelib/global/qlibraryinfo_p.h index d3c458290b1..4b471b932e5 100644 --- a/src/corelib/global/qlibraryinfo_p.h +++ b/src/corelib/global/qlibraryinfo_p.h @@ -32,7 +32,7 @@ public: #if QT_CONFIG(settings) static QSettings *configuration(); static void reload(); - static const QString *qtconfManualPath; + static void setQtconfManualPath(const QString *qtconfManualPath); #endif struct LocationInfo diff --git a/src/tools/qtpaths/qtpaths.cpp b/src/tools/qtpaths/qtpaths.cpp index 950f3ed28a4..3ad1ca9b252 100644 --- a/src/tools/qtpaths/qtpaths.cpp +++ b/src/tools/qtpaths/qtpaths.cpp @@ -224,7 +224,7 @@ int main(int argc, char **argv) #if QT_CONFIG(settings) if (parser.isSet(qtconf)) { qtconfManualPath = parser.value(qtconf); - QLibraryInfoPrivate::qtconfManualPath = &qtconfManualPath; + QLibraryInfoPrivate::setQtconfManualPath(&qtconfManualPath); } #endif