Subject: [bug#37329] [PATCH] gnu: Add audacious.

From: Tobias Geerinckx-Rice <[email-masked]>
Date: Sat, 07 Sep 2019 13:45:40 +0200

Kei,

Kei Kebreau 写道：
> * gnu/packages/music.scm (audacious): New variable.
> ---
>  gnu/packages/music.scm | 102 
>  +++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 102 insertions(+)
>
> diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
> index a43bccf4f8..33c53dec35 100644
> --- a/gnu/packages/music.scm
> +++ b/gnu/packages/music.scm
> @@ -203,6 +203,108 @@ and play MIDI files with a few clicks in a 
> user-friendly interface offering
>  score, keyboard, guitar, drum and controller views.")
>      (license license:gpl3+)))
>  
> +(define-public audacious
> +  (package
> +    (name "audacious")
> +    (version "3.10.1")
> +    (source (origin
> +              (method url-fetch)
> +              (uri (string-append 
> "https://distfiles.audacious-media-player.org/"
> +                                  "audacious-" version 
> ".tar.bz2"))
> +              (sha256
> +               (base32
> + 
> "14vbkhld5hwh96j8p8hjq9ybvc2m060a1y8crz14i51wpd0fhrl3"))))
> +    (build-system gnu-build-system)
> +    (arguments
> +     `(#:configure-flags
> +       (list "--disable-gtk" "--enable-qt"
> +             ;; Add the output lib directory to the RUNPATH.
> +             (string-append "LDFLAGS=-Wl,-rpath=" %output 
> "/lib"))

This comment just repeats the code, so it's not needed.

> +       #:tests? #f ; no check target

Could you run C-M-q (or etc/indent-code.el) on the whole 
definition?  That will allow later editors to do the same without 
changing unrelated lines.

> +       #:phases
> +       (modify-phases %standard-phases
> +         (add-after 'install 'unpack-plugins
> +           (lambda* (#:key inputs #:allow-other-keys)
> +             (let ((plugins (assoc-ref inputs 
> "audacious-plugins")))
> +               (invoke "tar" "xvf" plugins)
> +               (chdir (string-append "audacious-plugins-" 
> ,version))

It's not wrong, and I know this saves (with-directory-excursion)s 
down the road, but brr.  :-)

> +               #t)))
> +         (add-after 'unpack-plugins 'configure-plugins
> +           (lambda* (#:key configure-flags outputs 
> #:allow-other-keys)
> +             (let ((out (assoc-ref outputs "out")))
> +               (substitute* "configure"
> +                 (("/bin/sh") (which "sh")))
> +               (apply invoke "./configure"
> +                      (append configure-flags
> +                              ;; audacious-plugins requires 
> audacious to build.
> +                              (list (string-append 
> "PKG_CONFIG_PATH="
> +                                                   out 
> "/lib/pkgconfig:"
> +                                                   (getenv 
> "PKG_CONFIG_PATH"))
> +                                    (string-append "--prefix=" 
> out)))))))
> +         (add-after 'configure-plugins 'build-plugins
> +           (lambda _
> +             (invoke "make" "-j" (number->string 
> (parallel-job-count)))))
> +         (add-after 'build-plugins 'install-plugins
> +           (lambda _
> +             (invoke "make" "install"))))))
> +    (native-inputs
> +     `(("audacious-plugins"
> +        ,(origin
> +           (method url-fetch)
> +           (uri (string-append 
> "https://distfiles.audacious-media-playerorg/"
                                                                     ^^^^^^^^^
Typo!

> +                               "audacious-plugins-" version 
> ".tar.bz2"))
> +           (sha256
> +            (base32
> + 
> "0hi61825ayrwc4snwr76f2669k06fii3n8ll1szjk5zr65v1ghzf"))))

I don't mind bundling these like this (Audacious's a leaf package 
and — subjectively — media things are allowed/expected to be a bit 
bloaty), but it may prove controversial :-)

Would it not be worth supporting a plug-in search path?  Are 
there, for example, well-supported Audacious plug-ins that aren't 
part of this collection?

  $ guix size audacious-with-plugins # although I'd prefer 2 
  packages
  …
  total: 1649.2 MiB

  $ guix size audacious # no plugins or plugin inputs
  …
  total: 1333.9 MiB

Have you considered a separate ‘audacious-plugins’ package that 
could use that mechanism?  Why [not]?

> +       ("gettext" ,gettext-minimal)
> +       ("glib:bin" ,glib "bin") ; for gdbus-codegen
> +       ("pkg-config" ,pkg-config)))
> +    (inputs
> +     `(("dbus" ,dbus)
> +       ("glib" ,glib)
> +       ("qtbase" ,qtbase)
> +       ;; Plugin dependencies
> +       ("alsa-lib" ,alsa-lib)
> +       ("curl" ,curl)
> +       ("ffmpeg" ,ffmpeg)
> +       ("flac" ,flac)
> +       ("fluidsynth" ,fluidsynth)
> +       ("gdk-pixbuf" ,gdk-pixbuf)
> +       ("libbs2b" ,libbs2b)
> +       ("libcddb" ,libcddb)
> +       ("libcdio-paranoia" ,libcdio-paranoia)
> +       ("libcue" ,libcue)
> +       ("libmodplug" ,libmodplug)
> +       ("libnotify" ,libnotify)
> +       ("libogg" ,libogg)
> +       ("libsamplerate" ,libsamplerate)
> +       ("libsndfile" ,libsndfile)
> +       ("libvorbis" ,libvorbis)
> +       ("libxml2" ,libxml2)
> +       ("lirc" ,lirc)
> +       ("jack" ,jack-1)
> +       ("mpg123" ,mpg123)
> +       ("neon" ,neon)
> +       ("pulseaudio" ,pulseaudio)
> +       ("qtmultimedia" ,qtmultimedia)
> +       ("soxr" ,soxr)
> +       ("wavpack" ,wavpack)))
> +    (home-page "https://audacious-media-player.org")
> +    (synopsis "Audio player based on XMMS")

Hmm.  To me, ‘Foo copied a lot of files from bar once’ is never 
a useful answer to ‘What is foo?’.

All ‘XMMS’ means to me is ‘that ugly audio player I installed 
and then immediately removed in the nineties’.  Now, that may be 
all I need to know about Audacious, I don't know :o)

I hope it's not.  Is there something in particular that 
distinguishes Audacious from most other players that we could 
mention instead?

> +    (description
> +     "Audacious is an audio player descended from XMMS.  Drag 
> and drop folders
> +and individual song files, search for artists and albums in 
> your entire music
> +library, or create and edit your own custom playlists.  Listen 
> to CD’s or stream
> +music from the Internet.  Tweak the sound with the graphical 
> equalizer or
> +experiment with LADSPA effects.  Enjoy the modern GTK-themed 
> interface or change
> +things up with Winamp Classic skins.  Use the plugins included 
> with Audacious to
> +fetch lyrics for your music, to set an alarm in the morning, 
> and more.")
> +    ;; According to COPYING, Audacious and its plugins are 
> licensed under the
> +    ;; BSD 2-clause license and libguess is licensed under the 
> BSD 3-clause
> +    ;; license.
> +    (license (list license:bsd-2
> +                   license:bsd-3))))

From COPYING:

  “Please note that many of the plugins distributed with 
  Audacious are under
  different licenses.”

And indeed, I see quite a bit of GPL and some ISC code in there.

Thanks!

T G-R