depot/third_party/nixpkgs/pkgs/applications/audio/cmus/default.nix

177 lines
4.3 KiB
Nix

{
config,
lib,
stdenv,
fetchFromGitHub,
ncurses,
pkg-config,
libiconv,
CoreAudio,
AudioUnit,
VideoToolbox,
alsaSupport ? stdenv.hostPlatform.isLinux,
alsa-lib ? null,
# simple fallback for everyone else
aoSupport ? !stdenv.hostPlatform.isLinux,
libao ? null,
jackSupport ? false,
libjack ? null,
samplerateSupport ? jackSupport,
libsamplerate ? null,
ossSupport ? false,
alsa-oss ? null,
pulseaudioSupport ? config.pulseaudio or false,
libpulseaudio ? null,
sndioSupport ? false,
sndio ? null,
mprisSupport ? stdenv.hostPlatform.isLinux,
systemd ? null,
# TODO: add these
#, artsSupport
#, roarSupport
#, sunSupport
#, waveoutSupport
cddbSupport ? true,
libcddb ? null,
cdioSupport ? true,
libcdio ? null,
libcdio-paranoia ? null,
cueSupport ? true,
libcue ? null,
discidSupport ? false,
libdiscid ? null,
ffmpegSupport ? true,
ffmpeg ? null,
flacSupport ? true,
flac ? null,
madSupport ? true,
libmad ? null,
mikmodSupport ? true,
libmikmod ? null,
modplugSupport ? true,
libmodplug ? null,
mpcSupport ? true,
libmpcdec ? null,
tremorSupport ? false,
tremor ? null,
vorbisSupport ? true,
libvorbis ? null,
wavpackSupport ? true,
wavpack ? null,
opusSupport ? true,
opusfile ? null,
aacSupport ? false,
faad2 ? null, # already handled by ffmpeg
mp4Support ? false,
mp4v2 ? null, # ffmpeg does support mp4 better
# not in nixpkgs
#, vtxSupport ? true, libayemu ? null
}:
assert samplerateSupport -> jackSupport;
# vorbis and tremor are mutually exclusive
assert vorbisSupport -> !tremorSupport;
assert tremorSupport -> !vorbisSupport;
let
mkFlag =
b: f: dep:
if b then
{
flags = [ f ];
deps = [ dep ];
}
else
{
flags = [ ];
deps = [ ];
};
opts = [
# Audio output
(mkFlag alsaSupport "CONFIG_ALSA=y" alsa-lib)
(mkFlag aoSupport "CONFIG_AO=y" libao)
(mkFlag jackSupport "CONFIG_JACK=y" libjack)
(mkFlag samplerateSupport "CONFIG_SAMPLERATE=y" libsamplerate)
(mkFlag ossSupport "CONFIG_OSS=y" alsa-oss)
(mkFlag pulseaudioSupport "CONFIG_PULSE=y" libpulseaudio)
(mkFlag sndioSupport "CONFIG_SNDIO=y" sndio)
(mkFlag mprisSupport "CONFIG_MPRIS=y" systemd)
#(mkFlag artsSupport "CONFIG_ARTS=y")
#(mkFlag roarSupport "CONFIG_ROAR=y")
#(mkFlag sunSupport "CONFIG_SUN=y")
#(mkFlag waveoutSupport "CONFIG_WAVEOUT=y")
# Input file formats
(mkFlag cddbSupport "CONFIG_CDDB=y" libcddb)
(mkFlag cdioSupport "CONFIG_CDIO=y" [
libcdio
libcdio-paranoia
])
(mkFlag cueSupport "CONFIG_CUE=y" libcue)
(mkFlag discidSupport "CONFIG_DISCID=y" libdiscid)
(mkFlag ffmpegSupport "CONFIG_FFMPEG=y" ffmpeg)
(mkFlag flacSupport "CONFIG_FLAC=y" flac)
(mkFlag madSupport "CONFIG_MAD=y" libmad)
(mkFlag mikmodSupport "CONFIG_MIKMOD=y" libmikmod)
(mkFlag modplugSupport "CONFIG_MODPLUG=y" libmodplug)
(mkFlag mpcSupport "CONFIG_MPC=y" libmpcdec)
(mkFlag tremorSupport "CONFIG_TREMOR=y" tremor)
(mkFlag vorbisSupport "CONFIG_VORBIS=y" libvorbis)
(mkFlag wavpackSupport "CONFIG_WAVPACK=y" wavpack)
(mkFlag opusSupport "CONFIG_OPUS=y" opusfile)
(mkFlag mp4Support "CONFIG_MP4=y" mp4v2)
(mkFlag aacSupport "CONFIG_AAC=y" faad2)
#(mkFlag vtxSupport "CONFIG_VTX=y" libayemu)
];
in
stdenv.mkDerivation rec {
pname = "cmus";
version = "2.12.0";
src = fetchFromGitHub {
owner = "cmus";
repo = "cmus";
rev = "v${version}";
hash = "sha256-8hgibGtkiwzenMI9YImIApRmw2EzTwE6RhglALpUkp4=";
};
nativeBuildInputs = [ pkg-config ];
buildInputs =
[ ncurses ]
++ lib.optionals stdenv.hostPlatform.isDarwin [
libiconv
CoreAudio
AudioUnit
VideoToolbox
]
++ lib.flatten (lib.concatMap (a: a.deps) opts);
prefixKey = "prefix=";
configureFlags = [
"CONFIG_WAV=y"
"HOSTCC=${stdenv.cc.targetPrefix}cc"
] ++ lib.concatMap (a: a.flags) opts;
makeFlags = [ "LD=$(CC)" ];
meta = with lib; {
description = "Small, fast and powerful console music player for Linux and *BSD";
homepage = "https://cmus.github.io/";
license = licenses.gpl2;
maintainers = [ maintainers.oxij ];
platforms = platforms.linux ++ platforms.darwin;
};
}