diff --git a/.gitignore b/.gitignore
index 5ab0702..43dfc3e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
-SOURCES/qtbase-everywhere-src-5.15.2.tar.xz
+SOURCES/kde-5.15-rollup-20220324.patch.gz
+SOURCES/qtbase-everywhere-opensource-src-5.15.3.tar.xz
diff --git a/.qt5-qtbase.metadata b/.qt5-qtbase.metadata
index 4ced115..b319920 100644
--- a/.qt5-qtbase.metadata
+++ b/.qt5-qtbase.metadata
@@ -1 +1,2 @@
-b5ad67fc6381ad7fae0296944734198488d096a3 SOURCES/qtbase-everywhere-src-5.15.2.tar.xz
+981f5fbeb315c2e4adc122cee944368598466b67 SOURCES/kde-5.15-rollup-20220324.patch.gz
+d7383126e1f412ef26096692b9e50a1887eb11f7 SOURCES/qtbase-everywhere-opensource-src-5.15.3.tar.xz
diff --git a/SOURCES/qt5-qtbase-5.12.1-firebird-4.0.0.patch b/SOURCES/qt5-qtbase-5.12.1-firebird-4.0.0.patch
new file mode 100644
index 0000000..9c09161
--- /dev/null
+++ b/SOURCES/qt5-qtbase-5.12.1-firebird-4.0.0.patch
@@ -0,0 +1,17 @@
+diff -up qtbase-everywhere-src-5.12.1/src/plugins/sqldrivers/configure.json.firebird qtbase-everywhere-src-5.12.1/src/plugins/sqldrivers/configure.json
+--- qtbase-everywhere-src-5.12.1/src/plugins/sqldrivers/configure.json.firebird	2019-01-28 11:11:52.000000000 -0600
++++ qtbase-everywhere-src-5.12.1/src/plugins/sqldrivers/configure.json	2019-02-03 13:41:27.392305128 -0600
+@@ -49,10 +49,11 @@
+         "ibase": {
+             "label": "InterBase",
+             "test": {},
+-            "headers": "ibase.h",
++            "headers": "ibase.h",
+             "sources": [
+                 { "libs": "-lgds32_ms", "condition": "config.win32" },
+-                { "libs": "-lgds", "condition": "!config.win32" }
++                { "libs": "-lgds", "condition": "!config.win32" },
++                { "libs": "-lfbclient", "condition": "!config.win32" }
+             ]
+         },
+         "mysql": {
diff --git a/SOURCES/qt5-qtbase-gcc11.patch b/SOURCES/qt5-qtbase-gcc11.patch
new file mode 100644
index 0000000..c956712
--- /dev/null
+++ b/SOURCES/qt5-qtbase-gcc11.patch
@@ -0,0 +1,171 @@
+diff --git a/src/corelib/codecs/qtextcodec.cpp b/src/corelib/codecs/qtextcodec.cpp
+index 06fd88da..dbff3239 100644
+--- a/src/corelib/codecs/qtextcodec.cpp
++++ b/src/corelib/codecs/qtextcodec.cpp
+@@ -38,6 +38,7 @@
+ **
+ ****************************************************************************/
+ 
++#include <limits>
+ #include "qplatformdefs.h"
+ 
+ #include "qtextcodec.h"
+diff --git a/src/corelib/codecs/qutfcodec.cpp b/src/corelib/codecs/qutfcodec.cpp
+index 8561f908..8128d3cf 100644
+--- a/src/corelib/codecs/qutfcodec.cpp
++++ b/src/corelib/codecs/qutfcodec.cpp
+@@ -38,6 +38,8 @@
+ **
+ ****************************************************************************/
+ 
++#include <limits>
++
+ #include "qutfcodec_p.h"
+ #include "qlist.h"
+ #include "qendian.h"
+diff --git a/src/corelib/global/qendian.cpp b/src/corelib/global/qendian.cpp
+index eb08b2f8..6b41b3dd 100644
+--- a/src/corelib/global/qendian.cpp
++++ b/src/corelib/global/qendian.cpp
+@@ -38,6 +38,7 @@
+ **
+ ****************************************************************************/
+ 
++#include <limits>
+ #include "qendian.h"
+ 
+ #include "qalgorithms.h"
+diff --git a/src/corelib/global/qfloat16.cpp b/src/corelib/global/qfloat16.cpp
+index c9733174..c62a1972 100644
+--- a/src/corelib/global/qfloat16.cpp
++++ b/src/corelib/global/qfloat16.cpp
+@@ -38,6 +38,7 @@
+ **
+ ****************************************************************************/
+ 
++#include <limits>
+ #include "qfloat16.h"
+ #include "private/qsimd_p.h"
+ #include <cmath> // for fpclassify()'s return values
+diff --git a/src/corelib/global/qrandom.cpp b/src/corelib/global/qrandom.cpp
+index 10672c1f..6d5fd63e 100644
+--- a/src/corelib/global/qrandom.cpp
++++ b/src/corelib/global/qrandom.cpp
+@@ -40,6 +40,7 @@
+ // for rand_s
+ #define _CRT_RAND_S
+ 
++#include <limits>
+ #include "qrandom.h"
+ #include "qrandom_p.h"
+ #include <qobjectdefs.h>
+diff --git a/src/corelib/plugin/qelfparser_p.cpp b/src/corelib/plugin/qelfparser_p.cpp
+index 13eee353..9e7a7a41 100644
+--- a/src/corelib/plugin/qelfparser_p.cpp
++++ b/src/corelib/plugin/qelfparser_p.cpp
+@@ -37,6 +37,7 @@
+ **
+ ****************************************************************************/
+ 
++#include <limits>
+ #include "qelfparser_p.h"
+ 
+ #if defined (Q_OF_ELF) && defined(Q_CC_GNU)
+diff --git a/src/corelib/plugin/qmachparser.cpp b/src/corelib/plugin/qmachparser.cpp
+index 11670caf..39f5596b 100644
+--- a/src/corelib/plugin/qmachparser.cpp
++++ b/src/corelib/plugin/qmachparser.cpp
+@@ -37,6 +37,8 @@
+ **
+ ****************************************************************************/
+ 
++#include <limits>
++
+ #include "qmachparser_p.h"
+ 
+ #if defined(Q_OF_MACH_O)
+diff --git a/src/corelib/plugin/quuid.cpp b/src/corelib/plugin/quuid.cpp
+index 83873edf..5aafb4e5 100644
+--- a/src/corelib/plugin/quuid.cpp
++++ b/src/corelib/plugin/quuid.cpp
+@@ -38,6 +38,7 @@
+ **
+ ****************************************************************************/
+ 
++#include <limits>
+ #include "quuid.h"
+ 
+ #include "qcryptographichash.h"
+diff --git a/src/corelib/serialization/qdatastream.cpp b/src/corelib/serialization/qdatastream.cpp
+index 5082a8cb..7eecfcca 100644
+--- a/src/corelib/serialization/qdatastream.cpp
++++ b/src/corelib/serialization/qdatastream.cpp
+@@ -40,6 +40,8 @@
+ #include "qdatastream.h"
+ #include "qdatastream_p.h"
+ 
++#include <limits>
++
+ #if !defined(QT_NO_DATASTREAM) || defined(QT_BOOTSTRAPPED)
+ #include "qbuffer.h"
+ #include "qfloat16.h"
+diff --git a/src/corelib/text/qbytearray.cpp b/src/corelib/text/qbytearray.cpp
+index 9a72df58..6651ee98 100644
+--- a/src/corelib/text/qbytearray.cpp
++++ b/src/corelib/text/qbytearray.cpp
+@@ -39,6 +39,7 @@
+ **
+ ****************************************************************************/
+ 
++#include <limits>
+ #include "qbytearray.h"
+ #include "qbytearraymatcher.h"
+ #include "private/qtools_p.h"
+diff --git a/src/corelib/text/qbytearraymatcher.cpp b/src/corelib/text/qbytearraymatcher.cpp
+index 72e09226..80511cb5 100644
+--- a/src/corelib/text/qbytearraymatcher.cpp
++++ b/src/corelib/text/qbytearraymatcher.cpp
+@@ -37,6 +37,7 @@
+ **
+ ****************************************************************************/
+ 
++#include <limits>
+ #include "qbytearraymatcher.h"
+ 
+ #include <limits.h>
+diff --git a/src/corelib/tools/qbitarray.cpp b/src/corelib/tools/qbitarray.cpp
+index ab3054d5..22efb3a0 100644
+--- a/src/corelib/tools/qbitarray.cpp
++++ b/src/corelib/tools/qbitarray.cpp
+@@ -38,6 +38,7 @@
+ **
+ ****************************************************************************/
+ 
++#include <limits>
+ #include "qbitarray.h"
+ #include <qalgorithms.h>
+ #include <qdatastream.h>
+diff --git a/src/corelib/tools/qcryptographichash.cpp b/src/corelib/tools/qcryptographichash.cpp
+index fa8d21e0..cd85956d 100644
+--- a/src/corelib/tools/qcryptographichash.cpp
++++ b/src/corelib/tools/qcryptographichash.cpp
+@@ -38,6 +38,7 @@
+ **
+ ****************************************************************************/
+ 
++#include <limits>
+ #include <qcryptographichash.h>
+ #include <qiodevice.h>
+ 
+diff --git a/src/gui/text/qfontengine_qpf2.cpp b/src/gui/text/qfontengine_qpf2.cpp
+index e00f9d05..917ab5f9 100644
+--- a/src/gui/text/qfontengine_qpf2.cpp
++++ b/src/gui/text/qfontengine_qpf2.cpp
+@@ -37,6 +37,7 @@
+ **
+ ****************************************************************************/
+ 
++#include <limits>
+ #include "qfontengine_qpf2_p.h"
+ 
+ #include <QtCore/QFile>
diff --git a/SOURCES/qtbase-CVE-2021-38593.patch b/SOURCES/qtbase-CVE-2021-38593.patch
deleted file mode 100644
index 63c1c3d..0000000
--- a/SOURCES/qtbase-CVE-2021-38593.patch
+++ /dev/null
@@ -1,289 +0,0 @@
-From 081d835c040a90f8ee76807354355062ac521dfb Mon Sep 17 00:00:00 2001
-From: Eirik Aavitsland <eirik.aavitsland@qt.io>
-Date: Tue, 13 Apr 2021 14:23:45 +0200
-Subject: [PATCH] Avoid processing-intensive painting of high number of tiny
- dashes
-
-When stroking a dashed path, an unnecessary amount of processing would
-be spent if there is a huge number of dashes visible, e.g. because of
-scaling. Since the dashes are too small to be indivdually visible
-anyway, just replace with a semi-transparent solid line for such
-cases.
-
-Pick-to: 6.1 6.0 5.15
-Change-Id: I9e9f7861257ad5bce46a0cf113d1a9d7824911e6
-Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
-(cherry picked from commit f4d791b330d02777fcaf02938732892eb3167e9b)
-
-* asturmlechner 2021-08-21:
-Conflict from preceding 94dd2ceb in dev branch:
-	src/gui/painting/qpaintengineex.cpp
-	Resolved via:
-
-     if (pen.style() > Qt::SolidLine) {
-         QRectF cpRect = path.controlPointRect();
-         const QTransform &xf = state()->matrix;
--        if (pen.isCosmetic()) {
-+        if (qt_pen_is_cosmetic(pen, state()->renderHints)){
-             clipRect = d->exDeviceRect;
-             cpRect.translate(xf.dx(), xf.dy());
-         } else {
-
-FTBFS from preceding 471e4fcb in dev branch changing QVector to QList:
-	Resolved via:
-
-         QRectF extentRect = cpRect.adjusted(-pw, -pw, pw, pw) & clipRect;
-         qreal extent = qMax(extentRect.width(), extentRect.height());
-         qreal patternLength = 0;
--        const QList<qreal> pattern = pen.dashPattern();
-+        const QVector<qreal> pattern = pen.dashPattern();
-         const int patternSize = qMin(pattern.size(), 32);
-         for (int i = 0; i < patternSize; i++)
-             patternLength += qMax(pattern.at(i), qreal(0));
----
- src/gui/painting/qpaintengineex.cpp           | 44 +++++++++++++++----
- .../other/lancelot/scripts/tinydashes.qps     | 34 ++++++++++++++
- 2 files changed, 69 insertions(+), 9 deletions(-)
- create mode 100644 tests/auto/other/lancelot/scripts/tinydashes.qps
-
-diff --git a/src/gui/painting/qpaintengineex.cpp b/src/gui/painting/qpaintengineex.cpp
-index 5d8f89eadd..55fdb0c2a0 100644
---- a/src/gui/painting/qpaintengineex.cpp
-+++ b/src/gui/painting/qpaintengineex.cpp
-@@ -385,7 +385,7 @@ QPainterState *QPaintEngineEx::createState(QPainterState *orig) const
-
- Q_GUI_EXPORT extern bool qt_scaleForTransform(const QTransform &transform, qreal *scale); // qtransform.cpp
-
--void QPaintEngineEx::stroke(const QVectorPath &path, const QPen &pen)
-+void QPaintEngineEx::stroke(const QVectorPath &path, const QPen &inPen)
- {
- #ifdef QT_DEBUG_DRAW
-     qDebug() << "QPaintEngineEx::stroke()" << pen;
-@@ -403,6 +403,38 @@ void QPaintEngineEx::stroke(const QVectorPath &path, const QPen &pen)
-         d->stroker.setCubicToHook(qpaintengineex_cubicTo);
-     }
-
-+    QRectF clipRect;
-+    QPen pen = inPen;
-+    if (pen.style() > Qt::SolidLine) {
-+        QRectF cpRect = path.controlPointRect();
-+        const QTransform &xf = state()->matrix;
-+        if (qt_pen_is_cosmetic(pen, state()->renderHints)){
-+            clipRect = d->exDeviceRect;
-+            cpRect.translate(xf.dx(), xf.dy());
-+        } else {
-+            clipRect = xf.inverted().mapRect(QRectF(d->exDeviceRect));
-+        }
-+        // Check to avoid generating unwieldy amount of dashes that will not be visible anyway
-+        QRectF extentRect = cpRect & clipRect;
-+        qreal extent = qMax(extentRect.width(), extentRect.height());
-+        qreal patternLength = 0;
-+        const QVector<qreal> pattern = pen.dashPattern();
-+        const int patternSize = qMin(pattern.size(), 32);
-+        for (int i = 0; i < patternSize; i++)
-+            patternLength += qMax(pattern.at(i), qreal(0));
-+        if (pen.widthF())
-+            patternLength *= pen.widthF();
-+        if (qFuzzyIsNull(patternLength)) {
-+            pen.setStyle(Qt::NoPen);
-+        } else if (extent / patternLength > 10000) {
-+            // approximate stream of tiny dashes with semi-transparent solid line
-+            pen.setStyle(Qt::SolidLine);
-+            QColor color(pen.color());
-+            color.setAlpha(color.alpha() / 2);
-+            pen.setColor(color);
-+        }
-+    }
-+
-     if (!qpen_fast_equals(pen, d->strokerPen)) {
-         d->strokerPen = pen;
-         d->stroker.setJoinStyle(pen.joinStyle());
-@@ -430,14 +462,8 @@ void QPaintEngineEx::stroke(const QVectorPath &path, const QPen &pen)
-         return;
-     }
-
--    if (pen.style() > Qt::SolidLine) {
--        if (qt_pen_is_cosmetic(pen, state()->renderHints)){
--            d->activeStroker->setClipRect(d->exDeviceRect);
--        } else {
--            QRectF clipRect = state()->matrix.inverted().mapRect(QRectF(d->exDeviceRect));
--            d->activeStroker->setClipRect(clipRect);
--        }
--    }
-+    if (!clipRect.isNull())
-+        d->activeStroker->setClipRect(clipRect);
-
-     if (d->activeStroker == &d->stroker)
-         d->stroker.setForceOpen(path.hasExplicitOpen());
-diff --git a/tests/auto/other/lancelot/scripts/tinydashes.qps b/tests/auto/other/lancelot/scripts/tinydashes.qps
-new file mode 100644
-index 0000000000..d41ced7f5f
---- /dev/null
-+++ b/tests/auto/other/lancelot/scripts/tinydashes.qps
-@@ -0,0 +1,34 @@
-+# Version: 1
-+# CheckVsReference: 5%
-+
-+path_addEllipse mypath 20.0 20.0 200.0 200.0
-+
-+save
-+setPen blue 20 SolidLine FlatCap
-+pen_setCosmetic true
-+pen_setDashPattern [ 0.0004 0.0004 ]
-+setBrush yellow
-+
-+drawPath mypath
-+translate 300 0
-+setRenderHint Antialiasing true
-+drawPath mypath
-+restore
-+
-+path_addEllipse bigpath 200000.0 200000.0 2000000.0 2000000.0
-+
-+setPen blue 20 DotLine FlatCap
-+setBrush yellow
-+
-+save
-+translate 0 300
-+scale 0.0001 0.00011
-+drawPath bigpath
-+restore
-+
-+save
-+translate 300 300
-+setRenderHint Antialiasing true
-+scale 0.0001 0.00011
-+drawPath bigpath
-+restore
---
-GitLab
-
-From 6b400e3147dcfd8cc3a393ace1bd118c93762e0c Mon Sep 17 00:00:00 2001
-From: Eirik Aavitsland <eirik.aavitsland@qt.io>
-Date: Fri, 23 Jul 2021 15:53:56 +0200
-Subject: [PATCH] Improve fix for avoiding huge number of tiny dashes
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Some pathological cases were not caught by the previous fix.
-
-Fixes: QTBUG-95239
-Pick-to: 6.2 6.1 5.15
-Change-Id: I0337ee3923ff93ccb36c4d7b810a9c0667354cc5
-Reviewed-by: Robert Löhning <robert.loehning@qt.io>
----
- src/gui/painting/qpaintengineex.cpp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/gui/painting/qpaintengineex.cpp b/src/gui/painting/qpaintengineex.cpp
-index 2997d533107..22e9a621c3c 100644
---- a/src/gui/painting/qpaintengineex.cpp
-+++ b/src/gui/painting/qpaintengineex.cpp
-@@ -426,7 +426,7 @@ void QPaintEngineEx::stroke(const QVectorPath &path, const QPen &inPen)
-             patternLength *= pen.widthF();
-         if (qFuzzyIsNull(patternLength)) {
-             pen.setStyle(Qt::NoPen);
--        } else if (extent / patternLength > 10000) {
-+        } else if (qFuzzyIsNull(extent) || extent / patternLength > 10000) {
-             // approximate stream of tiny dashes with semi-transparent solid line
-             pen.setStyle(Qt::SolidLine);
-             QColor color(pen.color());
-
-From 427df34efdcb56582a9ae9f7d2d1f39eeff70328 Mon Sep 17 00:00:00 2001
-From: Eirik Aavitsland <eirik.aavitsland@qt.io>
-Date: Fri, 30 Jul 2021 13:03:49 +0200
-Subject: [PATCH] Refix for avoiding huge number of tiny dashes
-
-Previous fix hit too widely so some valid horizontal and vertical
-lines were affected; the root problem being that such lines have an
-empty control point rect (width or height is 0). Fix by caculating in
-the pen width.
-
-Pick-to: 6.2 6.1 5.15
-Change-Id: I7a436e873f6d485028f6759d0e2c6456f07eebdc
-Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
-(cherry picked from commit 84aba80944a2e1c3058d7a1372e0e66676411884)
----
- src/gui/painting/qpaintengineex.cpp           |  8 ++---
- .../gui/painting/qpainter/tst_qpainter.cpp    | 31 +++++++++++++++++++
- 2 files changed, 35 insertions(+), 4 deletions(-)
-
-diff --git a/src/gui/painting/qpaintengineex.cpp b/src/gui/painting/qpaintengineex.cpp
-index 19e4b23423..9fe510827a 100644
---- a/src/gui/painting/qpaintengineex.cpp
-+++ b/src/gui/painting/qpaintengineex.cpp
-@@ -415,18 +415,18 @@ void QPaintEngineEx::stroke(const QVectorPath &path, const QPen &inPen)
-             clipRect = xf.inverted().mapRect(QRectF(d->exDeviceRect));
-         }
-         // Check to avoid generating unwieldy amount of dashes that will not be visible anyway
--        QRectF extentRect = cpRect & clipRect;
-+        qreal pw = pen.widthF() ? pen.widthF() : 1;
-+        QRectF extentRect = cpRect.adjusted(-pw, -pw, pw, pw) & clipRect;
-         qreal extent = qMax(extentRect.width(), extentRect.height());
-         qreal patternLength = 0;
-         const QVector<qreal> pattern = pen.dashPattern();
-         const int patternSize = qMin(pattern.size(), 32);
-         for (int i = 0; i < patternSize; i++)
-             patternLength += qMax(pattern.at(i), qreal(0));
--        if (pen.widthF())
--            patternLength *= pen.widthF();
-+        patternLength *= pw;
-         if (qFuzzyIsNull(patternLength)) {
-             pen.setStyle(Qt::NoPen);
--        } else if (qFuzzyIsNull(extent) || extent / patternLength > 10000) {
-+        } else if (extent / patternLength > 10000) {
-             // approximate stream of tiny dashes with semi-transparent solid line
-             pen.setStyle(Qt::SolidLine);
-             QColor color(pen.color());
-diff --git a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
-index 42e98ce363..d7c3f95f1d 100644
---- a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
-+++ b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
-@@ -308,6 +308,7 @@ private slots:
-     void fillPolygon();
-
-     void drawImageAtPointF();
-+    void scaledDashes();
-
- private:
-     void fillData();
-@@ -5468,6 +5469,36 @@ void tst_QPainter::drawImageAtPointF()
-     paint.end();
- }
-
-+void tst_QPainter::scaledDashes()
-+{
-+    // Test that we do not hit the limit-huge-number-of-dashes path
-+    QRgb fore = qRgb(0, 0, 0xff);
-+    QRgb back = qRgb(0xff, 0xff, 0);
-+    QImage image(5, 32, QImage::Format_RGB32);
-+    image.fill(back);
-+    QPainter p(&image);
-+    QPen pen(QColor(fore), 3, Qt::DotLine);
-+    p.setPen(pen);
-+    p.scale(1, 2);
-+    p.drawLine(2, 0, 2, 16);
-+    p.end();
-+
-+    bool foreFound = false;
-+    bool backFound = false;
-+    int i = 0;
-+    while (i < 32 && (!foreFound || !backFound)) {
-+        QRgb pix = image.pixel(3, i);
-+        if (pix == fore)
-+            foreFound = true;
-+        else if (pix == back)
-+            backFound = true;
-+        i++;
-+    }
-+
-+    QVERIFY(foreFound);
-+    QVERIFY(backFound);
-+}
-+
- QTEST_MAIN(tst_QPainter)
-
- #include "tst_qpainter.moc"
---
-GitLab
diff --git a/SOURCES/qtbase-everywhere-src-5.15.2-libglvnd.patch b/SOURCES/qtbase-everywhere-src-5.15.2-libglvnd.patch
new file mode 100644
index 0000000..e819f8d
--- /dev/null
+++ b/SOURCES/qtbase-everywhere-src-5.15.2-libglvnd.patch
@@ -0,0 +1,15 @@
+diff -up qtbase-everywhere-src-5.15.2/src/gui/configure.json.libglvnd qtbase-everywhere-src-5.15.2/src/gui/configure.json
+--- qtbase-everywhere-src-5.15.2/src/gui/configure.json.libglvnd	2020-10-27 03:02:11.000000000 -0500
++++ qtbase-everywhere-src-5.15.2/src/gui/configure.json	2021-09-10 10:05:53.610312223 -0500
+@@ -847,9 +847,9 @@
+                 ],
+                 "include": [ "EGL/egl.h", "X11/Xlib.h" ],
+                 "main": [
+-                    "Display *dpy = EGL_DEFAULT_DISPLAY;",
++                    "Display *dpy = reinterpret_cast<Display *>(EGL_DEFAULT_DISPLAY);",
+                     "EGLNativeDisplayType egldpy = XOpenDisplay(\"\");",
+-                    "dpy = egldpy;",
++                    "dpy = reinterpret_cast<Display *>(egldpy);",
+                     "EGLNativeWindowType w = XCreateWindow(dpy, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);",
+                     "XDestroyWindow(dpy, w);",
+                     "XCloseDisplay(dpy);"
diff --git a/SPECS/qt5-qtbase.spec b/SPECS/qt5-qtbase.spec
index e92624c..77101f0 100644
--- a/SPECS/qt5-qtbase.spec
+++ b/SPECS/qt5-qtbase.spec
@@ -17,6 +17,9 @@
 %endif
 %endif
 
+# Disable automatic .la file removal
+%global __brp_remove_la_files %nil
+
 %global platform linux-g++
 
 %if 0%{?use_clang}
@@ -28,23 +31,23 @@
 %global rpm_macros_dir %(d=%{_rpmconfigdir}/macros.d; [ -d $d ] || d=%{_sysconfdir}/rpm; echo $d)
 
 %global journald -journald
+BuildRequires: make
 BuildRequires: pkgconfig(libsystemd)
 
 ## skip for now, until we're better at it --rex
 %global examples 1
 %global build_tests 1
-#global tests 1
 
 Name:    qt5-qtbase
 Summary: Qt5 - QtBase components
-Version: 5.15.2
-Release: 4%{?dist}
+Version: 5.15.3
+Release: 1%{?dist}
 
 # See LGPL_EXCEPTIONS.txt, for exception details
 License: LGPLv2 with exceptions or GPLv3 with exceptions
 Url:     http://qt-project.org/
 %global  majmin %(echo %{version} | cut -d. -f1-2)
-Source0: https://download.qt.io/official_releases/qt/%{majmin}/%{version}/submodules/%{qt_module}-everywhere-src-%{version}.tar.xz
+Source0: https://download.qt.io/official_releases/qt/%{majmin}/%{version}/submodules/%{qt_module}-everywhere-opensource-src-%{version}.tar.xz
 
 # https://bugzilla.redhat.com/show_bug.cgi?id=1227295
 Source1: qtlogging.ini
@@ -94,20 +97,33 @@ Patch54: qtbase-qmake_LFLAGS.patch
 # don't use relocatable heuristics to guess prefix when using -no-feature-relocatable
 Patch55: qtbase-everywhere-src-5.14.2-no_relocatable.patch
 
+# fix FTBFS against libglvnd-1.3.4+
+Patch56: qtbase-everywhere-src-5.15.2-libglvnd.patch
+
 # drop -O3 and make -O2 by default
 Patch61: qt5-qtbase-cxxflag.patch
 
 # support firebird version 3.x
-Patch64: qt5-qtbase-5.12.1-firebird.patch
+Patch63: qt5-qtbase-5.12.1-firebird.patch
+
+# support firebird version 4.x
+Patch64: qt5-qtbase-5.12.1-firebird-4.0.0.patch
 
 # fix for new mariadb
 Patch65: qtbase-opensource-src-5.9.0-mysql.patch
 
 Patch68: qtbase-ambiguous-python-shebang.patch
 
+# gcc-11
+Patch90: %{name}-gcc11.patch
 
-# Security fixes
-Patch100: qtbase-CVE-2021-38593.patch
+## upstream patches
+# https://invent.kde.org/qt/qt/qtbase, kde/5.15 branch
+# git diff v5.15.3-lts-lgpl..HEAD | gzip > kde-5.15-rollup-$(date +%Y%m%d).patch.gz
+# patch100 in lookaside cache due to large'ish size -- rdieter
+Patch100: kde-5.15-rollup-20220324.patch.gz
+# HACK to make 'fedpkg sources' consider it 'used"
+Source100: kde-5.15-rollup-20220324.patch.gz
 
 # Do not check any files in %%{_qt5_plugindir}/platformthemes/ for requires.
 # Those themes are there for platform integration. If the required libraries are
@@ -129,6 +145,8 @@ BuildRequires: pkgconfig(alsa)
 BuildRequires: pkgconfig(atspi-2)
 %if 0%{?use_clang}
 BuildRequires: clang >= 3.7.0
+%else
+BuildRequires: gcc-c++
 %endif
 # http://bugzilla.redhat.com/1196359
 %if 0%{?fedora} || 0%{?rhel} > 6
@@ -351,6 +369,7 @@ Qt5 libraries used for drawing widgets and OpenGL items.
 %patch53 -p1 -b .qt5gui_cmake_isystem_includes
 %patch54 -p1 -b .qmake_LFLAGS
 %patch55 -p1 -b .no_relocatable
+%patch56 -p1 -b .libglvnd
 %patch61 -p1 -b .qt5-qtbase-cxxflag
 %patch64 -p1 -b .firebird
 %if 0%{?fedora} > 27 || 0%{?rhel} > 7
@@ -358,7 +377,10 @@ Qt5 libraries used for drawing widgets and OpenGL items.
 %endif
 %patch68 -p1
 
-%patch100 -p1 -b .CVE-2021-38593
+%patch90 -p1 -b .gcc11
+
+## upstream patches
+%patch100 -p1
 
 # move some bundled libs to ensure they're not accidentally used
 pushd src/3rdparty
@@ -384,6 +406,13 @@ sed -i -e "s|^#!/usr/bin/env perl$|#!%{__perl}|" \
  mkspecs/features/data/unix/findclasslist.pl
 
 %build
+# QT is known not to work properly with LTO at this point.  Some of the issues
+# are being worked on upstream and disabling LTO should be re-evaluated as
+# we update this change.  Until such time...
+# Disable LTO
+# https://bugzilla.redhat.com/1900527
+%define _lto_cflags %{nil}
+
 ## adjust $RPM_OPT_FLAGS
 # remove -fexceptions
 RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS | sed 's|-fexceptions||g'`
@@ -420,7 +449,7 @@ export MAKEFLAGS="%{?_smp_mflags}"
   -shared \
   -accessibility \
   %{?dbus}%{!?dbus:-dbus-runtime} \
-  %{?egl:-egl} \
+  %{?egl:-egl -eglfs} \
   -fontconfig \
   -glib \
   -gtk \
@@ -516,7 +545,7 @@ translationdir=%{_qt5_translationdir}
 
 Name: Qt5
 Description: Qt5 Configuration
-Version: %{version}
+Version: 5.15.3
 EOF
 
 # rpm macros
@@ -596,6 +625,10 @@ EOF
 mkdir -p %{buildroot}%{_qt5_headerdir}/QtXcb
 install -m 644 src/plugins/platforms/xcb/*.h %{buildroot}%{_qt5_headerdir}/QtXcb/
 
+# drop Qt5Bootstrap from -static (#2017661)
+rm -f %{buildroot}%{_qt5_libdir}/libQt5Bootstrap.*a
+rm -f %{buildroot}%{_qt5_libdir}/libQt5Bootstrap.prl
+
 %check
 # verify Qt5.pc
 export PKG_CONFIG_PATH=%{buildroot}%{_libdir}/pkgconfig
@@ -698,7 +731,7 @@ fi
 %{_qt5_importdir}/
 %{_qt5_translationdir}/
 %if "%{_qt5_prefix}" != "%{_prefix}"
-%dir %{_qt5_prefix}
+%dir %{_qt5_prefix}/
 %endif
 %dir %{_qt5_archdatadir}/
 %dir %{_qt5_datadir}/
@@ -810,7 +843,6 @@ fi
 %{_qt5_libdir}/cmake/Qt5DBus/Qt5DBusConfig*.cmake
 %{_qt5_libdir}/cmake/Qt5DBus/Qt5DBusMacros.cmake
 %{_qt5_libdir}/cmake/Qt5Gui/Qt5GuiConfig*.cmake
-%{_qt5_libdir}/cmake/Qt5Gui/Qt5Gui_QLibInputPlugin.cmake
 %{_qt5_libdir}/cmake/Qt5Network/Qt5NetworkConfig*.cmake
 %{_qt5_libdir}/cmake/Qt5OpenGL/Qt5OpenGLConfig*.cmake
 %{_qt5_libdir}/cmake/Qt5PrintSupport/Qt5PrintSupportConfig*.cmake
@@ -820,24 +852,24 @@ fi
 %{_qt5_libdir}/cmake/Qt5Widgets/Qt5WidgetsMacros.cmake
 %{_qt5_libdir}/cmake/Qt5Xml/Qt5XmlConfig*.cmake
 %{_qt5_libdir}/cmake/Qt5/Qt5ModuleLocation.cmake
-%{_qt5_libdir}/cmake/Qt5AccessibilitySupport/Qt5AccessibilitySupportConfig*.cmake
-%{_qt5_libdir}/cmake/Qt5DeviceDiscoverySupport/Qt5DeviceDiscoverySupportConfig*.cmake
-%{_qt5_libdir}/cmake/Qt5EdidSupport/Qt5EdidSupportConfig*.cmake
-%{_qt5_libdir}/cmake/Qt5EglFSDeviceIntegration/Qt5EglFSDeviceIntegrationConfig*.cmake
-%{_qt5_libdir}/cmake/Qt5EglFsKmsSupport/Qt5EglFsKmsSupportConfig*.cmake
-%{_qt5_libdir}/cmake/Qt5EglSupport/Qt5EglSupportConfig*.cmake
-%{_qt5_libdir}/cmake/Qt5EventDispatcherSupport/Qt5EventDispatcherSupportConfig*.cmake
-%{_qt5_libdir}/cmake/Qt5FbSupport/Qt5FbSupportConfig*.cmake
-%{_qt5_libdir}/cmake/Qt5FontDatabaseSupport/Qt5FontDatabaseSupportConfig*.cmake
-%{_qt5_libdir}/cmake/Qt5GlxSupport/Qt5GlxSupportConfig*.cmake
-%{_qt5_libdir}/cmake/Qt5InputSupport/Qt5InputSupportConfig*.cmake
-%{_qt5_libdir}/cmake/Qt5KmsSupport/Qt5KmsSupportConfig*.cmake
-%{_qt5_libdir}/cmake/Qt5LinuxAccessibilitySupport/Qt5LinuxAccessibilitySupportConfig*.cmake
-%{_qt5_libdir}/cmake/Qt5PlatformCompositorSupport/Qt5PlatformCompositorSupportConfig*.cmake
-%{_qt5_libdir}/cmake/Qt5ServiceSupport/Qt5ServiceSupportConfig*.cmake
-%{_qt5_libdir}/cmake/Qt5ThemeSupport/Qt5ThemeSupportConfig*.cmake
-%{_qt5_libdir}/cmake/Qt5XcbQpa/Qt5XcbQpaConfig*.cmake
-%{_qt5_libdir}/cmake/Qt5XkbCommonSupport/Qt5XkbCommonSupportConfig*.cmake
+%{_qt5_libdir}/cmake/Qt5AccessibilitySupport/
+%{_qt5_libdir}/cmake/Qt5DeviceDiscoverySupport/
+%{_qt5_libdir}/cmake/Qt5EdidSupport/
+%{_qt5_libdir}/cmake/Qt5EglFSDeviceIntegration/
+%{_qt5_libdir}/cmake/Qt5EglFsKmsSupport/
+%{_qt5_libdir}/cmake/Qt5EglSupport/
+%{_qt5_libdir}/cmake/Qt5EventDispatcherSupport/
+%{_qt5_libdir}/cmake/Qt5FbSupport/
+%{_qt5_libdir}/cmake/Qt5FontDatabaseSupport/
+%{_qt5_libdir}/cmake/Qt5GlxSupport/
+%{_qt5_libdir}/cmake/Qt5InputSupport/
+%{_qt5_libdir}/cmake/Qt5KmsSupport/
+%{_qt5_libdir}/cmake/Qt5LinuxAccessibilitySupport/
+%{_qt5_libdir}/cmake/Qt5PlatformCompositorSupport/
+%{_qt5_libdir}/cmake/Qt5ServiceSupport/
+%{_qt5_libdir}/cmake/Qt5ThemeSupport/
+%{_qt5_libdir}/cmake/Qt5XcbQpa/
+%{_qt5_libdir}/cmake/Qt5XkbCommonSupport/
 %{_qt5_libdir}/metatypes/qt5core_metatypes.json
 %{_qt5_libdir}/metatypes/qt5gui_metatypes.json
 %{_qt5_libdir}/metatypes/qt5widgets_metatypes.json
@@ -868,8 +900,6 @@ fi
 #{_qt5_archdatadir}/mkspecs/modules/qt_lib_*_private.pri
 
 %files static
-%{_qt5_libdir}/libQt5Bootstrap.*a
-%{_qt5_libdir}/libQt5Bootstrap.prl
 %{_qt5_headerdir}/QtOpenGLExtensions/
 %{_qt5_libdir}/libQt5OpenGLExtensions.*a
 %{_qt5_libdir}/libQt5OpenGLExtensions.prl
@@ -1025,6 +1055,11 @@ fi
 
 
 %changelog
+* Thu Mar 24 2022 Jan Grulich <jgrulich@redhat.com> - 5.15.3-1
+- 5.15.3 + sync with Fedora
+  Resolves: bz#2061377
+  Resolves: bz#2059853
+
 * Tue Oct 12 2021 Jan Grulich <jgrulich@redhat.com> - 5.15.2-4
 - Fix out-of-bounds write in QOutlineMapper::convertPath
   Resolves: bz#1996877