Add option environment.enableDebugInfo

This makes the debug outputs of packages that have them available to
programs like gdb.

Changed files
+52 -4
nixos
pkgs
tools
package-management
+46
nixos/modules/config/debug-info.nix
···
+
{ config, lib, ... }:
+
+
with lib;
+
+
{
+
+
options = {
+
+
environment.enableDebugInfo = mkOption {
+
type = types.bool;
+
default = false;
+
description = ''
+
Some NixOS packages provide debug symbols. However, these are
+
not included in the system closure by default to save disk
+
space. Enabling this option causes the debug symbols to appear
+
in <filename>/run/current-system/sw/lib/debug/.build-id</filename>,
+
where tools such as <command>gdb</command> can find them.
+
If you need debug symbols for a package that doesn't
+
provide them by default, you can enable them as follows:
+
<!-- FIXME: ugly, see #10721 -->
+
<programlisting>
+
nixpkgs.config.packageOverrides = pkgs: {
+
hello = overrideDerivation pkgs.hello (attrs: {
+
outputs = attrs.outputs or ["out"] ++ ["debug"];
+
buildInputs = attrs.buildInputs ++ [&lt;nixpkgs/pkgs/build-support/setup-hooks/separate-debug-info.sh>];
+
});
+
};
+
</programlisting>
+
'';
+
};
+
+
};
+
+
+
config = {
+
+
# FIXME: currently disabled because /lib is already in
+
# environment.pathsToLink, and we can't have both.
+
#environment.pathsToLink = [ "/lib/debug/.build-id" ];
+
+
environment.outputsToLink =
+
optional config.environment.enableDebugInfo "debug";
+
+
};
+
+
}
+1 -2
nixos/modules/config/system-path.nix
···
[ "/bin"
"/etc/xdg"
"/info"
-
"/lib" # FIXME: remove
-
#"/lib/debug/.build-id" # enables GDB to find separated debug info
+
"/lib" # FIXME: remove and update debug-info.nix
"/sbin"
"/share/applications"
"/share/desktop-directories"
+3 -2
nixos/modules/module-list.nix
···
[
+
./config/debug-info.nix
./config/fonts/corefonts.nix
+
./config/fonts/fontconfig-ultimate.nix
./config/fonts/fontconfig.nix
-
./config/fonts/fontconfig-ultimate.nix
./config/fonts/fontdir.nix
./config/fonts/fonts.nix
./config/fonts/ghostscript.nix
···
./config/system-environment.nix
./config/system-path.nix
./config/timezone.nix
-
./config/vpnc.nix
./config/unix-odbc-drivers.nix
./config/users-groups.nix
+
./config/vpnc.nix
./config/zram.nix
./hardware/all-firmware.nix
./hardware/cpu/amd-microcode.nix
+2
pkgs/tools/package-management/nix/default.nix
···
doInstallCheck = false;
+
separateDebugInfo = stdenv.isLinux;
+
crossAttrs = {
postUnpack =
'' export CPATH="${bzip2.crossDrv}/include"