ff1a94e523
The nixpkgs-unstable channel's programs.sqlite was used to identify packages producing exactly one binary, and these automatically added to their package definitions wherever possible.
122 lines
3.6 KiB
Nix
122 lines
3.6 KiB
Nix
{ mkDerivation
|
|
, lib
|
|
, fetchFromGitHub
|
|
, cmake
|
|
, pkg-config
|
|
, qtbase
|
|
, qtsvg
|
|
, qttools
|
|
, perl
|
|
|
|
# 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
|
|
, withHttpStream ? true
|
|
, qtmultimedia
|
|
, withReplaygain ? true
|
|
, ffmpeg
|
|
, speex
|
|
, mpg123
|
|
, withMtp ? true
|
|
, libmtp
|
|
, withOnlineServices ? true
|
|
, withDevices ? true
|
|
, udisks2
|
|
, withDynamic ? true
|
|
, withHttpServer ? true
|
|
, withLibVlc ? false
|
|
, libvlc
|
|
, withStreams ? true
|
|
}:
|
|
|
|
# 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;
|
|
assert withLibVlc -> withHttpStream;
|
|
|
|
let
|
|
fstat = x: fn:
|
|
"-DENABLE_${fn}=${if x then "ON" else "OFF"}";
|
|
|
|
withUdisks = (withTaglib && withDevices);
|
|
|
|
options = [
|
|
{ names = [ "CDDB" ]; enable = withCddb; pkgs = [ libcddb ]; }
|
|
{ names = [ "CDPARANOIA" ]; enable = withCdda; pkgs = [ cdparanoia ]; }
|
|
{ names = [ "DEVICES_SUPPORT" ]; enable = withDevices; pkgs = [ ]; }
|
|
{ names = [ "DYNAMIC" ]; enable = withDynamic; pkgs = [ ]; }
|
|
{ names = [ "FFMPEG" "MPG123" "SPEEXDSP" ]; enable = withReplaygain; pkgs = [ ffmpeg speex mpg123 ]; }
|
|
{ names = [ "HTTPS_SUPPORT" ]; enable = true; pkgs = [ ]; }
|
|
{ names = [ "HTTP_SERVER" ]; enable = withHttpServer; pkgs = [ ]; }
|
|
{ names = [ "HTTP_STREAM_PLAYBACK" ]; enable = withHttpStream; pkgs = [ qtmultimedia ]; }
|
|
{ names = [ "LAME" ]; enable = withLame; pkgs = [ lame ]; }
|
|
{ names = [ "LIBVLC" ]; enable = withLibVlc; pkgs = [ libvlc ]; }
|
|
{ names = [ "MTP" ]; enable = withMtp; pkgs = [ libmtp ]; }
|
|
{ names = [ "MUSICBRAINZ" ]; enable = withMusicbrainz; pkgs = [ libmusicbrainz5 ]; }
|
|
{ names = [ "ONLINE_SERVICES" ]; enable = withOnlineServices; pkgs = [ ]; }
|
|
{ names = [ "STREAMS" ]; enable = withStreams; pkgs = [ ]; }
|
|
{ names = [ "TAGLIB" "TAGLIB_EXTRAS" ]; enable = withTaglib; pkgs = [ taglib taglib_extras ]; }
|
|
{ names = [ "UDISKS2" ]; enable = withUdisks; pkgs = [ udisks2 ]; }
|
|
];
|
|
|
|
in
|
|
mkDerivation rec {
|
|
pname = "cantata";
|
|
version = "2.5.0";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "CDrummond";
|
|
repo = "cantata";
|
|
rev = "v${version}";
|
|
sha256 = "sha256-UaZEKZvCA50WsdQSSJQQ11KTK6rM4ouCHDX7pn3NlQw=";
|
|
};
|
|
|
|
patches = [
|
|
# Cantata wants to check if perl is in the PATH at runtime, but we
|
|
# patchShebangs the playlists scripts, making that unnecessary (perl will
|
|
# always be available because it's a dependency)
|
|
./dont-check-for-perl-in-PATH.diff
|
|
];
|
|
|
|
postPatch = ''
|
|
patchShebangs playlists
|
|
'';
|
|
|
|
buildInputs = [
|
|
qtbase
|
|
qtsvg
|
|
(perl.withPackages (ppkgs: with ppkgs; [ URI ]))
|
|
]
|
|
++ lib.flatten (builtins.catAttrs "pkgs" (builtins.filter (e: e.enable) options));
|
|
|
|
nativeBuildInputs = [ cmake pkg-config qttools ];
|
|
|
|
cmakeFlags = lib.flatten (map (e: map (f: fstat e.enable f) e.names) options);
|
|
|
|
meta = with lib; {
|
|
description = "A graphical client for MPD";
|
|
mainProgram = "cantata";
|
|
homepage = "https://github.com/cdrummond/cantata";
|
|
license = licenses.gpl3Only;
|
|
maintainers = with maintainers; [ peterhoeg ];
|
|
# Technically, Cantata should run on Darwin/Windows so if someone wants to
|
|
# bother figuring that one out, be my guest.
|
|
platforms = platforms.linux;
|
|
};
|
|
}
|