]>
Commit | Line | Data |
---|---|---|
72300eb8 IB |
1 | { stdenv, fetchFromGitHub, meson, ninja, pkgconfig, glib, systemd, boost168, darwin |
2 | , cmake, libupnp, sndio, chromaprint, soxr, libcdio, libcdio-paranoia, ao, libao | |
3 | , openal | |
4 | # Inputs | |
5 | , curl, libmms, libnfs, samba | |
6 | # Archive support | |
7 | , bzip2, zziplib | |
8 | # Codecs | |
9 | , audiofile, faad2, ffmpeg, flac, fluidsynth, game-music-emu | |
10 | , libmad, libmikmod, mpg123, libopus, libvorbis, lame | |
11 | # Filters | |
12 | , libsamplerate | |
13 | # Outputs | |
14 | , alsaLib, libjack2, libpulseaudio, libshout | |
15 | # Misc | |
16 | , icu, sqlite, avahi, dbus, pcre, libgcrypt, expat | |
17 | # Services | |
18 | , yajl | |
19 | # Client support | |
20 | , mpd_clientlib | |
21 | # Tag support | |
22 | , libid3tag | |
23 | }: | |
24 | ||
25 | let | |
26 | major = "0.21"; | |
27 | minor = "7"; | |
28 | ||
29 | lib = stdenv.lib; | |
30 | mkDisable = f: "-D${f}=disabled"; | |
31 | mkEnable = f: "-D${f}=enabled"; | |
32 | keys = lib.mapAttrsToList (k: v: k); | |
33 | ||
34 | featureDependencies = { | |
35 | # Storage plugins | |
36 | udisks = [ dbus ]; | |
37 | webdav = [ curl expat ]; | |
38 | # Input plugins | |
39 | curl = [ curl ]; | |
40 | mms = [ libmms ]; | |
41 | nfs = [ libnfs ]; | |
42 | smbclient = [ samba ]; | |
43 | # Archive support | |
44 | bzip2 = [ bzip2 ]; | |
45 | zzip = [ zziplib ]; | |
46 | # Decoder plugins | |
47 | audiofile = [ audiofile ]; | |
48 | faad = [ faad2 ]; | |
49 | ffmpeg = [ ffmpeg ]; | |
50 | flac = [ flac ]; | |
51 | fluidsynth = [ fluidsynth ]; | |
52 | gme = [ game-music-emu ]; | |
53 | mad = [ libmad ]; | |
54 | mikmod = [ libmikmod ]; | |
55 | mpg123 = [ mpg123 ]; | |
56 | opus = [ libopus ]; | |
57 | vorbis = [ libvorbis ]; | |
58 | # Encoder plugins | |
59 | vorbisenc = [ libvorbis ]; | |
60 | lame = [ lame ]; | |
61 | # Filter plugins | |
62 | libsamplerate = [ libsamplerate ]; | |
63 | # Output plugins | |
64 | alsa = [ alsaLib ]; | |
65 | jack = [ libjack2 ]; | |
66 | pulse = [ libpulseaudio ]; | |
67 | shout = [ libshout ]; | |
68 | # Commercial services | |
69 | qobuz = [ curl libgcrypt yajl ]; | |
70 | soundcloud = [ curl yajl ]; | |
71 | tidal = [ curl yajl ]; | |
72 | # Client support | |
73 | libmpdclient = [ mpd_clientlib ]; | |
74 | # Tag support | |
75 | id3tag = [ libid3tag ]; | |
76 | # Misc | |
77 | dbus = [ dbus ]; | |
78 | expat = [ expat ]; | |
79 | icu = [ icu ]; | |
80 | pcre = [ pcre ]; | |
81 | sqlite = [ sqlite ]; | |
82 | systemd = [ systemd ]; | |
83 | yajl = [ yajl ]; | |
84 | zeroconf = [ avahi dbus ]; | |
85 | }; | |
86 | ||
87 | run = { features ? null }: | |
88 | let | |
89 | fl = if (features == null ) | |
90 | then keys featureDependencies | |
91 | else features; | |
92 | ||
93 | # Disable platform specific features if needed | |
94 | # using libmad to decode mp3 files on darwin is causing a segfault -- there | |
95 | # is probably a solution, but I'm disabling it for now | |
96 | platformMask = lib.optionals stdenv.isDarwin [ "mad" "pulse" "jack" "nfs" "smb" ] | |
97 | ++ lib.optionals (!stdenv.isLinux) [ "alsa" "systemd" ]; | |
98 | features_ = lib.subtractLists platformMask fl; | |
99 | ||
100 | in stdenv.mkDerivation rec { | |
101 | name = "mpd-${version}"; | |
102 | version = "${major}${if minor == "" then "" else "." + minor}"; | |
103 | ||
104 | src = fetchFromGitHub { | |
105 | owner = "MusicPlayerDaemon"; | |
106 | repo = "MPD"; | |
107 | rev = "v${version}"; | |
108 | sha256 = "11zi8hmlj63ngzl06vzx05669k20j4cdsp0caz4p4ayn46fd4m17"; | |
109 | }; | |
110 | ||
111 | buildInputs = [ cmake glib boost168 sndio libupnp chromaprint soxr | |
112 | libcdio libcdio-paranoia ao libao openal libvorbis | |
113 | ] | |
114 | ++ (lib.concatLists (lib.attrVals features_ featureDependencies)) | |
115 | ++ lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.AudioToolbox; | |
116 | ||
117 | nativeBuildInputs = [ meson ninja pkgconfig ]; | |
118 | ||
119 | enableParallelBuilding = true; | |
120 | ||
121 | mesonFlags = | |
122 | map mkEnable features_ ++ map mkDisable (lib.subtractLists features_ (keys featureDependencies)) | |
123 | ++ [ "-Dsyslog=enabled" ] | |
124 | ++ lib.optional (lib.any (x: x == "zeroconf") features_) | |
125 | "-Dzeroconf=avahi" | |
126 | ++ lib.optional stdenv.isLinux | |
127 | "-Dsystemd_system_unit_dir=etc/systemd/system"; | |
128 | ||
129 | meta = with stdenv.lib; { | |
130 | description = "A flexible, powerful daemon for playing music"; | |
131 | homepage = http://mpd.wikia.com/wiki/Music_Player_Daemon_Wiki; | |
132 | license = licenses.gpl2; | |
133 | maintainers = with maintainers; [ astsmtl fuuzetsu ehmry fpletz ]; | |
134 | platforms = platforms.unix; | |
135 | ||
136 | longDescription = '' | |
137 | Music Player Daemon (MPD) is a flexible, powerful daemon for playing | |
138 | music. Through plugins and libraries it can play a variety of sound | |
139 | files while being controlled by its network protocol. | |
140 | ''; | |
141 | }; | |
142 | }; | |
143 | in | |
144 | { | |
145 | mpd = run { }; | |
146 | mpd-small = run { features = [ | |
147 | "webdav" "curl" "mms" "nfs" "bzip2" "zzip" | |
148 | "audiofile" "faad" "flac" "gme" "mad" | |
149 | "mpg123" "opus" "vorbis" | |
150 | "vorbisenc" "lame" "libsamplerate" | |
151 | "alsa" "shout" "libmpdclient" | |
152 | "id3tag" "expat" "pcre" "yajl" "sqlite" | |
153 | "soundcloud" "qobuz" "tidal" | |
154 | "systemd" | |
155 | ]; }; | |
156 | } |