qt6-declarative rebuild

This commit is contained in:
Rmys
2025-11-29 10:43:19 +03:00
parent b4bc187001
commit 8090854455
6 changed files with 449 additions and 354 deletions
@@ -0,0 +1,153 @@
From 99d8ef879911a0f85a5729d058e38f895acc8c37 Mon Sep 17 00:00:00 2001
From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Date: Fri, 31 Oct 2025 09:08:51 +0100
Subject: [PATCH] Rich text: Limit size of text object
When we draw a text object, we need to store this in RAM
since the QTextObjectInterface is QPainter-based. This
could lead to over-allocation if the text object size
was set to be very large. We use the existing image IO
infrastructure for making sure allocations are within
reasonable (and configurable) limits.
Task-number: QTBUG-141515
Change-Id: Ieae06a9e92a7bd078d22ab2314889201c2049122
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
(cherry picked from commit 144ce34e846b3f732bdb003f99b1f9455425416f)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
(cherry picked from commit c3a07c99f9d2328cee4aa48a51d261d243b50d85)
---
diff --git a/src/quick/items/qquicktextnodeengine.cpp b/src/quick/items/qquicktextnodeengine.cpp
index 32de7c4..a7cfa08 100644
--- a/src/quick/items/qquicktextnodeengine.cpp
+++ b/src/quick/items/qquicktextnodeengine.cpp
@@ -11,6 +11,7 @@
#include <QtGui/qtextobject.h>
#include <QtGui/qtexttable.h>
#include <QtGui/qtextlist.h>
+#include <QtGui/qimageiohandler.h>
#include <private/qquicktext_p.h>
#include <private/qtextdocumentlayout_p.h>
@@ -434,12 +435,15 @@
}
if (image.isNull()) {
- image = QImage((size * m_devicePixelRatio).toSize(), QImage::Format_ARGB32_Premultiplied);
- image.setDevicePixelRatio(m_devicePixelRatio);
- image.fill(Qt::transparent);
- {
- QPainter painter(&image);
- handler->drawObject(&painter, QRectF({}, size), textDocument, pos, format);
+ if (QImageIOHandler::allocateImage((size * m_devicePixelRatio).toSize(),
+ QImage::Format_ARGB32_Premultiplied,
+ &image)) {
+ image.setDevicePixelRatio(m_devicePixelRatio);
+ image.fill(Qt::transparent);
+ {
+ QPainter painter(&image);
+ handler->drawObject(&painter, QRectF({}, size), textDocument, pos, format);
+ }
}
}
diff --git a/tests/auto/quick/qquicktext/tst_qquicktext.cpp b/tests/auto/quick/qquicktext/tst_qquicktext.cpp
index 9f8f250..d6534e5 100644
--- a/tests/auto/quick/qquicktext/tst_qquicktext.cpp
+++ b/tests/auto/quick/qquicktext/tst_qquicktext.cpp
@@ -125,6 +125,8 @@
void imgTagsElide();
void imgTagsUpdates();
void imgTagsError();
+ void imgSize_data();
+ void imgSize();
void fontSizeMode_data();
void fontSizeMode();
void fontSizeModeMultiline_data();
@@ -3451,6 +3453,85 @@
QVERIFY(textObject != nullptr);
}
+void tst_qquicktext::imgSize_data()
+{
+ QTest::addColumn<QString>("url");
+ QTest::addColumn<qint64>("width");
+ QTest::addColumn<qint64>("height");
+ QTest::addColumn<QQuickText::TextFormat>("format");
+
+ QTest::newRow("negative (styled text)") << QStringLiteral("images/starfish_2.png")
+ << qint64(-0x7FFFFF)
+ << qint64(-0x7FFFFF)
+ << QQuickText::StyledText;
+ QTest::newRow("negative (rich text)") << QStringLiteral("images/starfish_2.png")
+ << qint64(-0x7FFFFF)
+ << qint64(-0x7FFFFF)
+ << QQuickText::RichText;
+ QTest::newRow("large (styled text)") << QStringLiteral("images/starfish_2.png")
+ << qint64(0x7FFFFF)
+ << qint64(0x7FFFFF)
+ << QQuickText::StyledText;
+ QTest::newRow("large (right text)") << QStringLiteral("images/starfish_2.png")
+ << qint64(0x7FFFFF)
+ << qint64(0x7FFFFF)
+ << QQuickText::RichText;
+ QTest::newRow("medium (styled text)") << QStringLiteral("images/starfish_2.png")
+ << qint64(0x10000)
+ << qint64(0x10000)
+ << QQuickText::StyledText;
+ QTest::newRow("medium (right text)") << QStringLiteral("images/starfish_2.png")
+ << qint64(0x10000)
+ << qint64(0x10000)
+ << QQuickText::RichText;
+ QTest::newRow("large non-existent (styled text)") << QStringLiteral("a")
+ << qint64(0x7FFFFF)
+ << qint64(0x7FFFFF)
+ << QQuickText::StyledText;
+ QTest::newRow("medium non-existent (styled text)") << QStringLiteral("a")
+ << qint64(0x10000)
+ << qint64(0x10000)
+ << QQuickText::StyledText;
+ QTest::newRow("out-of-bounds non-existent (styled text)") << QStringLiteral("a")
+ << (qint64(INT_MAX) + 1)
+ << (qint64(INT_MAX) + 1)
+ << QQuickText::StyledText;
+ QTest::newRow("large non-existent (rich text)") << QStringLiteral("a")
+ << qint64(0x7FFFFF)
+ << qint64(0x7FFFFF)
+ << QQuickText::RichText;
+ QTest::newRow("medium non-existent (rich text)") << QStringLiteral("a")
+ << qint64(0x10000)
+ << qint64(0x10000)
+ << QQuickText::RichText;
+}
+
+void tst_qquicktext::imgSize()
+{
+ QFETCH(QString, url);
+ QFETCH(qint64, width);
+ QFETCH(qint64, height);
+ QFETCH(QQuickText::TextFormat, format);
+
+ // Reusing imgTagsUpdates.qml here, since it is just an empty Text component
+ QScopedPointer<QQuickView> window(createView(testFile("imgTagsUpdates.qml")));
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
+
+ QScopedPointer<QQuickText> myText(window->rootObject()->findChild<QQuickText*>("myText"));
+ QVERIFY(myText);
+
+ myText->setTextFormat(format);
+
+ QString imgStr = QStringLiteral("<img src=\"%1\" width=\"%2\" height=\"%3\" />")
+ .arg(url)
+ .arg(width)
+ .arg(height);
+ myText->setText(imgStr);
+
+ QVERIFY(QQuickTest::qWaitForPolish(myText.data()));
+}
+
void tst_qquicktext::fontSizeMode_data()
{
QTest::addColumn<QString>("text");
@@ -0,0 +1,108 @@
From 855f02c96d3c089ea7c0010ebbe4b29fab9cc1ba Mon Sep 17 00:00:00 2001
From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Date: Wed, 29 Oct 2025 09:43:40 +0100
Subject: [PATCH] Increase robustness of <img> tag in Text component
For Text.StyledText, there was no protection against <img> tags
with very large widths or heights. This could cause an application
to spend a very long time processing a layout and sometimes crash
if the size was too large.
We reuse the internal coord limit in QPainter as our maximum size
here, similar to what we do in Qt Svg for instance.
For Text.RichText, there were no issues in release builds, but in
debug builds, you could trigger an overflow assert when rounding
the number if it exceeded INT_MAX. For this, we simply cap the
width and height at INT_MAX.
Fixes: QTBUG-141515
Change-Id: I4bcba16158f5f495a0de38963316effc4c46aae1
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
(cherry picked from commit 4aaf9bf21f7cc69d73066785e254b664fcc82025)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
(cherry picked from commit 907c7ceb7b27586039262567273efd5ec79e6202)
Reviewed-by: Antti Kokko <antti.kokko@qt.io>
---
diff --git a/src/quick/items/qquicktextdocument.cpp b/src/quick/items/qquicktextdocument.cpp
index d11bae5..798b0d0 100644
--- a/src/quick/items/qquicktextdocument.cpp
+++ b/src/quick/items/qquicktextdocument.cpp
@@ -590,9 +590,9 @@
{
if (format.isImageFormat()) {
QTextImageFormat imageFormat = format.toImageFormat();
- int width = qRound(imageFormat.width());
+ int width = qRound(qBound(qreal(INT_MIN), imageFormat.width(), qreal(INT_MAX)));
const bool hasWidth = imageFormat.hasProperty(QTextFormat::ImageWidth) && width > 0;
- const int height = qRound(imageFormat.height());
+ const int height = qRound(qBound(qreal(INT_MIN), imageFormat.height(), qreal(INT_MAX)));
const bool hasHeight = imageFormat.hasProperty(QTextFormat::ImageHeight) && height > 0;
const auto maxWidth = imageFormat.maximumWidth();
const bool hasMaxWidth = imageFormat.hasProperty(QTextFormat::ImageMaxWidth) && maxWidth.type() != QTextLength::VariableLength;
diff --git a/src/quick/util/qquickstyledtext.cpp b/src/quick/util/qquickstyledtext.cpp
index bb003c1..7d21c89 100644
--- a/src/quick/util/qquickstyledtext.cpp
+++ b/src/quick/util/qquickstyledtext.cpp
@@ -11,6 +11,11 @@
#include "qquickstyledtext_p.h"
#include <QQmlContext>
#include <QtGui/private/qtexthtmlparser_p.h>
+#include <QtGui/private/qoutlinemapper_p.h>
+
+#ifndef QQUICKSTYLEDPARSER_COORD_LIMIT
+# define QQUICKSTYLEDPARSER_COORD_LIMIT QT_RASTER_COORD_LIMIT
+#endif
Q_STATIC_LOGGING_CATEGORY(lcStyledText, "qt.quick.styledtext")
@@ -660,9 +665,19 @@
if (is_equal_ignoring_case(attr.first, QLatin1String("src"))) {
image->url = QUrl(attr.second.toString());
} else if (is_equal_ignoring_case(attr.first, QLatin1String("width"))) {
- image->size.setWidth(attr.second.toString().toInt());
+ bool ok;
+ int v = attr.second.toString().toInt(&ok);
+ if (ok && v <= QQUICKSTYLEDPARSER_COORD_LIMIT)
+ image->size.setWidth(v);
+ else
+ qCWarning(lcStyledText) << "Invalid width provided for <img>";
} else if (is_equal_ignoring_case(attr.first, QLatin1String("height"))) {
- image->size.setHeight(attr.second.toString().toInt());
+ bool ok;
+ int v = attr.second.toString().toInt(&ok);
+ if (ok && v <= QQUICKSTYLEDPARSER_COORD_LIMIT)
+ image->size.setHeight(v);
+ else
+ qCWarning(lcStyledText) << "Invalid height provided for <img>";
} else if (is_equal_ignoring_case(attr.first, QLatin1String("align"))) {
if (is_equal_ignoring_case(attr.second, QLatin1String("top"))) {
image->align = QQuickStyledTextImgTag::Top;
diff --git a/tests/auto/quick/qquicktext/tst_qquicktext.cpp b/tests/auto/quick/qquicktext/tst_qquicktext.cpp
index d6534e5..6f37a6a 100644
--- a/tests/auto/quick/qquicktext/tst_qquicktext.cpp
+++ b/tests/auto/quick/qquicktext/tst_qquicktext.cpp
@@ -3484,6 +3484,22 @@
<< qint64(0x10000)
<< qint64(0x10000)
<< QQuickText::RichText;
+ QTest::newRow("out-of-bounds (styled text)") << QStringLiteral("images/starfish_2.png")
+ << (qint64(INT_MAX) + 1)
+ << (qint64(INT_MAX) + 1)
+ << QQuickText::StyledText;
+ QTest::newRow("out-of-bounds (rich text)") << QStringLiteral("images/starfish_2.png")
+ << (qint64(INT_MAX) + 1)
+ << (qint64(INT_MAX) + 1)
+ << QQuickText::RichText;
+ QTest::newRow("negative out-of-bounds (styled text)") << QStringLiteral("images/starfish_2.png")
+ << (qint64(INT_MIN) - 1)
+ << (qint64(INT_MIN) - 1)
+ << QQuickText::StyledText;
+ QTest::newRow("negative out-of-bounds (rich text)") << QStringLiteral("images/starfish_2.png")
+ << (qint64(INT_MIN) - 1)
+ << (qint64(INT_MIN) - 1)
+ << QQuickText::RichText;
QTest::newRow("large non-existent (styled text)") << QStringLiteral("a")
<< qint64(0x7FFFFF)
<< qint64(0x7FFFFF)
@@ -1,14 +0,0 @@
https://bugreports.qt.io/browse/QTBUG-135158
https://codereview.qt-project.org/c/qt/qtdeclarative/+/647212
--- a/src/quicktemplates/qquickpopuppositioner.cpp
+++ b/src/quicktemplates/qquickpopuppositioner.cpp
@@ -321,5 +321,8 @@
: p->parentItem->mapToGlobal(windowPos.x(), windowPos.y());
QRectF rect = { globalCoords.x(), globalCoords.y(), popupItem->width(), popupItem->height() };
- if (!skipFittingStep) {
+
+ // QTBUG-99618: On wayland, we can't use QWindow::mapToGlobal(), and should use a xdg_positioner instead.
+ static bool isWayland = QGuiApplication::platformName().startsWith(QLatin1String("wayland"));
+ if (!skipFittingStep && !isWayland) {
const QScreen *screenAtPopupPosition = QGuiApplication::screenAt(globalCoords.toPoint());
const QScreen *screen = screenAtPopupPosition ? screenAtPopupPosition : QGuiApplication::primaryScreen();
@@ -1,32 +0,0 @@
https://bugreports.qt.io/browse/QTBUG-136998
https://bugreports.qt.io/browse/QTBUG-137196
https://bugreports.qt.io/browse/QTBUG-137411
https://github.com/qt/qtdeclarative/commit/672e6777e8e6a8fd86c7877075e7a8aa0ea0a31a
--- a/src/qmlcompiler/qqmljsimportvisitor.cpp
+++ b/src/qmlcompiler/qqmljsimportvisitor.cpp
@@ -1042,14 +1042,15 @@
if (!prevRequiredScope.isNull()) {
- auto sourceScope = prevRequiredScope->baseType();
- suggestion = QQmlJSFixSuggestion{
- "%1:%2:%3: Property marked as required in %4."_L1
- .arg(sourceScope->filePath())
- .arg(sourceScope->sourceLocation().startLine)
- .arg(sourceScope->sourceLocation().startColumn)
- .arg(requiredScopeName),
- sourceScope->sourceLocation()
- };
- suggestion->setFilename(sourceScope->filePath());
+ if (auto sourceScope = prevRequiredScope->baseType()) {
+ suggestion = QQmlJSFixSuggestion{
+ "%1:%2:%3: Property marked as required in %4."_L1
+ .arg(sourceScope->filePath())
+ .arg(sourceScope->sourceLocation().startLine)
+ .arg(sourceScope->sourceLocation().startColumn)
+ .arg(requiredScopeName),
+ sourceScope->sourceLocation()
+ };
+ suggestion->setFilename(sourceScope->filePath());
+ }
} else {
message += " (marked as required by %1)"_L1.arg(requiredScopeName);
@@ -1,128 +0,0 @@
From e5d9bcf70ae704569e091ee0ee93561e01fefe38 Mon Sep 17 00:00:00 2001
From: Ulf Hermann <ulf.hermann@qt.io>
Date: Fri, 11 Apr 2025 17:00:52 +0200
Subject: [PATCH] QmlCompiler: Error out on unstorable types
We already do this for return types, but it's fatal on any type.
Fixes: QTBUG-135342
Change-Id: I7aee2a19ffcd39d2707eceb34b5073057d8b5ebb
Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
(cherry picked from commit 0bd329a0b42b4c8c3bf77c201f3d8b187467ef02)
---
diff --git a/src/qmlcompiler/qqmljsstorageinitializer.cpp b/src/qmlcompiler/qqmljsstorageinitializer.cpp
index 4123716..60f46fa 100644
--- a/src/qmlcompiler/qqmljsstorageinitializer.cpp
+++ b/src/qmlcompiler/qqmljsstorageinitializer.cpp
@@ -35,17 +35,25 @@
if (!content.isValid() || !content.storage().isNull())
return;
- const QQmlJSRegisterContent original = m_typeResolver->original(content);
- const QQmlJSScope::ConstPtr originalStored
- = m_typeResolver->storedType(original.containedType());
- m_pool->storeType(content, originalStored);
+ const QQmlJSScope::ConstPtr original = m_typeResolver->originalContainedType(content);
+ if (const QQmlJSScope::ConstPtr originalStored = m_typeResolver->storedType(original)) {
+ m_pool->storeType(content, originalStored);
+ } else {
+ addError(QStringLiteral("Cannot store type %1.").arg(original->internalName()));
+ return;
+ }
- const QQmlJSScope::ConstPtr adjustedStored
- = m_typeResolver->storedType(content.containedType());
+ const QQmlJSScope::ConstPtr contentContained = content.containedType();
+ const QQmlJSScope::ConstPtr adjustedStored = m_typeResolver->storedType(contentContained);
+ if (!adjustedStored) {
+ addError(QStringLiteral("Cannot store type %1.")
+ .arg(contentContained->internalName()));
+ return;
+ }
if (!m_typeResolver->adjustTrackedType(content.storage(), adjustedStored)) {
- addError(QStringLiteral("Cannot adjust stored type for %1.")
- .arg(content.containedType()->internalName()));
+ addError(QStringLiteral("Cannot adjust stored type for %1 to %2.")
+ .arg(contentContained->internalName(), adjustedStored->internalName()));
}
};
diff --git a/tests/auto/qml/qmlcppcodegen/data/CMakeLists.txt b/tests/auto/qml/qmlcppcodegen/data/CMakeLists.txt
index 4661211..cc92631 100644
--- a/tests/auto/qml/qmlcppcodegen/data/CMakeLists.txt
+++ b/tests/auto/qml/qmlcppcodegen/data/CMakeLists.txt
@@ -308,6 +308,7 @@
undefinedToDouble.qml
unknownAttached.qml
unknownParameter.qml
+ unknownUnderlyingType.qml
unstoredUndefined.qml
unusedAttached.qml
urlString.qml
diff --git a/tests/auto/qml/qmlcppcodegen/data/enumproblems.h b/tests/auto/qml/qmlcppcodegen/data/enumproblems.h
index 36f97be..9c98789 100644
--- a/tests/auto/qml/qmlcppcodegen/data/enumproblems.h
+++ b/tests/auto/qml/qmlcppcodegen/data/enumproblems.h
@@ -116,4 +116,19 @@
Q_ENUM(EType)
};
+using uint_myown_t = decltype(75 - 12);
+
+class UnknownUnderlyingType : public QObject
+{
+ Q_OBJECT
+ QML_ELEMENT
+
+public:
+ enum Bla : uint_myown_t {
+ Yo = 11,
+ };
+ Q_ENUM(Bla)
+};
+
+
#endif // ENUMPROBLEMS_H
diff --git a/tests/auto/qml/qmlcppcodegen/data/unknownUnderlyingType.qml b/tests/auto/qml/qmlcppcodegen/data/unknownUnderlyingType.qml
new file mode 100644
index 0000000..8e43828
--- /dev/null
+++ b/tests/auto/qml/qmlcppcodegen/data/unknownUnderlyingType.qml
@@ -0,0 +1,6 @@
+import QtQml
+import TestTypes as FB
+
+QtObject {
+ property var foo: FB.UnknownUnderlyingType.Yo
+}
diff --git a/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp b/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp
index f44cae1..5f701d7 100644
--- a/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp
+++ b/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp
@@ -269,6 +269,7 @@
void undefinedToDouble();
void unknownAttached();
void unknownParameter();
+ void unknownUnderlyingType();
void unstoredUndefined();
void unusedAttached();
void urlString();
@@ -5466,6 +5467,16 @@
QCOMPARE(object->property("cppProp").toInt(), 18);
}
+void tst_QmlCppCodegen::unknownUnderlyingType()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine, QUrl(u"qrc:/qt/qml/TestTypes/unknownUnderlyingType.qml"_s));
+ QVERIFY2(!component.isError(), component.errorString().toUtf8());
+ QScopedPointer<QObject> object(component.create());
+ QVERIFY(!object.isNull());
+ QCOMPARE(object->property("foo").toInt(), 11);
+}
+
void tst_QmlCppCodegen::unstoredUndefined()
{
QQmlEngine engine;
+188 -180
View File
@@ -1,78 +1,86 @@
<?xml version="1.0" ?>
<!DOCTYPE PISI SYSTEM "http://www.pisilinux.org/projeler/pisi/pisi-spec.dtd">
<!DOCTYPE PISI SYSTEM "https://pisilinux.org/projeler/pisi/pisi-spec.dtd">
<PISI>
<Source>
<Name>qt6-declarative</Name>
<Homepage>http://qt.digia.com/</Homepage>
<Packager>
<Name>PisiLinux Community</Name>
<Email>admins@pisilinux.org</Email>
</Packager>
<Summary>Classes for QML and JavaScript languages</Summary>
<Description>Classes for QML and JavaScript languages</Description>
<License>LGPLv2.1-linking-exception</License>
<Archive sha1sum="aa00670d8e01f93a96cc45ea6bf878162afde778" type="tarxz">https://download.qt.io/official_releases/qt/6.9/6.9.3/submodules/qtdeclarative-everywhere-src-6.9.3.tar.xz</Archive>
<BuildDependencies>
<Dependency>ninja</Dependency>
<Dependency>cmake</Dependency>
<Dependency>python3</Dependency>
<Dependency>libxkbcommon-devel</Dependency>
<Dependency versionFrom="13.0.4">mesa-devel</Dependency>
<Dependency versionFrom="6.9.3">qt6-sql-odbc</Dependency>
<Dependency versionFrom="6.9.3">qt6-sql-mysql</Dependency>
<Dependency versionFrom="6.9.3">qt6-svg-devel</Dependency>
<Dependency versionFrom="6.9.3">qt6-sql-sqlite</Dependency>
<Dependency versionFrom="6.9.3">qt6-base-devel</Dependency>
<Dependency versionFrom="6.9.3">qt6-imageformats</Dependency>
<Dependency versionFrom="6.9.3">qt6-sql-postgresql</Dependency>
<Dependency versionFrom="6.9.3">qt6-shadertools-devel</Dependency>
<Dependency versionFrom="6.9.3">qt6-languageserver-devel</Dependency>
</BuildDependencies>
<Patches>
<!-- <Patch level="1">qtdeclarative-6.9.1-QTBUG-135158.patch</Patch> -->
<!-- <Patch level="1">qtdeclarative-6.9.1-qmlcachegen-crash.patch</Patch> -->
</Patches>
</Source>
<Package>
<Name>qt6-declarative</Name>
<RuntimeDependencies>
<Dependency>libgcc</Dependency>
<Dependency>libglvnd</Dependency>
<Dependency versionFrom="6.9.3">qt6-svg</Dependency>
<Dependency versionFrom="6.9.3">qt6-base</Dependency>
<Dependency versionFrom="6.9.3">qt6-languageserver</Dependency>
</RuntimeDependencies>
<Files>
<Path fileType="library">/usr/lib</Path>
<Path fileType="library">/usr/lib/qt6</Path>
<Path fileType="data">/usr/share/licenses</Path>
<Path fileType="executable">/usr/lib/qt6/bin</Path>
<Path fileType="executable">/usr/bin/</Path>
<Path fileType="data">/usr/share/qt6/modules</Path>
</Files>
</Package>
<Package>
<Name>qt6-declarative-devel</Name>
<Files>
<Path fileType="library">/usr/lib/pkgconfig</Path>
<Path fileType="data">/usr/lib/cmake</Path>
<Path fileType="header">/usr/include/qt6</Path>
</Files>
<RuntimeDependencies>
<Dependency versionFrom="6.9.3">qt6-base-devel</Dependency>
<Dependency release="current">qt6-declarative</Dependency>
</RuntimeDependencies>
</Package>
<!--Package>
<Name>qt6-declarative-docs</Name>
<Source>
<Name>qt6-declarative</Name>
<Homepage>http://qt.digia.com/</Homepage>
<Packager>
<Name>PisiLinux Community</Name>
<Email>admins@pisilinux.org</Email>
</Packager>
<Summary>Classes for QML and JavaScript languages</Summary>
<Description>Classes for QML and JavaScript languages</Description>
<License>LGPLv2.1-linking-exception</License>
<Archive sha1sum="aa00670d8e01f93a96cc45ea6bf878162afde778" type="tarxz">https://download.qt.io/official_releases/qt/6.9/6.9.3/submodules/qtdeclarative-everywhere-src-6.9.3.tar.xz</Archive>
<BuildDependencies>
<Dependency>ninja</Dependency>
<Dependency>cmake</Dependency>
<Dependency>python3</Dependency>
<Dependency>libxkbcommon-devel</Dependency>
<Dependency versionFrom="13.0.4">mesa-devel</Dependency>
<Dependency versionFrom="6.9.3">qt6-sql-odbc</Dependency>
<Dependency versionFrom="6.9.3">qt6-sql-mysql</Dependency>
<Dependency versionFrom="6.9.3">qt6-svg-devel</Dependency>
<Dependency versionFrom="6.9.3">qt6-sql-sqlite</Dependency>
<Dependency versionFrom="6.9.3">qt6-base-devel</Dependency>
<Dependency versionFrom="6.9.3">qt6-imageformats</Dependency>
<Dependency versionFrom="6.9.3">qt6-sql-postgresql</Dependency>
<Dependency versionFrom="6.9.3">qt6-shadertools-devel</Dependency>
<Dependency versionFrom="6.9.3">qt6-languageserver-devel</Dependency>
</BuildDependencies>
<Patches>
<Patch level="1">CVE-2025-12385-qtdeclarative-6.9-0001.diff</Patch>
<Patch level="1">CVE-2025-12385-qtdeclarative-6.9-0002.diff</Patch>
</Patches>
</Source>
<Package>
<Name>qt6-declarative</Name>
<RuntimeDependencies>
<Dependency>libgcc</Dependency>
<Dependency>libglvnd</Dependency>
<Dependency versionFrom="6.9.3">qt6-svg</Dependency>
<Dependency versionFrom="6.9.3">qt6-base</Dependency>
<Dependency versionFrom="6.9.3">qt6-languageserver</Dependency>
</RuntimeDependencies>
<Files>
<Path fileType="doc">/usr/share/doc/qt6</Path>
<Path fileType="library">/usr/lib</Path>
<Path fileType="library">/usr/lib/qt6</Path>
<Path fileType="data">/usr/share/licenses</Path>
<Path fileType="executable">/usr/lib/qt6/bin</Path>
<Path fileType="executable">/usr/bin/</Path>
<Path fileType="data">/usr/share/qt6/modules</Path>
</Files>
</Package-->
</Package>
<Package>
<Name>qt6-declarative-devel</Name>
<Files>
<Path fileType="library">/usr/lib/pkgconfig</Path>
<Path fileType="data">/usr/lib/cmake</Path>
<Path fileType="header">/usr/include/qt6</Path>
</Files>
<RuntimeDependencies>
<Dependency versionFrom="6.9.3">qt6-base-devel</Dependency>
<Dependency release="current">qt6-declarative</Dependency>
</RuntimeDependencies>
</Package>
<!--Package>
<Name>qt6-declarative-docs</Name>
<RuntimeDependencies>
<Dependency versionFrom="6.9.3">qt6-base</Dependency>
</RuntimeDependencies>
<Files>
<Path fileType="doc">/usr/share/doc/qt6</Path>
</Files>
</Package-->
<History>
<Update release="19">
<Date>2025-11-29</Date>
<Version>6.9.3</Version>
<Comment>Rebuild.</Comment>
<Name>Pisi Linux Community</Name>
<Email>admin@pisilinux.org</Email>
</Update>
<Update release="18">
<Date>2025-10-07</Date>
<Version>6.9.3</Version>
@@ -87,117 +95,117 @@
<Name>Pisi Linux Community</Name>
<Email>admin@pisilinux.org</Email>
</Update>
<Update release="16">
<Date>2025-07-24</Date>
<Version>6.9.1</Version>
<Comment>Rebuild.</Comment>
<Name>Pisi Linux Community</Name>
<Email>admin@pisilinux.org</Email>
</Update>
<Update release="15">
<Date>2025-06-09</Date>
<Version>6.9.1</Version>
<Comment>Version bump.</Comment>
<Name>Pisi Linux Community</Name>
<Email>admin@pisilinux.org</Email>
</Update>
<Update release="14">
<Date>2025-05-12</Date>
<Version>6.9.0</Version>
<Comment>Version bump.</Comment>
<Name>Pisi Linux Community</Name>
<Email>admin@pisilinux.org</Email>
</Update>
<Update release="13">
<Date>2025-02-01</Date>
<Version>6.8.2</Version>
<Comment>Version bump.</Comment>
<Name>Pisi Linux Community</Name>
<Email>admin@pisilinux.org</Email>
</Update>
<Update release="12">
<Date>2024-12-02</Date>
<Version>6.8.1</Version>
<Comment>Version bump.</Comment>
<Name>Pisi Linux Community</Name>
<Email>admin@pisilinux.org</Email>
</Update>
<Update release="11">
<Date>2024-09-27</Date>
<Version>6.7.3</Version>
<Comment>Version bump.</Comment>
<Name>Pisi Linux Community</Name>
<Email>admin@pisilinux.org</Email>
</Update>
<Update release="10">
<Date>2024-06-02</Date>
<Version>6.7.1</Version>
<Comment>Version bump.</Comment>
<Name>Pisi Linux Community</Name>
<Email>admin@pisilinux.org</Email>
</Update>
<Update release="9">
<Date>2024-03-30</Date>
<Version>6.6.3</Version>
<Comment>Version bump.</Comment>
<Name>Mustafa Cinasal</Name>
<Email>muscnsl@gmail.com</Email>
</Update>
<Update release="8">
<Date>2024-02-15</Date>
<Version>6.6.2</Version>
<Comment>Version bump.</Comment>
<Name>Mustafa Cinasal</Name>
<Email>muscnsl@gmail.com</Email>
</Update>
<Update release="7">
<Date>2023-11-28</Date>
<Version>6.6.1</Version>
<Comment>Version bump.</Comment>
<Name>Mustafa Cinasal</Name>
<Email>muscnsl@gmail.com</Email>
</Update>
<Update release="6">
<Date>2023-11-17</Date>
<Version>6.6.0</Version>
<Comment>Version bump.</Comment>
<Name>Mustafa Cinasal</Name>
<Email>muscnsl@gmail.com</Email>
</Update>
<Update release="5">
<Date>2023-10-09</Date>
<Version>6.5.3</Version>
<Comment>Version bump.</Comment>
<Name>Mustafa Cinasal</Name>
<Email>muscnsl@gmail.com</Email>
</Update>
<Update release="4">
<Date>2023-05-27</Date>
<Version>6.5.1</Version>
<Comment>Version bump.</Comment>
<Name>Mustafa Cinasal</Name>
<Email>muscnsl@gmail.com</Email>
</Update>
<Update release="3">
<Date>2023-04-13</Date>
<Version>6.5.0</Version>
<Comment>Version bump.</Comment>
<Name>Mustafa Cinasal</Name>
<Email>muscnsl@gmail.com</Email>
</Update>
<Update release="2">
<Date>2023-01-08</Date>
<Version>6.4.2</Version>
<Comment>Version bump.</Comment>
<Name>Mustafa Cinasal</Name>
<Email>muscnsl@gmail.com</Email>
</Update>
<Update release="1">
<Date>2022-10-05</Date>
<Version>6.4.0</Version>
<Comment>First release</Comment>
<Name>Mustafa Cinasal</Name>
<Email>muscnsl@gmail.com</Email>
</Update>
</History>
<Update release="16">
<Date>2025-07-24</Date>
<Version>6.9.1</Version>
<Comment>Rebuild.</Comment>
<Name>Pisi Linux Community</Name>
<Email>admin@pisilinux.org</Email>
</Update>
<Update release="15">
<Date>2025-06-09</Date>
<Version>6.9.1</Version>
<Comment>Version bump.</Comment>
<Name>Pisi Linux Community</Name>
<Email>admin@pisilinux.org</Email>
</Update>
<Update release="14">
<Date>2025-05-12</Date>
<Version>6.9.0</Version>
<Comment>Version bump.</Comment>
<Name>Pisi Linux Community</Name>
<Email>admin@pisilinux.org</Email>
</Update>
<Update release="13">
<Date>2025-02-01</Date>
<Version>6.8.2</Version>
<Comment>Version bump.</Comment>
<Name>Pisi Linux Community</Name>
<Email>admin@pisilinux.org</Email>
</Update>
<Update release="12">
<Date>2024-12-02</Date>
<Version>6.8.1</Version>
<Comment>Version bump.</Comment>
<Name>Pisi Linux Community</Name>
<Email>admin@pisilinux.org</Email>
</Update>
<Update release="11">
<Date>2024-09-27</Date>
<Version>6.7.3</Version>
<Comment>Version bump.</Comment>
<Name>Pisi Linux Community</Name>
<Email>admin@pisilinux.org</Email>
</Update>
<Update release="10">
<Date>2024-06-02</Date>
<Version>6.7.1</Version>
<Comment>Version bump.</Comment>
<Name>Pisi Linux Community</Name>
<Email>admin@pisilinux.org</Email>
</Update>
<Update release="9">
<Date>2024-03-30</Date>
<Version>6.6.3</Version>
<Comment>Version bump.</Comment>
<Name>Mustafa Cinasal</Name>
<Email>muscnsl@gmail.com</Email>
</Update>
<Update release="8">
<Date>2024-02-15</Date>
<Version>6.6.2</Version>
<Comment>Version bump.</Comment>
<Name>Mustafa Cinasal</Name>
<Email>muscnsl@gmail.com</Email>
</Update>
<Update release="7">
<Date>2023-11-28</Date>
<Version>6.6.1</Version>
<Comment>Version bump.</Comment>
<Name>Mustafa Cinasal</Name>
<Email>muscnsl@gmail.com</Email>
</Update>
<Update release="6">
<Date>2023-11-17</Date>
<Version>6.6.0</Version>
<Comment>Version bump.</Comment>
<Name>Mustafa Cinasal</Name>
<Email>muscnsl@gmail.com</Email>
</Update>
<Update release="5">
<Date>2023-10-09</Date>
<Version>6.5.3</Version>
<Comment>Version bump.</Comment>
<Name>Mustafa Cinasal</Name>
<Email>muscnsl@gmail.com</Email>
</Update>
<Update release="4">
<Date>2023-05-27</Date>
<Version>6.5.1</Version>
<Comment>Version bump.</Comment>
<Name>Mustafa Cinasal</Name>
<Email>muscnsl@gmail.com</Email>
</Update>
<Update release="3">
<Date>2023-04-13</Date>
<Version>6.5.0</Version>
<Comment>Version bump.</Comment>
<Name>Mustafa Cinasal</Name>
<Email>muscnsl@gmail.com</Email>
</Update>
<Update release="2">
<Date>2023-01-08</Date>
<Version>6.4.2</Version>
<Comment>Version bump.</Comment>
<Name>Mustafa Cinasal</Name>
<Email>muscnsl@gmail.com</Email>
</Update>
<Update release="1">
<Date>2022-10-05</Date>
<Version>6.4.0</Version>
<Comment>First release</Comment>
<Name>Mustafa Cinasal</Name>
<Email>muscnsl@gmail.com</Email>
</Update>
</History>
</PISI>