commit:     ef72a86e4ea8465c58af50314f403a1602b3e086
Author:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Fri Jul 26 15:25:16 2019 +0000
Commit:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Fri Jul 26 16:43:38 2019 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=ef72a86e

kde-apps/akonadi: Fix non-lowercase external QMYSQL dbs

Package-Manager: Portage-2.3.66, Repoman-2.3.16
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>

 kde-apps/akonadi/akonadi-19.04.3-r1.ebuild         | 127 +++++++++++++++++++++
 .../akonadi/files/akonadi-19.04.3-qmysql-fix.patch |  44 +++++++
 2 files changed, 171 insertions(+)

diff --git a/kde-apps/akonadi/akonadi-19.04.3-r1.ebuild 
b/kde-apps/akonadi/akonadi-19.04.3-r1.ebuild
new file mode 100644
index 00000000000..364a5f02cd8
--- /dev/null
+++ b/kde-apps/akonadi/akonadi-19.04.3-r1.ebuild
@@ -0,0 +1,127 @@
+# Copyright 1999-2019 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+KDE_DESIGNERPLUGIN="true"
+KDE_TEST="forceoptional"
+VIRTUALDBUS_TEST="true"
+VIRTUALX_REQUIRED="test"
+inherit kde5
+
+DESCRIPTION="Storage service for PIM data and libraries for PIM apps"
+HOMEPAGE="https://community.kde.org/KDE_PIM/akonadi";
+
+KEYWORDS="~amd64 ~arm ~arm64 ~x86"
+LICENSE="LGPL-2.1+"
+IUSE="+mysql postgres sqlite tools xml"
+
+REQUIRED_USE="|| ( mysql postgres sqlite ) test? ( tools )"
+
+COMMON_DEPEND="
+       $(add_frameworks_dep kcompletion)
+       $(add_frameworks_dep kconfig)
+       $(add_frameworks_dep kconfigwidgets)
+       $(add_frameworks_dep kcoreaddons)
+       $(add_frameworks_dep kcrash)
+       $(add_frameworks_dep kdbusaddons)
+       $(add_frameworks_dep ki18n)
+       $(add_frameworks_dep kiconthemes)
+       $(add_frameworks_dep kio)
+       $(add_frameworks_dep kitemmodels)
+       $(add_frameworks_dep kitemviews)
+       $(add_frameworks_dep kwidgetsaddons)
+       $(add_frameworks_dep kwindowsystem)
+       $(add_frameworks_dep kxmlgui)
+       $(add_qt_dep qtdbus)
+       $(add_qt_dep qtgui)
+       $(add_qt_dep qtnetwork)
+       $(add_qt_dep qtsql 'mysql?,postgres?')
+       $(add_qt_dep qtwidgets)
+       $(add_qt_dep qtxml)
+       sqlite? (
+               $(add_qt_dep qtsql 'sqlite' '' '5=')
+               dev-db/sqlite:3
+       )
+       xml? ( dev-libs/libxml2 )
+"
+DEPEND="${COMMON_DEPEND}
+       dev-libs/boost
+       dev-libs/libxslt
+       test? ( sys-apps/dbus )
+"
+RDEPEND="${COMMON_DEPEND}
+       !<kde-apps/kapptemplate-17.11.80
+       !kde-apps/kdepim-l10n
+       !kde-apps/kdepimlibs
+       mysql? ( virtual/mysql )
+       postgres? ( dev-db/postgresql )
+"
+
+# some akonadi tests time out, that probably needs more work as it's ~700 tests
+RESTRICT+=" test"
+
+PATCHES=(
+       "${FILESDIR}/${PN}-18.12.2-mysql56-crash.patch"
+       "${FILESDIR}/${P}-qmysql-fix.patch"
+)
+
+pkg_setup() {
+       # Set default storage backend in order: MySQL, PostgreSQL, SQLite
+       # reverse driver check to keep the order
+       use sqlite && DRIVER="QSQLITE3"
+       use postgres && DRIVER="QPSQL"
+       use mysql && DRIVER="QMYSQL"
+
+       if use mysql && has_version ">=dev-db/mariadb-10.4"; then
+               ewarn "If an existing Akonadi QMYSQL database is being upgraded 
using"
+               ewarn ">=dev-db/mariadb-10.4 and KMail stops fetching and 
sending mail,"
+               ewarn "check ~/.local/share/akonadi/akonadiserver.error for 
errors like:"
+               ewarn "  \"Cannot add or update a child row: a foreign key 
constraint fails\""
+               ewarn
+               ewarn "Manual steps are required to fix it, see also:"
+               ewarn "  https://bugs.gentoo.org/688746 (see Whiteboard)"
+               ewarn "  https://bugs.kde.org/show_bug.cgi?id=409224";
+               ewarn
+       fi
+
+       if use sqlite || has_version "<${CATEGORY}/${P}[sqlite]"; then
+               ewarn "We strongly recommend you change your Akonadi database 
backend to either MySQL"
+               ewarn "or PostgreSQL in your user configuration."
+               ewarn "In particular, kde-apps/kmail does not work properly 
with the sqlite backend."
+       fi
+
+       kde5_pkg_setup
+}
+
+src_configure() {
+       local mycmakeargs=(
+               -DAKONADI_BUILD_QSQLITE=$(usex sqlite)
+               -DBUILD_TOOLS=$(usex tools)
+               $(cmake-utils_use_find_package xml LibXml2)
+       )
+
+       kde5_src_configure
+}
+
+src_install() {
+       # Who knows, maybe it accidentally fixes our permission issues
+       cat <<-EOF > "${T}"/akonadiserverrc
+[%General]
+Driver=${DRIVER}
+EOF
+       insinto /usr/share/config/akonadi
+       doins "${T}"/akonadiserverrc
+
+       kde5_src_install
+}
+
+pkg_postinst() {
+       kde5_pkg_postinst
+       elog "You can select the storage backend in 
~/.config/akonadi/akonadiserverrc."
+       elog "Available drivers are:"
+       use mysql && elog "  QMYSQL"
+       use postgres && elog "  QPSQL"
+       use sqlite && elog "  QSQLITE3"
+       elog "${DRIVER} has been set as your default akonadi storage backend."
+}

