diff options
Diffstat (limited to 'pkgs/development/libraries/qt-5/5.15')
-rw-r--r-- | pkgs/development/libraries/qt-5/5.15/default.nix | 19 | ||||
-rw-r--r-- | pkgs/development/libraries/qt-5/5.15/qtbase.patch.d/9999-backport-dbus-crash.patch | 79 |
2 files changed, 94 insertions, 4 deletions
diff --git a/pkgs/development/libraries/qt-5/5.15/default.nix b/pkgs/development/libraries/qt-5/5.15/default.nix index 59198a636bba3..12a3fd8e01573 100644 --- a/pkgs/development/libraries/qt-5/5.15/default.nix +++ b/pkgs/development/libraries/qt-5/5.15/default.nix @@ -46,6 +46,7 @@ let ./qtbase.patch.d/0009-qtbase-qtpluginpath.patch ./qtbase.patch.d/0010-qtbase-assert.patch ./qtbase.patch.d/0011-fix-header_module.patch + ./qtbase.patch.d/9999-backport-dbus-crash.patch ]; qtdeclarative = [ ./qtdeclarative.patch @@ -334,7 +335,17 @@ let } ../hooks/wrap-qt-apps-hook.sh; }; -in makeScopeWithSplicing' { - otherSplices = generateSplicesForMkScope "qt5"; - f = addPackages; -} + baseScope = makeScopeWithSplicing' { + otherSplices = generateSplicesForMkScope "qt5"; + f = addPackages; + }; + + bootstrapScope = baseScope.overrideScope(final: prev: { + qtbase = prev.qtbase.override { qttranslations = null; }; + qtdeclarative = null; + }); + + finalScope = baseScope.overrideScope(final: prev: { + qttranslations = bootstrapScope.qttranslations; + }); +in finalScope diff --git a/pkgs/development/libraries/qt-5/5.15/qtbase.patch.d/9999-backport-dbus-crash.patch b/pkgs/development/libraries/qt-5/5.15/qtbase.patch.d/9999-backport-dbus-crash.patch new file mode 100644 index 0000000000000..e1aa0119aa2f2 --- /dev/null +++ b/pkgs/development/libraries/qt-5/5.15/qtbase.patch.d/9999-backport-dbus-crash.patch @@ -0,0 +1,79 @@ +commit eb0c6846a5d05d686f0686f0f1ddddcad762ad26 (HEAD -> kde/5.15) +Author: K900 <me@0upti.me> +Date: Mon Aug 14 22:44:02 2023 +0300 + + QLibraryPrivate: Actually merge load hints + + Or old and new load hints in mergeLoadHints() instead of just storing + new ones. Andjust QLibraryPrivate::setLoadHints() to handle objects + with no file name differently and just set load hints directly. + + Mention that load hints are merged once the file name is set + in the documentation for QLibrary::setLoadHints(). + + Add a regression test into tst_qfactoryloader. + + Update and extend tst_QPluginLoader::loadHints() to take into account + load hints merging. + + Fixes: QTBUG-114480 + Change-Id: I3b9afaec7acde1f5ff992d913f8d7217392c7e00 + Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> + Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> + +diff --git a/src/corelib/plugin/qlibrary.cpp b/src/corelib/plugin/qlibrary.cpp +index 5d2f024267..45b5a3fe27 100644 +--- a/src/corelib/plugin/qlibrary.cpp ++++ b/src/corelib/plugin/qlibrary.cpp +@@ -526,7 +526,7 @@ void QLibraryPrivate::mergeLoadHints(QLibrary::LoadHints lh) + if (pHnd.loadRelaxed()) + return; + +- loadHintsInt.storeRelaxed(lh); ++ loadHintsInt.fetchAndOrRelaxed(lh); + } + + QFunctionPointer QLibraryPrivate::resolve(const char *symbol) +@@ -538,6 +538,13 @@ QFunctionPointer QLibraryPrivate::resolve(const char *symbol) + + void QLibraryPrivate::setLoadHints(QLibrary::LoadHints lh) + { ++ // Set the load hints directly for a dummy if this object is not associated ++ // with a file. Such object is not shared between multiple instances. ++ if (fileName.isEmpty()) { ++ loadHintsInt.storeRelaxed(lh); ++ return; ++ } ++ + // this locks a global mutex + QMutexLocker lock(&qt_library_mutex); + mergeLoadHints(lh); +@@ -1166,6 +1173,10 @@ QString QLibrary::errorString() const + lazy symbol resolution, and will not export external symbols for resolution + in other dynamically-loaded libraries. + ++ \note Hints can only be cleared when this object is not associated with a ++ file. Hints can only be added once the file name is set (\a hints will ++ be or'ed with the old hints). ++ + \note Setting this property after the library has been loaded has no effect + and loadHints() will not reflect those changes. + +diff --git a/src/corelib/plugin/qpluginloader.cpp b/src/corelib/plugin/qpluginloader.cpp +index 0a63b93762..ceee5d6385 100644 +--- a/src/corelib/plugin/qpluginloader.cpp ++++ b/src/corelib/plugin/qpluginloader.cpp +@@ -414,10 +414,11 @@ QString QPluginLoader::errorString() const + void QPluginLoader::setLoadHints(QLibrary::LoadHints loadHints) + { + if (!d) { +- d = QLibraryPrivate::findOrCreate(QString()); // ugly, but we need a d-ptr ++ d = QLibraryPrivate::findOrCreate({}, {}, loadHints); // ugly, but we need a d-ptr + d->errorString.clear(); ++ } else { ++ d->setLoadHints(loadHints); + } +- d->setLoadHints(loadHints); + } + + QLibrary::LoadHints QPluginLoader::loadHints() const |