Add option to link additional package outputs into system.path

This is necessary to get stuff like separate manpages, info files,
debug symbols, etc.
This commit is contained in:
Eelco Dolstra 2015-10-30 14:13:47 +01:00
parent 3e732f65cb
commit 58e9440b89
3 changed files with 19 additions and 5 deletions

View file

@ -71,8 +71,16 @@ in
# to work.
default = [];
example = ["/"];
description = "List of directories to be symlinked in `/run/current-system/sw'.";
description = "List of directories to be symlinked in <filename>/run/current-system/sw</filename>.";
};
outputsToLink = mkOption {
type = types.listOf types.str;
default = [];
example = [ "doc" ];
description = "List of package outputs to be symlinked into <filename>/run/current-system/sw</filename>.";
};
};
system = {
@ -119,7 +127,7 @@ in
system.path = pkgs.buildEnv {
name = "system-path";
paths = config.environment.systemPackages;
inherit (config.environment) pathsToLink;
inherit (config.environment) pathsToLink outputsToLink;
ignoreCollisions = true;
# !!! Hacky, should modularise.
postBuild =

View file

@ -2,7 +2,7 @@
# a fork of the buildEnv in the Nix distribution. Most changes should
# eventually be merged back into the Nix distribution.
{ perl, runCommand }:
{ perl, runCommand, lib }:
{ name
@ -21,6 +21,10 @@
# directories in the list is not symlinked.
pathsToLink ? ["/"]
, # The package outputs to include. By default, only the default
# output is included.
outputsToLink ? []
, # Root the result in directory "$out${extraPrefix}", e.g. "/share".
extraPrefix ? ""
@ -36,7 +40,9 @@
runCommand name
{ inherit manifest ignoreCollisions passthru pathsToLink extraPrefix postBuild buildInputs;
pkgs = builtins.toJSON (map (drv: {
paths = [ drv ]; # FIXME: handle multiple outputs
paths =
[ drv ]
++ lib.concatMap (outputName: lib.optional (drv.${outputName}.outPath or null != null) drv.${outputName}) outputsToLink;
priority = drv.meta.priority or 5;
}) paths);
preferLocalBuild = true;

View file

@ -261,7 +261,7 @@ let
{ substitutions = { inherit autoconf automake gettext libtool; }; }
../build-support/setup-hooks/autoreconf.sh;
buildEnv = callPackage ../build-support/buildenv {};
buildEnv = callPackage ../build-support/buildenv { }; # not actually a package
buildFHSEnv = callPackage ../build-support/build-fhs-chrootenv/env.nix {
nixpkgs = pkgs;