Monday, November 06, 2023

x11/qt5: KDE Qt5 Patch Collection

Hi ports@,

KDE provides security fixes, crash fixes, and other functional defects
atop the Qt5 code-base, in particular Qt 5.15 LTS. Read [1] and [2] for
more information.

With the introduction of DIST_TUPLE, we are now in a position to use
them. Please find a diff below that combine the old with the new world.

If KDE_* is defined we handle the package by DIST_TUPLE otherwise
everything as usual.

For example:
KDE_COMMIT = ea7a183732c17005f08ca14fd70cdd305c90396d
KDE_VERSION = 138

KDE_COMMIT is the invent.kde.org and KDE_VERSION is the number of
patches committed from KDE. This versions pattern uses FreeBSD and
ArchLinux [3] and probably more. I set KDE_VERSION as pl, for example:
qtbase-5.15.11pl138. I still have to test an pkg_add -u update with it
but it should actually work.

What has changed in the port?

- Upstream Qt project ships which a "includes" directory in the tarball.
Qt*/KDE repository does not contain the include directory.
We have to run syncqt.pl so I added QT5_GEN_INCLUDES.
- Looks like mapbox-gl-native is an Qt upstream tarball thing. It's not
present in the source code. A lot has changed here. But only on the
plugin side.
- I went through all shared libs and adjusted them.
- Some cosmetic corrections.

What do you think? I would like to play it safe with a bulk build.

Rafael

[1]: https://dot.kde.org/2021/04/06/announcing-kdes-qt-5-patch-collection
[2]: https://community.kde.org/Qt5PatchCollection
[3]: https://gitlab.archlinux.org/archlinux/packaging/packages/qt5-tools/-/blob/main/PKGBUILD?ref_type=heads

