<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>