summary refs log tree commit diff
path: root/pkgs/servers/mpd
diff options
context:
space:
mode:
authortobim <tobim@fastmail.fm>2019-11-13 16:38:46 +0100
committerFranz Pletz <fpletz@fnordicwalking.de>2019-11-13 15:38:46 +0000
commit4a9d5493b7a9026af1b38de673b7351453b6c4db (patch)
tree676f8acb6dbbf5e8744419c5b147871b9c867268 /pkgs/servers/mpd
parenta95e0ac8e4d303854e2aa69c2866e4f742637c63 (diff)
downloadnixpkgs-4a9d5493b7a9026af1b38de673b7351453b6c4db.tar
nixpkgs-4a9d5493b7a9026af1b38de673b7351453b6c4db.tar.gz
nixpkgs-4a9d5493b7a9026af1b38de673b7351453b6c4db.tar.bz2
nixpkgs-4a9d5493b7a9026af1b38de673b7351453b6c4db.tar.lz
nixpkgs-4a9d5493b7a9026af1b38de673b7351453b6c4db.tar.xz
nixpkgs-4a9d5493b7a9026af1b38de673b7351453b6c4db.tar.zst
nixpkgs-4a9d5493b7a9026af1b38de673b7351453b6c4db.zip
mpd: 0.20.13 -> 0.21.16 (#57608)
* Refactor mpd

* mpd: 0.20.13 -> 0.21.5

Switch to meson based build, following upstream.

* Fix mpd on darwin

* mpd: 0.21.5 -> 0.21.6

* mpd-small: init add 0.21.6

* Update to 0.21.8 & fix ouput path

Also use pname instead of name.

* Update to 0.21.9

* Integrate review suggestions

- Expose run function as mpdWithFeatures.
- Throw on invalid feature requests.
- Drop major/minor version variables.
- Cosmetic improvements.

* Update to 0.21.10

* mpd: 0.21.10 -> 0.21.11

* mpd: 0.21.11 -> 0.21.12

* mpd: log to journal

* mpd: 0.21.12 -> 0.21.14

* mpd: add tobim to maintainers

* mpd: reenable syslog support

* mpd: 0.21.14 -> 0.21.15

* mpd: 0.21.15 -> 0.21.16
Diffstat (limited to 'pkgs/servers/mpd')
-rw-r--r--pkgs/servers/mpd/default.nix282
1 files changed, 148 insertions, 134 deletions
diff --git a/pkgs/servers/mpd/default.nix b/pkgs/servers/mpd/default.nix
index 7fcb5f94579..c16a1f6659e 100644
--- a/pkgs/servers/mpd/default.nix
+++ b/pkgs/servers/mpd/default.nix
@@ -1,148 +1,162 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, glib, systemd, boost, darwin
-, alsaSupport ? true, alsaLib
-, avahiSupport ? true, avahi, dbus
-, flacSupport ? true, flac
-, vorbisSupport ? true, libvorbis
-, madSupport ? true, libmad
-, id3tagSupport ? true, libid3tag
-, mikmodSupport ? true, libmikmod
-, shoutSupport ? true, libshout
-, sqliteSupport ? true, sqlite
-, curlSupport ? true, curl
-, audiofileSupport ? true, audiofile
-, bzip2Support ? true, bzip2
-, ffmpegSupport ? true, ffmpeg
-, fluidsynthSupport ? true, fluidsynth
-, zipSupport ? true, zziplib
-, samplerateSupport ? true, libsamplerate
-, mmsSupport ? true, libmms
-, mpg123Support ? true, mpg123
-, aacSupport ? true, faad2
-, lameSupport ? true, lame
-, pulseaudioSupport ? true, libpulseaudio
-, jackSupport ? true, libjack2
-, gmeSupport ? true, game-music-emu
-, icuSupport ? true, icu
-, clientSupport ? true, mpd_clientlib
-, opusSupport ? true, libopus
-, soundcloudSupport ? true, yajl
-, nfsSupport ? true, libnfs
-, smbSupport ? true, samba
+{ stdenv, fetchFromGitHub, meson, ninja, pkgconfig, glib, systemd, boost, darwin
+# Inputs
+, curl, libmms, libnfs, samba
+# Archive support
+, bzip2, zziplib
+# Codecs
+, audiofile, faad2, ffmpeg, flac, fluidsynth, game-music-emu
+, libmad, libmikmod, mpg123, libopus, libvorbis, lame
+# Filters
+, libsamplerate
+# Outputs
+, alsaLib, libjack2, libpulseaudio, libshout
+# Misc
+, icu, sqlite, avahi, dbus, pcre, libgcrypt, expat
+# Services
+, yajl
+# Client support
+, mpd_clientlib
+# Tag support
+, libid3tag
 }:
 
-assert avahiSupport -> avahi != null && dbus != null;
-
 let
-  opt = stdenv.lib.optional;
-  mkFlag = c: f: if c then "--enable-${f}" else "--disable-${f}";
-  major = "0.20";
-  minor = "23";
-
-in stdenv.mkDerivation rec {
-  pname = "mpd";
-  version = "${major}${if minor == "" then "" else "." + minor}";
+  lib = stdenv.lib;
 
-  src = fetchFromGitHub {
-    owner  = "MusicPlayerDaemon";
-    repo   = "MPD";
-    rev    = "v${version}";
-    sha256 = "1z1pdgiddimnmck0ardrpxkvgk1wn9zxri5wfv5ppasbb7kfm350";
+  featureDependencies = {
+    # Storage plugins
+    udisks        = [ dbus ];
+    webdav        = [ curl expat ];
+    # Input plugins
+    curl          = [ curl ];
+    mms           = [ libmms ];
+    nfs           = [ libnfs ];
+    smbclient     = [ samba ];
+    # Archive support
+    bzip2         = [ bzip2 ];
+    zzip          = [ zziplib ];
+    # Decoder plugins
+    audiofile     = [ audiofile ];
+    faad          = [ faad2 ];
+    ffmpeg        = [ ffmpeg ];
+    flac          = [ flac ];
+    fluidsynth    = [ fluidsynth ];
+    gme           = [ game-music-emu ];
+    mad           = [ libmad ];
+    mikmod        = [ libmikmod ];
+    mpg123        = [ mpg123 ];
+    opus          = [ libopus ];
+    vorbis        = [ libvorbis ];
+    # Encoder plugins
+    vorbisenc     = [ libvorbis ];
+    lame          = [ lame ];
+    # Filter plugins
+    libsamplerate = [ libsamplerate ];
+    # Output plugins
+    alsa          = [ alsaLib ];
+    jack          = [ libjack2 ];
+    pulse         = [ libpulseaudio ];
+    shout         = [ libshout ];
+    # Commercial services
+    qobuz         = [ curl libgcrypt yajl ];
+    soundcloud    = [ curl yajl ];
+    tidal         = [ curl yajl ];
+    # Client support
+    libmpdclient  = [ mpd_clientlib ];
+    # Tag support
+    id3tag        = [ libid3tag ];
+    # Misc
+    dbus          = [ dbus ];
+    expat         = [ expat ];
+    icu           = [ icu ];
+    pcre          = [ pcre ];
+    sqlite        = [ sqlite ];
+    syslog        = [ ];
+    systemd       = [ systemd ];
+    yajl          = [ yajl ];
+    zeroconf      = [ avahi dbus ];
   };
 
-  patches = [ ./x86.patch ];
+  run = { features ? null }:
+    let
+      # Disable platform specific features if needed
+      # using libmad to decode mp3 files on darwin is causing a segfault -- there
+      # is probably a solution, but I'm disabling it for now
+      platformMask = lib.optionals stdenv.isDarwin [ "mad" "pulse" "jack" "nfs" "smb" ]
+                  ++ lib.optionals (!stdenv.isLinux) [ "alsa" "systemd" "syslog" ];
 
-  buildInputs = [ glib boost ]
-    ++ opt stdenv.isDarwin darwin.apple_sdk.frameworks.CoreAudioKit
-    ++ opt stdenv.isLinux systemd
-    ++ opt (stdenv.isLinux && alsaSupport) alsaLib
-    ++ opt avahiSupport avahi
-    ++ opt avahiSupport dbus
-    ++ opt flacSupport flac
-    ++ opt vorbisSupport libvorbis
-    # using libmad to decode mp3 files on darwin is causing a segfault -- there
-    # is probably a solution, but I'm disabling it for now
-    ++ opt (!stdenv.isDarwin && madSupport) libmad
-    ++ opt id3tagSupport libid3tag
-    ++ opt mikmodSupport libmikmod
-    ++ opt shoutSupport libshout
-    ++ opt sqliteSupport sqlite
-    ++ opt curlSupport curl
-    ++ opt bzip2Support bzip2
-    ++ opt audiofileSupport audiofile
-    ++ opt ffmpegSupport ffmpeg
-    ++ opt fluidsynthSupport fluidsynth
-    ++ opt samplerateSupport libsamplerate
-    ++ opt mmsSupport libmms
-    ++ opt mpg123Support mpg123
-    ++ opt aacSupport faad2
-    ++ opt lameSupport lame
-    ++ opt zipSupport zziplib
-    ++ opt (!stdenv.isDarwin && pulseaudioSupport) libpulseaudio
-    ++ opt (!stdenv.isDarwin && jackSupport) libjack2
-    ++ opt gmeSupport game-music-emu
-    ++ opt icuSupport icu
-    ++ opt clientSupport mpd_clientlib
-    ++ opt opusSupport libopus
-    ++ opt soundcloudSupport yajl
-    ++ opt (!stdenv.isDarwin && nfsSupport) libnfs
-    ++ opt (!stdenv.isDarwin && smbSupport) samba;
+      knownFeatures = builtins.attrNames featureDependencies;
+      platformFeatures = lib.subtractLists platformMask knownFeatures;
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+      features_ = if (features == null )
+        then platformFeatures
+        else
+          let unknown = lib.subtractLists knownFeatures features; in
+          if (unknown != [])
+            then throw "Unknown feature(s): ${lib.concatStringsSep " " unknown}"
+            else
+              let unsupported = lib.subtractLists platformFeatures features; in
+              if (unsupported != [])
+                then throw "Feature(s) ${lib.concatStringsSep " " unsupported} are not supported on ${stdenv.hostPlatform.system}"
+                else features;
 
-  enableParallelBuilding = true;
+    in stdenv.mkDerivation rec {
+      pname = "mpd";
+      version = "0.21.16";
 
-  configureFlags =
-    [ (mkFlag (!stdenv.isDarwin && alsaSupport) "alsa")
-      (mkFlag flacSupport "flac")
-      (mkFlag vorbisSupport "vorbis")
-      (mkFlag vorbisSupport "vorbis-encoder")
-      (mkFlag (!stdenv.isDarwin && madSupport) "mad")
-      (mkFlag mikmodSupport "mikmod")
-      (mkFlag id3tagSupport "id3")
-      (mkFlag shoutSupport "shout")
-      (mkFlag sqliteSupport "sqlite")
-      (mkFlag curlSupport "curl")
-      (mkFlag audiofileSupport "audiofile")
-      (mkFlag bzip2Support "bzip2")
-      (mkFlag ffmpegSupport "ffmpeg")
-      (mkFlag fluidsynthSupport "fluidsynth")
-      (mkFlag zipSupport "zzip")
-      (mkFlag samplerateSupport "lsr")
-      (mkFlag mmsSupport "mms")
-      (mkFlag mpg123Support "mpg123")
-      (mkFlag aacSupport "aac")
-      (mkFlag lameSupport "lame-encoder")
-      (mkFlag (!stdenv.isDarwin && pulseaudioSupport) "pulse")
-      (mkFlag (!stdenv.isDarwin && jackSupport) "jack")
-      (mkFlag stdenv.isDarwin "osx")
-      (mkFlag icuSupport "icu")
-      (mkFlag gmeSupport "gme")
-      (mkFlag clientSupport "libmpdclient")
-      (mkFlag opusSupport "opus")
-      (mkFlag soundcloudSupport "soundcloud")
-      (mkFlag (!stdenv.isDarwin && nfsSupport) "libnfs")
-      (mkFlag (!stdenv.isDarwin && smbSupport) "smbclient")
-      "--enable-debug"
-      "--with-zeroconf=avahi"
-    ]
-    ++ opt stdenv.isLinux
-      "--with-systemdsystemunitdir=$(out)/etc/systemd/system";
+      src = fetchFromGitHub {
+        owner  = "MusicPlayerDaemon";
+        repo   = "MPD";
+        rev    = "v${version}";
+        sha256 = "0yfzn1hcyww8z5pp70n7iinycz097vjc6q9fzmfrc6ikvz3db8f4";
+      };
 
-  NIX_LDFLAGS = ''
-    ${if shoutSupport then "-lshout" else ""}
-  '';
+      buildInputs = [ glib boost ]
+        ++ (lib.concatLists (lib.attrVals features_ featureDependencies))
+        ++ lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.AudioToolbox;
 
-  meta = with stdenv.lib; {
-    description = "A flexible, powerful daemon for playing music";
-    homepage    = http://mpd.wikia.com/wiki/Music_Player_Daemon_Wiki;
-    license     = licenses.gpl2;
-    maintainers = with maintainers; [ astsmtl fuuzetsu ehmry fpletz ];
-    platforms   = platforms.unix;
+      nativeBuildInputs = [ meson ninja pkgconfig ];
 
-    longDescription = ''
-      Music Player Daemon (MPD) is a flexible, powerful daemon for playing
-      music. Through plugins and libraries it can play a variety of sound
-      files while being controlled by its network protocol.
-    '';
-  };
+      enableParallelBuilding = true;
+
+      mesonAutoFeatures = "disabled";
+      mesonFlags =
+        map (x: "-D${x}=enabled") features_
+        ++ map (x: "-D${x}=disabled") (lib.subtractLists features_ knownFeatures)
+        ++ lib.optional (builtins.elem "zeroconf" features_)
+          "-Dzeroconf=avahi"
+        ++ lib.optional (builtins.elem "systemd" features_)
+          "-Dsystemd_system_unit_dir=etc/systemd/system";
+
+      meta = with stdenv.lib; {
+        description = "A flexible, powerful daemon for playing music";
+        homepage    = http://mpd.wikia.com/wiki/Music_Player_Daemon_Wiki;
+        license     = licenses.gpl2;
+        maintainers = with maintainers; [ astsmtl fuuzetsu ehmry fpletz tobim ];
+        platforms   = platforms.unix;
+
+        longDescription = ''
+          Music Player Daemon (MPD) is a flexible, powerful daemon for playing
+          music. Through plugins and libraries it can play a variety of sound
+          files while being controlled by its network protocol.
+        '';
+      };
+    };
+in
+{
+  mpd = run { };
+  mpd-small = run { features = [
+    "webdav" "curl" "mms" "bzip2" "zzip"
+    "audiofile" "faad" "flac" "gme" "mad"
+    "mpg123" "opus" "vorbis" "vorbisenc"
+    "lame" "libsamplerate" "shout"
+    "libmpdclient" "id3tag" "expat" "pcre"
+    "yajl" "sqlite"
+    "soundcloud" "qobuz" "tidal"
+  ] ++ lib.optionals stdenv.isLinux [
+    "alsa" "systemd" "syslog"
+  ] ++ lib.optionals (!stdenv.isDarwin) [
+    "mad" "jack" "nfs"
+  ]; };
+  mpdWithFeatures = run;
 }