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

From: Kei Kebreau <[email-masked]>
Date: Sat, 07 Sep 2019 10:56:02 -0400

Tobias Geerinckx-Rice <[email-masked]> writes:

> 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"

In reply to your later email: I used Qt instead of the default GTK+ 2
because of a personal preference, but apparently it's possible to enable
both to let users choose what they prefer.

>> +             ;; 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.
>

Done for both!

>> +       #: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.  :-)
>

Is it the lack of clarity in later phases that's undesirable?

>> +               #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!
>

Nice catch, thanks!

>> +                               "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]?
>

Audacious fails to run without output plugins (e.g. Pulseaudio, JACK,
etc.), immediately asking the user whether audacious-plugins is
installed.  A separate audacious-plugins package would require audacious
as a dependency, and since such basic plugins are needed to run
audacious, I'm not sure how to split the packages in a way that would
avoid a dependency loop.

>> +       ("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?
>

How about: "Modular and skinnable audio player"?

>> +    (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.
>

I'll root around for those extra licenses!

> Thanks!
> T G-R

Thanks for reviewing!

Kei