about summary refs log tree commit diff
path: root/pkgs/development/libraries/glibc/mtrace.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/libraries/glibc/mtrace.nix')
-rw-r--r--pkgs/development/libraries/glibc/mtrace.nix38
1 files changed, 38 insertions, 0 deletions
diff --git a/pkgs/development/libraries/glibc/mtrace.nix b/pkgs/development/libraries/glibc/mtrace.nix
new file mode 100644
index 0000000000000..fed24aff27966
--- /dev/null
+++ b/pkgs/development/libraries/glibc/mtrace.nix
@@ -0,0 +1,38 @@
+{ glibc, perl }:
+
+# Small wrapper which only exposes `mtrace(3)` from `glibc`. This can't be placed
+# into `glibc` itself because it depends on Perl which would mean that the final
+# `glibc` inside a stdenv bootstrap has a dependency `glibc -> perl -> bootstrap tools`,
+# so this is now in its own package that isn't used for bootstrapping.
+#
+# `glibc` needs to be overridden here because it's still needed to `./configure` the source in order
+# to have a build environment where we can call the needed make target.
+
+glibc.overrideAttrs ({ meta ? {}, ... }: {
+  pname = "glibc-mtrace";
+
+  buildPhase = ''
+    runHook preBuild
+
+    mkdir malloc
+    make -C ../glibc-${glibc.minorRelease}/malloc objdir=`pwd` `pwd`/malloc/mtrace;
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv malloc/mtrace $out/bin/
+  '';
+
+  # Perl interpreter used for `mtrace`.
+  buildInputs = [ perl ];
+
+  # Reset a few things declared by `pkgs.glibc`.
+  outputs = [ "out" ];
+  separateDebugInfo = false;
+
+  meta = meta // {
+    description = "Perl script used to interpret and provide human readable output of the trace log contained in the file mtracedata, whose contents were produced by mtrace(3).";
+  };
+})