summary refs log tree commit diff
path: root/pkgs/applications/audio/cantata/default.nix
blob: 82a6d44f64363249947c23038d80ca7747317c79 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
{ stdenv, fetchFromGitHub, cmake, vlc
, withQt4 ? false, qt4
, withQt5 ? true, qtbase, qtsvg, qttools

# Cantata doesn't build with cdparanoia enabled so we disable that
# default for now until I (or someone else) figure it out.
, withCdda ? false, cdparanoia
, withCddb ? false, libcddb
, withLame ? false, lame
, withMusicbrainz ? false, libmusicbrainz5

, withTaglib ? true, taglib, taglib_extras
, withReplaygain ? true, ffmpeg, speex, mpg123
, withMtp ? true, libmtp
, withOnlineServices ? true
, withDevices ? true, udisks2
, withDynamic ? true
, withHttpServer ? true
, withStreams ? true
}:

# One and only one front-end.
assert withQt5 -> withQt4 == false;
assert withQt4 -> withQt5 == false;
assert withQt4 || withQt5;

# Inter-dependencies.
assert withCddb -> withCdda && withTaglib;
assert withCdda -> withCddb && withMusicbrainz;
assert withLame -> withCdda && withTaglib;
assert withMtp -> withTaglib;
assert withMusicbrainz -> withCdda && withTaglib;
assert withOnlineServices -> withTaglib;
assert withReplaygain -> withTaglib;

let
  version = "2.0.1";
  pname = "cantata";
  fstat = x: fn: "-DENABLE_" + fn + "=" + (if x then "ON" else "OFF");
  fstats = x: map (fstat x);
in

stdenv.mkDerivation rec {
  name = "${pname}-${version}";

  src = fetchFromGitHub {
    owner = "CDrummond";
    repo = "cantata";
    rev = "v${version}";
    sha256 = "18fiz3cav41dpap42qwj9hwxf2k9fmhyg2r34yggxqi2cjlsil36";
  };

  buildInputs =
    [ cmake vlc ]
    ++ stdenv.lib.optional withQt4 qt4
    ++ stdenv.lib.optionals withQt5 [ qtbase qtsvg qttools ]
    ++ stdenv.lib.optionals withTaglib [ taglib taglib_extras ]
    ++ stdenv.lib.optionals withReplaygain [ ffmpeg speex mpg123 ]
    ++ stdenv.lib.optional withCdda cdparanoia
    ++ stdenv.lib.optional withCddb libcddb
    ++ stdenv.lib.optional withLame lame
    ++ stdenv.lib.optional withMtp libmtp
    ++ stdenv.lib.optional withMusicbrainz libmusicbrainz5
    ++ stdenv.lib.optional (withTaglib && withDevices) udisks2;

  cmakeFlags = stdenv.lib.flatten [
    (fstat withQt5 "QT5")
    (fstats withTaglib [ "TAGLIB" "TAGLIB_EXTRAS" ])
    (fstats withReplaygain [ "FFMPEG" "MPG123" "SPEEXDSP" ])
    (fstat withCdda "CDPARANOIA")
    (fstat withCddb "CDDB")
    (fstat withLame "LAME")
    (fstat withMtp "MTP")
    (fstat withMusicbrainz "MUSICBRAINZ")
    (fstat withOnlineServices "ONLINE_SERVICES")
    (fstat withDynamic "DYNAMIC")
    (fstat withDevices "DEVICES_SUPPORT")
    (fstat withHttpServer "HTTP_SERVER")
    (fstat withStreams "STREAMS")
    "-DENABLE_HTTPS_SUPPORT=ON"
    "-DENABLE_UDISKS2=ON"
  ];

  # This is already fixed upstream but not released yet. Maybe in version 2.
  preConfigure = ''
    sed -i -e 's/STRLESS/VERSION_LESS/g' cmake/FindTaglib.cmake
  '';

  meta = with stdenv.lib; {
    homepage = https://github.com/cdrummond/cantata;
    description = "A graphical client for MPD";
    license = licenses.gpl3;

    # Technically Cantata can run on Windows so if someone wants to
    # bother figuring that one out, be my guest.
    platforms = platforms.linux;
    maintainers = [ maintainers.fuuzetsu ];
  };
}