diff --git a/kde-apps/akonadi/files/akonadi-19.04.3-qmysql-fix.patch 
b/kde-apps/akonadi/files/akonadi-19.04.3-qmysql-fix.patch
new file mode 100644
index 00000000000..c26d3d993b2
--- /dev/null
+++ b/kde-apps/akonadi/files/akonadi-19.04.3-qmysql-fix.patch
@@ -0,0 +1,44 @@
+From 8b8db29d10b2ef92deb2d87ff613f3d7f39af34e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Daniel=20Vr=C3=A1til?= <[email protected]>
+Date: Fri, 26 Jul 2019 13:31:58 +0200
+Subject: Fix compatibility with QMYSQL driver after 74aed95
+
+Summary:
+QPSQL requires the table name passed to QSqlDatabase::record() to be lowercase
+since Qt 5.13, but doing that breaks QMYSQL, so only adjust the name when
+using QPSQL.
+
+CCBUG: 409234
+
+Reviewers: #kde_pim, vkrause
+
+Reviewed By: #kde_pim, vkrause
+
+Subscribers: kde-pim
+
+Tags: #kde_pim
+
+Differential Revision: https://phabricator.kde.org/D22677
+---
+ src/server/storage/dbintrospector.cpp | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/src/server/storage/dbintrospector.cpp 
b/src/server/storage/dbintrospector.cpp
+index 70d952a..932444c 100644
+--- a/src/server/storage/dbintrospector.cpp
++++ b/src/server/storage/dbintrospector.cpp
+@@ -76,7 +76,10 @@ bool DbIntrospector::hasColumn(const QString &tableName, 
const QString &columnNa
+     QStringList columns = m_columnCache.value(tableName);
+ 
+     if (columns.isEmpty()) {
+-        const QSqlRecord table = m_database.record(tableName.toLower());
++        // QPSQL requires the name to be lower case, but it breaks 
compatibility with existing
++        // tables with other drivers (see BKO#409234). Yay for abstraction...
++        const auto name = (DbType::type(m_database) == DbType::PostgreSQL) ? 
tableName.toLower() : tableName;
++        const QSqlRecord table = m_database.record(name);
+         const int numTables = table.count();
+         columns.reserve(numTables);
+         for (int i = 0; i < numTables; ++i) {
+-- 
+cgit v1.1
+

Reply via email to