summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO78
-rw-r--r--PKGBUILD101
-rw-r--r--qt5-base-cflags.patch46
-rw-r--r--qtbug-74252.patch106
-rw-r--r--qtbug-82601.patch13
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 &region, 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;
+ }
+