diff options
-rw-r--r-- | .SRCINFO | 78 | ||||
-rw-r--r-- | PKGBUILD | 101 | ||||
-rw-r--r-- | qt5-base-cflags.patch | 46 | ||||
-rw-r--r-- | qtbug-74252.patch | 106 | ||||
-rw-r--r-- | qtbug-82601.patch | 13 |
5 files changed, 344 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO new file mode 100644 index 000000000000..bf0954650773 --- /dev/null +++ b/.SRCINFO @@ -0,0 +1,78 @@ +pkgbase = qt5-base + pkgdesc = A cross-platform application and UI framework + pkgver = 5.15.0 + pkgrel = 3 + url = https://www.qt.io + arch = x86_64 + groups = qt + groups = qt5 + license = GPL3 + license = LGPL3 + license = FDL + license = custom + makedepends = libfbclient + makedepends = mariadb-libs + makedepends = sqlite + makedepends = unixodbc + makedepends = postgresql-libs + makedepends = alsa-lib + makedepends = gst-plugins-base-libs + makedepends = gtk3 + makedepends = libpulse + makedepends = cups + makedepends = freetds + makedepends = vulkan-headers + depends = libjpeg-turbo + depends = xcb-util-keysyms + depends = xcb-util-renderutil + depends = libgl + depends = fontconfig + depends = xdg-utils + depends = shared-mime-info + depends = xcb-util-wm + depends = libxrender + depends = libxi + depends = sqlite + depends = xcb-util-image + depends = mesa + depends = tslib + depends = libinput + depends = libxkbcommon-x11 + depends = libproxy + depends = libcups + depends = double-conversion + depends = md4c + optdepends = qt5-svg: to use SVG icon themes + optdepends = qt5-wayland: to run Qt applications in a Wayland session + optdepends = qt5-translations: for some native UI translations + optdepends = postgresql-libs: PostgreSQL driver + optdepends = mariadb-libs: MariaDB driver + optdepends = unixodbc: ODBC driver + optdepends = libfbclient: Firebird/iBase driver + optdepends = freetds: MS SQL driver + optdepends = gtk3: GTK platform plugin + optdepends = perl: for fixqt4headers and syncqt + conflicts = qtchooser + source = https://download.qt.io/official_releases/qt/5.15/5.15.0/submodules/qtbase-everywhere-src-5.15.0.tar.xz + source = qt5-base-QTBUG-82910.patch::https://codereview.qt-project.org/gitweb?p=qt/qtbase.git;a=patch;h=54aa63be9b74e8de72db9efbe6809ab1a97b29a7 + source = qt5-base-cflags.patch + source = qtbug-74252.patch + source = qtbug-78966.patch::https://code.qt.io/cgit/qt/qtbase.git/patch/?id=777f2a1c + source = qtbug-82601.patch + sha256sums = 9e7af10aece15fa9500369efde69cb220eee8ec3a6818afe01ce1e7d484824c5 + sha256sums = abb94453c9fe54fde4811bc5475b88796c8db1f5cd75ddc68918aff20139b1aa + sha256sums = cf707cd970650f8b60f8897692b36708ded9ba116723ec8fcd885576783fe85c + sha256sums = 0c489d2faedd35670232a2c028c5c78a606ab81bb6f40f58e3cfe2bc6b6ac3b2 + sha256sums = d7d58b2cadd6e79c3dfb69da664ecac9c95a78d6e142cb8687fce68e24a10776 + sha256sums = edc040e258040851067fe26ff82f6979b65c97a01efc467dc9e2e87ffa395769 + +pkgname = qt5-base + pkgdesc = A cross-platform application and UI framework + +pkgname = qt5-xcb-private-headers + pkgdesc = Private headers for Qt5 Xcb + groups = + depends = qt5-base=5.15.0 + optdepends = + conflicts = + diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 000000000000..630311adc7ed --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,101 @@ +# Maintainer: Sefa Eyeoglu <contact@scrumplex.net> +# Maintainer: Felix Yan <felixonmars@archlinux.org> +# Contributor: Andrea Scarpino <andrea@archlinux.org> + +pkgname=qt5-base-fractional-fix +_qtver=5.15.0 +pkgver=${_qtver/-/} +pkgrel=3 +arch=('x86_64') +url='https://www.qt.io' +license=('GPL3' 'LGPL3' 'FDL' 'custom') +pkgdesc='A cross-platform application and UI framework' +depends=('libjpeg-turbo' 'xcb-util-keysyms' 'xcb-util-renderutil' 'libgl' 'fontconfig' 'xdg-utils' + 'shared-mime-info' 'xcb-util-wm' 'libxrender' 'libxi' 'sqlite' 'xcb-util-image' 'mesa' + 'tslib' 'libinput' 'libxkbcommon-x11' 'libproxy' 'libcups' 'double-conversion' 'md4c') +makedepends=('libfbclient' 'mariadb-libs' 'sqlite' 'unixodbc' 'postgresql-libs' 'alsa-lib' 'gst-plugins-base-libs' + 'gtk3' 'libpulse' 'cups' 'freetds' 'vulkan-headers') +optdepends=('qt5-svg: to use SVG icon themes' + 'qt5-wayland: to run Qt applications in a Wayland session' + 'qt5-translations: for some native UI translations' + 'postgresql-libs: PostgreSQL driver' + 'mariadb-libs: MariaDB driver' + 'unixodbc: ODBC driver' + 'libfbclient: Firebird/iBase driver' + 'freetds: MS SQL driver' + 'gtk3: GTK platform plugin' + 'perl: for fixqt4headers and syncqt') +conflicts=('qtchooser') +provides=('qt5-base') +conflicts=('qt5-base') +_pkgfqn="qtbase-everywhere-src-${_qtver}" +source=("https://download.qt.io/official_releases/qt/${pkgver%.*}/${_qtver}/submodules/${_pkgfqn}.tar.xz" + "qt5-base-QTBUG-82910.patch::https://codereview.qt-project.org/gitweb?p=qt/qtbase.git;a=patch;h=54aa63be9b74e8de72db9efbe6809ab1a97b29a7" + qt5-base-cflags.patch + qtbug-74252.patch + qtbug-78966.patch::"https://code.qt.io/cgit/qt/qtbase.git/patch/?id=777f2a1c" + qtbug-82601.patch) +sha256sums=('9e7af10aece15fa9500369efde69cb220eee8ec3a6818afe01ce1e7d484824c5' + 'abb94453c9fe54fde4811bc5475b88796c8db1f5cd75ddc68918aff20139b1aa' + 'cf707cd970650f8b60f8897692b36708ded9ba116723ec8fcd885576783fe85c' + '0c489d2faedd35670232a2c028c5c78a606ab81bb6f40f58e3cfe2bc6b6ac3b2' + 'd7d58b2cadd6e79c3dfb69da664ecac9c95a78d6e142cb8687fce68e24a10776' + 'edc040e258040851067fe26ff82f6979b65c97a01efc467dc9e2e87ffa395769') + +prepare() { + cd ${_pkgfqn} + + patch -p1 -i ../qt5-base-QTBUG-82910.patch # https://codereview.qt-project.org/c/qt/qtbase/+/299182 + patch -p1 -i ../qtbug-74252.patch # Fix displaying custom icons + patch -p1 -i ../qtbug-78966.patch # Fix QToolButton menus on multi-screen systems + patch -p1 -i ../qt5-base-cflags.patch # Use system CFLAGS + patch -p1 -i ../qtbug-82601.patch # Workaround broken fractional scaling in some circumstances +} + +build() { + cd ${_pkgfqn} + + ./configure -confirm-license -opensource -v \ + -prefix /usr \ + -docdir /usr/share/doc/qt \ + -headerdir /usr/include/qt \ + -archdatadir /usr/lib/qt \ + -datadir /usr/share/qt \ + -sysconfdir /etc/xdg \ + -examplesdir /usr/share/doc/qt/examples \ + -plugin-sql-{psql,mysql,sqlite,odbc,ibase} \ + -system-sqlite \ + -openssl-linked \ + -nomake examples \ + -no-rpath \ + -dbus-linked \ + -system-harfbuzz \ + -journald \ + -no-mimetype-database \ + -no-use-gold-linker \ + -reduce-relocations + make +} + +package() { + pkgdesc='A cross-platform application and UI framework' + + cd ${_pkgfqn} + make INSTALL_ROOT="${pkgdir}" install + + install -Dm644 LICENSE* -t "$pkgdir"/usr/share/licenses/$pkgname + + # Drop QMAKE_PRL_BUILD_DIR because reference the build dir + find "${pkgdir}/usr/lib" -type f -name '*.prl' \ + -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \; + + # Fix wrong qmake path in pri file + sed -i "s|${srcdir}/${_pkgfqn}|/usr|" \ + "${pkgdir}"/usr/lib/qt/mkspecs/modules/qt_lib_bootstrap_private.pri + + # Symlinks for backwards compatibility + for b in "${pkgdir}"/usr/bin/*; do + ln -s $(basename $b) "${pkgdir}"/usr/bin/$(basename $b)-qt5 + done +} + diff --git a/qt5-base-cflags.patch b/qt5-base-cflags.patch new file mode 100644 index 000000000000..c33aa78e7e93 --- /dev/null +++ b/qt5-base-cflags.patch @@ -0,0 +1,46 @@ +diff --git a/mkspecs/common/g++-unix.conf b/mkspecs/common/g++-unix.conf +index a493cd5984..41342f5020 100644 +--- a/mkspecs/common/g++-unix.conf ++++ b/mkspecs/common/g++-unix.conf +@@ -10,5 +10,6 @@ + + include(g++-base.conf) + +-QMAKE_LFLAGS_RELEASE += -Wl,-O1 ++SYSTEM_LDFLAGS = $$(LDFLAGS) ++!isEmpty(SYSTEM_LDFLAGS) { eval(QMAKE_LFLAGS_RELEASE += $$(LDFLAGS)) } else { QMAKE_LFLAGS_RELEASE += -Wl,-O1 } + QMAKE_LFLAGS_NOUNDEF += -Wl,--no-undefined +diff --git a/mkspecs/common/gcc-base.conf b/mkspecs/common/gcc-base.conf +index 1f919d270a..7ef6046326 100644 +--- a/mkspecs/common/gcc-base.conf ++++ b/mkspecs/common/gcc-base.conf +@@ -40,9 +40,11 @@ QMAKE_CFLAGS_OPTIMIZE_SIZE = -Os + QMAKE_CFLAGS_DEPS += -M + QMAKE_CFLAGS_WARN_ON += -Wall -Wextra + QMAKE_CFLAGS_WARN_OFF += -w +-QMAKE_CFLAGS_RELEASE += $$QMAKE_CFLAGS_OPTIMIZE +-QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -g +-QMAKE_CFLAGS_DEBUG += -g ++SYSTEM_CFLAGS = $$(CFLAGS) ++SYSTEM_DEBUG_CFLAGS = $$(DEBUG_CFLAGS) ++!isEmpty(SYSTEM_CFLAGS) { eval(QMAKE_CFLAGS_RELEASE += $$(CPPFLAGS) $$(CFLAGS)) } else { QMAKE_CFLAGS_RELEASE += $$QMAKE_CFLAGS_OPTIMIZE } ++!isEmpty(SYSTEM_CFLAGS) { eval(QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$(CPPFLAGS) -g $$(CFLAGS)) } else { QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -g } ++!isEmpty(SYSTEM_DEBUG_CFLAGS) { eval(QMAKE_CFLAGS_DEBUG += $$(DEBUG_CFLAGS)) } else { QMAKE_CFLAGS_DEBUG += -g } + QMAKE_CFLAGS_SHLIB += $$QMAKE_CFLAGS_PIC + QMAKE_CFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_PIC + QMAKE_CFLAGS_APP += $$QMAKE_CFLAGS_PIC +@@ -59,9 +61,11 @@ QMAKE_CXXFLAGS += $$QMAKE_CFLAGS + QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS + QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON + QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF +-QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE +-QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO +-QMAKE_CXXFLAGS_DEBUG += $$QMAKE_CFLAGS_DEBUG ++SYSTEM_CXXFLAGS = $$(CXXFLAGS) ++SYSTEM_DEBUG_CXXFLAGS = $$(DEBUG_CXXFLAGS) ++!isEmpty(SYSTEM_CXXFLAGS) { eval(QMAKE_CXXFLAGS_RELEASE += $$(CPPFLAGS) $$(CXXFLAGS)) } else { QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_OPTIMIZE } ++!isEmpty(SYSTEM_CXXFLAGS) { eval(QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$(CPPFLAGS) -g $$(CXXFLAGS)) } else { QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -g } ++!isEmpty(SYSTEM_DEBUG_CXXFLAGS) { eval(QMAKE_CXXFLAGS_DEBUG += $$(DEBUG_CXXFLAGS)) } else { QMAKE_CXXFLAGS_DEBUG += -g } + QMAKE_CXXFLAGS_SHLIB += $$QMAKE_CFLAGS_SHLIB + QMAKE_CXXFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_STATIC_LIB + QMAKE_CXXFLAGS_APP += $$QMAKE_CFLAGS_APP diff --git a/qtbug-74252.patch b/qtbug-74252.patch new file mode 100644 index 000000000000..818f859d2541 --- /dev/null +++ b/qtbug-74252.patch @@ -0,0 +1,106 @@ +From add92a551cf601b5c9e074046326f95ccc38062e Mon Sep 17 00:00:00 2001 +From: Albert Astals Cid <aacid@kde.org> +Date: Sat, 23 May 2020 01:35:18 +0200 +Subject: [PATCH] Do not fully initialize QIconLoader when setting the fallback + theme + +We need this because without this patch you get bugs both +if you call QIcon::setFallbackThemeName before creating the QGuiApplication and +if you call QIcon::setFallbackThemeName after creating QGuiApplication + +Why do you get a bug if you call QIconLoader::setFallbackThemeName +before creating the QGuiApplication: + * QIcon::setFallbackThemeName calls QIconLoader::instance + * QIconLoader::instance calls QIconLoader::ensureInitialized + * QIconLoader::ensureInitialized calls systemThemeName + * systemThemeName asks the current QPlatformTheme for its + QPlatformTheme::SystemIconThemeName + * But since we're calling this before creating the QGuiApplication + there is no current QPlatformTheme yet, so systemThemeName + is set to empty, which is obviously not what we want + +Why do you get a bug if you call QIconLoader::setFallbackThemeName +after creating the QGuiApplication: + * QGuiApplicationPrivate::init calls + QGuiApplicationPrivate::createPlatformIntegration + * QGuiApplicationPrivate::createPlatformIntegration sets the + current QPlatformTheme and at the end of the very same function + uses QIcon::fromTheme + * Since we haven't called QIconLoader::setFallbackThemeName yet + there is at least one icon lookup that doesn't take + the fallback theme we would like to have into account + +This patch makes it so calling QIconLoader::setFallbackThemeName +before creating the QGuiApplication works. + +The only thing we want to do from QIcon::setFallbackThemeName is set +the internal m_userFallbackTheme, it doesn't care about doing +further initialization of QIconLoader, if it's done, great it's done, +if it is not initialized yet, great it will be initialized later +when someone actually tries to use the QIconloader. + +So it's OK for ensureInitialized() to return early if there is no +platform theme yet, because it will be called again later. + +Pick-to: 5.12 +Pick-to: 5.15 +Fixes: QTBUG-74252 +Change-Id: I65268fc3d3d0bd282d76c76cf75e495bcc9d1a30 +Done-with: Albert Astals Cid <albert.astals.cid@kdab.com> +Reviewed-by: Albert Astals Cid <albert.astals.cid@kdab.com> +Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io> +--- + src/gui/image/qicon.cpp | 3 +++ + src/gui/image/qiconloader.cpp | 15 ++++++++++++--- + 2 files changed, 15 insertions(+), 3 deletions(-) + +diff --git a/src/gui/image/qicon.cpp b/src/gui/image/qicon.cpp +index 36f499711e9..91da21c477d 100644 +--- a/src/gui/image/qicon.cpp ++++ b/src/gui/image/qicon.cpp +@@ -1238,6 +1238,9 @@ QString QIcon::fallbackThemeName() + themeSearchPath() containing an index.theme + file describing its contents. + ++ \note This should be done before creating \l QGuiApplication, to ensure ++ correct initialization. ++ + \sa fallbackThemeName(), themeSearchPaths(), themeName() + */ + void QIcon::setFallbackThemeName(const QString &name) +diff --git a/src/gui/image/qiconloader.cpp b/src/gui/image/qiconloader.cpp +index 15ab1b3cd90..3fa3bb9c598 100644 +--- a/src/gui/image/qiconloader.cpp ++++ b/src/gui/image/qiconloader.cpp +@@ -112,10 +112,9 @@ extern QFactoryLoader *qt_iconEngineFactoryLoader(); // qicon.cpp + void QIconLoader::ensureInitialized() + { + if (!m_initialized) { ++ if (!QGuiApplicationPrivate::platformTheme()) ++ return; // it's too early: try again later (QTBUG-74252) + m_initialized = true; +- +- Q_ASSERT(qApp); +- + m_systemTheme = systemThemeName(); + + if (m_systemTheme.isEmpty()) +@@ -125,6 +124,16 @@ void QIconLoader::ensureInitialized() + } + } + ++/*! ++ \internal ++ Gets an instance. ++ ++ \l QIcon::setFallbackThemeName() should be called before QGuiApplication is ++ created, to avoid a race condition (QTBUG-74252). When this function is ++ called from there, ensureInitialized() does not succeed because there ++ is no QPlatformTheme yet, so systemThemeName() is empty, and we don't want ++ m_systemTheme to get intialized to the fallback theme instead of the normal one. ++*/ + QIconLoader *QIconLoader::instance() + { + iconLoaderInstance()->ensureInitialized(); +-- +2.16.3 diff --git a/qtbug-82601.patch b/qtbug-82601.patch new file mode 100644 index 000000000000..4af6fac93c63 --- /dev/null +++ b/qtbug-82601.patch @@ -0,0 +1,13 @@ +diff --git a/src/gui/kernel/qhighdpiscaling_p.h b/src/gui/kernel/qhighdpiscaling_p.h +index 55ad6df5c9da3d11a8900754eebc27528aec90ec..9c3d0cdba28a1dd51c18d3fcc0350a11f8000ebc 100644 +--- a/src/gui/kernel/qhighdpiscaling_p.h ++++ b/src/gui/kernel/qhighdpiscaling_p.h +@@ -204,7 +204,7 @@ inline QRegion scale(const QRegion ®ion, qreal scaleFactor, QPoint origin = Q + + QRegion scaled; + for (const QRect &rect : region) +- scaled += scale(rect, scaleFactor, origin); ++ scaled += scale(QRectF(rect), scaleFactor, origin).toRect(); + return scaled; + } + |