From 47d18b13213ccd7c51894796760f97571c3eb424 Mon Sep 17 00:00:00 2001 From: "A. Wilcox" Date: Fri, 27 Dec 2019 04:02:42 -0600 Subject: user/qt5: Bump to 5.12.6 LTS This updates Qt 5 to the latest LTS release available. Notable changes: * The infamous clipboard bug (upstream QTBUG-65145; Gerrit 254187) is fixed! * Qt Declarative's "V4 JIT" is disabled globally on pmmx. It is no longer (easily) possible to turn off the JIT selectively based on CPU capability. * Qt Script builds correctly on GCC 8 now. This does not include: * Build testing of Qt Multimedia (yet); this depends on the time64-isation of the alsa-lib package (at least). * Build testing of Qt Speech (yet); speech-dispatcher also deps on alsa-lib indirectly. * Qt WebKit 5.212. This will be committed later. --- user/qt5-qtbase/APKBUILD | 51 +++++++------- user/qt5-qtbase/big-endian-scroll-wheel.patch | 98 +++++++++++++++------------ user/qt5-qtbase/qt-musl-iconv-no-bom.patch | 2 +- user/qt5-qtbase/time64.patch | 62 +++++++++++++++++ 4 files changed, 143 insertions(+), 70 deletions(-) create mode 100644 user/qt5-qtbase/time64.patch (limited to 'user/qt5-qtbase') diff --git a/user/qt5-qtbase/APKBUILD b/user/qt5-qtbase/APKBUILD index 95f461d64..18b5b88ad 100644 --- a/user/qt5-qtbase/APKBUILD +++ b/user/qt5-qtbase/APKBUILD @@ -1,14 +1,15 @@ # Maintainer: A. Wilcox pkgname=qt5-qtbase -_pkgname=qtbase-opensource-src -pkgver=5.9.7 -pkgrel=1 -pkgdesc="Qt 5.9 base components" +_pkgname=qtbase-everywhere-src +pkgver=5.12.6 +pkgrel=0 +pkgdesc="Cross-platform application and UI framework" url="https://www.qt.io/" arch="all" -license="LGPL-2.0 with exceptions OR GPL-3.0 with exceptions" +license="LGPL-3.0-only WITH Qt-LGPL-exception-1.1 OR GPL-3.0-only WITH Qt-GPL-exception-1.0" _sub="$pkgname-sqlite $pkgname-odbc $pkgname-postgresql $pkgname-tds $pkgname-x11" +depends="" depends_dev="dbus-dev fontconfig-dev freetype-dev glib-dev libice-dev libpng-dev libsm-dev libx11-dev libxext-dev mesa-dev openssl-dev perl sqlite-dev zlib-dev $_sub" @@ -25,15 +26,23 @@ source="https://download.qt.io/official_releases/qt/${pkgver%.*}/$pkgver/submodu big-endian-scroll-wheel.patch link-to-execinfo.patch qt-musl-iconv-no-bom.patch + time64.patch " +# secfixes: qt +# 5.9.7-r0: +# - CVE-2018-15518 +# - CVE-2018-19869 +# - CVE-2018-19870 +# - CVE-2018-19871 +# - CVE-2018-19873 + _qt5_prefix=/usr/lib/qt5 _qt5_datadir=/usr/share/qt5 builddir="$srcdir"/$_pkgname-$pkgver prepare() { default_prepare - cd "$builddir" sed -i -e "s|-O2|$CXXFLAGS|" \ -e "/^QMAKE_RPATH/s| -Wl,-rpath,||g" \ -e "/^QMAKE_LFLAGS\s/s|+=|+= $LDFLAGS|g" \ @@ -41,9 +50,7 @@ prepare() { } build() { - cd "$builddir" - - local ARCH_OPTS="" + ARCH_OPTS="" [ ${CTARGET_ARCH} != "pmmx" ] || ARCH_OPTS="-no-sse2" ./configure -confirm-license -opensource \ @@ -56,6 +63,7 @@ build() { -glib \ -icu \ -importdir "$_qt5_prefix"/imports \ + -kms \ -libexecdir "$_qt5_prefix"/libexec \ -no-pch \ -no-rpath \ @@ -87,15 +95,12 @@ build() { } check() { - cd "$builddir" make check } package() { - cd "$builddir" make INSTALL_ROOT="$pkgdir" install mkdir -p "$pkgdir"/usr/bin/ - local i for i in "$pkgdir"/$_qt5_prefix/bin/*; do ln -s ../lib/qt5/bin/"$(basename $i)" \ "$pkgdir"/usr/bin/"$(basename $i)" @@ -103,15 +108,14 @@ package() { } _mv_files() { - local i - for i; do + for i in "$@"; do mkdir -p "$subpkgdir"/${i%/*} - mv "$pkgdir"/$i "$subpkgdir"/$i + mv "$pkgdir"/$i "$subpkgdir"/${i%/*} done } dev() { - cd "$pkgdir" + cd "$pkgdir" # Required for the 'find' command to work properly. _mv_files usr/lib/qt5/mkspecs \ usr/lib/cmake \ usr/lib/qt5/bin \ @@ -122,38 +126,32 @@ dev() { sqlite() { pkgdesc="SQLite driver for Qt5's SQL classes" - cd "$pkgdir" _mv_files usr/lib/qt5/plugins/sqldrivers/libqsqlite* } odbc() { pkgdesc="ODBC driver for Qt5's SQL classes" - cd "$pkgdir" _mv_files usr/lib/qt5/plugins/sqldrivers/libqsqlodbc* } postgresql() { pkgdesc="PostgreSQL driver for Qt5's SQL classes" - cd "$pkgdir" _mv_files usr/lib/qt5/plugins/sqldrivers/libqsqlpsql* } mysql() { pkgdesc="MySQL driver for Qt5's SQL classes" - cd "$pkgdir" _mv_files usr/lib/qt5/plugins/sqldrivers/libqsqlmysql* } tds() { pkgdesc="TDS driver for Qt5's SQL classes" - cd "$pkgdir" _mv_files usr/lib/qt5/plugins/sqldrivers/libqsqltds* } x11() { pkgdesc="Qt5 GUI-related libraries" depends="hicolor-icon-theme" - cd "$pkgdir" _mv_files \ usr/lib/libQt5EglFSDeviceIntegration.so.* \ usr/lib/libQt5EglFsKmsSupport.so.* \ @@ -169,11 +167,12 @@ x11() { usr/lib/qt5/plugins/printsupport* \ usr/lib/qt5/plugins/xcbglintegrations - scanelf -Rn usr/ | egrep '(libX|libQt5Gui|libGL)' && return 1 + scanelf -Rn "$pkgdir"/usr/ | egrep '(libX|libQt5Gui|libGL)' && return 1 return 0 } -sha512sums="7121837501b810f31863fbb3a6ea7189d3e38789ff25eb49b639a69b73913761c8cba18b65046519693d2f5c8755c2197feff1df1ec3d88676d00c649a326e1e qtbase-opensource-src-5.9.7.tar.xz -0f5b3d93bd1543f4e28e3dfe4a77db4759f2e3afbeb6f6b2c3aa76bf106ed585984ea228b2233bc53afeb3f51c557e3545b18a74096d2cf129364a1f6c4ef090 big-endian-scroll-wheel.patch +sha512sums="5fb82d903b0db95c23c55785047722dea7979e7f94ecaaf374e0c73b4787aabd768a1c79482a091b8b11f61d7bd4fb891675a6842b90cdc9caaa3b393a3187c6 qtbase-everywhere-src-5.12.6.tar.xz +d00dc607b71a93132f756b952871df9197cfd6d78cc3617544bfa11d7f0eea21ce5dd0d1aeb69dd2702a5694a63d3802accc76499dbf414c01eb56421698cb0c big-endian-scroll-wheel.patch ee78a44e28ba5f728914bfc3d8d5b467896c7de11a02d54b0bce11e40a4338b1f776c1fcc30cbd436df4f548c1ab0b4fe801f01b162ddd5c0f892893e227acfd link-to-execinfo.patch -dca65670df25a8e391d4c62b8967f4377cbd193a3053d8e8e288452ea197f418fe3f6d9d5e48dc333a44aeadec68e3d4380b3672a07ef6baf7aa3eed96ba96e3 qt-musl-iconv-no-bom.patch" +e3982b2df2ab4ba53b7a1329a9eb928eb1fee813c61cf6ac03d3300a767ffb57f019ac0fd89f633cac2330549446ff3d43344871296bf362815e7ebffadefa6b qt-musl-iconv-no-bom.patch +436f0bb7a89a88aa62c7b0398c4e91c325e78542e96f747c903f7e96dbf9d9b693d9688c722f2a74e287fb9ab31e861bd5ed8deb172ed28f56a1b8757663771c time64.patch" diff --git a/user/qt5-qtbase/big-endian-scroll-wheel.patch b/user/qt5-qtbase/big-endian-scroll-wheel.patch index 3fbb8aec7..4cfa4f7b8 100644 --- a/user/qt5-qtbase/big-endian-scroll-wheel.patch +++ b/user/qt5-qtbase/big-endian-scroll-wheel.patch @@ -1,43 +1,55 @@ ---- qtbase-opensource-src-5.9.7/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp.old 2018-10-16 08:37:05.000000000 +0000 -+++ qtbase-opensource-src-5.9.7/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp 2019-08-03 03:58:05.875790720 +0000 -@@ -43,6 +43,7 @@ - #include "qxcbwindow.h" - #include "qtouchdevice.h" - #include "QtCore/qmetaobject.h" -+#include "QtCore/qendian.h" - #include - #include - #include -@@ -106,6 +107,7 @@ - XIEventMask xiEventMask; - bitMask = XI_HierarchyChangedMask; - bitMask |= XI_DeviceChangedMask; -+ bitMask = qToLittleEndian(bitMask); - xiEventMask.deviceid = XIAllDevices; - xiEventMask.mask_len = sizeof(bitMask); - xiEventMask.mask = xiBitMask; -@@ -327,7 +329,8 @@ - } - XIEventMask mask; - mask.mask_len = sizeof(bitMask); -+ bitMask = qToLittleEndian(bitMask); - mask.mask = xiBitMask; - // When xi2MouseEvents() is true (the default), pointer emulation for touch and tablet - // events will get disabled. This is preferable, as Qt Quick handles touch events - // directly, while for other applications QtGui synthesizes mouse events. -@@ -353,6 +356,7 @@ - tabletBitMask = XI_PropertyEventMask; - if (!pointerSelected) - tabletBitMask |= XI_ButtonPressMask | XI_ButtonReleaseMask | XI_MotionMask; -+ tabletBitMask = qToLittleEndian(tabletBitMask); - for (int i = 0; i < m_tabletData.count(); ++i) { - int deviceId = m_tabletData.at(i).deviceId; - tabletDevices.insert(deviceId); -@@ -374,6 +378,7 @@ - - scrollBitMask = XI_MotionMask; - scrollBitMask |= XI_ButtonReleaseMask; -+ scrollBitMask = qToLittleEndian(scrollBitMask); - int i=0; - for (const ScrollingDevice& scrollingDevice : qAsConst(m_scrollingDevices)) { - if (tabletDevices.contains(scrollingDevice.deviceId)) +--- qtbase-everywhere-src-5.12.3/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp.orig 2019-08-02 17:27:00.011197696 +0200 ++++ qtbase-everywhere-src-5.12.3/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp 2019-08-02 17:29:36.336019411 +0200 +@@ -43,6 +43,7 @@ + #include "qxcbwindow.h" + #include "qtouchdevice.h" + #include "QtCore/qmetaobject.h" ++#include "QtCore/qendian.h" + #include + #include + #include +@@ -66,6 +67,7 @@ + xiEventMask.mask = XCB_INPUT_XI_EVENT_MASK_HIERARCHY; + xiEventMask.mask |= XCB_INPUT_XI_EVENT_MASK_DEVICE_CHANGED; + xiEventMask.mask |= XCB_INPUT_XI_EVENT_MASK_PROPERTY; ++ xiEventMask.mask = qToLittleEndian(xiEventMask.mask); + xcb_input_xi_select_events(xcb_connection(), rootWindow(), 1, &xiEventMask.header); + } + +@@ -90,7 +92,7 @@ + qt_xcb_input_event_mask_t mask; + mask.header.deviceid = XCB_INPUT_DEVICE_ALL_MASTER; + mask.header.mask_len = 1; +- mask.mask = bitMask; ++ mask.mask = qToLittleEndian(bitMask); + xcb_void_cookie_t cookie = + xcb_input_xi_select_events_checked(xcb_connection(), window, 1, &mask.header); + xcb_generic_error_t *error = xcb_request_check(xcb_connection(), cookie); +@@ -363,7 +365,7 @@ + qt_xcb_input_event_mask_t xiMask; + xiMask.header.deviceid = XCB_INPUT_DEVICE_ALL_MASTER; + xiMask.header.mask_len = 1; +- xiMask.mask = mask; ++ xiMask.mask = qToLittleEndian(mask); + + xcb_void_cookie_t cookie = + xcb_input_xi_select_events_checked(xcb_connection(), window, 1, &xiMask.header); +@@ -390,7 +392,7 @@ + tabletDevices.insert(deviceId); + xiEventMask[i].header.deviceid = deviceId; + xiEventMask[i].header.mask_len = 1; +- xiEventMask[i].mask = mask; ++ xiEventMask[i].mask = qToLittleEndian(mask); + } + xcb_input_xi_select_events(xcb_connection(), window, nrTablets, &(xiEventMask.data()->header)); + } +@@ -406,7 +408,7 @@ + #endif + xiEventMask[i].header.deviceid = scrollingDevice.deviceId; + xiEventMask[i].header.mask_len = 1; +- xiEventMask[i].mask = mask; ++ xiEventMask[i].mask = qToLittleEndian(mask); + i++; + } + xcb_input_xi_select_events(xcb_connection(), window, i, &(xiEventMask.data()->header)); + diff --git a/user/qt5-qtbase/qt-musl-iconv-no-bom.patch b/user/qt5-qtbase/qt-musl-iconv-no-bom.patch index be2afc714..9df5d594d 100644 --- a/user/qt5-qtbase/qt-musl-iconv-no-bom.patch +++ b/user/qt5-qtbase/qt-musl-iconv-no-bom.patch @@ -1,6 +1,6 @@ --- qtbase/src/corelib/codecs/qiconvcodec.cpp 2017-01-18 15:20:58.000000000 +0100 +++ qtbase/src/corelib/codecs/qiconvcodec.cpp 2017-02-21 14:33:32.423808603 +0100 -@@ -63,7 +63,7 @@ +@@ -61,7 +61,7 @@ #elif defined(Q_OS_AIX) # define NO_BOM # define UTF16 "UCS-2" diff --git a/user/qt5-qtbase/time64.patch b/user/qt5-qtbase/time64.patch new file mode 100644 index 000000000..76b4671c6 --- /dev/null +++ b/user/qt5-qtbase/time64.patch @@ -0,0 +1,62 @@ +From e06ac2e26c8490a7b8702e9462d1f38244ac3f0f Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Mon, 25 Nov 2019 08:27:39 -0800 +Subject: [PATCH] input: Make use of timeval portable for 64bit time_t + +This patch avoids using time field of input_event structure which is not available +on 32bit arches supporting 64bit time_t structs, Patch makes it compatible with new +and keeps old input.h implementation functional as well. + +See https://sourceware.org/glibc/wiki/Y2038ProofnessDesign + +Upstream-Status: Submitted [https://codereview.qt-project.org/c/qt/qtbase/+/282610] +Signed-off-by: Khem Raj +--- + .../input/evdevkeyboard/qevdevkeyboardhandler.cpp | 10 +++++++++- + .../input/evdevtouch/qevdevtouchhandler.cpp | 2 +- + 2 files changed, 10 insertions(+), 2 deletions(-) + +diff --git a/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler.cpp b/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler.cpp +index 666613f09d..0e3e0ea0de 100644 +--- a/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler.cpp ++++ b/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler.cpp +@@ -58,6 +58,11 @@ + #include + #endif + ++#ifndef input_event_sec ++#define input_event_sec time.tv_sec ++#define input_event_usec time.tv_usec ++#endif ++ + QT_BEGIN_NAMESPACE + + Q_LOGGING_CATEGORY(qLcEvdevKey, "qt.qpa.input") +@@ -149,7 +154,10 @@ void QEvdevKeyboardHandler::switchLed(int led, bool state) + qCDebug(qLcEvdevKey) << "switchLed" << led << state; + + struct ::input_event led_ie; +- ::gettimeofday(&led_ie.time, 0); ++ struct timeval tval; ++ ::gettimeofday(&tval, 0); ++ led_ie.input_event_sec = tval.tv_sec; ++ led_ie.input_event_usec = tval.tv_usec; + led_ie.type = EV_LED; + led_ie.code = led; + led_ie.value = state; +diff --git a/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp b/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp +index f86f80785e..3914698f2a 100644 +--- a/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp ++++ b/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp +@@ -568,7 +568,7 @@ void QEvdevTouchScreenData::processInputEvent(input_event *data) + + // update timestamps + m_lastTimeStamp = m_timeStamp; +- m_timeStamp = data->time.tv_sec + data->time.tv_usec / 1000000.0; ++ m_timeStamp = data->input_event_sec + data->input_event_usec / 1000000.0; + + m_lastTouchPoints = m_touchPoints; + m_touchPoints.clear(); +-- +2.24.0 + -- cgit v1.2.3-60-g2f50