<commit_before>{ stdenv, fetchFromGitHub, cmake, pkgconfig, vlc
, withQt4 ? false, qt4
, withQt5 ? true, qtbase, qtmultimedia, 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.2.0";
  pname = "cantata";
  fstat = x: fn: "-DENABLE_" + fn + "=" + (if x then "ON" else "OFF");
  fstats = x: map (fstat x);

  withUdisks = (withTaglib && withDevices);

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

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

  buildInputs = [ vlc ]
    ++ stdenv.lib.optional  withQt4 qt4
    ++ stdenv.lib.optionals withQt5 [ qtbase qtmultimedia 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  withUdisks udisks2;

  nativeBuildInputs = [ cmake pkgconfig ];

  enableParallelBuilding = true;

  cmakeFlags = stdenv.lib.flatten [
    (fstat withQt5            "QT5")<commit_msg>cantata: drop qt4 option<commit_after>{ stdenv, fetchFromGitHub, cmake, pkgconfig, vlc
, qtbase, qtmultimedia, 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
}:

# 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.2.0";
  pname = "cantata";
  fstat = x: fn: "-DENABLE_" + fn + "=" + (if x then "ON" else "OFF");
  fstats = x: map (fstat x);

  withUdisks = (withTaglib && withDevices);

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

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

  buildInputs = [ vlc qtbase qtmultimedia qtsvg ]
    ++ 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  withUdisks udisks2;

  nativeBuildInputs = [ cmake pkgconfig qttools ];

  enableParallelBuilding = true;

  cmakeFlags = stdenv.lib.flatten [
{'fraction_non_alphanumeric': 0.11007862759113653, 'fraction_numerical': 0.020252561353347628, 'mean_word_length': 4.027544910179641, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 19, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5001456', 'n_tokens_mistral': 1644, 'n_tokens_neox': 1548, 'n_words': 373}