summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Sturmlechner <asturm@gentoo.org>2019-07-26 17:25:16 +0200
committerAndreas Sturmlechner <asturm@gentoo.org>2019-07-26 18:43:38 +0200
commitef72a86e4ea8465c58af50314f403a1602b3e086 (patch)
tree61445a075c7a11275a90f856cb533437eec4ec0a /kde-apps/akonadi
parentdev-libs/pkcs11-helper: arm64 stable (diff)
downloadgentoo-ef72a86e4ea8465c58af50314f403a1602b3e086.tar.gz
gentoo-ef72a86e4ea8465c58af50314f403a1602b3e086.tar.bz2
gentoo-ef72a86e4ea8465c58af50314f403a1602b3e086.zip
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@gentoo.org>
Diffstat (limited to 'kde-apps/akonadi')
-rw-r--r--kde-apps/akonadi/akonadi-19.04.3-r1.ebuild127
-rw-r--r--kde-apps/akonadi/files/akonadi-19.04.3-qmysql-fix.patch44
2 files changed, 171 insertions, 0 deletions
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 000000000000..364a5f02cd82
--- /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 000000000000..c26d3d993b2b
--- /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?= <dvratil@kde.org>
+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
+