gnu: Add akonadi.
* gnu/packages/kde-pim.scm, gnu/packages/patches/akonadi-paths.patch, gnu/packages/patches/akonadi-Revert-Make-installation-properly-relocatabl.patch gnu/packages/patches/akonadi-timestamps.patch: New files. * gnu/local.mk (MODULES): Add kde-pim.scm. (dist_patch): Add the patches.master
parent
0895002f68
commit
e35b50ecdd
|
@ -284,6 +284,7 @@ GNU_SYSTEM_MODULES = \
|
||||||
%D%/packages/kde.scm \
|
%D%/packages/kde.scm \
|
||||||
%D%/packages/kde-frameworks.scm \
|
%D%/packages/kde-frameworks.scm \
|
||||||
%D%/packages/kde-multimedia.scm \
|
%D%/packages/kde-multimedia.scm \
|
||||||
|
%D%/packages/kde-pim.scm \
|
||||||
%D%/packages/kde-plasma.scm \
|
%D%/packages/kde-plasma.scm \
|
||||||
%D%/packages/kde-systemtools.scm \
|
%D%/packages/kde-systemtools.scm \
|
||||||
%D%/packages/kde-utils.scm \
|
%D%/packages/kde-utils.scm \
|
||||||
|
@ -707,6 +708,9 @@ dist_patch_DATA = \
|
||||||
%D%/packages/patches/aegisub-icu59-include-unistr.patch \
|
%D%/packages/patches/aegisub-icu59-include-unistr.patch \
|
||||||
%D%/packages/patches/aegisub-boost68.patch \
|
%D%/packages/patches/aegisub-boost68.patch \
|
||||||
%D%/packages/patches/agg-am_c_prototype.patch \
|
%D%/packages/patches/agg-am_c_prototype.patch \
|
||||||
|
%D%/packages/patches/akonadi-paths.patch \
|
||||||
|
%D%/packages/patches/akonadi-Revert-Make-installation-properly-relocatabl.patch \
|
||||||
|
%D%/packages/patches/akonadi-timestamps.patch \
|
||||||
%D%/packages/patches/allegro-mesa-18.2.5-and-later.patch \
|
%D%/packages/patches/allegro-mesa-18.2.5-and-later.patch \
|
||||||
%D%/packages/patches/amule-crypto-6.patch \
|
%D%/packages/patches/amule-crypto-6.patch \
|
||||||
%D%/packages/patches/antiword-CVE-2014-8123.patch \
|
%D%/packages/patches/antiword-CVE-2014-8123.patch \
|
||||||
|
|
|
@ -0,0 +1,112 @@
|
||||||
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
|
;;; Copyright © 2017, 2019, 2020 Hartmut Goebel <h.goebel@crazy-compilers.com>
|
||||||
|
;;;
|
||||||
|
;;; This file is part of GNU Guix.
|
||||||
|
;;;
|
||||||
|
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||||
|
;;; under the terms of the GNU General Public License as published by
|
||||||
|
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||||
|
;;; your option) any later version.
|
||||||
|
;;;
|
||||||
|
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||||
|
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
;;; GNU General Public License for more details.
|
||||||
|
;;;
|
||||||
|
;;; You should have received a copy of the GNU General Public License
|
||||||
|
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
(define-module (gnu packages kde-pim)
|
||||||
|
#:use-module (guix build-system qt)
|
||||||
|
#:use-module (guix download)
|
||||||
|
#:use-module ((guix licenses) #:prefix license:)
|
||||||
|
#:use-module (guix packages)
|
||||||
|
#:use-module (guix utils)
|
||||||
|
#:use-module (gnu packages)
|
||||||
|
#:use-module (gnu packages boost)
|
||||||
|
#:use-module (gnu packages databases)
|
||||||
|
#:use-module (gnu packages documentation)
|
||||||
|
#:use-module (gnu packages gnome)
|
||||||
|
#:use-module (gnu packages kde-frameworks)
|
||||||
|
#:use-module (gnu packages qt)
|
||||||
|
#:use-module (gnu packages sqlite)
|
||||||
|
#:use-module (gnu packages xml))
|
||||||
|
|
||||||
|
(define-public akonadi
|
||||||
|
(package
|
||||||
|
(name "akonadi")
|
||||||
|
(version "19.08.3")
|
||||||
|
(source
|
||||||
|
(origin
|
||||||
|
(method url-fetch)
|
||||||
|
(uri (string-append "mirror://kde/stable/applications/" version
|
||||||
|
"/src/akonadi-" version ".tar.xz"))
|
||||||
|
(sha256
|
||||||
|
(base32 "0v7f1049wjnqxhwxr1443wc2cfbdqmf15xcwjz3j1m0vgdva9pyg"))
|
||||||
|
(patches (search-patches
|
||||||
|
"akonadi-paths.patch"
|
||||||
|
"akonadi-timestamps.patch"
|
||||||
|
"akonadi-Revert-Make-installation-properly-relocatabl.patch"))))
|
||||||
|
(build-system qt-build-system)
|
||||||
|
(native-inputs
|
||||||
|
`(("extra-cmake-modules" ,extra-cmake-modules)
|
||||||
|
("qttools" ,qttools)
|
||||||
|
("shared-mime-info" ,shared-mime-info)))
|
||||||
|
(inputs
|
||||||
|
`(("boost" ,boost)
|
||||||
|
("kconfig" ,kconfig)
|
||||||
|
("kconfigwidgets" ,kconfigwidgets)
|
||||||
|
("kcoreaddons" ,kcoreaddons)
|
||||||
|
("kcrash" ,kcrash)
|
||||||
|
("kdbusaddons" ,kdbusaddons)
|
||||||
|
("kdesignerplugin" ,kdesignerplugin)
|
||||||
|
("ki18n" ,ki18n)
|
||||||
|
("kiconthemes" ,kiconthemes)
|
||||||
|
("kio" ,kio)
|
||||||
|
("kitemmodels" ,kitemmodels)
|
||||||
|
("kitemviews" ,kitemviews)
|
||||||
|
("kwidgetsaddons" ,kwidgetsaddons)
|
||||||
|
("kwindowsystem" ,kwindowsystem)
|
||||||
|
("kxmlgui" ,kxmlgui)
|
||||||
|
("libxml2" ,libxml2)
|
||||||
|
("libxslt" ,libxslt)
|
||||||
|
;; Do NOT add mysql or postgresql to the inputs. Otherwise the binaries
|
||||||
|
;; and wrapped files will refer to them, even if the user choices none
|
||||||
|
;; of these. Executables are searched on $PATH then.
|
||||||
|
("qtbase" ,qtbase)
|
||||||
|
("sqlite" ,sqlite)))
|
||||||
|
(arguments
|
||||||
|
`(#:tests? #f ;; TODO 135/167 tests fail
|
||||||
|
#:configure-flags '("-DDATABASE_BACKEND=SQLITE") ; lightweight
|
||||||
|
#:modules ((ice-9 textual-ports)
|
||||||
|
,@%qt-build-system-modules)
|
||||||
|
#:phases
|
||||||
|
(modify-phases (@ (guix build qt-build-system) %standard-phases)
|
||||||
|
(add-before 'configure 'add-definitions
|
||||||
|
(lambda _
|
||||||
|
(let ((out (assoc-ref %outputs "out"))
|
||||||
|
(mysql (assoc-ref %build-inputs "mysql"))
|
||||||
|
(pgsql (assoc-ref %build-inputs "postgresql")))
|
||||||
|
(with-output-to-file "CMakeLists.txt.new"
|
||||||
|
(lambda _
|
||||||
|
(display
|
||||||
|
(string-append
|
||||||
|
"add_compile_definitions(\n"
|
||||||
|
"NIX_OUT=\"" out "\"\n"
|
||||||
|
;; pin binaries for mysql backend
|
||||||
|
")\n\n"))
|
||||||
|
(display
|
||||||
|
(call-with-input-file "CMakeLists.txt"
|
||||||
|
get-string-all))))
|
||||||
|
(rename-file "CMakeLists.txt.new" "CMakeLists.txt"))
|
||||||
|
#t)))))
|
||||||
|
(home-page "https://kontact.kde.org/components/akonadi.html")
|
||||||
|
(synopsis "Extensible cross-desktop storage service for PIM")
|
||||||
|
(description "Akonadi is an extensible cross-desktop Personal Information
|
||||||
|
Management (PIM) storage service. It provides a common framework for
|
||||||
|
applications to store and access mail, calendars, addressbooks, and other PIM
|
||||||
|
data.
|
||||||
|
|
||||||
|
This package contains the Akonadi PIM storage server and associated
|
||||||
|
programs.")
|
||||||
|
(license license:fdl1.2+)))
|
|
@ -0,0 +1,49 @@
|
||||||
|
From bc018b4bc816a3b51deb9739bedbf8a2268d0684 Mon Sep 17 00:00:00 2001
|
||||||
|
From: gnidorah <gnidorah@users.noreply.github.com>
|
||||||
|
Date: Fri, 22 Dec 2017 17:36:03 +0300
|
||||||
|
Subject: [PATCH] Revert "Make Akonadi installation properly relocatable"
|
||||||
|
|
||||||
|
This reverts commit b2bb55f13f2ac783f89cc414de8c39f62fa2096a.
|
||||||
|
---
|
||||||
|
CMakeLists.txt | 3 ---
|
||||||
|
KF5AkonadiConfig.cmake.in | 6 +++---
|
||||||
|
2 files changed, 3 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
Index: akonadi-19.08.0/CMakeLists.txt
|
||||||
|
===================================================================
|
||||||
|
--- akonadi-19.08.0.orig/CMakeLists.txt
|
||||||
|
+++ akonadi-19.08.0/CMakeLists.txt
|
||||||
|
@@ -306,9 +306,6 @@ configure_package_config_file(
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/KF5AkonadiConfig.cmake.in"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/KF5AkonadiConfig.cmake"
|
||||||
|
INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
|
||||||
|
- PATH_VARS AKONADI_DBUS_INTERFACES_INSTALL_DIR
|
||||||
|
- AKONADI_INCLUDE_DIR
|
||||||
|
- KF5Akonadi_DATA_DIR
|
||||||
|
)
|
||||||
|
|
||||||
|
install(FILES
|
||||||
|
Index: akonadi-19.08.0/KF5AkonadiConfig.cmake.in
|
||||||
|
===================================================================
|
||||||
|
--- akonadi-19.08.0.orig/KF5AkonadiConfig.cmake.in
|
||||||
|
+++ akonadi-19.08.0/KF5AkonadiConfig.cmake.in
|
||||||
|
@@ -26,8 +26,8 @@ if(BUILD_TESTING)
|
||||||
|
find_dependency(Qt5Test "@QT_REQUIRED_VERSION@")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
-set_and_check(AKONADI_DBUS_INTERFACES_DIR "@PACKAGE_AKONADI_DBUS_INTERFACES_INSTALL_DIR@")
|
||||||
|
-set_and_check(AKONADI_INCLUDE_DIR "@PACKAGE_AKONADI_INCLUDE_DIR@")
|
||||||
|
+set_and_check(AKONADI_DBUS_INTERFACES_DIR "@AKONADI_DBUS_INTERFACES_INSTALL_DIR@")
|
||||||
|
+set_and_check(AKONADI_INCLUDE_DIR "@AKONADI_INCLUDE_DIR@")
|
||||||
|
|
||||||
|
find_dependency(Boost "@Boost_MINIMUM_VERSION@")
|
||||||
|
|
||||||
|
@@ -35,7 +35,7 @@ include(${CMAKE_CURRENT_LIST_DIR}/KF5Ako
|
||||||
|
include(${CMAKE_CURRENT_LIST_DIR}/KF5AkonadiMacros.cmake)
|
||||||
|
|
||||||
|
# The directory where akonadi-xml.xsd and kcfg2dbus.xsl are installed
|
||||||
|
-set(KF5Akonadi_DATA_DIR "@PACKAGE_KF5Akonadi_DATA_DIR@")
|
||||||
|
+set(KF5Akonadi_DATA_DIR "@KF5Akonadi_DATA_DIR@")
|
||||||
|
|
||||||
|
####################################################################################
|
||||||
|
# CMAKE_AUTOMOC
|
|
@ -0,0 +1,49 @@
|
||||||
|
This is based on the respectve patch from NixPkgs, but with the parts pinning
|
||||||
|
mysql and postgresql executables removed. The our package definition on why.
|
||||||
|
|
||||||
|
|
||||||
|
Index: akonadi-19.08.0/src/akonadicontrol/agentmanager.cpp
|
||||||
|
===================================================================
|
||||||
|
--- akonadi-19.08.0.orig/src/akonadicontrol/agentmanager.cpp
|
||||||
|
+++ akonadi-19.08.0/src/akonadicontrol/agentmanager.cpp
|
||||||
|
@@ -78,12 +78,12 @@ AgentManager::AgentManager(bool verbose,
|
||||||
|
mStorageController = new Akonadi::ProcessControl;
|
||||||
|
mStorageController->setShutdownTimeout(15 * 1000); // the server needs more time for shutdown if we are using an internal mysqld
|
||||||
|
connect(mStorageController, &Akonadi::ProcessControl::unableToStart, this, &AgentManager::serverFailure);
|
||||||
|
- mStorageController->start(QStringLiteral("akonadiserver"), serviceArgs, Akonadi::ProcessControl::RestartOnCrash);
|
||||||
|
+ mStorageController->start(QLatin1String(NIX_OUT "/bin/akonadiserver"), serviceArgs, Akonadi::ProcessControl::RestartOnCrash);
|
||||||
|
|
||||||
|
if (mAgentServerEnabled) {
|
||||||
|
mAgentServer = new Akonadi::ProcessControl;
|
||||||
|
connect(mAgentServer, &Akonadi::ProcessControl::unableToStart, this, &AgentManager::agentServerFailure);
|
||||||
|
- mAgentServer->start(QStringLiteral("akonadi_agent_server"), serviceArgs, Akonadi::ProcessControl::RestartOnCrash);
|
||||||
|
+ mAgentServer->start(QLatin1String(NIX_OUT "/bin/akonadi_agent_server"), serviceArgs, Akonadi::ProcessControl::RestartOnCrash);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Index: akonadi-19.08.0/src/akonadicontrol/agentprocessinstance.cpp
|
||||||
|
===================================================================
|
||||||
|
--- akonadi-19.08.0.orig/src/akonadicontrol/agentprocessinstance.cpp
|
||||||
|
+++ akonadi-19.08.0/src/akonadicontrol/agentprocessinstance.cpp
|
||||||
|
@@ -62,7 +62,7 @@ bool AgentProcessInstance::start(const A
|
||||||
|
} else {
|
||||||
|
Q_ASSERT(agentInfo.launchMethod == AgentType::Launcher);
|
||||||
|
const QStringList arguments = QStringList() << executable << identifier();
|
||||||
|
- const QString agentLauncherExec = Akonadi::StandardDirs::findExecutable(QStringLiteral("akonadi_agent_launcher"));
|
||||||
|
+ const QString agentLauncherExec = QLatin1String(NIX_OUT "/bin/akonadi_agent_launcher");
|
||||||
|
mController->start(agentLauncherExec, arguments);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
Index: akonadi-19.08.0/src/server/storage/dbconfigmysql.cpp
|
||||||
|
===================================================================
|
||||||
|
--- akonadi-19.08.0.orig/src/server/storage/dbconfigmysql.cpp
|
||||||
|
+++ akonadi-19.08.0/src/server/storage/dbconfigmysql.cpp
|
||||||
|
@@ -209,7 +193,7 @@ bool DbConfigMysql::startInternalServer(
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// generate config file
|
||||||
|
- const QString globalConfig = StandardDirs::locateResourceFile("config", QStringLiteral("mysql-global.conf"));
|
||||||
|
+ const QString globalConfig = QLatin1String(NIX_OUT "/etc/xdg/akonadi/mysql-global.conf");
|
||||||
|
const QString localConfig = StandardDirs::locateResourceFile("config", QStringLiteral("mysql-local.conf"));
|
||||||
|
const QString actualConfig = StandardDirs::saveDir("data") + QLatin1String("/mysql.conf");
|
||||||
|
if (globalConfig.isEmpty()) {
|
|
@ -0,0 +1,14 @@
|
||||||
|
Index: akonadi-19.08.0/src/server/storage/dbconfigmysql.cpp
|
||||||
|
===================================================================
|
||||||
|
--- akonadi-19.08.0.orig/src/server/storage/dbconfigmysql.cpp
|
||||||
|
+++ akonadi-19.08.0/src/server/storage/dbconfigmysql.cpp
|
||||||
|
@@ -235,8 +235,7 @@ bool DbConfigMysql::startInternalServer(
|
||||||
|
bool confUpdate = false;
|
||||||
|
QFile actualFile(actualConfig);
|
||||||
|
// update conf only if either global (or local) is newer than actual
|
||||||
|
- if ((QFileInfo(globalConfig).lastModified() > QFileInfo(actualFile).lastModified()) ||
|
||||||
|
- (QFileInfo(localConfig).lastModified() > QFileInfo(actualFile).lastModified())) {
|
||||||
|
+ if (true) {
|
||||||
|
QFile globalFile(globalConfig);
|
||||||
|
QFile localFile(localConfig);
|
||||||
|
if (globalFile.open(QFile::ReadOnly) && actualFile.open(QFile::WriteOnly)) {
|
Reference in New Issue