diff --git a/pkgs/development/libraries/qt-6/fetch.sh b/pkgs/development/libraries/qt-6/fetch.sh index b5a099e31755..9c161baa005d 100644 --- a/pkgs/development/libraries/qt-6/fetch.sh +++ b/pkgs/development/libraries/qt-6/fetch.sh @@ -1 +1 @@ -WGET_ARGS=( https://download.qt.io/official_releases/qt/6.9/6.9.3/submodules/ -A '*.tar.xz' ) +WGET_ARGS=( https://download.qt.io/official_releases/qt/6.10/6.10.0/submodules/ -A '*.tar.xz' ) diff --git a/pkgs/development/libraries/qt-6/modules/qtbase/default.nix b/pkgs/development/libraries/qt-6/modules/qtbase/default.nix index 41884d523fc3..ab35d1906f73 100644 --- a/pkgs/development/libraries/qt-6/modules/qtbase/default.nix +++ b/pkgs/development/libraries/qt-6/modules/qtbase/default.nix @@ -79,6 +79,9 @@ gtk3, withLibinput ? false, libinput, + withWayland ? lib.meta.availableOn stdenv.hostPlatform wayland, + wayland, + wayland-scanner, # options qttranslations ? null, }: @@ -158,7 +161,11 @@ stdenv.mkDerivation rec { xorg.xcbutilcursor libepoxy ] - ++ lib.optional (cups != null && lib.meta.availableOn stdenv.hostPlatform cups) cups; + ++ lib.optional (cups != null && lib.meta.availableOn stdenv.hostPlatform cups) cups + ++ lib.optionals withWayland [ + wayland + wayland-scanner + ]; buildInputs = lib.optionals (lib.meta.availableOn stdenv.hostPlatform at-spi2-core) [ @@ -188,7 +195,14 @@ stdenv.mkDerivation rec { ] # I’m not sure if this is necessary, but the macOS mkspecs stuff # tries to call `xcrun xcodebuild`, so better safe than sorry. - ++ lib.optionals stdenv.hostPlatform.isDarwin [ xcbuild ]; + ++ lib.optionals stdenv.hostPlatform.isDarwin [ xcbuild ] + # wayland-scanner needs to be propagated as both build + # (for the wayland-scanner binary) and host (for the + # actual wayland.xml protocol definition) + ++ lib.optionals withWayland [ + wayland + wayland-scanner + ]; strictDeps = true; diff --git a/pkgs/development/libraries/qt-6/modules/qtdeclarative/default.nix b/pkgs/development/libraries/qt-6/modules/qtdeclarative/default.nix index 22ce9f733cf6..5578dc8a8236 100644 --- a/pkgs/development/libraries/qt-6/modules/qtdeclarative/default.nix +++ b/pkgs/development/libraries/qt-6/modules/qtdeclarative/default.nix @@ -1,4 +1,5 @@ { + fetchpatch, qtModule, qtbase, qtlanguageserver, @@ -29,32 +30,20 @@ qtModule { ]; patches = [ - # invalidates qml caches created from nix applications at different - # store paths and disallows saving caches of bare qml files in the store. - (replaceVars ./invalidate-caches-from-mismatched-store-paths.patch { + # don't cache bytecode of bare qml files in the store, as that never gets cleaned up + (replaceVars ./dont-cache-nix-store-paths.patch { nixStore = builtins.storeDir; - nixStoreLength = toString ((builtins.stringLength builtins.storeDir) + 1); # trailing / }) # add version specific QML import path ./use-versioned-import-path.patch - # Fix common crash - # Manual backport of https://invent.kde.org/qt/qt/qtdeclarative/-/commit/b1ee7061ba77a7f5dc4148129bb2083f5c28e039 # https://bugreports.qt.io/browse/QTBUG-140018 - ./stackview-crash.patch + (fetchpatch { + url = "https://invent.kde.org/qt/qt/qtdeclarative/-/commit/2b7f93da38d41ffaeb5322a7dca40ec26fc091a1.diff"; + hash = "sha256-AOXey18lJlswpZ8tpTTZeFb0VE9k1louXy8TPPGNiA4="; + }) ]; - preConfigure = - let - storePrefixLen = toString ((builtins.stringLength builtins.storeDir) + 1); - in - '' - # "NIX:" is reserved for saved qmlc files in patch 0001, "QTDHASH:" takes the place - # of the old tag, which is otherwise the qt version, invalidating caches from other - # qtdeclarative store paths. - echo "QTDHASH:''${out:${storePrefixLen}:32}" > .tag - ''; - cmakeFlags = [ "-DQt6ShaderToolsTools_DIR=${pkgsBuildBuild.qt6.qtshadertools}/lib/cmake/Qt6ShaderTools" # for some reason doesn't get found automatically on Darwin diff --git a/pkgs/development/libraries/qt-6/modules/qtdeclarative/dont-cache-nix-store-paths.patch b/pkgs/development/libraries/qt-6/modules/qtdeclarative/dont-cache-nix-store-paths.patch new file mode 100644 index 000000000000..ef5d108db10c --- /dev/null +++ b/pkgs/development/libraries/qt-6/modules/qtdeclarative/dont-cache-nix-store-paths.patch @@ -0,0 +1,17 @@ +--- a/src/qml/common/qv4compileddata.cpp ++++ b/src/qml/common/qv4compileddata.cpp +@@ -178,6 +178,14 @@ bool CompilationUnit::saveToDisk(const QUrl &unitUrl, QString *errorString) + return false; + } + ++ if (unitUrl.path().startsWith(QStringLiteral("@nixStore@"))) { ++ // We don't store bytecode for bare QML files in the nix store as the ++ // paths will change every time the application updates, filling caches ++ // endlessly with junk. ++ *errorString = QStringLiteral("Refusing to save bytecode for bare @nixStore@ path."); ++ return false; ++ } ++ + return SaveableUnitPointer(unitData()).saveToDisk( + [&unitUrl, errorString](const char *data, quint32 size) { + const QString cachePath = localCacheFilePath(unitUrl); diff --git a/pkgs/development/libraries/qt-6/modules/qtdeclarative/invalidate-caches-from-mismatched-store-paths.patch b/pkgs/development/libraries/qt-6/modules/qtdeclarative/invalidate-caches-from-mismatched-store-paths.patch deleted file mode 100644 index 364c3ed838e6..000000000000 --- a/pkgs/development/libraries/qt-6/modules/qtdeclarative/invalidate-caches-from-mismatched-store-paths.patch +++ /dev/null @@ -1,112 +0,0 @@ -diff --git a/src/qml/common/qv4compileddata.cpp b/src/qml/common/qv4compileddata.cpp -index 9dee91f713..9dec5cae67 100644 ---- a/src/qml/common/qv4compileddata.cpp -+++ b/src/qml/common/qv4compileddata.cpp -@@ -15,6 +15,8 @@ - #include - #include - -+#include -+ - static_assert(QV4::CompiledData::QmlCompileHashSpace > QML_COMPILE_HASH_LENGTH); - - #if defined(QML_COMPILE_HASH) && defined(QML_COMPILE_HASH_LENGTH) && QML_COMPILE_HASH_LENGTH > 0 -@@ -26,6 +28,35 @@ __attribute__((section(".qml_compile_hash"))) - const char qml_compile_hash[QV4::CompiledData::QmlCompileHashSpace] = QML_COMPILE_HASH; - static_assert(sizeof(QV4::CompiledData::Unit::libraryVersionHash) > QML_COMPILE_HASH_LENGTH, - "Compile hash length exceeds reserved size in data structure. Please adjust and bump the format version"); -+ -+bool nix__isNixApplication() { -+ static const bool value = QCoreApplication::applicationFilePath().startsWith(QStringLiteral("@nixStore@")); -+ return value; -+} -+ -+static_assert(sizeof(QV4::CompiledData::Unit::libraryVersionHash) > -+ /*sha1*/ 20 + /*NIX:*/ 4, -+ "Nix compile hash length exceeds the reserved space in data " -+ "structure. Please review the patch."); -+ -+const QByteArray &nix__applicationHash() { -+ static const QByteArray value = [](){ -+ QCryptographicHash applicationHash(QCryptographicHash::Sha1); -+ applicationHash.addData(QByteArrayView(qml_compile_hash, QML_COMPILE_HASH_LENGTH)); -+ -+ // We only care about the package, not the specific file path. -+ auto view = QCoreApplication::applicationFilePath().sliced(@nixStoreLength@); -+ auto pkgEndIdx = view.indexOf(QStringLiteral("/")); -+ if (pkgEndIdx != -1) view = view.sliced(0, pkgEndIdx); -+ -+ applicationHash.addData(view.toUtf8()); -+ -+ return QByteArray("NIX:") + applicationHash.result(); -+ }(); -+ -+ return value; -+} -+ - #else - # error "QML_COMPILE_HASH must be defined for the build of QtDeclarative to ensure version checking for cache files" - #endif -@@ -69,13 +100,29 @@ bool Unit::verifyHeader(QDateTime expectedSourceTimeStamp, QString *errorString) - } - - #if defined(QML_COMPILE_HASH) && defined(QML_COMPILE_HASH_LENGTH) && QML_COMPILE_HASH_LENGTH > 0 -- if (qstrncmp(qml_compile_hash, libraryVersionHash, QML_COMPILE_HASH_LENGTH) != 0) { -+ const bool nixUnit = qstrncmp("NIX:", this->libraryVersionHash, 4) == 0; -+ -+ if (nixUnit && !nix__isNixApplication()) { -+ *errorString = QStringLiteral("QML compile hash is for a nix store application."); -+ return false; -+ } -+ -+ const char *targetHash = qml_compile_hash; -+ size_t targetHashLength = QML_COMPILE_HASH_LENGTH; -+ -+ if (nixUnit) { -+ const auto &applicationHash = nix__applicationHash(); -+ targetHash = applicationHash.constData(); -+ targetHashLength = applicationHash.length(); -+ } -+ -+ if (qstrncmp(targetHash, this->libraryVersionHash, targetHashLength) != 0) { - *errorString = QStringLiteral("QML compile hashes don't match. Found %1 expected %2") - .arg(QString::fromLatin1( -- QByteArray(libraryVersionHash, QML_COMPILE_HASH_LENGTH) -+ QByteArray(this->libraryVersionHash, targetHashLength) - .toPercentEncoding()), - QString::fromLatin1( -- QByteArray(qml_compile_hash, QML_COMPILE_HASH_LENGTH) -+ QByteArray(targetHash, targetHashLength) - .toPercentEncoding())); - return false; - } -@@ -213,6 +260,29 @@ bool CompilationUnit::saveToDisk(const QUrl &unitUrl, QString *errorString) - return false; - } - -+#if defined(QML_COMPILE_HASH) && defined(QML_COMPILE_HASH_LENGTH) && QML_COMPILE_HASH_LENGTH > 0 -+ if (nix__isNixApplication() && unitUrl.scheme() == QStringLiteral("qrc")) { -+ // If the application is running from the nix store, we can safely save -+ // bytecode for its embedded QML files as long as we hash the -+ // application path into the version. This will invalidate the caches -+ // when the store path changes. -+ const auto &applicationHash = nix__applicationHash(); -+ -+ memcpy(const_cast(unitData()->libraryVersionHash), -+ applicationHash.constData(), applicationHash.length()); -+ } else if (unitUrl.path().startsWith(QStringLiteral("@nixStore@"))) { -+ // We don't store bytecode for bare QML files in the nix store as the -+ // paths will change every time the application updates, filling caches -+ // endlessly with junk. -+ *errorString = QStringLiteral("Refusing to save bytecode for bare @nixStore@ path."); -+ return false; -+ } else { -+ // If the QML file is loaded from a normal file path it doesn't matter -+ // if the application itself is running from a nix path, so we fall back -+ // to the default Qt behavior. -+ } -+#endif -+ - return SaveableUnitPointer(unitData()).saveToDisk( - [&unitUrl, errorString](const char *data, quint32 size) { - const QString cachePath = localCacheFilePath(unitUrl); diff --git a/pkgs/development/libraries/qt-6/modules/qtdeclarative/stackview-crash.patch b/pkgs/development/libraries/qt-6/modules/qtdeclarative/stackview-crash.patch deleted file mode 100644 index 19c7c0648634..000000000000 --- a/pkgs/development/libraries/qt-6/modules/qtdeclarative/stackview-crash.patch +++ /dev/null @@ -1,473 +0,0 @@ -diff --git a/src/quicktemplates/qquickstackelement.cpp b/src/quicktemplates/qquickstackelement.cpp -index f6a5ffdd74..304bafe4ef 100644 ---- a/src/quicktemplates/qquickstackelement.cpp -+++ b/src/quicktemplates/qquickstackelement.cpp -@@ -39,7 +39,10 @@ protected: - void setInitialState(QObject *object) override - { - auto privIncubator = QQmlIncubatorPrivate::get(this); -- element->incubate(object, privIncubator->requiredProperties()); -+ if (QQmlEnginePrivate *enginePriv = privIncubator->enginePriv) { -+ element->incubate(enginePriv->v4engine(), object, -+ privIncubator->requiredProperties()); -+ } - } - - private: -@@ -90,7 +93,8 @@ QQuickStackElement::~QQuickStackElement() - #endif - } - --QQuickStackElement *QQuickStackElement::fromString(const QString &str, QQuickStackView *view, QString *error) -+QQuickStackElement *QQuickStackElement::fromString( -+ QQmlEngine *engine, const QString &str, QQuickStackView *view, QString *error) - { - QUrl url(str); - if (!url.isValid()) { -@@ -102,7 +106,7 @@ QQuickStackElement *QQuickStackElement::fromString(const QString &str, QQuickSta - url = qmlContext(view)->resolvedUrl(url); - - QQuickStackElement *element = new QQuickStackElement; -- element->component = new QQmlComponent(qmlEngine(view), url, view); -+ element->component = new QQmlComponent(engine, url, view); - element->ownComponent = true; - return element; - } -@@ -127,7 +131,8 @@ QQuickStackElement *QQuickStackElement::fromObject(QObject *object, QQuickStackV - return element; - } - --QQuickStackElement *QQuickStackElement::fromStackViewArg(QQuickStackView *view, QQuickStackViewArg arg) -+QQuickStackElement *QQuickStackElement::fromStackViewArg( -+ QQmlEngine *engine, QQuickStackView *view, QQuickStackViewArg arg) - { - QQuickStackElement *element = new QQuickStackElement; - #if QT_CONFIG(quick_viewtransitions) -@@ -144,7 +149,7 @@ QQuickStackElement *QQuickStackElement::fromStackViewArg(QQuickStackView *view, - - Q_ASSERT(!arg.mUrl.isValid()); - } else if (arg.mUrl.isValid()) { -- element->component = new QQmlComponent(qmlEngine(view), arg.mUrl, view); -+ element->component = new QQmlComponent(engine, arg.mUrl, view); - element->ownComponent = true; - } else { - qFatal("No Item, Component or URL set on arg passed to fromStrictArg"); -@@ -152,7 +157,7 @@ QQuickStackElement *QQuickStackElement::fromStackViewArg(QQuickStackView *view, - return element; - } - --bool QQuickStackElement::load(QQuickStackView *parent) -+bool QQuickStackElement::load(QV4::ExecutionEngine *v4, QQuickStackView *parent) - { - setView(parent); - if (!item) { -@@ -161,7 +166,7 @@ bool QQuickStackElement::load(QQuickStackView *parent) - if (component->isLoading()) { - QObject::connect(component, &QQmlComponent::statusChanged, [this](QQmlComponent::Status status) { - if (status == QQmlComponent::Ready) -- load(view); -+ load(component->engine()->handle(), view); - else if (status == QQmlComponent::Error) - QQuickStackViewPrivate::get(view)->warn(component->errorString().trimmed()); - }); -@@ -177,22 +182,24 @@ bool QQuickStackElement::load(QQuickStackView *parent) - if (component->isError()) - QQuickStackViewPrivate::get(parent)->warn(component->errorString().trimmed()); - } else { -- initialize(/*required properties=*/nullptr); -+ initialize(v4, /*required properties=*/nullptr); - } - return item; - } - --void QQuickStackElement::incubate(QObject *object, RequiredProperties *requiredProperties) -+void QQuickStackElement::incubate( -+ QV4::ExecutionEngine *v4, QObject *object, RequiredProperties *requiredProperties) - { - item = qmlobject_cast(object); - if (item) { - QQmlEngine::setObjectOwnership(item, QQmlEngine::CppOwnership); - item->setParent(view); -- initialize(requiredProperties); -+ initialize(v4, requiredProperties); - } - } - --void QQuickStackElement::initialize(RequiredProperties *requiredProperties) -+void QQuickStackElement::initialize( -+ QV4::ExecutionEngine *v4, RequiredProperties *requiredProperties) - { - if (!item || init) - return; -@@ -205,11 +212,8 @@ void QQuickStackElement::initialize(RequiredProperties *requiredProperties) - item->setParentItem(view); - - if (!properties.isUndefined()) { -- QQmlEngine *engine = qmlEngine(view); -- Q_ASSERT(engine); -- QV4::ExecutionEngine *v4 = QQmlEnginePrivate::getV4Engine(engine); -- Q_ASSERT(v4); - QV4::Scope scope(v4); -+ Q_ASSERT(scope.engine); - QV4::ScopedValue ipv(scope, properties.value()); - QV4::Scoped qmlContext(scope, qmlCallingContext.value()); - QV4::ScopedValue qmlObject(scope, QV4::QObjectWrapper::wrap(v4, item)); -diff --git a/src/quicktemplates/qquickstackelement_p_p.h b/src/quicktemplates/qquickstackelement_p_p.h -index 5af8149d91..2986a78569 100644 ---- a/src/quicktemplates/qquickstackelement_p_p.h -+++ b/src/quicktemplates/qquickstackelement_p_p.h -@@ -43,13 +43,14 @@ class QQuickStackElement : - public: - ~QQuickStackElement(); - -- static QQuickStackElement *fromString(const QString &str, QQuickStackView *view, QString *error); -+ static QQuickStackElement *fromString(QQmlEngine *engine, const QString &str, QQuickStackView *view, QString *error); - static QQuickStackElement *fromObject(QObject *object, QQuickStackView *view, QString *error); -- static QQuickStackElement *fromStackViewArg(QQuickStackView *view, QQuickStackViewArg arg); -+ static QQuickStackElement *fromStackViewArg(QQmlEngine *engine, QQuickStackView *view, QQuickStackViewArg arg); - -- bool load(QQuickStackView *parent); -- void incubate(QObject *object, RequiredProperties *requiredProperties); -- void initialize(RequiredProperties *requiredProperties); -+ bool load(QV4::ExecutionEngine *v4, QQuickStackView *parent); -+ void incubate( -+ QV4::ExecutionEngine *v4, QObject *object, RequiredProperties *requiredProperties); -+ void initialize(QV4::ExecutionEngine *v4, RequiredProperties *requiredProperties); - - void setIndex(int index); - void setView(QQuickStackView *view); -diff --git a/src/quicktemplates/qquickstackview.cpp b/src/quicktemplates/qquickstackview.cpp -index cb8854dca8..a0909b7fcb 100644 ---- a/src/quicktemplates/qquickstackview.cpp -+++ b/src/quicktemplates/qquickstackview.cpp -@@ -457,8 +457,12 @@ QQuickItem *QQuickStackView::get(int index, LoadBehavior behavior) - Q_D(QQuickStackView); - QQuickStackElement *element = d->elements.value(index); - if (element) { -- if (behavior == ForceLoad) -- element->load(this); -+ if (behavior == ForceLoad) { -+ // It's possible for a slot to still be connected during destruction of the receiver's -+ // parent (QTBUG-140018), so only try to load new things if our engine is alive. -+ if (QQmlEngine *engine = qmlEngine(this)) -+ element->load(engine->handle(), this); -+ } - return element->item; - } - return nullptr; -@@ -492,7 +496,7 @@ QQuickItem *QQuickStackView::find(const QJSValue &callback, LoadBehavior behavio - for (int i = d->elements.size() - 1; i >= 0; --i) { - QQuickStackElement *element = d->elements.at(i); - if (behavior == ForceLoad) -- element->load(this); -+ element->load(engine->handle(), this); - if (element->item) { - QJSValue rv = func.call(QJSValueList() << engine->newQObject(element->item) << i); - if (rv.toBool()) -@@ -624,7 +628,7 @@ void QQuickStackView::push(QQmlV4FunctionPtr args) - #endif - - int oldDepth = d->elements.size(); -- if (d->pushElements(elements)) { -+ if (d->pushElements(v4, elements)) { - d->depthChange(d->elements.size(), oldDepth); - QQuickStackElement *enter = d->elements.top(); - #if QT_CONFIG(quick_viewtransitions) -@@ -737,7 +741,7 @@ void QQuickStackView::pop(QQmlV4FunctionPtr args) - - QPointer previousItem; - -- if (d->popElements(enter)) { -+ if (d->popElements(v4, enter)) { - if (exit) { - exit->removal = true; - d->removing.insert(exit); -@@ -907,7 +911,7 @@ void QQuickStackView::replace(QQmlV4FunctionPtr args) - if (!d->elements.isEmpty()) - exit = d->elements.pop(); - -- if (exit != target ? d->replaceElements(target, elements) : d->pushElements(elements)) { -+ if (exit != target ? d->replaceElements(v4, target, elements) : d->pushElements(v4, elements)) { - d->depthChange(d->elements.size(), oldDepth); - if (exit) { - exit->removal = true; -@@ -991,10 +995,14 @@ QQuickItem *QQuickStackView::pushItems(QList args, Operation - return nullptr; - } - -+ QQmlEngine *engine = qmlEngine(this); -+ if (!engine) -+ return nullptr; -+ - QScopedValueRollback modifyingElements(d->modifyingElements, true); - QScopedValueRollback operationNameRollback(d->operation, operationName); - -- const QList stackElements = d->parseElements(args); -+ const QList stackElements = d->parseElements(engine, args); - - #if QT_CONFIG(quick_viewtransitions) - QQuickStackElement *exit = nullptr; -@@ -1003,7 +1011,7 @@ QQuickItem *QQuickStackView::pushItems(QList args, Operation - #endif - - const int oldDepth = d->elements.size(); -- if (d->pushElements(stackElements)) { -+ if (d->pushElements(engine->handle(), stackElements)) { - d->depthChange(d->elements.size(), oldDepth); - QQuickStackElement *enter = d->elements.top(); - #if QT_CONFIG(quick_viewtransitions) -@@ -1109,7 +1117,11 @@ QQuickItem *QQuickStackView::pushItem(const QUrl &url, const QVariantMap &proper - QQuickItem *QQuickStackView::popToItem(QQuickItem *item, Operation operation) - { - Q_D(QQuickStackView); -- return d->popToItem(item, operation, QQuickStackViewPrivate::CurrentItemPolicy::DoNotPop); -+ QQmlEngine *engine = qmlEngine(this); -+ if (!engine) -+ return nullptr; -+ return d->popToItem( -+ engine->handle(), item, operation, QQuickStackViewPrivate::CurrentItemPolicy::DoNotPop); - } - - /*! -@@ -1149,8 +1161,13 @@ QQuickItem *QQuickStackView::popToIndex(int index, Operation operation) - } - - QQuickStackElement *element = d->elements.at(index); -- element->load(this); -- return d->popToItem(element->item, operation, QQuickStackViewPrivate::CurrentItemPolicy::Pop); -+ QQmlEngine *engine = qmlEngine(this); -+ if (!engine) -+ return nullptr; -+ QV4::ExecutionEngine *v4 = engine->handle(); -+ element->load(v4, this); -+ return d->popToItem( -+ v4, element->item, operation, QQuickStackViewPrivate::CurrentItemPolicy::Pop); - } - - /*! -@@ -1178,7 +1195,13 @@ QQuickItem *QQuickStackView::popCurrentItem(Operation operation) - clear(operation); - return lastItemRemoved; - } -- return d->popToItem(d->currentItem, operation, QQuickStackViewPrivate::CurrentItemPolicy::Pop); -+ -+ QQmlEngine *engine = qmlEngine(this); -+ if (!engine) -+ return nullptr; -+ return d->popToItem( -+ engine->handle(), d->currentItem, operation, -+ QQuickStackViewPrivate::CurrentItemPolicy::Pop); - } - - /*! -@@ -1232,12 +1255,16 @@ QQuickItem *QQuickStackView::replaceCurrentItem(const QList - return nullptr; - } - -+ QQmlEngine *engine = qmlEngine(this); -+ if (!engine) -+ return nullptr; -+ - QScopedValueRollback modifyingElements(d->modifyingElements, true); - QScopedValueRollback operationNameRollback(d->operation, operationName); - - QQuickStackElement *currentElement = !d->elements.isEmpty() ? d->elements.top() : nullptr; - -- const QList stackElements = d->parseElements(args); -+ const QList stackElements = d->parseElements(engine, args); - - int oldDepth = d->elements.size(); - QQuickStackElement* exit = nullptr; -@@ -1245,8 +1272,8 @@ QQuickItem *QQuickStackView::replaceCurrentItem(const QList - exit = d->elements.pop(); - - const bool successfullyReplaced = exit != currentElement -- ? d->replaceElements(currentElement, stackElements) -- : d->pushElements(stackElements); -+ ? d->replaceElements(engine->handle(), currentElement, stackElements) -+ : d->pushElements(engine->handle(), stackElements); - if (successfullyReplaced) { - d->depthChange(d->elements.size(), oldDepth); - if (exit) { -@@ -1607,14 +1634,19 @@ void QQuickStackView::componentComplete() - QQuickStackElement *element = nullptr; - QString error; - int oldDepth = d->elements.size(); -+ -+ QQmlEngine *engine = qmlEngine(this); -+ if (!engine) -+ return; -+ - if (QObject *o = d->initialItem.toQObject()) - element = QQuickStackElement::fromObject(o, this, &error); - else if (d->initialItem.isString()) -- element = QQuickStackElement::fromString(d->initialItem.toString(), this, &error); -+ element = QQuickStackElement::fromString(engine, d->initialItem.toString(), this, &error); - if (!error.isEmpty()) { - d->warn(error); - delete element; -- } else if (d->pushElement(element)) { -+ } else if (d->pushElement(engine->handle(), element)) { - d->depthChange(d->elements.size(), oldDepth); - d->setCurrentItem(element); - element->setStatus(QQuickStackView::Active); -diff --git a/src/quicktemplates/qquickstackview_p.cpp b/src/quicktemplates/qquickstackview_p.cpp -index 0288ff1f4b..8f08f29168 100644 ---- a/src/quicktemplates/qquickstackview_p.cpp -+++ b/src/quicktemplates/qquickstackview_p.cpp -@@ -109,7 +109,8 @@ QList QQuickStackViewPrivate::parseElements(int from, QQml - return elements; - } - --QList QQuickStackViewPrivate::parseElements(const QList &args) -+QList QQuickStackViewPrivate::parseElements( -+ QQmlEngine *engine, const QList &args) - { - Q_Q(QQuickStackView); - QList stackElements; -@@ -141,8 +142,8 @@ QList QQuickStackViewPrivate::parseElements(const QListhandle(); -+ QQuickStackElement *element = QQuickStackElement::fromStackViewArg(engine, q, arg); -+ QV4::ExecutionEngine *v4Engine = engine->handle(); - element->properties.set(v4Engine, v4Engine->fromVariant(properties)); - element->qmlCallingContext.set(v4Engine, v4Engine->qmlContext()); - stackElements.append(element); -@@ -183,28 +184,33 @@ static QString resolvedUrl(const QString &str, const QQmlRefPointer &context, QString *error) -+QQuickStackElement *QQuickStackViewPrivate::createElement( -+ const QV4::Value &value, const QQmlRefPointer &context, QString *error) - { - Q_Q(QQuickStackView); - if (const QV4::String *s = value.as()) -- return QQuickStackElement::fromString(resolvedUrl(s->toQString(), context), q, error); -+ return QQuickStackElement::fromString( -+ s->engine()->qmlEngine(), resolvedUrl(s->toQString(), context), q, error); - if (const QV4::QObjectWrapper *o = value.as()) - return QQuickStackElement::fromObject(o->object(), q, error); - if (const QV4::UrlObject *u = value.as()) -- return QQuickStackElement::fromString(resolvedUrl(u->href(), context), q, error); -+ return QQuickStackElement::fromString( -+ u->engine()->qmlEngine(), resolvedUrl(u->href(), context), q, error); - -- if (value.as()) { -+ if (const QV4::Object *o = value.as()) { - const QVariant data = QV4::ExecutionEngine::toVariant(value, QMetaType::fromType()); - if (data.typeId() == QMetaType::QUrl) { -- return QQuickStackElement::fromString(resolvedUrl(data.toUrl(), context).toString(), q, -- error); -+ return QQuickStackElement::fromString( -+ o->engine()->qmlEngine(), resolvedUrl(data.toUrl(), context).toString(), q, -+ error); - } - } - - return nullptr; - } - --bool QQuickStackViewPrivate::pushElements(const QList &elems) -+bool QQuickStackViewPrivate::pushElements( -+ QV4::ExecutionEngine *v4, const QList &elems) - { - Q_Q(QQuickStackView); - if (!elems.isEmpty()) { -@@ -212,19 +218,19 @@ bool QQuickStackViewPrivate::pushElements(const QList &ele - e->setIndex(elements.size()); - elements += e; - } -- return elements.top()->load(q); -+ return elements.top()->load(v4, q); - } - return false; - } - --bool QQuickStackViewPrivate::pushElement(QQuickStackElement *element) -+bool QQuickStackViewPrivate::pushElement(QV4::ExecutionEngine *v4, QQuickStackElement *element) - { - if (element) -- return pushElements(QList() << element); -+ return pushElements(v4, QList() << element); - return false; - } - --bool QQuickStackViewPrivate::popElements(QQuickStackElement *element) -+bool QQuickStackViewPrivate::popElements(QV4::ExecutionEngine *v4, QQuickStackElement *element) - { - Q_Q(QQuickStackView); - while (elements.size() > 1 && elements.top() != element) { -@@ -232,10 +238,12 @@ bool QQuickStackViewPrivate::popElements(QQuickStackElement *element) - if (!element) - break; - } -- return elements.top()->load(q); -+ return elements.top()->load(v4, q); - } - --bool QQuickStackViewPrivate::replaceElements(QQuickStackElement *target, const QList &elems) -+bool QQuickStackViewPrivate::replaceElements( -+ QV4::ExecutionEngine *v4, QQuickStackElement *target, -+ const QList &elems) - { - if (target) { - while (!elements.isEmpty()) { -@@ -245,10 +253,12 @@ bool QQuickStackViewPrivate::replaceElements(QQuickStackElement *target, const Q - break; - } - } -- return pushElements(elems); -+ return pushElements(v4, elems); - } - --QQuickItem *QQuickStackViewPrivate::popToItem(QQuickItem *item, QQuickStackView::Operation operation, CurrentItemPolicy currentItemPolicy) -+QQuickItem *QQuickStackViewPrivate::popToItem( -+ QV4::ExecutionEngine *v4, QQuickItem *item, QQuickStackView::Operation operation, -+ CurrentItemPolicy currentItemPolicy) - { - const QString operationName = QStringLiteral("pop"); - if (modifyingElements) { -@@ -301,7 +311,7 @@ QQuickItem *QQuickStackViewPrivate::popToItem(QQuickItem *item, QQuickStackView: - } - - QQuickItem *previousItem = nullptr; -- if (popElements(enter)) { -+ if (popElements(v4, enter)) { - if (exit) { - exit->removal = true; - removing.insert(exit); -diff --git a/src/quicktemplates/qquickstackview_p_p.h b/src/quicktemplates/qquickstackview_p_p.h -index 4ae849aa20..8bb95760a4 100644 ---- a/src/quicktemplates/qquickstackview_p_p.h -+++ b/src/quicktemplates/qquickstackview_p_p.h -@@ -50,20 +50,20 @@ public: - void setCurrentItem(QQuickStackElement *element); - - QList parseElements(int from, QQmlV4FunctionPtr args, QStringList *errors); -- QList parseElements(const QList &args); -+ QList parseElements(QQmlEngine *engine, const QList &args); - QQuickStackElement *findElement(QQuickItem *item) const; - QQuickStackElement *findElement(const QV4::Value &value) const; - QQuickStackElement *createElement(const QV4::Value &value, const QQmlRefPointer &context, QString *error); -- bool pushElements(const QList &elements); -- bool pushElement(QQuickStackElement *element); -- bool popElements(QQuickStackElement *element); -- bool replaceElements(QQuickStackElement *element, const QList &elements); -+ bool pushElements(QV4::ExecutionEngine *v4, const QList &elements); -+ bool pushElement(QV4::ExecutionEngine *v4, QQuickStackElement *element); -+ bool popElements(QV4::ExecutionEngine *v4, QQuickStackElement *element); -+ bool replaceElements(QV4::ExecutionEngine *v4, QQuickStackElement *element, const QList &elements); - - enum class CurrentItemPolicy { - DoNotPop, - Pop - }; -- QQuickItem *popToItem(QQuickItem *item, QQuickStackView::Operation operation, CurrentItemPolicy currentItemPolicy); -+ QQuickItem *popToItem(QV4::ExecutionEngine *v4, QQuickItem *item, QQuickStackView::Operation operation, CurrentItemPolicy currentItemPolicy); - - #if QT_CONFIG(quick_viewtransitions) - void ensureTransitioner(); diff --git a/pkgs/development/libraries/qt-6/modules/qtdeclarative/use-versioned-import-path.patch b/pkgs/development/libraries/qt-6/modules/qtdeclarative/use-versioned-import-path.patch index 7efd9c9cdb70..6de31fae7a77 100644 --- a/pkgs/development/libraries/qt-6/modules/qtdeclarative/use-versioned-import-path.patch +++ b/pkgs/development/libraries/qt-6/modules/qtdeclarative/use-versioned-import-path.patch @@ -1,10 +1,14 @@ ---- a/src/qml/qml/qqmlimport.cpp -+++ b/src/qml/qml/qqmlimport.cpp -@@ -1520,6 +1520,7 @@ QQmlImportDatabase::QQmlImportDatabase(QQmlEngine *e) +diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp +index 5d09bf21c6..eacc8ccaea 100644 +--- a/src/qml/qml/qqmltypeloader.cpp ++++ b/src/qml/qml/qqmltypeloader.cpp +@@ -1235,7 +1235,8 @@ QQmlTypeLoader::QQmlTypeLoader(QQmlEngine *engine) // env import paths addEnvImportPath("QML_IMPORT_PATH"); addEnvImportPath("QML2_IMPORT_PATH"); +- + addEnvImportPath("NIXPKGS_QT6_QML_IMPORT_PATH"); - ++ addImportPath(QStringLiteral("qrc:/qt/qml")); addImportPath(QStringLiteral("qrc:/qt-project.org/imports")); + diff --git a/pkgs/development/libraries/qt-6/modules/qtmqtt.nix b/pkgs/development/libraries/qt-6/modules/qtmqtt.nix index 1339e43f52bf..eec3ee8f7a8d 100644 --- a/pkgs/development/libraries/qt-6/modules/qtmqtt.nix +++ b/pkgs/development/libraries/qt-6/modules/qtmqtt.nix @@ -6,13 +6,13 @@ qtModule rec { pname = "qtmqtt"; - version = "6.9.3"; + version = "6.10.0"; src = fetchFromGitHub { owner = "qt"; repo = "qtmqtt"; tag = "v${version}"; - hash = "sha256-xzh2cNPlGe0VlCdNN1u8vBi+Uq+U2oa2bskAJQTt0ik="; + hash = "sha256-0o0zC8SUlug5xOV5AX9PiTim1td8NA4fq6WfBR5aSXA="; }; propagatedBuildInputs = [ qtbase ]; diff --git a/pkgs/development/libraries/qt-6/modules/qttools/default.nix b/pkgs/development/libraries/qt-6/modules/qttools/default.nix index 4fb69db29359..58ef182fff2c 100644 --- a/pkgs/development/libraries/qt-6/modules/qttools/default.nix +++ b/pkgs/development/libraries/qt-6/modules/qttools/default.nix @@ -6,7 +6,7 @@ qtbase, qtdeclarative, cups, - llvmPackages_20, + llvmPackages, # clang-based c++ parser for qdoc and lupdate withClang ? false, }: @@ -30,10 +30,9 @@ qtModule { "-DNIX_OUTPUT_OUT=\"${placeholder "out"}\"" ]; - # FIXME: update to LLVM 21 with Qt 6.10 buildInputs = lib.optionals withClang [ - llvmPackages_20.libclang - llvmPackages_20.llvm + llvmPackages.libclang + llvmPackages.llvm ]; propagatedBuildInputs = [ diff --git a/pkgs/development/libraries/qt-6/modules/qttools/paths.patch b/pkgs/development/libraries/qt-6/modules/qttools/paths.patch index ec306ecc480a..6b1eca682c59 100644 --- a/pkgs/development/libraries/qt-6/modules/qttools/paths.patch +++ b/pkgs/development/libraries/qt-6/modules/qttools/paths.patch @@ -18,8 +18,8 @@ + static QString qtToolFilePath(const QString &toolName, QLibraryInfo::LibraryPath location) { -- QString filePath = QLibraryInfo::path(location) + QLatin1Char('/') + toolName; -+ QString filePath = qtBasePath(location) + QLatin1Char('/') + toolName; +- QString filePath = QLibraryInfo::path(location) + u'/' + toolName; ++ QString filePath = qtBasePath(location) + u'/' + toolName; #ifdef Q_OS_WIN filePath.append(QLatin1String(".exe")); #endif diff --git a/pkgs/development/libraries/qt-6/modules/qtwayland.nix b/pkgs/development/libraries/qt-6/modules/qtwayland.nix index ae34492453c5..54fc9cac7e3c 100644 --- a/pkgs/development/libraries/qt-6/modules/qtwayland.nix +++ b/pkgs/development/libraries/qt-6/modules/qtwayland.nix @@ -5,8 +5,6 @@ qtModule, qtbase, qtdeclarative, - wayland, - wayland-scanner, pkg-config, libdrm, }: @@ -14,24 +12,15 @@ qtModule { pname = "qtwayland"; - # wayland-scanner needs to be propagated as both build - # (for the wayland-scanner binary) and host (for the - # actual wayland.xml protocol definition) propagatedBuildInputs = [ qtbase qtdeclarative - wayland - wayland-scanner - ]; - propagatedNativeBuildInputs = [ - wayland - wayland-scanner ]; buildInputs = [ libdrm ]; nativeBuildInputs = [ pkg-config ]; cmakeFlags = lib.optionals (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) [ - "-DQt6WaylandScannerTools_DIR=${pkgsBuildBuild.qt6.qtwayland}/lib/cmake/Qt6WaylandScannerTools" + "-DQt6WaylandScannerTools_DIR=${pkgsBuildBuild.qt6.qtbase}/lib/cmake/Qt6WaylandScannerTools" ]; meta = { diff --git a/pkgs/development/libraries/qt-6/modules/qtwebengine/default.nix b/pkgs/development/libraries/qt-6/modules/qtwebengine/default.nix index 7278281774d5..d06abd2441b9 100644 --- a/pkgs/development/libraries/qt-6/modules/qtwebengine/default.nix +++ b/pkgs/development/libraries/qt-6/modules/qtwebengine/default.nix @@ -64,8 +64,6 @@ bootstrap_cmds, cctools, xcbuild, - - fetchpatch, }: qtModule { @@ -112,13 +110,6 @@ qtModule { # Reproducibility QTBUG-136068 ./gn-object-sorted.patch - - # Fix GPU rendering with Mesa 25.2 - # https://bugreports.qt.io/browse/QTBUG-139424 - (fetchpatch { - url = "https://invent.kde.org/qt/qt/qtwebengine/-/commit/3cc88e0f85113e38ccb1bfdadb7d150c2389b1bc.diff"; - hash = "sha256-5tKZ6b93VP4mKVc7jctrbW5Ktl+4Mjxw6bK1ajY62zQ="; - }) ]; postPatch = '' diff --git a/pkgs/development/libraries/qt-6/srcs.nix b/pkgs/development/libraries/qt-6/srcs.nix index 9cabeda26816..58d46a69ea56 100644 --- a/pkgs/development/libraries/qt-6/srcs.nix +++ b/pkgs/development/libraries/qt-6/srcs.nix @@ -4,315 +4,315 @@ { qt3d = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qt3d-everywhere-src-6.9.3.tar.xz"; - sha256 = "1zvzc88gykbqmks5q06zl9113lvy07gxsxmzmvpd8y8sybfn91ky"; - name = "qt3d-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qt3d-everywhere-src-6.10.0.tar.xz"; + sha256 = "1dz9g3nlwgwfycwl5a0c7h339s7azq2xvq99kd76wjqzfkrmz25x"; + name = "qt3d-everywhere-src-6.10.0.tar.xz"; }; }; qt5compat = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qt5compat-everywhere-src-6.9.3.tar.xz"; - sha256 = "0qa4s1m9f0qzs6msrilpi12wv5hpkgw211s0cqsiqaf24hhsq789"; - name = "qt5compat-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qt5compat-everywhere-src-6.10.0.tar.xz"; + sha256 = "0zibn0kq8grlpkvfasjciz71bv6x4cgz02v5l5giyplbcnfwa9fh"; + name = "qt5compat-everywhere-src-6.10.0.tar.xz"; }; }; qtactiveqt = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtactiveqt-everywhere-src-6.9.3.tar.xz"; - sha256 = "1kzc0pqwyi1h1s8qk8agplfkrib2s9cg7bwpl41z8icngwj76h6v"; - name = "qtactiveqt-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtactiveqt-everywhere-src-6.10.0.tar.xz"; + sha256 = "15m7g4h4aa3fk5q4an3apd0bdqkxdknnx64p72brrmah773mmlpm"; + name = "qtactiveqt-everywhere-src-6.10.0.tar.xz"; }; }; qtbase = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtbase-everywhere-src-6.9.3.tar.xz"; - sha256 = "0vnwp12wvsab1vsn8zhi4mcvrpg5iacq59xzzs0w0vimc3va58f5"; - name = "qtbase-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtbase-everywhere-src-6.10.0.tar.xz"; + sha256 = "0v84f9pw387m0ghd4n6s9ipwjvniqspabqxkqmbj58slrcxn5m7a"; + name = "qtbase-everywhere-src-6.10.0.tar.xz"; }; }; qtcharts = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtcharts-everywhere-src-6.9.3.tar.xz"; - sha256 = "0lsckms5s0av6dy8mll7bnspsigz6hpvbddm79n2wshxnfywpmr9"; - name = "qtcharts-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtcharts-everywhere-src-6.10.0.tar.xz"; + sha256 = "0svz8frryxv811xyg8cawn5icjcin6909mw4k6hlvgz7429m5zqv"; + name = "qtcharts-everywhere-src-6.10.0.tar.xz"; }; }; qtconnectivity = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtconnectivity-everywhere-src-6.9.3.tar.xz"; - sha256 = "1xfp3p5xkypxfgzvq2a5zcnyc7ms5gav99z5qmb48k0pzdgbl6z2"; - name = "qtconnectivity-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtconnectivity-everywhere-src-6.10.0.tar.xz"; + sha256 = "16gs86zyaq8rvzd9jribgg51hanas15gpy8zh45n58004v7xa2jn"; + name = "qtconnectivity-everywhere-src-6.10.0.tar.xz"; }; }; qtdatavis3d = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtdatavis3d-everywhere-src-6.9.3.tar.xz"; - sha256 = "1v5zdwjpz8j7s1nrkg7sp452vmdmhq09kdxvbsya2ad6jsw4ajxa"; - name = "qtdatavis3d-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtdatavis3d-everywhere-src-6.10.0.tar.xz"; + sha256 = "1qinrrk1j9qknwq2x7rl9aw8ajrp1h7kpfg29wcvaklbz9jj5xpx"; + name = "qtdatavis3d-everywhere-src-6.10.0.tar.xz"; }; }; qtdeclarative = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtdeclarative-everywhere-src-6.9.3.tar.xz"; - sha256 = "0q52z2iiqdchsvvcs7w6mq38v0ahv2h5jyvbjxfbzbr9f8i1n1ss"; - name = "qtdeclarative-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtdeclarative-everywhere-src-6.10.0.tar.xz"; + sha256 = "1c7nar7q92w8l7wkmwbl0f6j4g1c8kw8jbn1bf35sf821593bzbf"; + name = "qtdeclarative-everywhere-src-6.10.0.tar.xz"; }; }; qtdoc = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtdoc-everywhere-src-6.9.3.tar.xz"; - sha256 = "0am13lnmfxqj8ayx9ml5sm2qagl5s6hrki3bvdxfmzfkl07ds694"; - name = "qtdoc-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtdoc-everywhere-src-6.10.0.tar.xz"; + sha256 = "0fvx690kap3s2h9lg4d4w3nsiks6h2idggskisg1r1gpwks2brgc"; + name = "qtdoc-everywhere-src-6.10.0.tar.xz"; }; }; qtgraphs = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtgraphs-everywhere-src-6.9.3.tar.xz"; - sha256 = "13041r244h3mgs95zcyw5x7lfginf4gxs59spz030p0jap867p2h"; - name = "qtgraphs-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtgraphs-everywhere-src-6.10.0.tar.xz"; + sha256 = "1shllyk4f5lidw0hij9zhgapck3rf3hm6qw4m1nn79mynfrz3j3f"; + name = "qtgraphs-everywhere-src-6.10.0.tar.xz"; }; }; qtgrpc = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtgrpc-everywhere-src-6.9.3.tar.xz"; - sha256 = "00py189v3ihpy9cj51sxapl2dp3ci7k04ikjl6zbxmbjrdwwhqvr"; - name = "qtgrpc-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtgrpc-everywhere-src-6.10.0.tar.xz"; + sha256 = "0id4j4xgamx9wndc3cgnf5m42ax257xyfy2khq4aw0b10s4j4wpv"; + name = "qtgrpc-everywhere-src-6.10.0.tar.xz"; }; }; qthttpserver = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qthttpserver-everywhere-src-6.9.3.tar.xz"; - sha256 = "13rfvmh42h4zd2slb2d0xqdy7wgsy05q8jqy3ldbikx5vf9qg9vs"; - name = "qthttpserver-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qthttpserver-everywhere-src-6.10.0.tar.xz"; + sha256 = "1i8z4l1is5xashh5lq9afj1syhvvz15zgcr5f27mwhjzvc0mfw74"; + name = "qthttpserver-everywhere-src-6.10.0.tar.xz"; }; }; qtimageformats = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtimageformats-everywhere-src-6.9.3.tar.xz"; - sha256 = "1zigaz2418sy6m3na91rddxvlfn3257535kq120f9f6lzgdnpcjg"; - name = "qtimageformats-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtimageformats-everywhere-src-6.10.0.tar.xz"; + sha256 = "1shcghzjn3v9mbgms0ykk5d91q7hdm8mxv8n6vjhsm3wa190lib4"; + name = "qtimageformats-everywhere-src-6.10.0.tar.xz"; }; }; qtlanguageserver = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtlanguageserver-everywhere-src-6.9.3.tar.xz"; - sha256 = "0cwx6rlp9nm0qbzjamfcqhhylbmh2f5kk3z749ln49fbz32ads68"; - name = "qtlanguageserver-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtlanguageserver-everywhere-src-6.10.0.tar.xz"; + sha256 = "19i151qxh2fw2h5w6082bh0myk6skz3dihhs4mahhb1rkzh077jc"; + name = "qtlanguageserver-everywhere-src-6.10.0.tar.xz"; }; }; qtlocation = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtlocation-everywhere-src-6.9.3.tar.xz"; - sha256 = "018nwyr1idh3rfp22w86pw3i25xbj7mv49wir5s1akmgzp8jf4hl"; - name = "qtlocation-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtlocation-everywhere-src-6.10.0.tar.xz"; + sha256 = "007qbni20qajdq6villwp7bc7hqzjlppc30yw3ccqb2bzf3kxm6b"; + name = "qtlocation-everywhere-src-6.10.0.tar.xz"; }; }; qtlottie = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtlottie-everywhere-src-6.9.3.tar.xz"; - sha256 = "0cyzj0xhdhlgkra1pqb4vdazxjfii05sc7r5h0ml9fzhfiai0vhi"; - name = "qtlottie-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtlottie-everywhere-src-6.10.0.tar.xz"; + sha256 = "09bvm3jr2s0hg14dq8b7604hfgxj3cm1i93lkkbjh2n2bfpi793h"; + name = "qtlottie-everywhere-src-6.10.0.tar.xz"; }; }; qtmultimedia = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtmultimedia-everywhere-src-6.9.3.tar.xz"; - sha256 = "1xc6kgqm88rkzr8qzdi8yj8dm4dqfsfzkkba4d8iijb0xbkvwxd2"; - name = "qtmultimedia-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtmultimedia-everywhere-src-6.10.0.tar.xz"; + sha256 = "09hixwp8sq771rfp4c8bvmpzl6jd906k2rsrkxwij78drwhl0hh4"; + name = "qtmultimedia-everywhere-src-6.10.0.tar.xz"; }; }; qtnetworkauth = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtnetworkauth-everywhere-src-6.9.3.tar.xz"; - sha256 = "1ivyrha9ibc2iz4lvrz5309pdqxyccwzbpmyg2m24ghkxm3xrnb7"; - name = "qtnetworkauth-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtnetworkauth-everywhere-src-6.10.0.tar.xz"; + sha256 = "1j5k6dn0zc5rq82k89nyz5w0ny89mg1pg5aw0h41ybg2f5fqaq04"; + name = "qtnetworkauth-everywhere-src-6.10.0.tar.xz"; }; }; qtpositioning = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtpositioning-everywhere-src-6.9.3.tar.xz"; - sha256 = "1d1mb1fni42vgfyj9ghk0g6602nx8lwa1y0bmynpmh84yy0ck1qc"; - name = "qtpositioning-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtpositioning-everywhere-src-6.10.0.tar.xz"; + sha256 = "1q8yd9sjbm1vzcda1i21x0qf0n4md0k6wwbmr5jrvqbbcf8brgzc"; + name = "qtpositioning-everywhere-src-6.10.0.tar.xz"; }; }; qtquick3d = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtquick3d-everywhere-src-6.9.3.tar.xz"; - sha256 = "0wyfran9vwl6fm2i9nc149fpvv8r5k3yvrn2f1rjpb9qkw271cli"; - name = "qtquick3d-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtquick3d-everywhere-src-6.10.0.tar.xz"; + sha256 = "126lxiizd4pxxp43zzwv3k4i73806bgg329qsygz5qbnm0g8q9cq"; + name = "qtquick3d-everywhere-src-6.10.0.tar.xz"; }; }; qtquick3dphysics = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtquick3dphysics-everywhere-src-6.9.3.tar.xz"; - sha256 = "0vjs7calgc0vc7fv6hnbghhi37cfiapxim650av9w92xfhnv5myw"; - name = "qtquick3dphysics-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtquick3dphysics-everywhere-src-6.10.0.tar.xz"; + sha256 = "0hj90pdxh6x6zm1b4iflhr89sy13qrbwc79pv9z9m7gdwyzhid62"; + name = "qtquick3dphysics-everywhere-src-6.10.0.tar.xz"; }; }; qtquickeffectmaker = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtquickeffectmaker-everywhere-src-6.9.3.tar.xz"; - sha256 = "04lrlp1fakn8kv160ln8j1fsqsfdcjf1dzwlknx5r1m04hfkdw3b"; - name = "qtquickeffectmaker-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtquickeffectmaker-everywhere-src-6.10.0.tar.xz"; + sha256 = "0vmr5s6b4cqxpw5kl5shzydj3if89znm3izj5nrhzsgbic11vhk4"; + name = "qtquickeffectmaker-everywhere-src-6.10.0.tar.xz"; }; }; qtquicktimeline = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtquicktimeline-everywhere-src-6.9.3.tar.xz"; - sha256 = "1xqidk7njn1xiiz3i27ddzwd568caigq8p2ja4ks67x7bsk4nkr8"; - name = "qtquicktimeline-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtquicktimeline-everywhere-src-6.10.0.tar.xz"; + sha256 = "182bn72mifx8s867hsmramjfl9qr8szpla9fqw7bi3ywb1fiig6z"; + name = "qtquicktimeline-everywhere-src-6.10.0.tar.xz"; }; }; qtremoteobjects = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtremoteobjects-everywhere-src-6.9.3.tar.xz"; - sha256 = "0nyqmapypw0y745zg58rq9183vcrbm2c71dc3p9sdqflal07r64q"; - name = "qtremoteobjects-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtremoteobjects-everywhere-src-6.10.0.tar.xz"; + sha256 = "1616dagpzs68rhi1wiq1dwl1kbgf2c1mmrb3c7ni204k0rcjsh5i"; + name = "qtremoteobjects-everywhere-src-6.10.0.tar.xz"; }; }; qtscxml = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtscxml-everywhere-src-6.9.3.tar.xz"; - sha256 = "1drlbdgicqx76gyqi79ri1gy2vrya6l99gig76p8x46za70c12gk"; - name = "qtscxml-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtscxml-everywhere-src-6.10.0.tar.xz"; + sha256 = "1r1ic7kr3xzrg0vyrj4smj2vzyidazwrb5jqn2l6irg1bx06r55m"; + name = "qtscxml-everywhere-src-6.10.0.tar.xz"; }; }; qtsensors = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtsensors-everywhere-src-6.9.3.tar.xz"; - sha256 = "0s1gz66nar27c3l5cbqqdnza1pxbd7nylz88mnj32xpkwml53nx2"; - name = "qtsensors-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtsensors-everywhere-src-6.10.0.tar.xz"; + sha256 = "0fc7cq067sddfwcn43j5v4h6xzjrvj5gvi08l9bfag43s4d5wlk7"; + name = "qtsensors-everywhere-src-6.10.0.tar.xz"; }; }; qtserialbus = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtserialbus-everywhere-src-6.9.3.tar.xz"; - sha256 = "1ksvfwfk0az47sgfcaqbac936y75lcaga5fip5lbgz0s0zd3k08a"; - name = "qtserialbus-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtserialbus-everywhere-src-6.10.0.tar.xz"; + sha256 = "0c7cljc555vcs7jkm63mczxxpg085b161b6vpd9vnrz2zyzv49y6"; + name = "qtserialbus-everywhere-src-6.10.0.tar.xz"; }; }; qtserialport = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtserialport-everywhere-src-6.9.3.tar.xz"; - sha256 = "16427sa9qhk8hsyxjr69fhqmvzlg9n4pdizmqfc4cr7j1w1yq62b"; - name = "qtserialport-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtserialport-everywhere-src-6.10.0.tar.xz"; + sha256 = "01gqv6hc2ycd877jhq6ffnfgizh9pgnzc1gn6m6cfp8ximwa07jg"; + name = "qtserialport-everywhere-src-6.10.0.tar.xz"; }; }; qtshadertools = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtshadertools-everywhere-src-6.9.3.tar.xz"; - sha256 = "0rs553abb8sdla4cywfpgfh3vvyafm8spy8nnvj06md3hvp09632"; - name = "qtshadertools-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtshadertools-everywhere-src-6.10.0.tar.xz"; + sha256 = "1xpvzmpisglbk3nnczqvj0n1dv6zd79phvczqwpqc9yq7y64gfl7"; + name = "qtshadertools-everywhere-src-6.10.0.tar.xz"; }; }; qtspeech = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtspeech-everywhere-src-6.9.3.tar.xz"; - sha256 = "0gmbr65s4j2bka13iln3fmjrhl1i46lp5vlhdv66rf1gfi65lvzq"; - name = "qtspeech-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtspeech-everywhere-src-6.10.0.tar.xz"; + sha256 = "07m59akg31010khz82lvbrgjwwacavra5qsi17jqpk0chdk300qk"; + name = "qtspeech-everywhere-src-6.10.0.tar.xz"; }; }; qtsvg = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtsvg-everywhere-src-6.9.3.tar.xz"; - sha256 = "1qi6f3lvp0r7n79m1iw80690366bd53gyxm5gp76zgnbb0rslxnv"; - name = "qtsvg-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtsvg-everywhere-src-6.10.0.tar.xz"; + sha256 = "0cr5vaz485n23fvw4kvh1ykqny61bpdr5vd2q9szywsy9phc1ljy"; + name = "qtsvg-everywhere-src-6.10.0.tar.xz"; }; }; qttools = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qttools-everywhere-src-6.9.3.tar.xz"; - sha256 = "1sdla2blvk9r4g7v67dhwqjxx7kflyh7cm9pw5f7ziazjw7apxqc"; - name = "qttools-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qttools-everywhere-src-6.10.0.tar.xz"; + sha256 = "0anhvd7yqs9l3dryl43f0f7zq22rwrvz93g16ygmjgiyryc50vfq"; + name = "qttools-everywhere-src-6.10.0.tar.xz"; }; }; qttranslations = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qttranslations-everywhere-src-6.9.3.tar.xz"; - sha256 = "18chqjzy7ji76crfisl1rya8ds3my97bgsxkg7yldcc1crg58vgk"; - name = "qttranslations-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qttranslations-everywhere-src-6.10.0.tar.xz"; + sha256 = "1pkc0a5kigcp0jcq3ny1ykl0rqw0vabz45w14d2mgjyhrx9q4vij"; + name = "qttranslations-everywhere-src-6.10.0.tar.xz"; }; }; qtvirtualkeyboard = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtvirtualkeyboard-everywhere-src-6.9.3.tar.xz"; - sha256 = "0d2m87fvd11ckjjzy3lj1mbfisig4x9c263phq4fczwy3k4xb851"; - name = "qtvirtualkeyboard-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtvirtualkeyboard-everywhere-src-6.10.0.tar.xz"; + sha256 = "108klc6cr2ihaka9gnqaqv9i8r4lr8m39yviic3nviibd3r6gcmb"; + name = "qtvirtualkeyboard-everywhere-src-6.10.0.tar.xz"; }; }; qtwayland = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtwayland-everywhere-src-6.9.3.tar.xz"; - sha256 = "1pfsfdjqw985d8220jw13sqacyiip26bzpk1ax30ms33jayd84z4"; - name = "qtwayland-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtwayland-everywhere-src-6.10.0.tar.xz"; + sha256 = "07vnfd0xmzg8vc68g9j2i88lilmic5vhv22gn47vs94v4l52ngv0"; + name = "qtwayland-everywhere-src-6.10.0.tar.xz"; }; }; qtwebchannel = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtwebchannel-everywhere-src-6.9.3.tar.xz"; - sha256 = "01d3dy0fjz4vfy8s1yzpmd31b8mhvqf15z61fzr9qgd1wp0vnmwl"; - name = "qtwebchannel-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtwebchannel-everywhere-src-6.10.0.tar.xz"; + sha256 = "02ahm7cz8wgvfcgyq85sc2v566x4ihymalmv5xi0wn5zz9j5h5kl"; + name = "qtwebchannel-everywhere-src-6.10.0.tar.xz"; }; }; qtwebengine = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtwebengine-everywhere-src-6.9.3.tar.xz"; - sha256 = "0rl9v936sq6spvb3sfkpmc51wwmljrn4ssy3ii0pdn0xsl8kn2ym"; - name = "qtwebengine-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtwebengine-everywhere-src-6.10.0.tar.xz"; + sha256 = "0765a5kfkxxi7rq58pivi32xwb17pvg3h2ix88dx3y9h3jqpfk64"; + name = "qtwebengine-everywhere-src-6.10.0.tar.xz"; }; }; qtwebsockets = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtwebsockets-everywhere-src-6.9.3.tar.xz"; - sha256 = "1i428awzws4x4cmv6zpdgb27c2m71cs8dqcjbwiwqcfbyf6dlzg2"; - name = "qtwebsockets-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtwebsockets-everywhere-src-6.10.0.tar.xz"; + sha256 = "0vl091wnzqjpnp0i0l2dqlbhlwcfzw2ry1p48aifxf63lmyjw2fi"; + name = "qtwebsockets-everywhere-src-6.10.0.tar.xz"; }; }; qtwebview = { - version = "6.9.3"; + version = "6.10.0"; src = fetchurl { - url = "${mirror}/official_releases/qt/6.9/6.9.3/submodules/qtwebview-everywhere-src-6.9.3.tar.xz"; - sha256 = "1j1cqj2hq0c8r9lxb1h6mdhnf9clqb95jw2p0nn81jzin701ypn6"; - name = "qtwebview-everywhere-src-6.9.3.tar.xz"; + url = "${mirror}/official_releases/qt/6.10/6.10.0/submodules/qtwebview-everywhere-src-6.10.0.tar.xz"; + sha256 = "03rszbcr3lnf9cnk7hz99ibxx8na4l3i98q19fahj36ilpk68dd9"; + name = "qtwebview-everywhere-src-6.10.0.tar.xz"; }; }; }