[bug#37329] gnu: Add audacious.
diff mbox series

Message ID 20190907045755.6578-1-kkebreau@posteo.net
State New
Headers show
Series
  • [bug#37329] gnu: Add audacious.
Related show

Commit Message

Kei Kebreau Sept. 7, 2019, 4:57 a.m. UTC
* gnu/packages/music.scm (audacious): New variable.
---
 gnu/packages/music.scm | 102 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 102 insertions(+)

Comments

Tobias Geerinckx-Rice via Guix-patches via Sept. 7, 2019, 11:45 a.m. UTC | #1
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
Tobias Geerinckx-Rice via Guix-patches via Sept. 7, 2019, 12:04 p.m. UTC | #2
Kei,

Tobias Geerinckx-Rice via Guix-patches via 写道:
>> +    (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.

I forgot to ask: why Qt over GTK?  That would probably make an 
interesting comment.

Kind regards,

T G-R
Kei Kebreau Sept. 7, 2019, 2:56 p.m. UTC | #3
Tobias Geerinckx-Rice <me@tobias.gr> 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
Ricardo Wurmus Sept. 7, 2019, 8:43 p.m. UTC | #4
Kei Kebreau <kkebreau@posteo.net> writes:

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

Would this retain references to *both* toolkits?  Wouldn’t this make the
package much bigger than it otherwise would be?

What’s the smaller variant…?

>>> +       #: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?

It’s a littly icky to have phases modify global state (other than the
files they operate on), because it is no longer enough to look at just 
the phase of interest.  If it can be avoided without making things too
ugly I’d prefer to avoid “chdir” here.

Patch
diff mbox series

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"))
+       #:tests? #f ; no check target
+       #: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))
+               #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-player.org/"
+                               "audacious-plugins-" version ".tar.bz2"))
+           (sha256
+            (base32
+             "0hi61825ayrwc4snwr76f2669k06fii3n8ll1szjk5zr65v1ghzf"))))
+       ("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")
+    (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))))
+
 ;; We don't use the latest release because it depends on Qt4.  Instead we
 ;; download the sources from the tip of the "qt5" branch.
 (define-public clementine