From 553ad198c2005468a024e554776efd5587999261 Mon Sep 17 00:00:00 2001 From: Alvar Penning Date: Sat, 10 Oct 2020 15:12:12 +0200 Subject: [PATCH] claws-mail{,-gtk3}: refactor Update Claws Mail to its latest version and perform a major refactoring. Previously, the configurable arguments were neither complete nor named according to the configure.ac file. Likewise, the values did not correspond to the defaults, but rather to a personal preference. This has now been changed to enable the arguments which are enabled in the configure.ac file. Also the variable names have been adjusted. For compatibility the old parameters also exist. Next to the claws-mail package is the "experimental" claws-mail-gtk3 package for the non official gtk3 git branch. This package started as an almost one-to-one copy of the claws-mail derivation which small modifications. This package was of course not updated. This has also been changed so that both packages are built from the same derivative. --- .../mailreaders/claws-mail/default.nix | 220 ++++++++++++------ .../mailreaders/claws-mail/gtk3.nix | 121 ---------- pkgs/top-level/all-packages.nix | 3 +- 3 files changed, 153 insertions(+), 191 deletions(-) delete mode 100644 pkgs/applications/networking/mailreaders/claws-mail/gtk3.nix diff --git a/pkgs/applications/networking/mailreaders/claws-mail/default.nix b/pkgs/applications/networking/mailreaders/claws-mail/default.nix index 7eaefdd91c42..a198c355290a 100644 --- a/pkgs/applications/networking/mailreaders/claws-mail/default.nix +++ b/pkgs/applications/networking/mailreaders/claws-mail/default.nix @@ -1,52 +1,98 @@ -{ lib, config, fetchurl, stdenv, wrapGAppsHook, autoreconfHook -, curl, dbus, dbus-glib, enchant, gtk2, gnutls, gnupg, gpgme, gumbo -, libarchive, libcanberra-gtk2, libetpan, libnotify, libsoup, libxml2, networkmanager -, openldap, perl, pkg-config, poppler, python, shared-mime-info -, glib-networking, gsettings-desktop-schemas, libSM, libytnef, libical -# Build options -# TODO: A flag to build the manual. -# TODO: Plugins that complain about their missing dependencies, even when -# provided: -# gdata requires libgdata -# geolocation requires libchamplain -, enableLdap ? false -, enableNetworkManager ? config.networking.networkmanager.enable or false +{ stdenv, lib, fetchgit, wrapGAppsHook, autoreconfHook, bison, flex +, curl, gtk2, gtk3, pkg-config, python2, python3, shared-mime-info +, glib-networking, gsettings-desktop-schemas + +# Use the experimental gtk3 branch. +, useGtk3 ? false + +# Package compatibility: old parameters whose name were not directly derived , enablePgp ? true -, enablePluginArchive ? false -, enablePluginLitehtmlViewer ? false , enablePluginNotificationDialogs ? true , enablePluginNotificationSounds ? true -, enablePluginPdf ? false -, enablePluginPython ? false -, enablePluginRavatar ? false -, enablePluginRssyl ? false -, enablePluginSmime ? false -, enablePluginSpamassassin ? false -, enablePluginSpamReport ? false -, enablePluginVcalendar ? false -, enableSpellcheck ? false +, enablePluginPdf ? true +, enablePluginRavatar ? true +, enableSpellcheck ? true + +# Arguments to include external libraries +, enableLibSM ? true, libSM +, enableGnuTLS ? true, gnutls +, enableEnchant ? enableSpellcheck, enchant +, enableDbus ? true, dbus, dbus-glib +, enableLdap ? true, openldap +, enableNetworkManager ? true, networkmanager +, enableLibetpan ? true, libetpan +, enableValgrind ? true, valgrind +, enableSvg ? true, librsvg + +# Configure claws-mail's plugins +, enablePluginAcpiNotifier ? true +, enablePluginAddressKeeper ? true +, enablePluginArchive ? true, libarchive +, enablePluginAttRemover ? true +, enablePluginAttachWarner ? true +, enablePluginBogofilter ? true +, enablePluginBsfilter ? true +, enablePluginClamd ? true +, enablePluginDillo ? true +, enablePluginFetchInfo ? true +, enablePluginLibravatar ? enablePluginRavatar +, enablePluginLitehtmlViewer ? true, gumbo +, enablePluginMailmbox ? true +, enablePluginManageSieve ? true +, enablePluginNewMail ? true +, enablePluginNotification ? (enablePluginNotificationDialogs || enablePluginNotificationSounds), libcanberra-gtk2, libcanberra-gtk3, libnotify +, enablePluginPdfViewer ? enablePluginPdf, poppler +, enablePluginPerl ? true, perl +, enablePluginPython ? true +, enablePluginPgp ? enablePgp, gnupg, gpgme +, enablePluginRssyl ? true, libxml2 +, enablePluginSmime ? true +, enablePluginSpamassassin ? true +, enablePluginSpamReport ? true +, enablePluginTnefParse ? true, libytnef +, enablePluginVcalendar ? true, libical }: with lib; -stdenv.mkDerivation rec { - pname = "claws-mail"; +let version = "3.17.8"; - src = fetchurl { - url = "https://www.claws-mail.org/download.php?file=releases/claws-mail-${version}.tar.xz"; - sha256 = "sha256-zbeygUmV1vSpw7HwvBRn7Vw88qXg2hcwqqJaisyv3a8="; + # The official release uses gtk2 and contains the version tag. + gtk2src = { + rev = version; + sha256 = "0l4f8q11iyj8pi120lrapgq51k5j64xf0jlczkzbm99rym752ch5"; }; + # The corresponding commit in the gtk3 branch. + gtk3src = { + rev = "3.99.0"; + sha256 = "176h1swh1zx6dqyzfz470x4a1xicnv0zhy8ir47k7p23g6y17i2k"; + }; + + python = if useGtk3 then python3 else python2; + pythonPkgs = if useGtk3 + then + with python.pkgs; [ python wrapPython pygobject3 ] + else + with python.pkgs; [ python wrapPython pygtk pygobject2 ]; +in stdenv.mkDerivation rec { + pname = "claws-mail"; + inherit version; + + src = fetchgit ({ + url = "git://git.claws-mail.org/claws.git"; + } // (if useGtk3 then gtk3src else gtk2src)); + outputs = [ "out" "dev" ]; - patches = [ - ./mime.patch - ]; + patches = [ ./mime.patch ]; preConfigure = '' # autotools check tries to dlopen libpython as a requirement for the python plugin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH''${LD_LIBRARY_PATH:+:}${python}/lib + # generate version without .git + [ -e version ] || echo "echo ${version}" > version ''; postPatch = '' @@ -54,51 +100,87 @@ stdenv.mkDerivation rec { --subst-var-by MIMEROOTDIR ${shared-mime-info}/share ''; - nativeBuildInputs = [ autoreconfHook pkg-config wrapGAppsHook python.pkgs.wrapPython ]; - propagatedBuildInputs = with python.pkgs; [ python ] ++ optionals enablePluginPython [ pygtk pygobject2 ]; + nativeBuildInputs = [ autoreconfHook pkg-config bison flex wrapGAppsHook ]; + propagatedBuildInputs = pythonPkgs; buildInputs = - [ curl dbus dbus-glib gtk2 gnutls gsettings-desktop-schemas - libetpan perl glib-networking libSM libytnef - ] - ++ optional enableSpellcheck enchant - ++ optionals (enablePgp || enablePluginSmime) [ gnupg gpgme ] - ++ optional enablePluginArchive libarchive - ++ optional enablePluginNotificationSounds libcanberra-gtk2 - ++ optional enablePluginNotificationDialogs libnotify - ++ optional enablePluginLitehtmlViewer gumbo - ++ optional enablePluginRssyl libxml2 - ++ optional enableNetworkManager networkmanager - ++ optional enableLdap openldap - ++ optional enablePluginPdf poppler - ++ optional enablePluginVcalendar libical; + [ curl gsettings-desktop-schemas glib-networking ] + ++ [(if useGtk3 then gtk3 else gtk2)] + ++ optional enableLibSM libSM + ++ optional enableGnuTLS gnutls + ++ optional enableEnchant enchant + ++ optionals enableDbus [ dbus dbus-glib ] + ++ optional enableLdap openldap + ++ optional enableNetworkManager networkmanager + ++ optional enableLibetpan libetpan + ++ optional enableValgrind valgrind + ++ optional enableSvg librsvg + ++ optional enablePluginArchive libarchive + ++ optional enablePluginLitehtmlViewer gumbo + ++ optionals enablePluginNotification [ libnotify ] ++ [(if useGtk3 then libcanberra-gtk3 else libcanberra-gtk2)] + ++ optional enablePluginPerl perl + ++ optional enablePluginPdfViewer poppler + ++ optional enablePluginRssyl libxml2 + ++ optionals enablePluginPgp [ gnupg gpgme ] + ++ optional enablePluginTnefParse libytnef + ++ optional enablePluginVcalendar libical + ; configureFlags = - optional (!enableLdap) "--disable-ldap" - ++ optional (!enableNetworkManager) "--disable-networkmanager" - ++ optionals (!enablePgp) [ - "--disable-pgpcore-plugin" - "--disable-pgpinline-plugin" - "--disable-pgpmime-plugin" + [ + "--disable-manual" # Missing docbook-tools, e.g., docbook2html + "--disable-compface" # Missing compface library + "--disable-jpilot" # Missing jpilot library + + "--disable-gdata-plugin" # Complains about missing libgdata, even when provided + "--disable-fancy-plugin" # Missing libwebkit-1.0 library ] - ++ optional (!enablePluginArchive) "--disable-archive-plugin" - ++ optional (!enablePluginLitehtmlViewer) "--disable-litehtml_viewer-plugin" - ++ optional (!enablePluginPdf) "--disable-pdf_viewer-plugin" - ++ optional (!enablePluginPython) "--disable-python-plugin" - ++ optional (!enablePluginRavatar) "--disable-libravatar-plugin" - ++ optional (!enablePluginRssyl) "--disable-rssyl-plugin" - ++ optional (!enablePluginSmime) "--disable-smime-plugin" - ++ optional (!enablePluginSpamassassin) "--disable-spamassassin-plugin" - ++ optional (!enablePluginSpamReport) "--disable-spam_report-plugin" - ++ optional (!enablePluginVcalendar) "--disable-vcalendar-plugin" - ++ optional (!enableSpellcheck) "--disable-enchant"; + ++ + (map (e: strings.enableFeature (lists.head e) (lists.last e)) [ + [ enableLibSM "libsm" ] + [ enableGnuTLS "gnutls" ] + [ enableEnchant "enchant" ] + [ enableDbus "dbus" ] + [ enableLdap "ldap" ] + [ enableNetworkManager "networkmanager" ] + [ enableLibetpan "libetpan" ] + [ enableValgrind "valgrind" ] + [ enableSvg "svg" ] + + [ enablePluginAcpiNotifier "acpi_notifier-plugin" ] + [ enablePluginAddressKeeper "address_keeper-plugin" ] + [ enablePluginArchive "archive-plugin" ] + [ enablePluginAttRemover "att_remover-plugin" ] + [ enablePluginAttachWarner "attachwarner-plugin" ] + [ enablePluginBogofilter "bogofilter-plugin" ] + [ enablePluginBsfilter "bsfilter-plugin" ] + [ enablePluginClamd "clamd-plugin" ] + [ enablePluginDillo "dillo-plugin" ] + [ enablePluginFetchInfo "fetchinfo-plugin" ] + [ enablePluginLibravatar "libravatar-plugin" ] + [ enablePluginLitehtmlViewer "litehtml_viewer-plugin" ] + [ enablePluginMailmbox "mailmbox-plugin" ] + [ enablePluginManageSieve "managesieve-plugin" ] + [ enablePluginNewMail "newmail-plugin" ] + [ enablePluginNotification "notification-plugin" ] + [ enablePluginPdfViewer "pdf_viewer-plugin" ] + [ enablePluginPerl "perl-plugin" ] + [ enablePluginPython "python-plugin" ] + [ enablePluginPgp "pgpcore-plugin" ] + [ enablePluginPgp "pgpmime-plugin" ] + [ enablePluginPgp "pgpinline-plugin" ] + [ enablePluginRssyl "rssyl-plugin" ] + [ enablePluginSmime "smime-plugin" ] + [ enablePluginSpamassassin "spamassassin-plugin" ] + [ enablePluginSpamReport "spam_report-plugin" ] + [ enablePluginTnefParse "tnef_parse-plugin" ] + [ enablePluginVcalendar "vcalendar-plugin" ] + ]); enableParallelBuilding = true; - pythonPath = with python.pkgs; [ pygobject2 pygtk ]; - preFixup = '' - buildPythonPath "$out $pythonPath" + buildPythonPath "$out $pythonPkgs" gappsWrapperArgs+=(--prefix XDG_DATA_DIRS : "${shared-mime-info}/share" --prefix PYTHONPATH : "$program_PYTHONPATH") ''; @@ -112,6 +194,6 @@ stdenv.mkDerivation rec { homepage = "https://www.claws-mail.org/"; license = licenses.gpl3; platforms = platforms.linux; - maintainers = with maintainers; [ fpletz globin orivej ]; + maintainers = with maintainers; [ fpletz globin orivej oxzi ]; }; } diff --git a/pkgs/applications/networking/mailreaders/claws-mail/gtk3.nix b/pkgs/applications/networking/mailreaders/claws-mail/gtk3.nix deleted file mode 100644 index d5223092446d..000000000000 --- a/pkgs/applications/networking/mailreaders/claws-mail/gtk3.nix +++ /dev/null @@ -1,121 +0,0 @@ -{ lib, config, fetchgit, stdenv, wrapGAppsHook, autoreconfHook, bison, flex -, curl, dbus, dbus-glib, enchant, gtk3, gnutls, gnupg, gpgme -, libarchive, libcanberra-gtk3, libetpan, libnotify, libsoup, libxml2, networkmanager -, openldap, perl, pkg-config, poppler, python, shared-mime-info, webkitgtk -, glib-networking, gsettings-desktop-schemas, libSM, libytnef, libical -# Build options -# TODO: A flag to build the manual. -# TODO: Plugins that complain about their missing dependencies, even when -# provided: -# gdata requires libgdata -# geolocation requires libchamplain -, enableLdap ? false -, enableNetworkManager ? config.networking.networkmanager.enable or false -, enablePgp ? true -, enablePluginArchive ? false -, enablePluginFancy ? true -, enablePluginNotificationDialogs ? true -, enablePluginNotificationSounds ? true -, enablePluginPdf ? false -, enablePluginPython ? false -, enablePluginRavatar ? false -, enablePluginRssyl ? false -, enablePluginSmime ? false -, enablePluginSpamassassin ? false -, enablePluginSpamReport ? false -, enablePluginVcalendar ? false -, enableSpellcheck ? false -}: - -with lib; - -stdenv.mkDerivation rec { - pname = "claws-mail-gtk3"; - version = "3.99.0"; - - src = fetchgit { - url = "git://git.claws-mail.org/claws.git"; - rev = version; - sha256 = "176h1swh1zx6dqyzfz470x4a1xicnv0zhy8ir47k7p23g6y17i2k"; - }; - - outputs = [ "out" "dev" ]; - - patches = [ ./mime.patch ]; - - preConfigure = '' - # autotools check tries to dlopen libpython as a requirement for the python plugin - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH''${LD_LIBRARY_PATH:+:}${python}/lib - # generate version without .git - [ -e version ] || echo "echo ${version}" > version - ''; - - postPatch = '' - substituteInPlace src/procmime.c \ - --subst-var-by MIMEROOTDIR ${shared-mime-info}/share - ''; - - nativeBuildInputs = [ autoreconfHook bison flex pkg-config wrapGAppsHook python.pkgs.wrapPython ]; - propagatedBuildInputs = with python.pkgs; [ python ] ++ optionals enablePluginPython [ pygtk pygobject2 ]; - - buildInputs = - [ curl dbus dbus-glib gtk3 gnutls gsettings-desktop-schemas - libetpan perl glib-networking libSM libytnef - ] - ++ optional enableSpellcheck enchant - ++ optionals (enablePgp || enablePluginSmime) [ gnupg gpgme ] - ++ optional enablePluginArchive libarchive - ++ optional enablePluginNotificationSounds libcanberra-gtk3 - ++ optional enablePluginNotificationDialogs libnotify - ++ optional enablePluginFancy libsoup - ++ optional enablePluginRssyl libxml2 - ++ optional enableNetworkManager networkmanager - ++ optional enableLdap openldap - ++ optional enablePluginPdf poppler - ++ optional enablePluginFancy webkitgtk - ++ optional enablePluginVcalendar libical; - - configureFlags = - optional (!enableLdap) "--disable-ldap" - ++ optional (!enableNetworkManager) "--disable-networkmanager" - ++ optionals (!enablePgp) [ - "--disable-pgpcore-plugin" - "--disable-pgpinline-plugin" - "--disable-pgpmime-plugin" - ] - ++ optional (!enablePluginArchive) "--disable-archive-plugin" - ++ optional (!enablePluginFancy) "--disable-fancy-plugin" - ++ optional (!enablePluginPdf) "--disable-pdf_viewer-plugin" - ++ optional (!enablePluginPython) "--disable-python-plugin" - ++ optional (!enablePluginRavatar) "--disable-libravatar-plugin" - ++ optional (!enablePluginRssyl) "--disable-rssyl-plugin" - ++ optional (!enablePluginSmime) "--disable-smime-plugin" - ++ optional (!enablePluginSpamassassin) "--disable-spamassassin-plugin" - ++ optional (!enablePluginSpamReport) "--disable-spam_report-plugin" - ++ optional (!enablePluginVcalendar) "--disable-vcalendar-plugin" - ++ optional (!enableSpellcheck) "--disable-enchant"; - - enableParallelBuilding = true; - - pythonPath = with python.pkgs; [ pygobject2 pygtk ]; - - preFixup = '' - buildPythonPath "$out $pythonPath" - gappsWrapperArgs+=(--prefix XDG_DATA_DIRS : "${shared-mime-info}/share" --prefix PYTHONPATH : "$program_PYTHONPATH") - ''; - - postInstall = '' - mkdir -p $out/share/applications - cp claws-mail.desktop $out/share/applications - ''; - - NIX_CFLAGS_COMPILE = [ "-Wno-deprecated-declarations" ]; - - meta = { - description = "The user-friendly, lightweight, and fast email client"; - homepage = "https://www.claws-mail.org/"; - license = licenses.gpl3; - platforms = platforms.linux; - maintainers = with maintainers; [ fpletz globin orivej ]; - }; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c8322e5dbdff..c991a3780f0e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -21527,8 +21527,9 @@ in claws-mail = callPackage ../applications/networking/mailreaders/claws-mail { inherit (xorg) libSM; }; - claws-mail-gtk3 = callPackage ../applications/networking/mailreaders/claws-mail/gtk3.nix { + claws-mail-gtk3 = callPackage ../applications/networking/mailreaders/claws-mail { inherit (xorg) libSM; + useGtk3 = true; }; clfswm = callPackage ../applications/window-managers/clfswm { };