diff options
author | Andreas Sturmlechner <asturm@gentoo.org> | 2019-07-26 17:25:16 +0200 |
---|---|---|
committer | Andreas Sturmlechner <asturm@gentoo.org> | 2019-07-26 18:43:38 +0200 |
commit | ef72a86e4ea8465c58af50314f403a1602b3e086 (patch) | |
tree | 61445a075c7a11275a90f856cb533437eec4ec0a /kde-apps/akonadi | |
parent | dev-libs/pkcs11-helper: arm64 stable (diff) | |
download | gentoo-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.ebuild | 127 | ||||
-rw-r--r-- | kde-apps/akonadi/files/akonadi-19.04.3-qmysql-fix.patch | 44 |
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 + |