<commit_before>{ lib, stdenv, kernel, elfutils, python, perl, newt, slang, asciidoc, xmlto, makeWrapper
, docbook_xsl, docbook_xml_dtd_45, libxslt, flex, bison, pkgconfig, libunwind, binutils
, libiberty, libaudit, libbfd, openssl, systemtap, numactl
, zlib, withGtk ? false, gtk2 ? null
}:

with lib;

assert withGtk -> gtk2 != null;
assert versionAtLeast kernel.version "3.12";

stdenv.mkDerivation {
  name = "perf-linux-${kernel.version}";

  inherit (kernel) src makeFlags;

  preConfigure = ''
    cd tools/perf

    substituteInPlace Makefile \
      --replace /usr/include/elfutils $elfutils/include/elfutils

    for x in util/build-id.c util/dso.c; do
      substituteInPlace $x --replace /usr/lib/debug /run/current-system/sw/lib/debug
    done

    [ -f bash_completion ] && sed -i 's,^have perf,_have perf,' bash_completion
    export makeFlags="DESTDIR=$out WERROR=0 $makeFlags"
    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -DTIPDIR=\"$out/share/doc/perf-tip\""
  '';

  # perf refers both to newt and slang
  nativeBuildInputs = [ asciidoc xmlto docbook_xsl docbook_xml_dtd_45 libxslt
      flex bison libiberty libaudit makeWrapper pkgconfig python perl ];
  buildInputs =
    [ elfutils newt slang libunwind libbfd zlib openssl systemtap.stapBuild numactl
    ] ++ stdenv.lib.optional withGtk gtk2;

  # Note: we don't add elfutils to buildInputs, since it provides a
  # bad `ld' and other stuff.
  NIX_CFLAGS_COMPILE =
    [ "-Wno-error=cpp"
      "-Wno-error=bool-compare"
      "-Wno-error=deprecated-declarations"
      "-DOBJDUMP_PATH=\"${binutils}/bin/objdump\""
    ]
    # gcc before 6 doesn't know these options
    ++ stdenv.lib.optionals (hasPrefix "gcc-6" stdenv.cc.cc.name) [
      "-Wno-error=unused-const-variable" "-Wno-error=misleading-indentation"
    ];

  installFlags = "install install-man ASCIIDOC8=1";

  preFixup = ''
    wrapProgram $out/bin/perf \
      --prefix PATH : "${binutils}/bin"
  '';

  meta = {
    homepage = https://perf.wiki.kernel.org/;<commit_msg>perf: separateDebugInfo = true<commit_after>{ lib, stdenv, kernel, elfutils, python, perl, newt, slang, asciidoc, xmlto, makeWrapper
, docbook_xsl, docbook_xml_dtd_45, libxslt, flex, bison, pkgconfig, libunwind, binutils
, libiberty, libaudit, libbfd, openssl, systemtap, numactl
, zlib, withGtk ? false, gtk2 ? null
}:

with lib;

assert withGtk -> gtk2 != null;
assert versionAtLeast kernel.version "3.12";

stdenv.mkDerivation {
  name = "perf-linux-${kernel.version}";

  inherit (kernel) src makeFlags;

  preConfigure = ''
    cd tools/perf

    substituteInPlace Makefile \
      --replace /usr/include/elfutils $elfutils/include/elfutils

    for x in util/build-id.c util/dso.c; do
      substituteInPlace $x --replace /usr/lib/debug /run/current-system/sw/lib/debug
    done

    [ -f bash_completion ] && sed -i 's,^have perf,_have perf,' bash_completion
    export makeFlags="DESTDIR=$out WERROR=0 $makeFlags"
    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -DTIPDIR=\"$out/share/doc/perf-tip\""
  '';

  # perf refers both to newt and slang
  nativeBuildInputs = [ asciidoc xmlto docbook_xsl docbook_xml_dtd_45 libxslt
      flex bison libiberty libaudit makeWrapper pkgconfig python perl ];
  buildInputs =
    [ elfutils newt slang libunwind libbfd zlib openssl systemtap.stapBuild numactl
    ] ++ stdenv.lib.optional withGtk gtk2;

  # Note: we don't add elfutils to buildInputs, since it provides a
  # bad `ld' and other stuff.
  NIX_CFLAGS_COMPILE =
    [ "-Wno-error=cpp"
      "-Wno-error=bool-compare"
      "-Wno-error=deprecated-declarations"
      "-DOBJDUMP_PATH=\"${binutils}/bin/objdump\""
    ]
    # gcc before 6 doesn't know these options
    ++ stdenv.lib.optionals (hasPrefix "gcc-6" stdenv.cc.cc.name) [
      "-Wno-error=unused-const-variable" "-Wno-error=misleading-indentation"
    ];

  separateDebugInfo = true;
  installFlags = "install install-man ASCIIDOC8=1";

  preFixup = ''
    wrapProgram $out/bin/perf \
      --prefix PATH : "${binutils}/bin"
  '';

  meta = {
    homepage = https://perf.wiki.kernel.org/;
{'fraction_non_alphanumeric': 0.12374171372452737, 'fraction_numerical': 0.007365578197888534, 'mean_word_length': 3.55195530726257, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 5, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 8}, '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': '7644740', 'n_tokens_mistral': 1509, 'n_tokens_neox': 1458, 'n_words': 331}