Improvements to the clementine package.

-  Pass the gstreamer plugins as a list attribute instead of
    individual attributes.
     +  This should allow for greater customization (e.g.: a
          user can add / remove plugins by overriding
          the plugin list attribute).

    This is the same technique as used for wrapping chrome
    with gstreamer plugins.

 -  Moved integration of gstreamer plugins, spotify
    library and clementine into a wrapper derivation.
     +  This should allow a user to change the gstreamer
          plugin set and activate / deactivate the spotify
          plugin without triggering a whole rebuild of the
          clementine sources (which is pretty long).
This commit is contained in:
Raymond Gauthier 2015-04-28 00:18:00 -04:00
parent 4463bad2dd
commit 22faf646f1
2 changed files with 70 additions and 41 deletions

View File

@ -1,13 +1,17 @@
{ stdenv, fetchurl, boost, cmake, gettext, gstreamer, gst_plugins_base { stdenv, fetchurl, boost, cmake, gettext, gstreamer, gst_plugins_base
, gst_plugins_good, gst_plugins_bad, gst_plugins_ugly, gst_ffmpeg
, liblastfm, qt4, taglib, fftw, glew, qjson, sqlite, libgpod, libplist , liblastfm, qt4, taglib, fftw, glew, qjson, sqlite, libgpod, libplist
, usbmuxd, libmtp, gvfs, libcdio, protobuf, libspotify, qca2, pkgconfig , usbmuxd, libmtp, gvfs, libcdio, protobuf, libspotify, qca2, pkgconfig
, sparsehash, config, makeWrapper }: , sparsehash, config, makeWrapper, gst_plugins }:
let withSpotify = config.clementine.spotify or false; let
in version = "1.2.3";
stdenv.mkDerivation {
name = "clementine-1.2.3"; withSpotify = config.clementine.spotify or false;
wrappedExeName = "clementine";
wrapped = stdenv.mkDerivation {
name = "clementine-wrapped-${version}";
src = fetchurl { src = fetchurl {
url = https://github.com/clementine-player/Clementine/archive/1.2.3.tar.gz; url = https://github.com/clementine-player/Clementine/archive/1.2.3.tar.gz;
@ -23,9 +27,6 @@ stdenv.mkDerivation {
gettext gettext
glew glew
gst_plugins_base gst_plugins_base
gst_plugins_good
gst_plugins_ugly
gst_ffmpeg
gstreamer gstreamer
gvfs gvfs
libcdio libcdio
@ -33,7 +34,6 @@ stdenv.mkDerivation {
liblastfm liblastfm
libmtp libmtp
libplist libplist
makeWrapper
pkgconfig pkgconfig
protobuf protobuf
qca2 qca2
@ -43,18 +43,46 @@ stdenv.mkDerivation {
sqlite sqlite
taglib taglib
usbmuxd usbmuxd
] ++ stdenv.lib.optional withSpotify libspotify; ];
enableParallelBuilding = true; enableParallelBuilding = true;
};
postInstall = '' in
wrapProgram $out/bin/clementine \
--set GST_PLUGIN_SYSTEM_PATH "$GST_PLUGIN_SYSTEM_PATH" stdenv.mkDerivation {
name = "clementine-${version}";
src = ./.;
buildInputs = [
wrapped
makeWrapper
] ++ gst_plugins
++ stdenv.lib.optional withSpotify libspotify;
installPhase = ''
mkdir -p $out
cp -a ${wrapped}/* $out
chmod -R u+w-t $out
wrapProgram "$out/bin/${wrappedExeName}" \
--prefix GST_PLUGIN_SYSTEM_PATH : "$GST_PLUGIN_SYSTEM_PATH"
''; '';
preferLocalBuild = true;
dontPatchELF = true;
dontStrip = true;
meta = with stdenv.lib; { meta = with stdenv.lib; {
homepage = "http://www.clementine-player.org"; homepage = "http://www.clementine-player.org";
description = "A multiplatform music player"; description = "A multiplatform music player"
+ " ("
+ concatStrings (optionals (withSpotify) ["with spotify, "])
+ "with gstreamer plugins: "
+ concatStrings (intersperse ", " (map (x: x.name) gst_plugins))
+ ")";
license = licenses.gpl3Plus; license = licenses.gpl3Plus;
platforms = platforms.linux; platforms = platforms.linux;
maintainers = [ maintainers.ttuegel ]; maintainers = [ maintainers.ttuegel ];

View File

@ -976,6 +976,7 @@ let
clementine = callPackage ../applications/audio/clementine { clementine = callPackage ../applications/audio/clementine {
boost = boost156; boost = boost156;
gst_plugins = [ gst_plugins_base gst_plugins_good gst_plugins_ugly gst_ffmpeg ];
}; };
ciopfs = callPackage ../tools/filesystems/ciopfs { }; ciopfs = callPackage ../tools/filesystems/ciopfs { };