Message ID | 20190907045755.6578-1-kkebreau@posteo.net |
---|---|
State | Accepted |
Headers | show |
Series | [bug#37329] gnu: Add audacious. | expand |
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
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
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
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.
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