From 50dc0203707d8473f6fd9f00760b77470bac9890 Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Fri, 5 Aug 2022 13:10:32 +0200 Subject: quodlibet: makeover Sometimes I feel the urge to make things pretty again and remove legacy cruft and overhaul packages. It's calming, like solving a puzzle. --- pkgs/applications/audio/quodlibet/default.nix | 170 ++++++++++++++++++++------ 1 file changed, 132 insertions(+), 38 deletions(-) (limited to 'pkgs/applications/audio/quodlibet') diff --git a/pkgs/applications/audio/quodlibet/default.nix b/pkgs/applications/audio/quodlibet/default.nix index 71ab62e65bcf7..c5f02d7085de7 100644 --- a/pkgs/applications/audio/quodlibet/default.nix +++ b/pkgs/applications/audio/quodlibet/default.nix @@ -1,19 +1,59 @@ -{ lib, fetchurl, fetchpatch, python3, wrapGAppsHook, gettext, libsoup, gnome, gtk3, gdk-pixbuf, librsvg, - tag ? "", xvfb-run, dbus, glibcLocales, glib, glib-networking, gobject-introspection, hicolor-icon-theme, - gst_all_1, withGstPlugins ? true, - xineBackend ? false, xine-lib, - withDbusPython ? false, withPyInotify ? false, withMusicBrainzNgs ? false, withPahoMqtt ? false, - webkitgtk ? null, - keybinder3 ? null, gtksourceview ? null, libmodplug ? null, kakasi ? null, libappindicator-gtk3 ? null }: - -let optionals = lib.optionals; in +{ lib +, fetchFromGitHub +, fetchpatch +, tag ? "" + +# build time +, gettext +, gobject-introspection +, wrapGAppsHook + +# runtime +, adwaita-icon-theme +, gdk-pixbuf +, glib +, glib-networking +, gtk3 +, gtksourceview +, kakasi +, keybinder3 +, libappindicator-gtk3 +, libmodplug +, librsvg +, libsoup +, webkitgtk + +# optional features +, withDbusPython ? false +, withPypresence ? false +, withPyInotify ? false +, withMusicBrainzNgs ? false +, withPahoMqtt ? false +, withSoco ? false + +# backends +, withGstreamerBackend ? true, gst_all_1 +, withGstPlugins ? withGstreamerBackend +, withXineBackend ? true, xine-lib + +# tests +, dbus +, glibcLocales +, hicolor-icon-theme +, python3 +, xvfb-run +}: + python3.pkgs.buildPythonApplication rec { pname = "quodlibet${tag}"; version = "4.5.0"; + format = "pyproject"; - src = fetchurl { - url = "https://github.com/quodlibet/quodlibet/releases/download/release-${version}/quodlibet-${version}.tar.gz"; - sha256 = "sha256-MBYVgp9lLLr+2zVTkjcWKli8HucaVn0kn3eJ2SaCRbw="; + src = fetchFromGitHub { + owner = "quodlibet"; + repo = "quodlibet"; + rev = "refs/tags/release-${version}"; + hash = "sha256-G6zcdnHkevbVCrMoseWoSia5ajEor8nZhee6NeZIs8Q="; }; patches = [ @@ -24,51 +64,105 @@ python3.pkgs.buildPythonApplication rec { }) ]; - nativeBuildInputs = [ wrapGAppsHook gettext gobject-introspection ]; + outputs = [ + "out" + "doc" + ]; - checkInputs = [ gdk-pixbuf hicolor-icon-theme ] ++ (with python3.pkgs; [ pytest pytest-xdist polib xvfb-run dbus.daemon glibcLocales ]); + nativeBuildInputs = [ + gettext + gobject-introspection + wrapGAppsHook + ] ++ (with python3.pkgs; [ + sphinxHook + sphinx-rtd-theme + ]); - buildInputs = [ gnome.adwaita-icon-theme libsoup glib glib-networking gtk3 webkitgtk gdk-pixbuf keybinder3 gtksourceview libmodplug libappindicator-gtk3 kakasi ] - ++ (if xineBackend then [ xine-lib ] else with gst_all_1; - [ gstreamer gst-plugins-base ] ++ optionals withGstPlugins [ gst-plugins-good gst-plugins-ugly gst-plugins-bad ]); + buildInputs = [ + adwaita-icon-theme + gdk-pixbuf + glib + glib-networking + gtk3 + gtksourceview + kakasi + keybinder3 + libappindicator-gtk3 + libmodplug + libsoup + webkitgtk + ] ++ lib.optionals (withXineBackend) [ + xine-lib + ] ++ lib.optionals (withGstreamerBackend) (with gst_all_1; [ + gst-plugins-base + gstreamer + ] ++ lib.optionals (withGstPlugins) [ + gst-plugins-bad + gst-plugins-good + gst-plugins-ugly + ]); - propagatedBuildInputs = with python3.pkgs; [ pygobject3 pycairo mutagen gst-python feedparser ] - ++ optionals withDbusPython [ dbus-python ] - ++ optionals withPyInotify [ pyinotify ] - ++ optionals withMusicBrainzNgs [ musicbrainzngs ] - ++ optionals withPahoMqtt [ paho-mqtt ]; + propagatedBuildInputs = with python3.pkgs; [ + feedparser + gst-python + mutagen + pycairo + pygobject3 + ] + ++ lib.optionals withDbusPython [ dbus-python ] + ++ lib.optionals withPypresence [ pypresence ] + ++ lib.optionals withPyInotify [ pyinotify ] + ++ lib.optionals withMusicBrainzNgs [ musicbrainzngs ] + ++ lib.optionals withPahoMqtt [ paho-mqtt ] + ++ lib.optionals withSoco [ soco ]; LC_ALL = "en_US.UTF-8"; - pytestFlags = lib.optionals (xineBackend || !withGstPlugins) [ - "--ignore=tests/plugin/test_replaygain.py" - ] ++ [ + checkInputs = [ + dbus.daemon + gdk-pixbuf + glibcLocales + hicolor-icon-theme + xvfb-run + ] ++ (with python3.pkgs; [ + polib + pytest + pytest-xdist + ]); + + pytestFlags = [ # requires networking - "--ignore=tests/test_browsers_iradio.py" - # the default theme doesn't have the required icons - "--ignore=tests/plugin/test_trayicon.py" + "--deselect=tests/test_browsers_iradio.py::TIRFile::test_download_tags" + # missing translation strings in potfiles + "--deselect=tests/test_po.py::TPOTFILESIN::test_missing" # upstream does actually not enforce source code linting "--ignore=tests/quality" # build failure on Arch Linux # https://github.com/NixOS/nixpkgs/pull/77796#issuecomment-575841355 "--ignore=tests/test_operon.py" + ] ++ lib.optionals (withXineBackend || !withGstPlugins) [ + "--ignore=tests/plugin/test_replaygain.py" ]; + preCheck = '' + export XDG_DATA_DIRS="$out/share:${gtk3}/share/gsettings-schemas/${gtk3.name}:$XDG_ICON_DIRS:$XDG_DATA_DIRS" + export GDK_PIXBUF_MODULE_FILE=${librsvg}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache + export HOME=$(mktemp -d) + ''; + checkPhase = '' runHook preCheck - # otherwise tests can't find the app icons; instead of creating index.theme from scratch - # I re-used the one from hicolor-icon-theme which seems to work - cp "${hicolor-icon-theme}/share/icons/hicolor/index.theme" quodlibet/images/hicolor - env XDG_DATA_DIRS="$out/share:${gtk3}/share/gsettings-schemas/${gtk3.name}:$XDG_ICON_DIRS:$XDG_DATA_DIRS" \ - GDK_PIXBUF_MODULE_FILE=${librsvg}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache \ - HOME=$(mktemp -d) \ - xvfb-run -s '-screen 0 800x600x24' dbus-run-session \ - --config-file=${dbus.daemon}/share/dbus-1/session.conf \ - py.test $pytestFlags + + xvfb-run -s '-screen 0 1920x1080x24' \ + dbus-run-session --config-file=${dbus.daemon}/share/dbus-1/session.conf \ + pytest $pytestFlags + runHook postCheck ''; - preFixup = lib.optionalString (kakasi != null) "gappsWrapperArgs+=(--prefix PATH : ${kakasi}/bin)"; + preFixup = lib.optionalString (kakasi != null) '' + gappsWrapperArgs+=(--prefix PATH : ${kakasi}/bin) + ''; meta = with lib; { description = "GTK-based audio player written in Python, using the Mutagen tagging library"; -- cgit 1.4.1