<pre style='margin:0'>
Renee Otten (reneeotten) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/25c68a096fa6c2c5ce238fa460eff0f8cce2ef73">https://github.com/macports/macports-ports/commit/25c68a096fa6c2c5ce238fa460eff0f8cce2ef73</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 25c68a096fa6c2c5ce238fa460eff0f8cce2ef73
</span>Author: Renee Otten <reneeotten@macports.org>
AuthorDate: Sun Aug 18 22:57:24 2024 -0400

<span style='display:block; white-space:pre;color:#404040;'>    qt64: keep version 6.4 as separate port
</span>---
 aqua/qt64/Portfile                                 | 1395 ++++++++++++++++++++
 aqua/qt64/files/CVE-2023-32573-qtsvg.diff          |   37 +
 aqua/qt64/files/CVE-2023-32762-qtbase.diff         |   13 +
 aqua/qt64/files/CVE-2023-32763-qtbase.diff         |   55 +
 aqua/qt64/files/CVE-2023-33285-qtbase.diff         |   70 +
 aqua/qt64/files/CVE-2023-37369-qtbase.diff         |  189 +++
 aqua/qt64/files/CVE-2023-38197-qtbase.diff         |  217 +++
 aqua/qt64/files/CVE-2023-51714-qtbase.diff         |   86 ++
 aqua/qt64/files/CVE-2024-25580-qtbase.diff         |  325 +++++
 aqua/qt64/files/patch-qt5compat-find_libs.diff     |   16 +
 aqua/qt64/files/patch-qtbase-fix-cmake-3.28.diff   |   45 +
 aqua/qt64/files/patch-qtbase-intel_intrinsics.diff |   20 +
 aqua/qt64/files/patch-qtbase-macdeployqt.diff      |   33 +
 aqua/qt64/files/patch-qtbase-macos_10.14_sdk.diff  |  113 ++
 aqua/qt64/files/patch-qtbase-memory_resource.diff  |   80 ++
 aqua/qt64/files/patch-qtdeclarative-xcode11.3.diff |   22 +
 .../files/patch-qtmultimedia-macos_10.14_sdk.diff  |   51 +
 .../patch-qtmultimedia_no_std_unary_function.diff  |   31 +
 .../files/patch-qtpositioning-macos_10.14_sdk.diff |   17 +
 .../qt64/files/patch-qtspeech-macos_10.14_sdk.diff |   26 +
 aqua/qt64/files/qtbase-qmake-xcode-15.patch        |   59 +
 21 files changed, 2900 insertions(+)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt64/Portfile b/aqua/qt64/Portfile
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..a7588e1c629
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt64/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,1395 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortSystem                  1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup                   active_variants 1.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup                   qt6_info 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup                   compiler_blacklist_versions 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+name                        qt64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+categories                  aqua
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+platforms                   {macosx >= 18} ; # upon change, please update qt6 PG
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+maintainers                 {mcalhoun @MarcusCalhoun-Lopez} openmaintainer
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# for OpenSSLException, see source and header files in src/network/ssl of qtbase
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# see also https://doc.qt.io/qt-6.4/qtnetwork-index.html#licenses-and-attributions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+license                     {LGPL-3 GPL-3 OpenSSLException}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+homepage                    https://www.qt.io
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+version                     6.4.3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# get Qt's version numbers
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set branch                  [join [lrange [split ${version} .] 0 1] .]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set qt_major                [lindex [split ${version} .] 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# see https://www.qt.io/blog/qt-6.0-released
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+compiler.cxx_standard       2017
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# qcompilerdetection.h emits:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#     error: "Unsupported Apple Clang version"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# which also means Q_CC_CLANG will not be set.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# That causes the check for __has_feature(cxx_unicode_literals) to be skipped, causing
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#     error: "Qt6 requires Unicode string support in both the compiler and the standard library"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# to be emitted, even when the unsupported Apple Clang version does support Unicode string literals.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+compiler.blacklist-append   {clang < 1100}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+master_sites                https://download.qt.io/official_releases/qt/${branch}/${version}/submodules
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# file sizes are significantly smaller using xz
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+use_xz                      yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+supported_archs             arm64 x86_64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# conflict with all other versions of qt6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+foreach {qt_base qt_info} ${qt6::available_versions} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if { ${qt_base} ne ${name} } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        conflicts-append    port:${qt_base}-qtbase
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# MacPorts LLVM/Clang version to use when required
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set llvm_version            17
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# MacPorts Python branch & version to use when required
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set python_branch           3.11
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set python_version          [join [split ${python_branch} .] ""]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+############################################################################### Modules Not Considered
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# No qtactiveqt      (Windows Only)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# No qtwayland       (Linux Only)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+###############################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+############################################################################### Qt Dependencies
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://code.qt.io/cgit/qt/qt5.git/tree/.gitmodules?h=6.4.3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+###############################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+############################################################################### Module Format
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# "Qt Module Name" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#     {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#         checksum, rmd160
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#         checksum, sha256
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#         checksum, size
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#     dependencies, build
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#     dependencies, lib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#     dependencies, Qt module name
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#     Qt components provided
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#     included in "standard" installation of Qt (empty string is no, explanation string is yes)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#     variant overrides
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#     revision number
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#     license replacement
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# module info found at https://doc.qt.io/qt-6.4/qtmodules.html
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+###############################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+array set modules {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtbase {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            3cadb6bd4cefcb2db1f47e780520d3f3d863fa1d
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            5087c9e5b0165e7bc3c1a4ab176b35d0cd8f52636aea903fa377bdba00891a60
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            48078536
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "port:brotli path:bin/dbus-daemon:dbus port:double-conversion port:freetype
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            path:lib/pkgconfig/glib-2.0.pc:glib2 path:lib/pkgconfig/harfbuzz.pc:harfbuzz
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            path:lib/pkgconfig/icu-uc.pc:icu path:include/turbojpeg.h:libjpeg-turbo port:libb2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            port:libpng port:md4c path:lib/pkgconfig/libpcre2-posix.pc:pcre2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            port:zlib path:lib/pkgconfig/libzstd.pc:zstd"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt Core" "Qt GUI" "Qt Network" "Qt SQL" "Qt Test" "Qt Widgets" "Qt Concurrent" "Qt D-Bus" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         "Qt OpenGL" "Qt Platform Headers" "Qt Print Support" "Qt XML"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 6"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtsvg {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            2a021623559aca5a8d23298544b3d32fd8597e42
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            88315f886cf81898705e487cedba6e6160724359d23c518c92c333c098879a4a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            1726464
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "port:zlib"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt SVG"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtdeclarative {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            91fafeb58501d02b49a9d97ff39759cb82ccaad9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            67ded1b3b988135e3600916b34bb156fe3986c88420c6f87a6d0fd53521ba795
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            30556972
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase qtimageformats qtshadertools qtsvg qtlanguageserver"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt QML" "Qt Quick" "Qt Quick Layouts" "Qt Quick Widgets"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtmultimedia {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            c085075a84da5e9d9fa8b613dcdc318138ef10da
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            a4a72469e12da1e59ee032ab2e6677d620a5663c354d0ba88906d2bec1567d00
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            5941312
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "path:lib/libavcodec.dylib:ffmpeg port:pulseaudio"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase qtshadertools qtdeclarative qtquick3d"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt Multimedia"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qttools {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            047a22392a4f500c6bf70c50432e16543e7505f0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            867df829cd5cd3ae8efe62e825503123542764b13c96953511e567df70c5a091
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            8738280
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "port:clang-${llvm_version}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase qtdeclarative"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt Designer" "Qt Help" "Qt UI Tools"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qttranslations {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            47f6a8448cc96dc28119aa2748ac42130a12c2c8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            79e56b7800d49649a8a8010818538c367a829e0b7a09d5f60bd3aecf5abe972c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            1466828
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "port:qt6-qttools"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"translation files"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: ~examples ~tests ~debug noarch ~docs"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtdoc {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            b39c76dbcb6159b392ad9348146d39befda2da59
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            73eac34dd629f629ca8cf5827c165b476e834731bb8262c937bc57eef4128183
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            8633284
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtdeclarative qttools qtmultimedia"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"documentation and examples"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtpositioning {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            11046a934c31c916822b01d60b4e5975153ffcdd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            b218b1e1d37c12e2935ae90600d8b42ef68f90617fe8677ec89f0b0f05bcd70c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            1494352
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "port:gconf"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase qtdeclarative qtserialport"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt Positioning"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: ~examples ~tests"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtsensors {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            15373f978e5dd1f3b2b09e53646ae8a734b26fcb
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            5f3964fa2889456736a0bdf07221105fd67853539496e2d3ba2f380a47babc48
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            2106700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase qtdeclarative"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt Sensors"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtconnectivity {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            df9e16e8b99e00f7261587a3acf582d65f8f1bc9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            f98c2014cc4ab7ed69e762ecddd2433b95468942bb1612f648a7e9c94ba44c9d
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            1108992
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase qtdeclarative"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt Bluetooth" "Qt NFC"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qt3d {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            819f7dd13b6e6d8ceb0ae96399d36aa43a970698
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            a88225f997253d1605afced4eaac5c2c4b368fd90cd5e076a90bd7d1b2ae3d71
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            104002896
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "port:assimp"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase qtdeclarative qtshadertools"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt 3D"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtimageformats {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            a95630b7d6b920d22a3726b8607690359a724e83
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            0aff58062e74b84617c5da8325d8cdad5368d8f4d2a11ceafcd58329fe99b798
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            1962440
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "path:lib/pkgconfig/jasper.pc:jasper port:libmng port:tiff port:webp"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt Image Formats"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtserialbus {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            0f962f4b8152df25f8d66eb24b4c41c7bb7f8c10
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            b6446a7516d1f04e561c00f9c50ce4d39dad72150f067722ba759f00b4b34366
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            381036
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase qtserialport"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt Serial Bus"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtserialport {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            9dcb75b488458cc4a07999ce5768839e00018300
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            5f97ad9067efa39a8a2a39fbbc1e03d2191f305733d9c2f3060f8017ecfc95de
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            319400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt Serial Port"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtwebsockets {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            7ac6871f10d33b08abd745d5c0cebaac45a745bd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            de27357eb55c5e83ae560371d7f76b36b5b2ba85caf8965c527f1d5d4b8d458f
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            267624
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase qtdeclarative"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt WebSockets"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtwebchannel {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            5cc690a6fa4e1449b2e496a868522a922023bb5f
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            e955044587f0e74a64c88bbbe4d6be9fd869ac89d66a96cce4752756bcbef3a8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            213316
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase qtdeclarative qtwebsockets"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt WebChannel"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtwebengine {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            80e059ab1380234fa324888d9b1c3c4009c908c8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            55f85af736a1dc79a41b8d95014ba27d8fce0be44293a69e64fece7fa12b2925
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            440562844
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "path:bin/node:nodejs20 port:python${python_version} port:py${python_version}-html5lib"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "port:re2 path:lib/pkgconfig/icu-uc.pc:icu port:webp \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            port:libopus path:lib/libavcodec.dylib:ffmpeg path:lib/pkgconfig/vpx.pc:libvpx \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            port:snappy path:lib/pkgconfig/glib-2.0.pc:glib2 port:zlib port:minizip port:libevent \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            port:libxml2 port:libxslt port:lcms2 port:libpng path:include/turbojpeg.h:libjpeg-turbo \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            path:lib/pkgconfig/harfbuzz.pc:harfbuzz port:freetype port:pciutils port:pulseaudio"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtdeclarative qtwebchannel qttools qtpositioning"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt WebEngine Qt" "Qt PDF"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 6"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtwebview {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            7d53b1a1189db57431daf83e21d6a33eca0945f7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            51951770495e142d8952827b4e1d28565d2cb00fce652dae6eddd9425cf3e843
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            139820
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtdeclarative qtwebengine"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt WebView"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtcharts {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            991ea524f2d8b66ce5bee6570cb186c573d963a7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            4a61e4f5ffb55df69fc58f88255aabca44fb51935b180c03ab81e098d437c346
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            4386856
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase qtdeclarative qtmultimedia"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt Charts"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "GPLv3 license only"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: {GPL-3 OpenSSLException}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtdatavis3d {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            2f8650abed7a1c7bd984275856c5fd6ea85b137a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            c978ac5db663560b8071ddf62e7d7e82e0c01d109d9292171f5589ce5e787995
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            5216376
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase qtdeclarative qtmultimedia"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt Data Visualization"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "GPLv3 license only"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: {GPL-3 OpenSSLException}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtvirtualkeyboard {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            53c7929d232eeee86ba89d28381e80401c2022b1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            3f4685226f5b00e65c8b304a47dd96c7d9b843649fba6e75421d055825de0ee5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            3723096
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "port:hunspell"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase qtdeclarative qtsvg qtmultimedia"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt Virtual Keyboard"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "GPLv3 license only"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: {GPL-3 OpenSSLException}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtscxml {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            25d44a78d1eb9e3efa4492823d3c126e85b51c1f
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            fe722c016d434c02e713e3c7d5d4a845998efe69d8b645923e83f1f4f7b72f3a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            1783744
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase qtdeclarative"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt SCXML"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtspeech {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            365368ee5fe0e50a8fe374d39a8a6323dbfbb995
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            79e0d0195e0a061d384a46eef96ca604e3814043d1a9903f63b3cfc985254ae2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            219444
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "port:flite"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase qtdeclarative qtmultimedia"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt TextToSpeech"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtnetworkauth {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            88985827d6cab812578506e59cb085717f80d79a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            4d115ba572f4b8c8fbb64f4c26a40723556d252bd337a643f2266f19c7716ae5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            145000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt Network Authorization"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "GPLv3 license only"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: {GPL-3 OpenSSLException}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtremoteobjects {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            abb63a30db6d355274412817c565305d852ff567
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            9c9447df79cba249191d8628b6a6910658a7882d14114977f5d69c69440c186a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            366136
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase qtdeclarative"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt Remote Objects"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtlottie {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            b2a3b0a303a549388c838720fb93bc4c356ece4f
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ff6c52e04566ecadee351eb3b803237bf07d417e4bb27d2122a5879618f1693d
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            91844
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase qtdeclarative"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt Lottie Animation"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "GPLv3 license only"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: {GPL-3 OpenSSLException}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtquicktimeline {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            387c316629a5c555f1e3719959a70619d6f8e5c6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            3808c447c3a3af98c797f12f38d3c371c628c35d34123ce7a7e1f580e55e3da5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            113348
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase qtdeclarative"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt Quick Timeline"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "GPLv3 license only"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: {GPL-3 OpenSSLException}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtquick3d {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            17030605c5065bd1a481f8495f11f50599a47cb4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            78a38d565d449b939ffd1b30cacd5ba3e1b97c7a8c0a02fefc810ed5d4dc8050
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            44048520
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "port:assimp"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase qtdeclarative qtshadertools"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt Quick 3D"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "GPLv3 license only"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: {GPL-3 OpenSSLException}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtshadertools {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            488113b3273e2ec486abba0a5495a5916ff80575
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            c648b74ce3e769a20bd62792a589c540bceacfedf2f38fc7273d2c39782768f8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            1001780
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt Shader Tools"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qt5compat {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            53ae2a93d8568314c696776311650901e563b3c6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            d4b249abb823d575eee9045c24d924ba8d1276e6be7735b287689991d998aa7a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            14638428
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "path:lib/pkgconfig/icu-uc.pc:icu port:libiconv"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase qtdeclarative"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt 5 Core Compatibility APIs"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "status = deprecated"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 2"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtlanguageserver {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            f03552565c952d8c97fc77760966e4b9d6059ef7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            0e881006442e19c7c4a6d229c342cc685142568e2b41f843e73cddf4c3d37975
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            153856
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt Language Server"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "status = preview"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qthttpserver {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            1fbd0194e5be04caa30d2c04cec81e719eda0c58
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            c37adcadc779b972ceecd739717c4cc3b90487c3387c61eaf2aa94daaf30c179
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            121772
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt HTTP Server"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "status = preview; GPLv3 license only"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: {GPL-3 OpenSSLException}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    qtquick3dphysics {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            312ff38521a1ce290aaa0c1f9bc44799ea2ecd4e
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ab86e8a3c44c31082022259375e7984f9955f81e9de2c846cef563c7562ddb15
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            2965840
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "qtbase qtdeclarative qtquick3d qtshadertools"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {"Qt Quick 3D Physics"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "status = preview; GPLv3 license only"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "variant overrides: "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "License: {GPL-3 OpenSSLException}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+############################################################################### SQL Plugin Format
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#     module name
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#     {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#         SQL name
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#         revision string
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#         {list of feature names}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#         {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#             variant name
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#             {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#                 variant name
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#                 library dependencies
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#                 {list of CMake options to find library}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+###############################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+array set sql_plugins {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    sqlite {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        SQLite
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {sql-sqlite system-sqlite}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            sqlite3 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "port:sqlite3"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DSQLite3_INCLUDE_DIR=${prefix}/include
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DSQLite3_LIBRARY=${prefix}/lib/libsqlite3.dylib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    psql {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        PostgreSQL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {sql-psql}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            postgresql15 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "port:postgresql15"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DPostgreSQL_INCLUDE_DIR=${prefix}/include/postgresql15
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DPostgreSQL_TYPE_INCLUDE_DIR=${prefix}/include/postgresql15
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DCMAKE_LIBRARY_PATH=${prefix}/lib/postgresql15
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            postgresql14 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "port:postgresql14"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DPostgreSQL_INCLUDE_DIR=${prefix}/include/postgresql14
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DPostgreSQL_TYPE_INCLUDE_DIR=${prefix}/include/postgresql14
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DCMAKE_LIBRARY_PATH=${prefix}/lib/postgresql14
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            postgresql13 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "port:postgresql13"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DPostgreSQL_INCLUDE_DIR=${prefix}/include/postgresql13
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DPostgreSQL_TYPE_INCLUDE_DIR=${prefix}/include/postgresql13
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DCMAKE_LIBRARY_PATH=${prefix}/lib/postgresql13
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            postgresql12 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "port:postgresql12"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DPostgreSQL_INCLUDE_DIR=${prefix}/include/postgresql12
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DPostgreSQL_TYPE_INCLUDE_DIR=${prefix}/include/postgresql12
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DCMAKE_LIBRARY_PATH=${prefix}/lib/postgresql12
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            postgresql11 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "port:postgresql11"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DPostgreSQL_INCLUDE_DIR=${prefix}/include/postgresql11
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DPostgreSQL_TYPE_INCLUDE_DIR=${prefix}/include/postgresql11
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DCMAKE_LIBRARY_PATH=${prefix}/lib/postgresql11
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    mysql {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        MySQL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {sql-mysql}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            mariadb10_11 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "port:mariadb-10.11"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DMySQL_INCLUDE_DIR=${prefix}/include/mariadb-10.11/mysql
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DMySQL_LIBRARY=${prefix}/lib/mariadb-10.11/mysql/libmariadb.dylib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            mariadb10_10 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "port:mariadb-10.10"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DMySQL_INCLUDE_DIR=${prefix}/include/mariadb-10.10/mysql
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DMySQL_LIBRARY=${prefix}/lib/mariadb-10.10/mysql/libmariadb.dylib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            mariadb10_9 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "port:mariadb-10.9"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DMySQL_INCLUDE_DIR=${prefix}/include/mariadb-10.9/mysql
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DMySQL_LIBRARY=${prefix}/lib/mariadb-10.9/mysql/libmariadb.dylib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            mariadb10_8 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "port:mariadb-10.8"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DMySQL_INCLUDE_DIR=${prefix}/include/mariadb-10.8/mysql
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DMySQL_LIBRARY=${prefix}/lib/mariadb-10.8/mysql/libmariadb.dylib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            mariadb10_7 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "port:mariadb-10.7"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DMySQL_INCLUDE_DIR=${prefix}/include/mariadb-10.7/mysql
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DMySQL_LIBRARY=${prefix}/lib/mariadb-10.7/mysql/libmariadb.dylib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            mariadb10_6 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "port:mariadb-10.6"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DMySQL_INCLUDE_DIR=${prefix}/include/mariadb-10.6/mysql
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DMySQL_LIBRARY=${prefix}/lib/mariadb-10.6/mysql/libmariadb.dylib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            mariadb10_5 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "port:mariadb-10.5"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DMySQL_INCLUDE_DIR=${prefix}/include/mariadb-10.5/mysql
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DMySQL_LIBRARY=${prefix}/lib/mariadb-10.5/mysql/libmariadb.dylib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            mariadb10_4 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "port:mariadb-10.6"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DMySQL_INCLUDE_DIR=${prefix}/include/mariadb-10.4/mysql
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DMySQL_LIBRARY=${prefix}/lib/mariadb-10.4/mysql/libmariadb.dylib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            mysql8 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "port:mysql8"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DMySQL_INCLUDE_DIR=${prefix}/include/mysql8/mysql
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DMySQL_LIBRARY=${prefix}/lib/mysql8/mysql/libmysqlclient.dylib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+foreach {module module_info} [array get modules] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    subport ${name}-${module} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        distname                            ${module}-everywhere-src-${version}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        revision                            [regexp -inline {[0-9]+} [lindex ${module_info} 7]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        checksums                           rmd160  [lindex [lindex ${module_info} 0] 0] \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                            sha256  [lindex [lindex ${module_info} 0] 1] \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                            size    [lindex [lindex ${module_info} 0] 2]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set license_string                  [lindex ${module_info} 8]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set license_string                  [string range ${license_string} 1+[string first ":" ${license_string}] end]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set license_string                  [string trim ${license_string}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if { ${license_string} ne "" } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            license                         {*}${license_string}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach deps [lindex ${module_info} 1] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            depends_build-append            [subst ${deps}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach deps [lindex ${module_info} 2] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            depends_lib-append              [subst ${deps}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach qtdeps [lindex ${module_info} 3] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            depends_lib-append              port:${name}-${qtdeps}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        description                         Tools and Module(s) for Qt Tool Kit ${qt_major}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set modules_provided_list           [lindex ${module_info} 4]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if { [llength ${modules_provided_list}] == 1 } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set modules_provided_join       [lindex ${modules_provided_list} 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } elseif { [llength ${modules_provided_list}] == 2 } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set modules_provided_join       [join ${modules_provided_list} " and "]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set modules_provided_join       [join [list [join [lrange ${modules_provided_list} 0 end-1] ", "] [lindex ${modules_provided_list} end]] ", and "]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        long_description                    Tools and Module(s) for Qt Tool Kit ${qt_major}: ${modules_provided_join}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if { [lsearch -exact [lindex ${module_info} 6] "~universal"] != -1 } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            universal_variant               no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if { [lsearch -exact [lindex ${module_info} 6] "noarch"] != -1 } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            supported_archs                 noarch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            platforms                       any
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if { [lsearch -exact [lindex ${module_info} 6] "~debug"] == -1 } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # debugging seems to be turned on if and only if it is turned on in the base
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # CMAKE_CONFIGURATION_TYPES is set with the FORCE option
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # see https://code.qt.io/cgit/qt/qtbase.git/tree/cmake/QtPostProcessHelpers.cmake
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            variant debug description {Build both release and debug libraries} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                require_active_variants     qt6-qtbase debug ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {![variant_isset debug]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                require_active_variants     qt6-qtbase "" debug
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if { [lsearch -exact [lindex ${module_info} 6] "~examples"] == -1 } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            variant examples description {Build examples} {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if { [lsearch -exact [lindex ${module_info} 6] "~tests"] == -1 } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            variant tests description {Enable tests} {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+foreach {module module_info} [array get modules] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if { [lsearch -exact [lindex ${module_info} 6] "~docs"] != -1 } { continue }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    subport ${name}-${module}-docs {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        distname                            ${module}-everywhere-src-${version}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        revision                            [regexp -inline {[0-9]+} [lindex ${module_info} 7]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        checksums                           rmd160  [lindex [lindex ${module_info} 0] 0] \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                            sha256  [lindex [lindex ${module_info} 0] 1] \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                            size    [lindex [lindex ${module_info} 0] 2]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set license_string                  [lindex ${module_info} 8]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set license_string                  [string range ${license_string} 1+[string first ":" ${license_string}] end]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set license_string                  [string trim ${license_string}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if { ${license_string} ne "" } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            license                         {*}${license_string}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        depends_build-append                port:${name}-qttools \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                            port:${name}-sqlite-plugin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # have the same build dependencies
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach deps [lindex ${module_info} 1] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            depends_build-append [subst ${deps}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        depends_lib-append                  port:${name}-${module}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        description                         Documentation for Qt Tool Kit ${qt_major}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set modules_provided_list           [lindex ${module_info} 4]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if { [llength ${modules_provided_list}] == 1 } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set modules_provided_join       [lindex ${modules_provided_list} 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } elseif { [llength ${modules_provided_list}] == 2 } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set modules_provided_join       [join ${modules_provided_list} " and "]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set modules_provided_join       [join [list [join [lrange ${modules_provided_list} 0 end-1] ", "] [lindex ${modules_provided_list} end]] ", and "]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        long_description                    Documentation for Qt Tool Kit ${qt_major}: ${modules_provided_join}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        supported_archs                     noarch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        platforms                           any
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# see https://doc.qt.io/qt-6/sql-driver.html for info on building SQL Database Drivers
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+foreach {driver driver_info} [array get sql_plugins] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set dbms                                [lindex ${driver_info} 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set revision_string                     [string trim [lindex ${driver_info} 1]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set revision_string                     [string range ${revision_string} 1+[string last " " ${revision_string}] end]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set sql_variants                        [lindex ${driver_info} 3]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    subport ${name}-${driver}-plugin {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        distname                            qtbase-everywhere-src-${version}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        revision                            ${revision_string}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        checksums                           rmd160  [lindex [lindex $modules(qtbase) 0] 0] \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                            sha256  [lindex [lindex $modules(qtbase) 0] 1] \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                            size    [lindex [lindex $modules(qtbase) 0] 2]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        depends_lib-append                  port:${name}-qtbase
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        description                         ${dbms} Database Driver for Qt Tool Kit ${qt_major}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        long_description                    ${dbms} Database Driver for Qt Tool Kit ${qt_major}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach feature {sql-db2 sql-ibase sql-mysql sql-oci sql-odbc sql-psql sql-sqlite system-sqlite} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if { ${feature} in [lindex ${driver_info} 2] } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                configure.args-append       -feature-${feature}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                configure.args-append       -no-feature-${feature}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set worksrcpath                     ${worksrcpath}/src/plugins/sqldrivers
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set any_sql                         no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach {variant_name variant_info} ${sql_variants} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set conflict_list ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            foreach {variant_name_other variant_info_other} ${sql_variants} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if { ${variant_name_other} ne ${variant_name} } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    lappend conflict_list   ${variant_name_other}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if { [llength ${conflict_list}] > 0 } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                variant ${variant_name} conflicts {*}${conflict_list} description "use version [regexp -inline {[0-9].} ${variant_name}] of ${dbms}" {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if { ([variant_exists ${variant_name}] && [variant_isset ${variant_name}]) || [llength ${conflict_list}]==0 } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set any_sql                 yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if { !${any_sql} } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            default_variants-append         +[lindex ${sql_variants} 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if { ![variant_isset [lindex ${sql_variants} 0]] } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                known_fail                  yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                pre-extract {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ui_error                "At least one SQL variant must be selected."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    return -code error      "No SQL variant selected."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach {variant_name variant_info} ${sql_variants} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if { ([variant_exists ${variant_name}] && [variant_isset ${variant_name}]) || [llength ${conflict_list}]==0 } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                depends_lib-append          {*}[lindex ${variant_info} 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                configure.post_args-append  {*}[subst [lindex ${variant_info} 1]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+###############################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Special Cases
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+###############################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+subport ${name}-qtdeclarative {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    patchfiles-append               patch-qtdeclarative-xcode11.3.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+subport ${name}-qttools {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.env-append            LLVM_INSTALL_DIR=${prefix}/libexec/llvm-${llvm_version}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    post-destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # avoid having to add `-Wl,-rpath ${prefix}/libexec/llvm-${llvm_version}/lib` or something like it
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach bin {lupdate qdoc} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            foreach lib {libclang.dylib libclang-cpp.dylib libLLVM.dylib} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                system              "install_name_tool -change @rpath/${lib} ${prefix}/libexec/llvm-${llvm_version}/lib/${lib} ${destroot}${qt6.dir}/bin/${bin}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if { ${subport} in [list "${name}-qtwebengine" "${name}-qtwebengine-docs"] } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.env-append            PYTHON3_PATH=${prefix}/Library/Frameworks/Python.framework/Versions/${python_branch}/bin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # in ${worksrcpath}, `${qt6.dir}/bin/qt-configure-module . -help` and `${qt6.dir}/bin/qt-configure-module . -list-features`
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # it is not clear why, but icu and ffmpeg support must be added manually
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # native-spellchecker support is off by default
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # support for proprietary codecs could by added via `-webengine-proprietary-codecs`
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.args-append           -webengine-icu \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -webengine-ffmpeg \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -webengine-native-spellchecker
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # avoid
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #     xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #     directory '/Library/Developer/CommandLineTools' is a command line tools
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #     instance
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    use_xcode                       yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+subport ${name}-qtwebengine {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # manually install icudtl.dat
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    post-destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        xinstall -m 644 ${worksrcpath}/src/3rdparty/chromium/third_party/icu/common/icudtl.dat \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        ${destroot}${qt6.dir}/lib/QtWebEngineCore.framework/Resources/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+subport ${name}-qtmultimedia {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    patchfiles-append               patch-qtmultimedia-macos_10.14_sdk.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # GStreamer will be found if gstreamer1 and gstreamer1-gst-plugins-base are installed
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # however, an error will ensue since the GStreamer support requires "Linux DMA buffer support"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # see
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #     https://code.qt.io/cgit/qt/qtmultimedia.git/tree/src/plugins/multimedia/gstreamer/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #     https://code.qt.io/cgit/qt/qtmultimedia.git/tree/src/multimedia/configure.cmake
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.args-append           -no-gstreamer
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # std::unary_function removed in Xcode clang 15
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    patchfiles-append patch-qtmultimedia_no_std_unary_function.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+subport ${name}-qt5compat {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    patchfiles-append               patch-qt5compat-find_libs.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+subport ${name}-qtsvg {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    patchfiles-append               CVE-2023-32573-qtsvg.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+subport ${name}-qtspeech {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    patchfiles-append               patch-qtspeech-macos_10.14_sdk.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # ALSA is Linux only (https://www.alsa-project.org/wiki/Main_Page)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Speech Dispatcher *might* be made to work on macOS (https://freebsoft.org/speechd)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.args-append           -no-flite-alsa \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -no-speechd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+subport ${name}-qtpositioning {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    patchfiles-append               patch-qtpositioning-macos_10.14_sdk.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if { ${subport} eq "${name}-qtbase" || ${subport} eq "${name}-qtbase-docs" } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    patchfiles-append {*}{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    CVE-2023-32762-qtbase.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    CVE-2023-32763-qtbase.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    CVE-2023-33285-qtbase.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    CVE-2023-37369-qtbase.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    CVE-2023-38197-qtbase.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    CVE-2023-51714-qtbase.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    CVE-2024-25580-qtbase.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # allow building with macOS 10.14 SDK
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # see https://trac.macports.org/ticket/64345
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    patchfiles-append               patch-qtbase-macos_10.14_sdk.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # error: no matching function for call to '_mm256_maskz_cvtps_ph'
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # note: candidate function not viable: requires 2 arguments, but 3 were provided
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # see https://trac.macports.org/ticket/67802
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    patchfiles-append               patch-qtbase-intel_intrinsics.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # see https://trac.macports.org/ticket/68204
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    patchfiles-append               qtbase-qmake-xcode-15.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # see https://trac.macports.org/ticket/67980
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    patchfiles-append               patch-qtbase-memory_resource.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Fixes deploying application libraries with .so extension.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # glib gio modules, this also applies to gstreamer since macports
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # currently uses an older version of gstreamer which uses .so
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # extensions for plugins.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # see https://codereview.qt-project.org/c/qt/qtbase/+/507393
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    patchfiles-append               patch-qtbase-macdeployqt.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # see https://trac.macports.org/ticket/68713
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    patchfiles-append               patch-qtbase-fix-cmake-3.28.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.pre_args-replace      --prefix=${prefix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    "-prefix ${qt6.dir}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # configure options:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.args-append           -opensource \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -confirm-license \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -shared \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -accessibility
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # SQL Options
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach driver {db2 ibase mysql oci odbc psql sqlite} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        configure.args-append       -no-sql-${driver}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # use -Oz instead of -O2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.args-append           -optimize-size
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.args-append           -no-testcocoon \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -pkg-config
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Third Party Libraries:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.args-append           -system-zlib \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -no-mtdev \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -no-journald \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -no-syslog \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -system-libpng \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -system-libjpeg \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -system-freetype \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -system-harfbuzz \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -system-pcre \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -no-openssl \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -no-libproxy \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -glib \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -no-gtk
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # additional options:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.args-append           {-make tools} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    {-nomake examples} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    {-nomake tests} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -gui \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -widgets \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -cups \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -no-evdev \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -no-tslib \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -icu \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -no-fontconfig \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -no-pch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -no-ltcg \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -dbus-linked \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -no-use-gold-linker \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -no-separate-debug-info \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -no-xcb \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -no-eglfs \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -no-gbm \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -no-directfb \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -no-linuxfb \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -no-kms \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -no-libinput \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -no-system-proxies \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -no-libudev \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -no-egl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # macOS/iOS options:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.args-append           -framework \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -securetransport
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # do not opportunistically enable Vulkan support
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # (TODO: is Vulkan support desirable?)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # see https://trac.macports.org/ticket/62104
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.args-append           -no-feature-vulkan
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # attempt to avoid @rpath
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.args-append           -no-rpath \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -no-feature-relocatable
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+subport ${name}-qtbase {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # this subport uses configure script
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    PortGroup                       openssl 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    build.cmd                       ninja
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    build.post_args-append          -v
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    destroot.target                 install
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    variant tests description {Enable tests} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        configure.args-replace      {-nomake tests} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    {-make tests}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    variant examples description {Build examples} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        configure.args-replace      {-nomake examples} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    {-make examples}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    variant debug description {Build both release and debug libraries} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        configure.args-replace      -release \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -debug-and-release
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    variant openssl description {Use OpenSSL instead of Secure Transport} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        configure.args-delete       -securetransport \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -no-openssl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        configure.args-append       -openssl-linked
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # configure has issues locating openssl files
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        configure.pre_args-append   -DOPENSSL_ROOT_DIR=[openssl::install_area] \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -DOPENSSL_INCLUDE_DIR=[openssl::include_dir] \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -DOPENSSL_LIBRARIES=[openssl::install_area]/lib \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -DOPENSSL_LIBS='-L[openssl::install_area]/lib -lssl -lcrypto'
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    default_variants-append         +openssl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    post-destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # do not record  __qt_initial_c_compiler and __qt_initial_cxx_compiler
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        reinplace                   "s|${configure.cc}|/usr/bin/clang|g" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    ${destroot}${qt6.dir}/lib/cmake/Qt6/qt.toolchain.cmake
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        reinplace                   "s|${configure.cxx}|/usr/bin/clang++|g" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    ${destroot}${qt6.dir}/lib/cmake/Qt6/qt.toolchain.cmake
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # return to default value of CMAKE_OSX_DEPLOYMENT_TARGET
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        #reinplace                   "s|CMAKE_OSX_DEPLOYMENT_TARGET \"${macosx_deployment_target}\"|CMAKE_OSX_DEPLOYMENT_TARGET \"10.14\"|g" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        #                            ${destroot}${qt6.dir}/lib/cmake/Qt6/qt.toolchain.cmake
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # do not record QT_SOURCE_TREE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        reinplace                   "s|${worksrcpath}|${qt6.dir}/src|g" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    ${destroot}${qt6.dir}/lib/cmake/Qt6BuildInternals/QtBuildInternalsExtra.cmake
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # do not record original_cmake_path
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        reinplace                   "s|${prefix}/bin/cmake|/Applications/CMake.app/Contents/bin/cmake|g" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    ${destroot}${qt6.dir}/bin/qt-cmake
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        reinplace                   "s|${prefix}/bin/cmake|/Applications/CMake.app/Contents/bin/cmake|g" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    ${destroot}${qt6.dir}/bin/qt-cmake-private
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if { "${qt6.dir}" ne "${prefix}" } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # Add dummy cmake find modules that forward to the real ones
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            file mkdir "${destroot}${prefix}/lib/cmake/Qt6"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            foreach configfile [list "Qt6Config.cmake" "Qt6ConfigVersion.cmake"] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set fd [open "${destroot}${prefix}/lib/cmake/Qt6/${configfile}" "w"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                puts $fd "set(_PREFIX_PATH_BAK \${CMAKE_PREFIX_PATH})"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                puts $fd "list(APPEND CMAKE_PREFIX_PATH \"${qt6.dir}\")"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                puts $fd "include(\"${qt6.dir}/lib/cmake/Qt6/${configfile}\")"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                puts $fd "set(CMAKE_PREFIX_PATH \${_PREFIX_PATH_BAK})"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                close $fd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Qt builds part of the system using environment provided by MacPorts.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # It builds the rest using its own internal environment.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # For consistency, clear MacPorts environment.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.cxx_stdlib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    proc portconfigure::should_add_stdlib {} { return false }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.sdkroot
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.cc_archflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.cxx_archflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.objc_archflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.objcxx_archflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.ld_archflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.cppflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.cflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.cxxflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.objcflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.objcxxflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.ldflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.pipe                  no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.march
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.mtune
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.universal_ldflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.universal_cflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.universal_cxxflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.universal_cppflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+subport ${name}-qtbase-docs {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # see https://wiki.qt.io/Building_Qt_Documentation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    build.cmd                      cmake --build ${build.dir}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    destroot.target
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    build.target                   --target docs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    destroot.cmd                   cmake --build ${build.dir} --target install_docs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+###############################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Applies to allmost all modules
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+###############################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if { ${subport} ne "${name}" && ${subport} ne "${name}-qtbase" && ${subport} ne "${name}-qtbase-docs" } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # attempting to match module configure instructions from here: https://www.qt.io/blog/qt-6-build-system
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.cmd                   ${qt6.dir}/bin/qt-configure-module
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.dir                   ${workpath}/build
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.pre_args              ${worksrcpath}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.args-append           -verbose
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    build.dir                       ${workpath}/build
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    build.cmd                       cmake --build ${build.dir}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    destroot.target
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if { [lindex [split ${subport} -] end] ne "docs" } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        build.target
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        destroot.cmd               cmake --install ${build.dir}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        build.target               --target docs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        destroot.cmd               cmake --build ${build.dir} --target install_docs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if { [variant_exists examples] } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        configure.post_args-append  -DQT_BUILD_EXAMPLES=[expr {[variant_isset examples] ? ON : OFF}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if { [variant_exists tests] } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        configure.post_args-append  -DQT_BUILD_TESTS=[expr {[variant_isset tests] ? ON : OFF}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+###############################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Applies to all subports except ${name}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#     this code may depend on the subport specific code (e.g., configure.cc)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+###############################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+depends_build-append                path:bin/cmake:cmake \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    port:ninja \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    port:pkgconfig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# because CPATH is set, pkgconfig does not include ${prefix}/lib and ${prefix}/include even when requested
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# this means that files in ${prefix}/lib and ${prefix}/include are the *last* to be found
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# this causes problems when there are files in ${worksrpath} that are unintentionally found instead
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.env-append                PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    PKG_CONFIG_ALLOW_SYSTEM_LIBS=1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+build.env-append                    PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    PKG_CONFIG_ALLOW_SYSTEM_LIBS=1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.universal_args
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test.cmd                            ctest
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test.args                           -V
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test.target
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# ninja needs the DESTDIR argument in the environment
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+destroot.destdir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+destroot.env-append                 DESTDIR=${destroot}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# set CMake variables (similar to what cmake PortGroup does)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# to allow using ccache and controlling compiler selection
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.post_args-prepend         --
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.post_args-append          -DCMAKE_C_COMPILER=[option configure.cc] \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -DCMAKE_CXX_COMPILER=[option configure.cxx] \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -DCMAKE_OBJC_COMPILER=[option configure.objc] \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -DCMAKE_OBJCXX_COMPILER=[option configure.objcxx] \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -DCMAKE_OSX_DEPLOYMENT_TARGET=${macosx_deployment_target}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if { ${configure.ccache} } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if { ${subport} ne "${name}-qtbase" } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        configure.post_args-append  -DQT_USE_CCACHE=ON
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # do not use `configure.args-append -ccache`
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # or `configure.post_args-append -DQT_USE_CCACHE=1`
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # since that affects installed files.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        configure.post_args-append  -DCMAKE_C_COMPILER_LAUNCHER=${prefix}/bin/ccache \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -DCMAKE_CXX_COMPILER_LAUNCHER=${prefix}/bin/ccache \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -DCMAKE_OBJC_COMPILER_LAUNCHER=${prefix}/bin/ccache \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    -DCMAKE_OBJCXX_COMPILER_LAUNCHER=${prefix}/bin/ccache
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test.run                            [expr {[variant_exists tests] && [variant_isset tests] ? yes : no}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if { ${universal_possible} && [variant_isset universal] } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.post_args-append      -DCMAKE_OSX_ARCHITECTURES="[join ${configure.universal_archs} \;]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} elseif { ${configure.build_arch} ne ""  } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.post_args-append      -DCMAKE_OSX_ARCHITECTURES="${configure.build_arch}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# attempt to avoid @rpath
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.post_args-append          -DCMAKE_INSTALL_NAME_DIR=${qt6.dir}/lib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+post-destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    fs-traverse f ${destroot} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if { [file isfile ${f}] && [file extension ${f}] eq ".prl" } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # do not record build directory
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            reinplace -q            "/^QMAKE_PRL_BUILD_DIR = /d" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    ${f}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # .app and non-.app programs are both put in ${qt6.dir}/bin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # put a link of any .app programs in the ${applications_dir}/Qt6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    xinstall -d -m 0755             ${destroot}${applications_dir}/Qt6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach app [glob -nocomplain -tails -directory ${destroot}${qt6.dir}/bin *.app] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ln -s                       ${qt6.dir}/bin/${app} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    ${destroot}${applications_dir}/Qt6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+livecheck.type                      none
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+###############################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Special Case: must be near the end since it undoes other code
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+###############################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+subport ${name} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # the main port is Meta-port to install various modules
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    revision                        0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    description                     Qt Tool Kit ${qt_major}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    long_description                Qt Tool Kit: A cross-platform framework \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    (headers, data, and libraries) for writing \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    cross-platform GUI-based applications.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    master_sites
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    distfiles
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    use_configure                   no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    supported_archs                 noarch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    platforms                       any
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    installs_libs                   no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    test.run                        no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    depends_extract
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    depends_build
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    depends_lib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    depends_test
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    build                           {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # create a dummy file so the port can be successfully activated
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        xinstall -d -m 0755         ${destroot}${prefix}/share/doc/${subport}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set docfile                 [open ${destroot}${prefix}/share/doc/${subport}/README.txt "w"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts ${docfile}             "Meta-port for ${name}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts ${docfile}             "${long_description}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        close ${docfile}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach {module module_info} [array get modules] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if { [lindex ${module_info} 5] eq "" } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            depends_run-append      port:${name}-${module}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    depends_run-append              port:${name}-sqlite-plugin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    livecheck.type                  regex
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    livecheck.url                   https://download.qt.io/archive/qt/${branch}/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    livecheck.regex                 (\\d+(\\.\\d+)+)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt64/files/CVE-2023-32573-qtsvg.diff b/aqua/qt64/files/CVE-2023-32573-qtsvg.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..4e9fe95bd4f
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt64/files/CVE-2023-32573-qtsvg.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,37 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ src/svg/qsvgfont_p.h    |    5 ++---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ src/svg/qsvghandler.cpp |    2 +-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 2 files changed, 3 insertions(+), 4 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/svg/qsvgfont_p.h.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/svg/qsvgfont_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -38,6 +38,7 @@ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ class Q_SVG_PRIVATE_EXPORT QSvgFont : public QSvgRefCounted
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    static constexpr qreal DEFAULT_UNITS_PER_EM = 1000;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     QSvgFont(qreal horizAdvX);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     void setFamilyName(const QString &name);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -50,9 +51,7 @@ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     void draw(QPainter *p, const QPointF &point, const QString &str, qreal pixelSize, Qt::Alignment alignment) const;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     QString m_familyName;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    qreal m_unitsPerEm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    qreal m_ascent;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    qreal m_descent;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    qreal m_unitsPerEm = DEFAULT_UNITS_PER_EM;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     qreal m_horizAdvX;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     QHash<QChar, QSvgGlyph> m_glyphs;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/svg/qsvghandler.cpp.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/svg/qsvghandler.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2622,7 +2622,7 @@ static bool parseFontFaceNode(QSvgStyleP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     qreal unitsPerEm = toDouble(unitsPerEmStr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (!unitsPerEm)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        unitsPerEm = 1000;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        unitsPerEm = QSvgFont::DEFAULT_UNITS_PER_EM;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (!name.isEmpty())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         font->setFamilyName(name);
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt64/files/CVE-2023-32762-qtbase.diff b/aqua/qt64/files/CVE-2023-32762-qtbase.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..2d707fdb5c1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt64/files/CVE-2023-32762-qtbase.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,13 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/network/access/qhsts.cpp.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/network/access/qhsts.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -364,8 +364,8 @@ quoted-pair    = "\" CHAR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool QHstsHeaderParser::parse(const QList<QPair<QByteArray, QByteArray>> &headers)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     for (const auto &h : headers) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        // We use '==' since header name was already 'trimmed' for us:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        if (h.first == "Strict-Transport-Security") {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        // We compare directly because header name was already 'trimmed' for us:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (h.first.compare("Strict-Transport-Security", Qt::CaseInsensitive) == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             header = h.second;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             // RFC6797, 8.1:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             //
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt64/files/CVE-2023-32763-qtbase.diff b/aqua/qt64/files/CVE-2023-32763-qtbase.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..858292eab21
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt64/files/CVE-2023-32763-qtbase.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,55 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/gui/painting/qfixed_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/gui/painting/qfixed_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -18,6 +18,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <QtGui/private/qtguiglobal_p.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "QtCore/qdebug.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "QtCore/qpoint.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include "QtCore/qnumeric.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "QtCore/qsize.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ QT_BEGIN_NAMESPACE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -136,6 +137,22 @@ constexpr inline QFixed operator+(uint i, QFixed d) { return d+i; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ constexpr inline QFixed operator-(uint i, QFixed d) { return -(d-i); }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // constexpr inline QFixed operator*(qreal d, QFixed d2) { return d2*d; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++inline bool qAddOverflow(QFixed v1, QFixed v2, QFixed *r)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    int val;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    bool result = qAddOverflow(v1.value(), v2.value(), &val);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    r->setValue(val);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return result;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++inline bool qMulOverflow(QFixed v1, QFixed v2, QFixed *r)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    int val;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    bool result = qMulOverflow(v1.value(), v2.value(), &val);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    r->setValue(val);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return result;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifndef QT_NO_DEBUG_STREAM
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ inline QDebug &operator<<(QDebug &dbg, QFixed f)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { return dbg << f.toReal(); }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/gui/text/qtextlayout.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/gui/text/qtextlayout.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2105,11 +2105,14 @@ found:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         eng->maxWidth = qMax(eng->maxWidth, line.textWidth);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         eng->minWidth = qMax(eng->minWidth, lbh.minw);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        eng->maxWidth += line.textWidth;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (qAddOverflow(eng->maxWidth, line.textWidth, &eng->maxWidth))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            eng->maxWidth = QFIXED_MAX;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (line.textWidth > 0 && item < eng->layoutData->items.size())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        eng->maxWidth += lbh.spaceData.textWidth;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (line.textWidth > 0 && item < eng->layoutData->items.size()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (qAddOverflow(eng->maxWidth, lbh.spaceData.textWidth, &eng->maxWidth))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            eng->maxWidth = QFIXED_MAX;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     line.textWidth += trailingSpace;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (lbh.spaceData.length) {
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt64/files/CVE-2023-33285-qtbase.diff b/aqua/qt64/files/CVE-2023-33285-qtbase.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..2ff50916667
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt64/files/CVE-2023-33285-qtbase.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,70 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://codereview.qt-project.org/c/qt/qtbase/+/477644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/network/kernel/qdnslookup_unix.cpp.orig    2023-04-24 08:43:14
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/network/kernel/qdnslookup_unix.cpp 2023-06-07 08:58:04
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -227,7 +227,6 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // responseLength in case of error, we still can extract the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // exact error code from the response.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     HEADER *header = (HEADER*)response;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    const int answerCount = ntohs(header->ancount);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     switch (header->rcode) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     case NOERROR:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -260,18 +259,31 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    // Skip the query host, type (2 bytes) and class (2 bytes).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     char host[PACKETSZ], answer[PACKETSZ];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     unsigned char *p = response + sizeof(HEADER);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    int status = local_dn_expand(response, response + responseLength, p, host, sizeof(host));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (status < 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    int status;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (ntohs(header->qdcount) == 1) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        // Skip the query host, type (2 bytes) and class (2 bytes).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        status = local_dn_expand(response, response + responseLength, p, host, sizeof(host));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (status < 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            reply->error = QDnsLookup::InvalidReplyError;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            reply->errorString = tr("Could not expand domain name");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if ((p - response) + status + 4 >= responseLength)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            header->qdcount = 0xffff;   // invalid reply below
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            p += status + 4;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (ntohs(header->qdcount) > 1) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         reply->error = QDnsLookup::InvalidReplyError;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        reply->errorString = tr("Could not expand domain name");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        reply->errorString = tr("Invalid reply received");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    p += status + 4;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // Extract results.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    const int answerCount = ntohs(header->ancount);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     int answerIndex = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     while ((p < response + responseLength) && (answerIndex < answerCount)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         status = local_dn_expand(response, response + responseLength, p, host, sizeof(host));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -283,6 +296,11 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         const QString name = QUrl::fromAce(host);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         p += status;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if ((p - response) + 10 > responseLength) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            // probably just a truncated reply, return what we have
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         const quint16 type = (p[0] << 8) | p[1];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         p += 2; // RR type
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         p += 2; // RR class
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -290,6 +308,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         p += 4;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         const quint16 size = (p[0] << 8) | p[1];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         p += 2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if ((p - response) + size > responseLength)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return;             // truncated
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if (type == QDnsLookup::A) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if (size != 4) {
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt64/files/CVE-2023-37369-qtbase.diff b/aqua/qt64/files/CVE-2023-37369-qtbase.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..743785f0cf9
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt64/files/CVE-2023-37369-qtbase.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,189 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/corelib/serialization/qxmlstream.cpp b/src/corelib/serialization/qxmlstream.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 72c33584a98..598b9f0428f 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/corelib/serialization/qxmlstream.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/corelib/serialization/qxmlstream.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1245,7 +1245,9 @@ inline qsizetype QXmlStreamReaderPrivate::fastScanContentCharList()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return n;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-inline qsizetype QXmlStreamReaderPrivate::fastScanName(qint16 *prefix)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// Fast scan an XML attribute name (e.g. "xml:lang").
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++inline QXmlStreamReaderPrivate::FastScanNameResult
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++QXmlStreamReaderPrivate::fastScanName(Value *val)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     qsizetype n = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     uint c;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1253,7 +1255,8 @@ inline qsizetype QXmlStreamReaderPrivate::fastScanName(Value *val)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if (n >= 4096) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             // This is too long to be a sensible name, and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             // can exhaust memory, or the range of decltype(*prefix)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            raiseNamePrefixTooLongError();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return {};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         switch (c) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case '\n':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1282,23 +1285,23 @@ inline qsizetype QXmlStreamReaderPrivate::fastScanName(qint16 *prefix)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case '+':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case '*':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             putChar(c);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            if (prefix && *prefix == n+1) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                *prefix = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (val && val->prefix == n + 1) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                val->prefix = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 putChar(':');
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 --n;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            return n;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return FastScanNameResult(n);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case ':':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            if (prefix) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                if (*prefix == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                    *prefix = qint16(n + 2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (val) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                if (val->prefix == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    val->prefix = n + 2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 } else { // only one colon allowed according to the namespace spec.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     putChar(c);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                    return n;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    return FastScanNameResult(n);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 putChar(c);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                return n;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                return FastScanNameResult(n);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             Q_FALLTHROUGH();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         default:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1307,12 +1310,12 @@ inline int QXmlStreamReaderPrivate::fastScanName(int *prefix)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (prefix)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        *prefix = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (val)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        val->prefix = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     qsizetype pos = textBuffer.size() - n;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     putString(textBuffer, pos);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     textBuffer.resize(pos);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return FastScanNameResult(0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ enum NameChar { NameBeginning, NameNotBeginning, NotName };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1793,6 +1796,14 @@ void QXmlStreamReaderPrivate::raiseWellFormedError(const QString &message)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     raiseError(QXmlStreamReader::NotWellFormedError, message);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++void QXmlStreamReaderPrivate::raiseNamePrefixTooLongError()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // TODO: add a ImplementationLimitsExceededError and use it instead
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    raiseError(QXmlStreamReader::NotWellFormedError,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++               QXmlStream::tr("Length of XML attribute name exceeds implemnetation limits (4KiB "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                              "characters)."));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void QXmlStreamReaderPrivate::parseError()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/corelib/serialization/qxmlstream.g b/src/corelib/serialization/qxmlstream.g
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 81ca36688cd..1b5a682b36a 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/corelib/serialization/qxmlstream.g
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/corelib/serialization/qxmlstream.g
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1419,7 +1419,12 @@ space_opt ::= space;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ qname ::= LETTER;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case $rule_number: {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            sym(1).len += fastScanName(&sym(1).prefix);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            Value &val = sym(1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (auto res = fastScanName(&val))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                val.len += *res;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if (atEnd) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 resume($rule_number);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1430,7 +1435,11 @@ qname ::= LETTER;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ name ::= LETTER;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case $rule_number:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            sym(1).len += fastScanName();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (auto res = fastScanName())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                sym(1).len += *res;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if (atEnd) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 resume($rule_number);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/corelib/serialization/qxmlstream_p.h b/src/corelib/serialization/qxmlstream_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 8f64130d2f9..a277753f188 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/corelib/serialization/qxmlstream_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/corelib/serialization/qxmlstream_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -38,7 +38,7 @@ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     constexpr XmlStringRef() = default;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     constexpr inline XmlStringRef(const QString *string, qsizetype pos, qsizetype length)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        : m_string(string), m_pos(pos), m_size(length)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        : m_string(string), m_pos(pos), m_size((Q_ASSERT(length >= 0), length))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     XmlStringRef(const QString *string)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -471,7 +471,16 @@ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     qsizetype fastScanLiteralContent();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     qsizetype fastScanSpace();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     qsizetype fastScanContentCharList();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    qsizetype fastScanName(qint16 *prefix = nullptr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    struct FastScanNameResult {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        FastScanNameResult() : ok(false) {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        explicit FastScanNameResult(qsizetype len) : addToLen(len), ok(true) { }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        operator bool() { return ok; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        qsizetype operator*() { Q_ASSERT(ok); return addToLen; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        qsizetype addToLen;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        bool ok;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    FastScanNameResult fastScanName(Value *val = nullptr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     inline qsizetype fastScanNMTOKEN();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -480,6 +489,7 @@ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     void raiseError(QXmlStreamReader::Error error, const QString& message = QString());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     void raiseWellFormedError(const QString &message);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    void raiseNamePrefixTooLongError();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     QXmlStreamEntityResolver *entityResolver;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/corelib/serialization/qxmlstreamparser_p.h b/src/corelib/serialization/qxmlstreamparser_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 17558aae641..d67d71ca01d 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/corelib/serialization/qxmlstreamparser_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/corelib/serialization/qxmlstreamparser_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -947,7 +947,12 @@ bool QXmlStreamReaderPrivate::parse()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case 262: {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            sym(1).len += fastScanName(&sym(1).prefix);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            Value &val = sym(1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (auto res = fastScanName(&val))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                val.len += *res;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if (atEnd) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 resume(262);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -955,7 +960,11 @@ bool QXmlStreamReaderPrivate::parse()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         } break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case 263:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            sym(1).len += fastScanName();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (auto res = fastScanName())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                sym(1).len += *res;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if (atEnd) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 resume(263);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 return false;
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt64/files/CVE-2023-38197-qtbase.diff b/aqua/qt64/files/CVE-2023-38197-qtbase.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..4474d87e4c8
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt64/files/CVE-2023-38197-qtbase.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,217 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/corelib/serialization/qxmlstream.cpp b/src/corelib/serialization/qxmlstream.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 598b9f0..885354f 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/corelib/serialization/qxmlstream.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/corelib/serialization/qxmlstream.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -126,7 +126,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     addData() or by waiting for it to arrive on the device().
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     \value UnexpectedElementError The parser encountered an element
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    that was different to those it expected.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    or token that was different to those it expected.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -263,13 +263,34 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   QXmlStreamReader is a well-formed XML 1.0 parser that does \e not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   include external parsed entities. As long as no error occurs, the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  application code can thus be assured that the data provided by the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  stream reader satisfies the W3C's criteria for well-formed XML. For
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  example, you can be certain that all tags are indeed nested and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  closed properly, that references to internal entities have been
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  replaced with the correct replacement text, and that attributes have
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  been normalized or added according to the internal subset of the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  DTD.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  application code can thus be assured, that
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \list
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \li the data provided by the stream reader satisfies the W3C's
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      criteria for well-formed XML,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \li tokens are provided in a valid order.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \endlist
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  Unless QXmlStreamReader raises an error, it guarantees the following:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \list
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \li All tags are nested and closed properly.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \li References to internal entities have been replaced with the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      correct replacement text.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \li Attributes have been normalized or added according to the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      internal subset of the \l DTD.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \li Tokens of type \l StartDocument happen before all others,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      aside from comments and processing instructions.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \li At most one DOCTYPE element (a token of type \l DTD) is present.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \li If present, the DOCTYPE appears before all other elements,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      aside from StartDocument, comments and processing instructions.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \endlist
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  In particular, once any token of type \l StartElement, \l EndElement,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \l Characters, \l EntityReference or \l EndDocument is seen, no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  tokens of type StartDocument or DTD will be seen. If one is present in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  the input stream, out of order, an error is raised.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \note The token types \l Comment and \l ProcessingInstruction may appear
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  anywhere in the stream.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   If an error occurs while parsing, atEnd() and hasError() return
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   true, and error() returns the error that occurred. The functions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -572,6 +593,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         d->token = -1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return readNext();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    d->checkToken();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return d->type;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -691,6 +713,13 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     0, 8, 16, 30, 42, 55, 66, 77, 85, 89, 105, 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static const char QXmlStreamReader_XmlContextString[] =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    "Prolog\0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    "Body\0";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static const short QXmlStreamReader_XmlContextString_indices[] = {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    0, 7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*!
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     \property  QXmlStreamReader::namespaceProcessing
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -727,6 +756,16 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                              QXmlStreamReader_tokenTypeString_indices[d->type]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/*!
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   \internal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   \return \param ctxt (Prolog/Body) as a string.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++QString contextString(QXmlStreamReaderPrivate::XmlContext ctxt)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return QLatin1String(QXmlStreamReader_XmlContextString +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                         QXmlStreamReader_XmlContextString_indices[static_cast<int>(ctxt)]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif // QT_NO_XMLSTREAMREADER
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ QXmlStreamPrivateTagStack::QXmlStreamPrivateTagStack()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -813,6 +852,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     type = QXmlStreamReader::NoToken;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     error = QXmlStreamReader::NoError;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    currentContext = XmlContext::Prolog;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    foundDTD = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3730,6 +3771,91 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static constexpr bool isTokenAllowedInContext(QXmlStreamReader::TokenType type,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                               QXmlStreamReaderPrivate::XmlContext loc)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    switch (type) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QXmlStreamReader::StartDocument:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QXmlStreamReader::DTD:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return loc == QXmlStreamReaderPrivate::XmlContext::Prolog;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QXmlStreamReader::StartElement:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QXmlStreamReader::EndElement:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QXmlStreamReader::Characters:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QXmlStreamReader::EntityReference:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QXmlStreamReader::EndDocument:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return loc == QXmlStreamReaderPrivate::XmlContext::Body;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QXmlStreamReader::Comment:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QXmlStreamReader::ProcessingInstruction:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QXmlStreamReader::NoToken:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QXmlStreamReader::Invalid:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/*!
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   \internal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   \brief QXmlStreamReader::isValidToken
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   \return \c true if \param type is a valid token type.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   \return \c false if \param type is an unexpected token,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   which indicates a non-well-formed or invalid XML stream.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++bool QXmlStreamReaderPrivate::isValidToken(QXmlStreamReader::TokenType type)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // Don't change currentContext, if Invalid or NoToken occur in the prolog
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (type == QXmlStreamReader::Invalid || type == QXmlStreamReader::NoToken)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // If a token type gets rejected in the body, there is no recovery
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    const bool result = isTokenAllowedInContext(type, currentContext);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (result || currentContext == XmlContext::Body)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return result;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // First non-Prolog token observed => switch context to body and check again.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    currentContext = XmlContext::Body;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return isTokenAllowedInContext(type, currentContext);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/*!
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   \internal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   Checks token type and raises an error, if it is invalid
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   in the current context (prolog/body).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++void QXmlStreamReaderPrivate::checkToken()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    Q_Q(QXmlStreamReader);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // The token type must be consumed, to keep track if the body has been reached.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    const XmlContext context = currentContext;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    const bool ok = isValidToken(type);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // Do nothing if an error has been raised already (going along with an unexpected token)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (error != QXmlStreamReader::Error::NoError)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (!ok) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        raiseError(QXmlStreamReader::UnexpectedElementError,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                   QLatin1String("Unexpected token type %1 in %2.")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                   .arg(q->tokenString(), contextString(context)));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (type != QXmlStreamReader::DTD)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // Raise error on multiple DTD tokens
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (foundDTD) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        raiseError(QXmlStreamReader::UnexpectedElementError,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                   QLatin1String("Found second DTD token in %1.").arg(contextString(context)));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        foundDTD = true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*!
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  \fn bool QXmlStreamAttributes::hasAttribute(const QString &qualifiedName) const
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  \since 4.5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/corelib/serialization/qxmlstream_p.h b/src/corelib/serialization/qxmlstream_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index a277753..c33f1cd 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/corelib/serialization/qxmlstream_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/corelib/serialization/qxmlstream_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -270,6 +270,17 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     QStringDecoder decoder;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     bool atEnd;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    enum class XmlContext
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        Prolog,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        Body,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    XmlContext currentContext = XmlContext::Prolog;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    bool foundDTD = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    bool isValidToken(QXmlStreamReader::TokenType type);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    void checkToken();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /*!
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       \sa setType()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      */
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt64/files/CVE-2023-51714-qtbase.diff b/aqua/qt64/files/CVE-2023-51714-qtbase.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..e8ae0dd1215
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt64/files/CVE-2023-51714-qtbase.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,86 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From ea63c28efc1d2ecb467b83a34923d12462efa96f Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Marc Mutz <marc.mutz@qt.io>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Tue, 12 Dec 2023 20:51:56 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] HPack: fix a Yoda Condition
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Putting the variable on the LHS of a relational operation makes the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+expression easier to read. In this case, we find that the whole
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+expression is nonsensical as an overflow protection, because if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+name.size() + value.size() overflows, the result will exactly _not_
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+be > max() - 32, because UB will have happened.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+To be fixed in a follow-up commit.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+As a drive-by, add parentheses around the RHS.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Change-Id: I35ce598884c37c51b74756b3bd2734b9aad63c09
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+(cherry picked from commit 658607a34ead214fbacbc2cca44915655c318ea9)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+(cherry picked from commit 4f7efd41740107f90960116700e3134f5e433867)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+(cherry picked from commit 13c16b756900fe524f6d9534e8a07aa003c05e0c)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+(cherry picked from commit 1d4788a39668fb2dc5912a8d9c4272dc40e99f92)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+(cherry picked from commit 87de75b5cc946d196decaa6aef4792a6cac0b6db)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/network/access/http2/hpacktable.cpp b/src/network/access/http2/hpacktable.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 834214f..ab166a6 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/network/access/http2/hpacktable.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/network/access/http2/hpacktable.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -27,7 +27,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // 32 octets of overhead."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     const unsigned sum = unsigned(name.size() + value.size());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (std::numeric_limits<unsigned>::max() - 32 < sum)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (sum > (std::numeric_limits<unsigned>::max() - 32))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return HeaderSize();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return HeaderSize(true, quint32(sum + 32));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 9ef4ca5ecfed771dab890856130e93ef5ceabef5 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Marc Mutz <marc.mutz@qt.io>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Tue, 12 Dec 2023 22:08:07 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] HPack: fix incorrect integer overflow check
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This code never worked:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+For the comparison with max() - 32 to trigger, on 32-bit platforms (or
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Qt 5) signed interger overflow would have had to happen in the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+addition of the two sizes. The compiler can therefore remove the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+overflow check as dead code.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+On Qt 6 and 64-bit platforms, the signed integer addition would be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+very unlikely to overflow, but the following truncation to uint32
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+would yield the correct result only in a narrow 32-value window just
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+below UINT_MAX, if even that.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Fix by using the proper tool, qAddOverflow.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Pick-to: 5.15
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Change-Id: I7599f2e75ff7f488077b0c60b81022591005661c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+(cherry picked from commit ee5da1f2eaf8932aeca02ffea6e4c618585e29e3)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+(cherry picked from commit debeb8878da2dc706ead04b6072ecbe7e5313860)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Reviewed-by: Marc Mutz <marc.mutz@qt.io>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+(cherry picked from commit 811b9eef6d08d929af8708adbf2a5effb0eb62d7)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+(cherry picked from commit f931facd077ce945f1e42eaa3bead208822d3e00)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/network/access/http2/hpacktable.cpp b/src/network/access/http2/hpacktable.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 7e4950d..897f13a 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/network/access/http2/hpacktable.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/network/access/http2/hpacktable.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -26,7 +26,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // for counting the number of references to the name and value would have
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // 32 octets of overhead."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    const unsigned sum = unsigned(name.size() + value.size());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    size_t sum;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (qAddOverflow(size_t(name.size()), size_t(value.size()), &sum))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return HeaderSize();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (sum > (std::numeric_limits<unsigned>::max() - 32))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return HeaderSize();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return HeaderSize(true, quint32(sum + 32));
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt64/files/CVE-2024-25580-qtbase.diff b/aqua/qt64/files/CVE-2024-25580-qtbase.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..8f24c8c1fcd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt64/files/CVE-2024-25580-qtbase.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,325 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/gui/util/qktxhandler.cpp b/src/gui/util/qktxhandler.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 32ea08144b..f9b4c807c9 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/gui/util/qktxhandler.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/gui/util/qktxhandler.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -41,7 +41,7 @@ struct KTXHeader {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     quint32 bytesOfKeyValueData;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-static const quint32 headerSize = sizeof(KTXHeader);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static constexpr quint32 qktxh_headerSize = sizeof(KTXHeader);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Currently unused, declared for future reference
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ struct KTXKeyValuePairItem {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -71,20 +71,32 @@ struct KTXMipmapLevel {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// Returns the nearest multiple of 'rounding' greater than or equal to 'value'
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-constexpr quint32 withPadding(quint32 value, quint32 rounding)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// Returns the nearest multiple of 4 greater than or equal to 'value'
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static const std::optional<quint32> nearestMultipleOf4(quint32 value)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    Q_ASSERT(rounding > 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    return value + (rounding - 1) - ((value + (rounding - 1)) % rounding);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    constexpr quint32 rounding = 4;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    quint32 result = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (qAddOverflow(value, rounding - 1, &result))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return std::nullopt;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    result &= ~(rounding - 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return result;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// Returns a view with prechecked bounds
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static QByteArrayView safeView(QByteArrayView view, quint32 start, quint32 length)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    quint32 end = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (qAddOverflow(start, length, &end) || end > quint32(view.length()))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return {};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return view.sliced(start, length);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ QKtxHandler::~QKtxHandler() = default;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool QKtxHandler::canRead(const QByteArray &suffix, const QByteArray &block)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     Q_UNUSED(suffix);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    return (qstrncmp(block.constData(), ktxIdentifier, KTX_IDENTIFIER_LENGTH) == 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return block.startsWith(ktxIdentifier);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ QTextureFileData QKtxHandler::read()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -93,55 +95,122 @@ QTextureFileData QKtxHandler::read()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return QTextureFileData();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     const QByteArray buf = device()->readAll();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    const quint32 dataSize = quint32(buf.size());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (dataSize < headerSize || !canRead(QByteArray(), buf)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        qCDebug(lcQtGuiTextureIO, "Invalid KTX file %s", logName().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (buf.size() > std::numeric_limits<quint32>::max()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        qWarning(lcQtGuiTextureIO, "Too big KTX file %s", logName().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return QTextureFileData();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (!canRead(QByteArray(), buf)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        qWarning(lcQtGuiTextureIO, "Invalid KTX file %s", logName().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return QTextureFileData();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    const KTXHeader *header = reinterpret_cast<const KTXHeader *>(buf.data());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (!checkHeader(*header)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        qCDebug(lcQtGuiTextureIO, "Unsupported KTX file format in %s", logName().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (buf.size() < qsizetype(qktxh_headerSize)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        qWarning(lcQtGuiTextureIO, "Invalid KTX header size in %s", logName().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return QTextureFileData();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    KTXHeader header;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    memcpy(&header, buf.data(), qktxh_headerSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (!checkHeader(header)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        qWarning(lcQtGuiTextureIO, "Unsupported KTX file format in %s", logName().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return QTextureFileData();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     QTextureFileData texData;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     texData.setData(buf);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    texData.setSize(QSize(decode(header->pixelWidth), decode(header->pixelHeight)));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    texData.setGLFormat(decode(header->glFormat));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    texData.setGLInternalFormat(decode(header->glInternalFormat));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    texData.setGLBaseInternalFormat(decode(header->glBaseInternalFormat));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    texData.setSize(QSize(decode(header.pixelWidth), decode(header.pixelHeight)));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    texData.setGLFormat(decode(header.glFormat));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    texData.setGLInternalFormat(decode(header.glInternalFormat));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    texData.setGLBaseInternalFormat(decode(header.glBaseInternalFormat));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    texData.setNumLevels(decode(header->numberOfMipmapLevels));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    texData.setNumFaces(decode(header->numberOfFaces));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    texData.setNumLevels(decode(header.numberOfMipmapLevels));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    texData.setNumFaces(decode(header.numberOfFaces));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    const quint32 bytesOfKeyValueData = decode(header->bytesOfKeyValueData);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (headerSize + bytesOfKeyValueData < quint64(buf.size())) // oob check
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        texData.setKeyValueMetadata(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                decodeKeyValues(QByteArrayView(buf.data() + headerSize, bytesOfKeyValueData)));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    quint32 offset = headerSize + bytesOfKeyValueData;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    const quint32 bytesOfKeyValueData = decode(header.bytesOfKeyValueData);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    quint32 headerKeyValueSize;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (qAddOverflow(qktxh_headerSize, bytesOfKeyValueData, &headerKeyValueSize)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        qWarning(lcQtGuiTextureIO, "Overflow in size of key value data in header of KTX file %s",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                 logName().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return QTextureFileData();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (headerKeyValueSize >= quint32(buf.size())) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        qWarning(lcQtGuiTextureIO, "OOB request in KTX file %s", logName().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return QTextureFileData();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // File contains key/values
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (bytesOfKeyValueData > 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        auto keyValueDataView = safeView(buf, qktxh_headerSize, bytesOfKeyValueData);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (keyValueDataView.isEmpty()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            qWarning(lcQtGuiTextureIO, "Invalid view in KTX file %s", logName().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return QTextureFileData();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        auto keyValues = decodeKeyValues(keyValueDataView);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (!keyValues) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            qWarning(lcQtGuiTextureIO, "Could not parse key values in KTX file %s",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                     logName().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return QTextureFileData();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        texData.setKeyValueMetadata(*keyValues);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // Technically, any number of levels is allowed but if the value is bigger than
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // what is possible in KTX V2 (and what makes sense) we return an error.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // maxLevels = log2(max(width, height, depth))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    const int maxLevels = (sizeof(quint32) * 8)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            - qCountLeadingZeroBits(std::max(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    { header.pixelWidth, header.pixelHeight, header.pixelDepth }));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (texData.numLevels() > maxLevels) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        qWarning(lcQtGuiTextureIO, "Too many levels in KTX file %s", logName().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return QTextureFileData();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    constexpr int MAX_ITERATIONS = 32; // cap iterations in case of corrupt data
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (texData.numFaces() != 1 && texData.numFaces() != 6) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        qWarning(lcQtGuiTextureIO, "Invalid number of faces in KTX file %s", logName().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return QTextureFileData();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    for (int level = 0; level < qMin(texData.numLevels(), MAX_ITERATIONS); level++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        if (offset + sizeof(quint32) > dataSize) // Corrupt file; avoid oob read
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    quint32 offset = headerKeyValueSize;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    for (int level = 0; level < texData.numLevels(); level++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        const auto imageSizeView = safeView(buf, offset, sizeof(quint32));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (imageSizeView.isEmpty()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            qWarning(lcQtGuiTextureIO, "OOB request in KTX file %s", logName().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return QTextureFileData();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        const quint32 imageSize = decode(qFromUnaligned<quint32>(buf.data() + offset));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        offset += sizeof(quint32);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        const quint32 imageSize = decode(qFromUnaligned<quint32>(imageSizeView.data()));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        offset += sizeof(quint32); // overflow checked indirectly above
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        for (int face = 0; face < qMin(texData.numFaces(), MAX_ITERATIONS); face++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        for (int face = 0; face < texData.numFaces(); face++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             texData.setDataOffset(offset, level, face);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             texData.setDataLength(imageSize, level, face);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             // Add image data and padding to offset
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            offset += withPadding(imageSize, 4);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            const auto padded = nearestMultipleOf4(imageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (!padded) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                qWarning(lcQtGuiTextureIO, "Overflow in KTX file %s", logName().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                return QTextureFileData();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            quint32 offsetNext;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (qAddOverflow(offset, *padded, &offsetNext)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                qWarning(lcQtGuiTextureIO, "OOB request in KTX file %s", logName().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                return QTextureFileData();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            offset = offsetNext;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (!texData.isValid()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        qCDebug(lcQtGuiTextureIO, "Invalid values in header of KTX file %s", logName().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        qWarning(lcQtGuiTextureIO, "Invalid values in header of KTX file %s",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                 logName().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return QTextureFileData();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -187,33 +220,83 @@ bool QKtxHandler::checkHeader(const KTXHeader &header)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return is2D && (isCubeMap || isCompressedImage);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-QMap<QByteArray, QByteArray> QKtxHandler::decodeKeyValues(QByteArrayView view) const
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++std::optional<QMap<QByteArray, QByteArray>> QKtxHandler::decodeKeyValues(QByteArrayView view) const
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     QMap<QByteArray, QByteArray> output;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     quint32 offset = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    while (offset < view.size() + sizeof(quint32)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    while (offset < quint32(view.size())) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        const auto keyAndValueByteSizeView = safeView(view, offset, sizeof(quint32));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (keyAndValueByteSizeView.isEmpty()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            qWarning(lcQtGuiTextureIO, "Invalid view in KTX key-value");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return std::nullopt;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         const quint32 keyAndValueByteSize =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                decode(qFromUnaligned<quint32>(view.constData() + offset));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                decode(qFromUnaligned<quint32>(keyAndValueByteSizeView.data()));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        offset += sizeof(quint32);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        if (offset + keyAndValueByteSize > quint64(view.size()))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            break; // oob read
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        quint32 offsetKeyAndValueStart;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (qAddOverflow(offset, quint32(sizeof(quint32)), &offsetKeyAndValueStart)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            qWarning(lcQtGuiTextureIO, "Overflow in KTX key-value");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return std::nullopt;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        quint32 offsetKeyAndValueEnd;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (qAddOverflow(offsetKeyAndValueStart, keyAndValueByteSize, &offsetKeyAndValueEnd)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            qWarning(lcQtGuiTextureIO, "Overflow in KTX key-value");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return std::nullopt;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        const auto keyValueView = safeView(view, offsetKeyAndValueStart, keyAndValueByteSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (keyValueView.isEmpty()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            qWarning(lcQtGuiTextureIO, "Invalid view in KTX key-value");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return std::nullopt;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         // 'key' is a UTF-8 string ending with a null terminator, 'value' is the rest.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         // To separate the key and value we convert the complete data to utf-8 and find the first
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         // null terminator from the left, here we split the data into two.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        const auto str = QString::fromUtf8(view.constData() + offset, keyAndValueByteSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        const int idx = str.indexOf('\0'_L1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        if (idx == -1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            continue;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        const QByteArray key = str.left(idx).toUtf8();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        const size_t keySize = key.size() + 1; // Actual data size
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        const QByteArray value = QByteArray::fromRawData(view.constData() + offset + keySize,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                                         keyAndValueByteSize - keySize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        offset = withPadding(offset + keyAndValueByteSize, 4);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        output.insert(key, value);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        const int idx = keyValueView.indexOf('\0');
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (idx == -1) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            qWarning(lcQtGuiTextureIO, "Invalid key in KTX key-value");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return std::nullopt;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        const QByteArrayView keyView = safeView(view, offsetKeyAndValueStart, idx);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (keyView.isEmpty()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            qWarning(lcQtGuiTextureIO, "Overflow in KTX key-value");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return std::nullopt;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        const quint32 keySize = idx + 1; // Actual data size
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        quint32 offsetValueStart;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (qAddOverflow(offsetKeyAndValueStart, keySize, &offsetValueStart)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            qWarning(lcQtGuiTextureIO, "Overflow in KTX key-value");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return std::nullopt;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        quint32 valueSize;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (qSubOverflow(keyAndValueByteSize, keySize, &valueSize)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            qWarning(lcQtGuiTextureIO, "Underflow in KTX key-value");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return std::nullopt;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        const QByteArrayView valueView = safeView(view, offsetValueStart, valueSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (valueView.isEmpty()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            qWarning(lcQtGuiTextureIO, "Invalid view in KTX key-value");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return std::nullopt;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        output.insert(keyView.toByteArray(), valueView.toByteArray());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        const auto offsetNext = nearestMultipleOf4(offsetKeyAndValueEnd);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (!offsetNext) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            qWarning(lcQtGuiTextureIO, "Overflow in KTX key-value");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return std::nullopt;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        offset = *offsetNext;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return output;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/gui/util/qktxhandler_p.h b/src/gui/util/qktxhandler_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 77ce1ca556..9cf6f65586 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/gui/util/qktxhandler_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/gui/util/qktxhandler_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -17,6 +17,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "qtexturefilehandler_p.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <optional>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ QT_BEGIN_NAMESPACE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ struct KTXHeader;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -33,7 +35,7 @@ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ private:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     bool checkHeader(const KTXHeader &header);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    QMap<QByteArray, QByteArray> decodeKeyValues(QByteArrayView view) const;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    std::optional<QMap<QByteArray, QByteArray>> decodeKeyValues(QByteArrayView view) const;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     quint32 decode(quint32 val) const;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     bool inverseEndian = false;
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt64/files/patch-qt5compat-find_libs.diff b/aqua/qt64/files/patch-qt5compat-find_libs.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..0757ae7a876
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt64/files/patch-qt5compat-find_libs.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,16 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- cmake/FindWrapIconv.cmake.orig 2023-03-11 19:16:40
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ cmake/FindWrapIconv.cmake      2023-04-19 07:05:21
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -18,10 +18,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ check_cxx_source_compiles("${iconv_test_sources}" HAVE_ICONV)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(NOT HAVE_ICONV)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    set(_req_libraries "${CMAKE_REQUIRE_LIBRARIES}")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    set(CMAKE_REQUIRE_LIBRARIES "iconv")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    set(_req_libraries "${CMAKE_REQUIRED_LIBRARIES}")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    set(CMAKE_REQUIRED_LIBRARIES "iconv")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     check_cxx_source_compiles("${iconv_test_sources}" HAVE_ICONV_WITH_LIB)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    set(CMAKE_REQUIRE_LIBRARIES "${_req_libraries}")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    set(CMAKE_REQUIRED_LIBRARIES "${_req_libraries}")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_library(WrapIconv::WrapIconv INTERFACE IMPORTED)
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt64/files/patch-qtbase-fix-cmake-3.28.diff b/aqua/qt64/files/patch-qtbase-fix-cmake-3.28.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..923476a4735
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt64/files/patch-qtbase-fix-cmake-3.28.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,45 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 0efea8020c1d221635aaa0a71529edb392cfe3cc Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Joerg Bornemann <joerg.bornemann@qt.io>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Mon, 11 Sep 2023 14:48:32 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] CMake: Fix build with CMake 3.28 on macOS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+FindWrapOpenGL.cmake assumed that IMPORTED_LOCATION is the absolute path
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+of the library within the framework. That's not the case with CMake 3.28
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+anymore. There, IMPORTED_LOCATION is the absolute path of the framework
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+directory.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+The relevant upstream CMake change is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+6b01a27f901b5eb392955fea322cde44a1b782a3.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Pick-to: 6.2 6.5 6.6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Change-Id: I6b702a28318e0978c56dec83c398965aa77ef020
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cmake/FindWrapOpenGL.cmake | 8 ++++++--
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 6 insertions(+), 2 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/cmake/FindWrapOpenGL.cmake b/cmake/FindWrapOpenGL.cmake
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 3e6abaf4dda..7295a159caf 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- cmake/FindWrapOpenGL.cmake
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ cmake/FindWrapOpenGL.cmake
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -17,14 +17,18 @@ if (OpenGL_FOUND)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     add_library(WrapOpenGL::WrapOpenGL INTERFACE IMPORTED)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if(APPLE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        # CMake 3.27 and older:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         # On Darwin platforms FindOpenGL sets IMPORTED_LOCATION to the absolute path of the library
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         # within the framework. This ends up as an absolute path link flag, which we don't want,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         # because that makes our .prl files un-relocatable.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         # Extract the framework path instead, and use that in INTERFACE_LINK_LIBRARIES,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        # which CMake ends up transforming into a reloctable -framework flag.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        # which CMake ends up transforming into a relocatable -framework flag.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         # See https://gitlab.kitware.com/cmake/cmake/-/issues/20871 for details.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        # CMake 3.28 and above:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        # IMPORTED_LOCATION is the absolute path the the OpenGL.framework folder.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         get_target_property(__opengl_fw_lib_path OpenGL::GL IMPORTED_LOCATION)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        if(__opengl_fw_lib_path)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if(__opengl_fw_lib_path AND NOT __opengl_fw_lib_path MATCHES "/([^/]+)\\.framework$")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             get_filename_component(__opengl_fw_path "${__opengl_fw_lib_path}" DIRECTORY)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt64/files/patch-qtbase-intel_intrinsics.diff b/aqua/qt64/files/patch-qtbase-intel_intrinsics.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..65d9f364154
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt64/files/patch-qtbase-intel_intrinsics.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,20 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+LLVM clang [3.9.0,9.0.0) (and so likely also Xcode clang <11.4)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+defined the _mm256_maskz_cvtps_ph intrinsic as 2-argument.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Use the equivalent intrinsic _mm256_maskz_cvt_roundps_ph instead
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+since clang has always defined it as 3-argument.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+https://trac.macports.org/ticket/67802
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/corelib/global/qfloat16.cpp b/src/corelib/global/qfloat16.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/corelib/global/qfloat16.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/corelib/global/qfloat16.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -176,9 +176,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void qFloatToFloat16_tail_avx256(quint16 *out, const float *in, qsizetype len) noexcept
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     __mmask16 mask = _bzhi_u32(-1, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     __m256 f32 = _mm256_maskz_loadu_ps(mask, in );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    __m128i f16 = _mm256_maskz_cvtps_ph(mask, f32, _MM_FROUND_TO_NEAREST_INT);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    __m128i f16 = _mm256_maskz_cvt_roundps_ph(mask, f32, _MM_FROUND_TO_NEAREST_INT);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     _mm_mask_storeu_epi16(out, mask, f16);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static QT_FUNCTION_TARGET(ARCH_SKYLAKE_AVX512)
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt64/files/patch-qtbase-macdeployqt.diff b/aqua/qt64/files/patch-qtbase-macdeployqt.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..82080215941
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt64/files/patch-qtbase-macdeployqt.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,33 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From c66dab56b20a47062c74fa6ecf8ea438bdc07b24 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Jonas Kvinge <jonas@jkvinge.net>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Tue, 26 Sep 2023 19:02:47 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] macdeployqt: Also look for app libraries with .so extension
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+MIME-Version: 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Content-Type: text/plain; charset=utf8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Content-Transfer-Encoding: 8bit
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Fixes deploying glib-networking gio modules which uses .so file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extension.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Change-Id: I6b4c4e9c3bb5745ffa33d7e83c5853a9372f1ca6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ src/tools/macdeployqt/shared/shared.cpp | 2 +-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 1 insertion(+), 1 deletion(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/tools/macdeployqt/shared/shared.cpp b/src/tools/macdeployqt/shared/shared.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 0671ebf2f32f..413f8413f69f 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/tools/macdeployqt/shared/shared.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/tools/macdeployqt/shared/shared.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -435,7 +435,7 @@ QStringList findAppLibraries(const QString &appBundlePath)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     QStringList result;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // dylibs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    QDirIterator iter(appBundlePath, QStringList() << QString::fromLatin1("*.dylib"),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    QDirIterator iter(appBundlePath, QStringList() << QString::fromLatin1("*.dylib") << QString::fromLatin1("*.so"),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             QDir::Files | QDir::NoSymLinks, QDirIterator::Subdirectories);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     while (iter.hasNext()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         iter.next();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.16.3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt64/files/patch-qtbase-macos_10.14_sdk.diff b/aqua/qt64/files/patch-qtbase-macos_10.14_sdk.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..37605c24286
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt64/files/patch-qtbase-macos_10.14_sdk.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,113 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Allow building with macOS 10.14 SDK (will still warn about
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+"instance method '-charactersByApplyingModifiers:' not found"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+and "instance method '-location' not found")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Upstream-Status: Inappropriate [violates DRY]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/gui/platform/darwin/qapplekeymapper.mm.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/gui/platform/darwin/qapplekeymapper.mm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -528,7 +528,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 // we first run the event through the Carbon APIs and then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 // compare the results to Cocoa.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 auto cocoaModifiers = toCocoaModifiers(qtModifiers);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                auto *charactersWithModifiers = [NSApp.currentEvent charactersByApplyingModifiers:cocoaModifiers];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                NSString *charactersWithModifiers = [NSApp.currentEvent charactersByApplyingModifiers:cocoaModifiers];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 QChar cocoaUnicodeKey;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 if (charactersWithModifiers.length > 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/gui/rhi/qrhimetal.mm.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/gui/rhi/qrhimetal.mm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -369,15 +369,15 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     driverInfoStruct.deviceType = QRhiDriverInfo::IntegratedDevice;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (@available(macOS 10.15, *)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        const MTLDeviceLocation deviceLocation = [d->dev location];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        const NSUInteger deviceLocation = (NSUInteger)[d->dev location];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         switch (deviceLocation) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        case MTLDeviceLocationBuiltIn:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        case 0:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             driverInfoStruct.deviceType = QRhiDriverInfo::IntegratedDevice;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        case MTLDeviceLocationSlot:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        case 1:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             driverInfoStruct.deviceType = QRhiDriverInfo::DiscreteDevice;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        case MTLDeviceLocationExternal:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        case 2:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             driverInfoStruct.deviceType = QRhiDriverInfo::ExternalDevice;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         default:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -403,8 +403,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if defined(Q_OS_MACOS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     caps.maxTextureSize = 16384;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     caps.baseVertexAndInstance = true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if MAC_OS_X_VERSION_MAX_ALLOWED >= 101500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (@available(macOS 10.15, *))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         caps.isAppleGPU = [d->dev supportsFamily:MTLGPUFamilyApple7];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     caps.maxThreadGroupSize = 1024;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #elif defined(Q_OS_TVOS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if ([d->dev supportsFeatureSet: MTLFeatureSet(30003)]) // MTLFeatureSet_tvOS_GPUFamily2_v1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2543,6 +2545,26 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return srgb ? MTLPixelFormatASTC_12x10_sRGB : MTLPixelFormatASTC_12x10_LDR;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     case QRhiTexture::ASTC_12x12:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return srgb ? MTLPixelFormatASTC_12x12_sRGB : MTLPixelFormatASTC_12x12_LDR;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#elif MAC_OS_X_VERSION_MAX_ALLOWED < 110000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QRhiTexture::ETC2_RGB8:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QRhiTexture::ETC2_RGB8A1:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QRhiTexture::ETC2_RGBA8:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QRhiTexture::ASTC_4x4:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QRhiTexture::ASTC_5x4:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QRhiTexture::ASTC_5x5:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QRhiTexture::ASTC_6x5:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QRhiTexture::ASTC_6x6:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QRhiTexture::ASTC_8x5:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QRhiTexture::ASTC_8x6:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QRhiTexture::ASTC_8x8:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QRhiTexture::ASTC_10x5:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QRhiTexture::ASTC_10x6:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QRhiTexture::ASTC_10x8:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QRhiTexture::ASTC_10x10:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QRhiTexture::ASTC_12x10:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QRhiTexture::ASTC_12x12:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        qWarning("QRhiMetal: ETC2 compression not supported on this platform");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return MTLPixelFormatInvalid;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     case QRhiTexture::ETC2_RGB8:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if (d->caps.isAppleGPU) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2727,6 +2747,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     switch (m_type) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     case DepthStencil:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifdef Q_OS_MACOS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if MAC_OS_X_VERSION_MAX_ALLOWED >= 110000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if (rhiD->caps.isAppleGPU) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if (@available(macOS 11.0, *)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 desc.storageMode = MTLStorageModeMemoryless;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2735,10 +2756,13 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 Q_UNREACHABLE();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             desc.storageMode = MTLStorageModePrivate;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             d->format = rhiD->d->dev.depth24Stencil8PixelFormatSupported
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     ? MTLPixelFormatDepth24Unorm_Stencil8 : MTLPixelFormatDepth32Float_Stencil8;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if MAC_OS_X_VERSION_MAX_ALLOWED >= 110000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         desc.storageMode = MTLStorageModeMemoryless;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         d->format = MTLPixelFormatDepth32Float_Stencil8;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/plugins/platforms/cocoa/qcocoascreen.mm.orig       2023-02-14 09:26:04.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/plugins/platforms/cocoa/qcocoascreen.mm    2023-12-28 11:31:59.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -271,9 +271,11 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     float refresh = CGDisplayModeGetRefreshRate(displayMode);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     m_refreshRate = refresh > 0 ? refresh : 60.0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if MAC_OS_X_VERSION_MAX_ALLOWED >= 101500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (@available(macOS 10.15, *))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         m_name = QString::fromNSString(nsScreen.localizedName);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         m_name = displayName(m_displayId);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     const bool didChangeGeometry = m_geometry != previousGeometry || m_availableGeometry != previousAvailableGeometry;
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt64/files/patch-qtbase-memory_resource.diff b/aqua/qt64/files/patch-qtbase-memory_resource.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..99027d4476e
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt64/files/patch-qtbase-memory_resource.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,80 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From c70145c6bf54cda9723cccdc7ca07f8d8fd321cd Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= <tor.arne.vestbo@qt.io>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Wed, 7 Jun 2023 02:31:42 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] Opt out of standard library memory_resource on macOS < 14 and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ iOS < 17
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+MIME-Version: 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Content-Type: text/plain; charset=UTF-8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Content-Transfer-Encoding: 8bit
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Although the header is available, and the compiler reports that the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+standard library supports memory_resource, the feature is only
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+available on macOS 14 and iOS 17, as reported by
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  https://developer.apple.com/xcode/cpp/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+As long as our deployment target is lower we can't unconditionally
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+use this feature. It's not clear whether the expectation is that
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+consumers of the standard library on these platforms will have to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+runtime check their uses of these APIs.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Includes e84c0df50f51c61aa49b47823582b0f8de406e3d for fixing
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+missing line continuations.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Task-number: QTBUG-114316
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Change-Id: I50c1425334b9b9842b253442e2b3aade637783ea
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+(cherry picked from commit f7c8ff511c30dc4310a72b3da4b4a345efe1fba0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ src/corelib/global/qcompilerdetection.h | 20 +++++++++++++-------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ src/corelib/tools/qduplicatetracker_p.h |  2 +-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 2 files changed, 14 insertions(+), 8 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/corelib/global/qcompilerdetection.h b/src/corelib/global/qcompilerdetection.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index f1218934412..70fa7f6c9f7 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/corelib/global/qcompilerdetection.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/corelib/global/qcompilerdetection.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -895,16 +895,22 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #   endif // !_HAS_CONSTEXPR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #  endif // !__GLIBCXX__ && !_LIBCPP_VERSION
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # endif // Q_OS_QNX
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# if defined(Q_CC_CLANG) && defined(Q_OS_MAC) && defined(__GNUC_LIBSTD__) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    && ((__GNUC_LIBSTD__-0) * 100 + __GNUC_LIBSTD_MINOR__-0 <= 402)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# if defined(Q_CC_CLANG) && defined(Q_OS_MAC)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#  if defined(__GNUC_LIBSTD__) && ((__GNUC_LIBSTD__-0) * 100 + __GNUC_LIBSTD_MINOR__-0 <= 402)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Apple has not updated libstdc++ since 2007, which means it does not have
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // <initializer_list> or std::move. Let's disable these features
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#  undef Q_COMPILER_INITIALIZER_LISTS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#  undef Q_COMPILER_RVALUE_REFS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#  undef Q_COMPILER_REF_QUALIFIERS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#   undef Q_COMPILER_INITIALIZER_LISTS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#   undef Q_COMPILER_RVALUE_REFS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#   undef Q_COMPILER_REF_QUALIFIERS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Also disable <atomic>, since it's clearly not there
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#  undef Q_COMPILER_ATOMICS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#   undef Q_COMPILER_ATOMICS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#  endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#  if defined(__cpp_lib_memory_resource) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    && ((defined(__MAC_OS_X_VERSION_MIN_REQUIRED)  && __MAC_OS_X_VERSION_MIN_REQUIRED  < 140000) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     || (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 170000))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#   undef __cpp_lib_memory_resource // Only supported on macOS 14 and iOS 17
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#  endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# endif // defined(Q_CC_CLANG) && defined(Q_OS_DARWIN)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Don't break code that is already using Q_COMPILER_DEFAULT_DELETE_MEMBERS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/corelib/tools/qduplicatetracker_p.h b/src/corelib/tools/qduplicatetracker_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 950220184f8..23465ecffed 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/corelib/tools/qduplicatetracker_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/corelib/tools/qduplicatetracker_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -16,7 +16,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <private/qglobal_p.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#if __has_include(<memory_resource>)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef __cpp_lib_memory_resource
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #  include <unordered_set>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #  include <memory_resource>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #  include <qhash.h> // for the hashing helpers
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt64/files/patch-qtdeclarative-xcode11.3.diff b/aqua/qt64/files/patch-qtdeclarative-xcode11.3.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..3e23453d23e
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt64/files/patch-qtdeclarative-xcode11.3.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,22 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/qml/jsruntime/qv4engine_p.h.orig   2023-03-11 23:23:17.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/qml/jsruntime/qv4engine_p.h        2023-07-08 21:48:13.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -774,7 +774,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define CHECK_STACK_LIMITS(v4) if ((v4)->checkStackLimits()) return Encode::undefined(); \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    ExecutionEngineCallDepthRecorder _executionEngineCallDepthRecorder(v4);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ExecutionEngineCallDepthRecorder<1> _executionEngineCallDepthRecorder(v4);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ template<int Frames = 1>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ struct ExecutionEngineCallDepthRecorder
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/qml/jsruntime/qv4vme_moth.cpp.orig 2023-03-11 23:23:17.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/qml/jsruntime/qv4vme_moth.cpp      2023-07-08 21:59:27.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -400,7 +400,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         frame->setReturnValueUndefined();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    ExecutionEngineCallDepthRecorder executionEngineCallDepthRecorder(engine);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ExecutionEngineCallDepthRecorder<1> executionEngineCallDepthRecorder(engine);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     Function *function = frame->v4Function;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     Q_ASSERT(function->aotFunction);
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt64/files/patch-qtmultimedia-macos_10.14_sdk.diff b/aqua/qt64/files/patch-qtmultimedia-macos_10.14_sdk.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..3ec74f9580c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt64/files/patch-qtmultimedia-macos_10.14_sdk.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,51 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/multimedia/darwin/qcoreaudioutils.mm.orig  2023-03-12 04:46:05.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/multimedia/darwin/qcoreaudioutils.mm       2023-07-08 23:42:48.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -119,11 +119,13 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         { QAudioFormat::TopFrontLeft, kAudioChannelLabel_VerticalHeightLeft },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         { QAudioFormat::TopFrontRight, kAudioChannelLabel_VerticalHeightRight },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         { QAudioFormat::TopFrontCenter, kAudioChannelLabel_VerticalHeightCenter },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        { QAudioFormat::TopCenter, kAudioChannelLabel_CenterTopMiddle },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        { QAudioFormat::TopCenter, kAudioChannelLabel_TopCenterSurround },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         { QAudioFormat::TopBackLeft, kAudioChannelLabel_TopBackLeft },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         { QAudioFormat::TopBackRight, kAudioChannelLabel_TopBackRight },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if MAC_OS_X_VERSION_MAX_ALLOWED >= 101500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         { QAudioFormat::TopSideLeft, kAudioChannelLabel_LeftTopMiddle },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         { QAudioFormat::TopSideRight, kAudioChannelLabel_RightTopMiddle },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         { QAudioFormat::TopBackCenter, kAudioChannelLabel_TopBackCenter },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/plugins/multimedia/darwin/camera/qavfcamerabase.mm.orig    2023-03-12 04:46:05.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/plugins/multimedia/darwin/camera/qavfcamerabase.mm 2023-07-09 00:18:24.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -93,18 +93,20 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif // defined(Q_OS_IOS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool isFlashAvailable(AVCaptureDevice* captureDevice) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if MAC_OS_X_VERSION_MAX_ALLOWED >= 101500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (@available(macOS 10.15, *)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return [captureDevice isFlashAvailable];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool isTorchAvailable(AVCaptureDevice* captureDevice) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if MAC_OS_X_VERSION_MAX_ALLOWED >= 101500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (@available(macOS 10.15, *)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return [captureDevice isTorchAvailable];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -723,7 +725,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (@available(macOS 10.15, *)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         AVCaptureDevice *captureDevice = device();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        return captureDevice && [captureDevice isExposureModeSupported:AVCaptureExposureModeCustom];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return captureDevice && [captureDevice isExposureModeSupported:AVCaptureExposureMode(3)]; // AVCaptureExposureModeCustom
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return false;
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt64/files/patch-qtmultimedia_no_std_unary_function.diff b/aqua/qt64/files/patch-qtmultimedia_no_std_unary_function.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..a21340f8be7
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt64/files/patch-qtmultimedia_no_std_unary_function.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,31 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 82f7f3de0e90bb7d1447cb710ffd2e1b315ae479 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Artem Dyomin <artem.dyomin@qt.io>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Fri, 26 May 2023 15:15:52 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] Remove std::unary_function usage
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+std::unary_function was removed with c++17
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Pick-to: 6.5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Task-number: QTBUG-113782
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Change-Id: I4e330cd1f89dc14936acbccdeee8378ea4938870
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Reviewed-by: Lars Knoll <lars@knoll.priv.no>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Reviewed-by: Pavel Dubsky <pavel.dubsky@qt.io>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/plugins/multimedia/darwin/camera/avfcamerautility.mm b/src/plugins/multimedia/darwin/camera/avfcamerautility.mm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 4334613..fb73ba3 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/plugins/multimedia/darwin/camera/avfcamerautility.mm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/plugins/multimedia/darwin/camera/avfcamerautility.mm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -69,9 +69,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-struct FormatHasNoFPSRange : std::unary_function<AVCaptureDeviceFormat *, bool>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++struct FormatHasNoFPSRange
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    bool operator() (AVCaptureDeviceFormat *format)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    bool operator() (AVCaptureDeviceFormat *format) const
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         Q_ASSERT(format);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return !format.videoSupportedFrameRateRanges || !format.videoSupportedFrameRateRanges.count;
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt64/files/patch-qtpositioning-macos_10.14_sdk.diff b/aqua/qt64/files/patch-qtpositioning-macos_10.14_sdk.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..78fb6eb6aa0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt64/files/patch-qtpositioning-macos_10.14_sdk.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,17 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/plugins/position/corelocation/qgeopositioninfosource_cl.mm.orig    2023-03-12 03:16:54.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/plugins/position/corelocation/qgeopositioninfosource_cl.mm 2023-12-30 18:29:00.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -52,12 +52,14 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifndef Q_OS_TVOS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (newLocation.course >= 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         location.setAttribute(QGeoPositionInfo::Direction, newLocation.course);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if !defined(Q_OS_MACOS) || MAC_OS_X_VERSION_MAX_ALLOWED >= 101500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if (__builtin_available(iOS 13.4, watchOS 6.2, macOS 10.15.4, *)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if (newLocation.courseAccuracy >= 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 location.setAttribute(QGeoPositionInfo::DirectionAccuracy,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                       newLocation.courseAccuracy);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (newLocation.speed >= 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         location.setAttribute(QGeoPositionInfo::GroundSpeed, newLocation.speed);
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt64/files/patch-qtspeech-macos_10.14_sdk.diff b/aqua/qt64/files/patch-qtspeech-macos_10.14_sdk.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..a06a4d2572b
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt64/files/patch-qtspeech-macos_10.14_sdk.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,26 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/plugins/tts/darwin/qtexttospeech_darwin.mm.orig    2023-03-12 05:16:00.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/plugins/tts/darwin/qtexttospeech_darwin.mm 2023-07-09 02:30:51.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2,6 +2,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <AVFoundation/AVFoundation.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <../../System/Library/Frameworks/AVFoundation.framework/Frameworks/AVFAudio.framework/Headers/AVSpeechSynthesis.h>  // 10.14 SDK fix
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "qtexttospeech_darwin.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -281,6 +282,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // only from macOS 10.15 and iOS 13 on
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     const QVoice::Gender gender = [avVoice]{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if MAC_OS_X_VERSION_MAX_ALLOWED >= 101500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if (@available(macos 10.15, ios 13, *)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             switch (avVoice.gender) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             case AVSpeechSynthesisVoiceGenderMale:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -291,6 +293,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return QVoice::Unknown;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt64/files/qtbase-qmake-xcode-15.patch b/aqua/qt64/files/qtbase-qmake-xcode-15.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..f479e4a46ec
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt64/files/qtbase-qmake-xcode-15.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,59 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From cdf64b0e47115cc473e1afd1472b4b09e130b2a5 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Mon, 11 Sep 2023 17:01:52 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] qmake: Don't error out if QMAKE_DEFAULT_LIBDIRS is empty on macOS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+The new linker in Xcode 15 doesn't provide any default linker or
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+framework paths when requested via -v, but still seems to use the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default paths documented in the ld man page.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+We trust that linker will do the right thing, even if we don't
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+know of its default linker paths.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+We also need to opt out of the default fallback logic to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set the libdirs to /lib and /usr/lib.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This may result in UnixMakefileGenerator::findLibraries finding
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+different libraries than expected, if additional paths are
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+passed with -L, which will then take precedence for qmake,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+even if the linker itself will use the library from the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+SDK's default paths. This should hopefully not be an issue
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+in practice, as we don't turn -lFoo into absolute paths in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+qmake, so the only risk is that we're picking up the wrong
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+prl files and adding additional dependencies that the lib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+in the SDK doesn't have.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Change-Id: I2347b26e2df0828471373b0e15b8c9089274c65d
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mkspecs/features/toolchain.prf | 9 ++++++---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 6 insertions(+), 3 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/mkspecs/features/toolchain.prf b/mkspecs/features/toolchain.prf
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 0040b6c4b9f..bfad10d35bc 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- mkspecs/features/toolchain.prf.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ mkspecs/features/toolchain.prf
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -288,9 +288,12 @@ isEmpty($${target_prefix}.INCDIRS) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        isEmpty(QMAKE_DEFAULT_LIBDIRS)|isEmpty(QMAKE_DEFAULT_INCDIRS): \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        isEmpty(QMAKE_DEFAULT_INCDIRS): \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             !integrity: \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                error("failed to parse default search paths from compiler output")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                error("failed to parse default include paths from compiler output")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        isEmpty(QMAKE_DEFAULT_LIBDIRS): \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            !integrity:!darwin: \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                error("failed to parse default library paths from compiler output")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         QMAKE_DEFAULT_LIBDIRS = $$unique(QMAKE_DEFAULT_LIBDIRS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } else: ghs {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         cmd = $$QMAKE_CXX $$QMAKE_CXXFLAGS -$${LITERAL_HASH} -o /tmp/fake_output /tmp/fake_input.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -411,7 +414,7 @@ isEmpty($${target_prefix}.INCDIRS) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         QMAKE_DEFAULT_INCDIRS = $$split(INCLUDE, $$QMAKE_DIRLIST_SEP)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    unix:if(!cross_compile|host_build) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    unix:!darwin:if(!cross_compile|host_build) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         isEmpty(QMAKE_DEFAULT_INCDIRS): QMAKE_DEFAULT_INCDIRS = /usr/include /usr/local/include
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         isEmpty(QMAKE_DEFAULT_LIBDIRS): QMAKE_DEFAULT_LIBDIRS = /lib /usr/lib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span></pre><pre style='margin:0'>

</pre>