diff --git a/x11/qt5/Makefile.inc b/x11/qt5/Makefile.inc
index b2a1323284b..484298e239b 100644
--- a/x11/qt5/Makefile.inc
+++ b/x11/qt5/Makefile.inc
@@ -10,11 +10,19 @@ FIX_EXTRACT_PERMISSIONS = Yes
VERSION ?= ${QT5_VERSION}
DIST_VERSION ?= ${QT5_DIST_VERSION}
NEXT_VERSION ?= ${QT5_NEXT_VERSION}
+
+.if defined(KDE_VERSION)
+QT5_KDE_VERSION = ${QT5_VERSION}pl${KDE_VERSION}
+PKGNAME ?= ${QT5NAME:L}-${QT5_KDE_VERSION}
+.else
+DISTNAME ?= ${QT5NAME:L}-everywhere-opensource-src-${DIST_VERSION}
+PKGNAME ?= ${DISTNAME:C/-everywhere-opensource-src//:C/-${DIST_VERSION}/-${VERSION}/}
+.endif
+
DISTNAME ?= ${QT5NAME:L}-everywhere-opensource-src-${DIST_VERSION}

MAINTAINER ?= Rafael Sadowski <rsadowski@openbsd.org>

-PKGNAME ?= ${DISTNAME:C/-everywhere-opensource-src//:C/-${DIST_VERSION}/-${VERSION}/}
PKGNAME-main ?= ${PKGNAME}
PKGNAME-examples ?= ${PKGNAME:C/(-[0-9])/-examples\1/}

@@ -40,8 +48,13 @@ RUN_DEPENDS-examples += ${BUILD_PKGPATH},-main>=${VERSION:R},<${NEXT_VERSION}
# A few components, including QtWebEngine, are LGPLv3 only, no LGPLv2.1.
PERMIT_PACKAGE ?= Yes

+.if defined(KDE_VERSION) && defined(KDE_COMMIT)
+DIST_TUPLE = kde qt qt/${QT5NAME:L} ${KDE_COMMIT} .
+.else
SITES ?= https://download.qt.io/official_releases/qt/${QT5_DIST_VERSION:R}/${QT5_DIST_VERSION}/submodules/ \
https://mirrors.ocf.berkeley.edu/qt/official_releases/qt/${QT5_DIST_VERSION:R}/${QT5_DIST_VERSION}/submodules/
+.endif
+
DIST_SUBDIR ?= qt
EXTRACT_SUFX ?= .tar.xz

@@ -64,7 +77,11 @@ MAKE_FLAGS = -B -j ${MAKE_JOBS} \
MAKE_FLAGS += LIB${_l}_VERSION=${_v}
.endfor

+.if defined(KDE_COMMIT)
+WRKDIST = ${WRKDIR}/${QT5NAME:L}-${KDE_COMMIT}
+.else
WRKDIST ?= ${WRKDIR}/${DISTNAME:S/opensource-//}
+.endif

# qmake supports so-called "shadow" builds: it's like normal
# out-of-source build but build directory is required to be located
@@ -96,6 +113,10 @@ ALL_TARGET ?= first
FAKE_TARGET ?= install
TEST_TARGET ?= check

+QT5_SYNCQT_BIN ?= ${LOCALBASE}/lib/qt5/bin/syncqt.pl
+QT5_GEN_INCLUDES = cd ${WRKDIST} && \
+ ${SETENV} ${MODQT5_SYNCQT_BIN} -version ${MODQT5_VERSION} -quiet ${WRKDIST}
+
.include <bsd.port.arch.mk>

FLAVOR ?=
diff --git a/x11/qt5/Makefile.version b/x11/qt5/Makefile.version
index 364e4985643..cfe9c189b0c 100644
--- a/x11/qt5/Makefile.version
+++ b/x11/qt5/Makefile.version
@@ -2,7 +2,7 @@

QT5_VERSION = 5.15.11
QT5_WEBENGINE_VERSION = 5.15.10
-QT5_DIST_VERSION = 5.15.11
+QT5_DIST_VERSION ?= 5.15.11

# This one is used for building dependencies for examples and documentation,
# which obviously should be in sync with core packages.
diff --git a/x11/qt5/qtbase/Makefile b/x11/qt5/qtbase/Makefile
index c7d38713f75..fe16229375c 100644
--- a/x11/qt5/qtbase/Makefile
+++ b/x11/qt5/qtbase/Makefile
@@ -1,5 +1,7 @@
-DISTNAME = qtbase-everywhere-opensource-src-${DIST_VERSION}
-QT5NAME = Qt5 core
+QT5NAME = QtBase
+
+KDE_COMMIT = ea7a183732c17005f08ca14fd70cdd305c90396d
+KDE_VERSION = 138

COMMENT-main = C++ general-purpose toolkit
COMMENT-global = global Qt5 documentation internals
@@ -7,28 +9,26 @@ COMMENT-mysql = MySQL plugin for Qt5
COMMENT-psql = PostgresSQL plugin for Qt5
COMMENT-tds = TDS plugin for Qt5

-PKGNAME-mysql = qt5-mysql-${VERSION}
-PKGNAME-global = qt5-global-${VERSION}
-PKGNAME-psql = qt5-postgresql-${VERSION}
-PKGNAME-tds = qt5-tds-${VERSION}
+PKGNAME-mysql = qt5-mysql-${QT5_KDE_VERSION}
+PKGNAME-global = qt5-global-${QT5_KDE_VERSION}
+PKGNAME-psql = qt5-postgresql-${QT5_KDE_VERSION}
+PKGNAME-tds = qt5-tds-${QT5_KDE_VERSION}

PKG_ARCH-global = *
PKG_ARCH-examples = *

-REVISION-main = 0
-
DPB_PROPERTIES = parallel

SHARED_LIBS += Qt5Concurrent 4.1 # 5.15
SHARED_LIBS += Qt5Core 5.0 # 5.15
SHARED_LIBS += Qt5DBus 3.0 # 5.15
-SHARED_LIBS += Qt5Gui 4.0 # 5.15
+SHARED_LIBS += Qt5Gui 4.1 # 5.15
SHARED_LIBS += Qt5Network 4.0 # 5.15
SHARED_LIBS += Qt5OpenGL 3.0 # 5.15
SHARED_LIBS += Qt5PrintSupport 3.0 # 5.15
SHARED_LIBS += Qt5Sql 3.0 # 5.15
SHARED_LIBS += Qt5Test 3.1 # 5.15
-SHARED_LIBS += Qt5Widgets 4.0 # 5.15
+SHARED_LIBS += Qt5Widgets 4.1 # 5.15
SHARED_LIBS += Qt5Xml 3.0 # 5.15
SHARED_LIBS += Qt5EglFSDeviceIntegration 1.0 # 5.15
SHARED_LIBS += Qt5EglFsKmsSupport 1.0 # 5.15
@@ -61,7 +61,7 @@ MULTI_PACKAGES = -main -examples -global -mysql -psql -tds

# qmake module is used only for running tests and setting vars
MODQT_DEPS = No
-MODQMAKE_PROJECTS = tests/tests.pro
+MODQMAKE_PROJECTS = src/tools/bootstrap src/corelib src/tools/qlalr
USE_GMAKE = Yes

# no leveldb dependency, requires -lmemenv; QtWebKit uses internal version
@@ -141,7 +141,7 @@ CONFIGURE_ARGS += -confirm-license \
-verbose

# We have to wait until arm64 is vulkan ready.
-#BUILD_DEPENDS = graphics/vulkan-loader
+#BUILD_DEPENDS = graphics/vulkan-loader
CONFIGURE_ARGS += -no-vulkan

# Let's wait a little until we have more experience and test results
@@ -233,6 +233,12 @@ CONFIGURE_ARGS += -platform openbsd-g++
# See qtbase/tests/README for details
TEST_IS_INTERACTIVE = X11

+WRKDIST = ${WRKDIR}/qtbase-${KDE_COMMIT}
+
+QT5_SYNCQT_BIN = ${WRKDIST}/bin/syncqt.pl
+pre-configure:
+ ${QT5_GEN_INCLUDES}
+
post-extract:
mkdir -p ${WRKDIST}/mkspecs/openbsd-{clang,g++}
cp ${FILESDIR}/clang-qmake.conf \
diff --git a/x11/qt5/qtbase/distinfo b/x11/qt5/qtbase/distinfo
index 50382d949f1..eb97bed919d 100644
--- a/x11/qt5/qtbase/distinfo
+++ b/x11/qt5/qtbase/distinfo
@@ -1,2 +1,2 @@
-SHA256 (qt/qtbase-everywhere-opensource-src-5.15.11.tar.xz) = QlrTAazZHKZsEMDavuBwTi0M0oAaa2cBFYAMu5X4SEY=
-SIZE (qt/qtbase-everywhere-opensource-src-5.15.11.tar.xz) = 50825756
+SHA256 (qt/qt-qt/qtbase-ea7a183732c17005f08ca14fd70cdd305c90396d.tar.gz) = 0booh2SMGeZ5NOx0dvyrF+koEqXjpNAWk8yNchqiIOk=
+SIZE (qt/qt-qt/qtbase-ea7a183732c17005f08ca14fd70cdd305c90396d.tar.gz) = 68763263
diff --git a/x11/qt5/qtbase/patches/patch-src_gui_configure_json b/x11/qt5/qtbase/patches/patch-src_gui_configure_json
deleted file mode 100644
index 60e73ad2d1e..00000000000
--- a/x11/qt5/qtbase/patches/patch-src_gui_configure_json
+++ /dev/null
@@ -1,27 +0,0 @@
-EGL_NO_X11 has been replaced with USE_X11, thus breaking all existing
-code out there, including Qt:
-https://github.com/KhronosGroup/EGL-Registry/pull/130
-
-Fix this by defining USE_X11 whenever we do not define EGL_NO_X11.
-
-Fixes: QTBUG-96392
-Pick-to: 6.2
-Change-Id: If8b68caa8c9022477d87169ca2e2a0121a9313e0
-Reviewed-by: default avatarAndy Nichols <andy.nichols@qt.io>
-(cherry picked from commit 4cc54285)
-
-https://invent.kde.org/qt/qt/qtbase/-/commit/7a44796c813ab9661a68d42a67c18759d0a3f9ed
-
-Index: src/gui/configure.json
---- src/gui/configure.json.orig
-+++ src/gui/configure.json
-@@ -834,7 +834,8 @@
- "// embedded devices, are not intended to be used together with X. EGL support",
- "// has to be disabled in plugins like xcb in this case since the native display,",
- "// window and pixmap types will be different than what an X-based platform",
-- "// plugin would expect."
-+ "// plugin would expect.",
-+ "#define USE_X11"
- ],
- "include": [ "EGL/egl.h", "X11/Xlib.h" ],
- "main": [
diff --git a/x11/qt5/qtbase/patches/patch-src_network_ssl_qsslcontext_openssl_cpp b/x11/qt5/qtbase/patches/patch-src_network_ssl_qsslcontext_openssl_cpp
index b9a9ef23e66..5d8eb1df8e5 100644
--- a/x11/qt5/qtbase/patches/patch-src_network_ssl_qsslcontext_openssl_cpp
+++ b/x11/qt5/qtbase/patches/patch-src_network_ssl_qsslcontext_openssl_cpp
@@ -13,36 +13,7 @@ Index: src/network/ssl/qsslcontext_openssl.cpp

const long anyVersion =
#if QT_CONFIG(dtls)
-@@ -408,16 +410,28 @@ init_context:
- maxVersion = DTLS1_VERSION;
- break;
- case QSsl::DtlsV1_0OrLater:
-+#ifdef DTLS_MAX_VERSION
- minVersion = DTLS1_VERSION;
- maxVersion = DTLS_MAX_VERSION;
-+#else
-+ Q_UNREACHABLE();
-+

No comments:

Post a Comment