aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/pkgs/servers/mpd/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/servers/mpd/default.nix')
-rw-r--r--nixpkgs/pkgs/servers/mpd/default.nix282
1 files changed, 148 insertions, 134 deletions
diff --git a/nixpkgs/pkgs/servers/mpd/default.nix b/nixpkgs/pkgs/servers/mpd/default.nix
index 7fcb5f94579..c16a1f6659e 100644
--- a/nixpkgs/pkgs/servers/mpd/default.nix
+++ b/nixpkgs/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;
}