mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-20 04:31:52 +00:00
Merge #12653: rework default outputs
This commit is contained in:
commit
710573ce6d
|
@ -129,7 +129,7 @@ rec {
|
|||
};
|
||||
|
||||
outputsList = map outputToAttrListElement outputs;
|
||||
in commonAttrs.${drv.outputName};
|
||||
in commonAttrs // { outputUnspecified = true; };
|
||||
|
||||
|
||||
/* Strip a derivation of all non-essential attributes, returning
|
||||
|
|
|
@ -38,7 +38,7 @@ with lib;
|
|||
# environment.pathsToLink, and we can't have both.
|
||||
#environment.pathsToLink = [ "/lib/debug/.build-id" ];
|
||||
|
||||
environment.outputsToLink =
|
||||
environment.extraOutputsToInstall =
|
||||
optional config.environment.enableDebugInfo "debug";
|
||||
|
||||
};
|
||||
|
|
|
@ -73,11 +73,11 @@ in
|
|||
description = "List of directories to be symlinked in <filename>/run/current-system/sw</filename>.";
|
||||
};
|
||||
|
||||
outputsToLink = mkOption {
|
||||
extraOutputsToInstall = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [ ];
|
||||
example = [ "doc" ];
|
||||
description = "List of package outputs to be symlinked into <filename>/run/current-system/sw</filename>.";
|
||||
example = [ "doc" "info" "docdev" ];
|
||||
description = "List of additional package outputs to be symlinked into <filename>/run/current-system/sw</filename>.";
|
||||
};
|
||||
|
||||
};
|
||||
|
@ -120,18 +120,13 @@ in
|
|||
"/share/vim-plugins"
|
||||
];
|
||||
|
||||
environment.outputsToLink = [ "bin" "lib" "out" ];
|
||||
|
||||
system.path = pkgs.buildEnv {
|
||||
name = "system-path";
|
||||
paths =
|
||||
lib.filter (drv: drv != null && drv != (drv.dev or null))
|
||||
(lib.concatMap (drv:
|
||||
[ drv ] ++ map (outputName: drv.${outputName}.outPath or null) config.environment.outputsToLink)
|
||||
config.environment.systemPackages);
|
||||
inherit (config.environment) pathsToLink;
|
||||
paths = config.environment.systemPackages;
|
||||
inherit (config.environment) pathsToLink extraOutputsToInstall;
|
||||
ignoreCollisions = true;
|
||||
# !!! Hacky, should modularise.
|
||||
# outputs TODO: note that the tools will often not be linked by default
|
||||
postBuild =
|
||||
''
|
||||
if [ -x $out/bin/update-mime-database -a -w $out/share/mime ]; then
|
||||
|
|
|
@ -23,7 +23,7 @@ with lib;
|
|||
|
||||
environment.pathsToLink = [ "/share/man" ];
|
||||
|
||||
environment.outputsToLink = [ "man" ];
|
||||
environment.extraOutputsToInstall = [ "man" ];
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ in
|
|||
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
environment.systemPackages = [ pkgs.polkit ];
|
||||
environment.systemPackages = [ pkgs.polkit.bin pkgs.polkit.out ];
|
||||
|
||||
systemd.packages = [ pkgs.polkit.out ];
|
||||
|
||||
|
|
|
@ -25,6 +25,10 @@
|
|||
# directories in the list is not symlinked.
|
||||
pathsToLink ? ["/"]
|
||||
|
||||
, # The package outputs to include. By default, only the default
|
||||
# output is included.
|
||||
extraOutputsToInstall ? []
|
||||
|
||||
, # Root the result in directory "$out${extraPrefix}", e.g. "/share".
|
||||
extraPrefix ? ""
|
||||
|
||||
|
@ -43,7 +47,15 @@ runCommand name
|
|||
inherit manifest ignoreCollisions checkCollisionContents passthru
|
||||
meta pathsToLink extraPrefix postBuild buildInputs;
|
||||
pkgs = builtins.toJSON (map (drv: {
|
||||
paths = [ drv ];
|
||||
paths =
|
||||
# First add the usual output(s): respect if user has chosen explicitly,
|
||||
# and otherwise use `meta.outputsToInstall` (guaranteed to exist by stdenv).
|
||||
(if (drv.outputUnspecified or false)
|
||||
then map (outName: drv.${outName}) drv.meta.outputsToInstall
|
||||
else [ drv ])
|
||||
# Add any extra outputs specified by the caller of `buildEnv`.
|
||||
++ lib.filter (p: p!=null)
|
||||
(builtins.map (outName: drv.${outName} or null) extraOutputsToInstall);
|
||||
priority = drv.meta.priority or 5;
|
||||
}) paths);
|
||||
preferLocalBuild = true;
|
||||
|
|
|
@ -220,12 +220,25 @@ let
|
|||
# The meta attribute is passed in the resulting attribute set,
|
||||
# but it's not part of the actual derivation, i.e., it's not
|
||||
# passed to the builder and is not a dependency. But since we
|
||||
# include it in the result, it *is* available to nix-env for
|
||||
# queries. We also a meta.position attribute here to
|
||||
# identify the source location of the package.
|
||||
meta = meta // (if pos' != null then {
|
||||
position = pos'.file + ":" + toString pos'.line;
|
||||
} else {});
|
||||
# include it in the result, it *is* available to nix-env for queries.
|
||||
meta = { }
|
||||
# If the packager hasn't specified `outputsToInstall`, choose a default,
|
||||
# namely `p.bin or p.out or p`;
|
||||
# if he has specified it, it will be overridden below in `// meta`.
|
||||
# Note: This default probably shouldn't be globally configurable.
|
||||
# Services and users should specify outputs explicitly,
|
||||
# unless they are comfortable with this default.
|
||||
// { outputsToInstall =
|
||||
let
|
||||
outs = outputs'; # the value passed to derivation primitive
|
||||
hasOutput = out: builtins.elem out outs;
|
||||
in [( lib.findFirst hasOutput null (["bin" "out"] ++ outs) )];
|
||||
}
|
||||
// meta
|
||||
# Fill `meta.position` to identify the source location of the package.
|
||||
// lib.optionalAttrs (pos' != null)
|
||||
{ position = pos'.file + ":" + toString pos'.line; }
|
||||
;
|
||||
inherit passthru;
|
||||
} //
|
||||
# Pass through extra attributes that are not inputs, but
|
||||
|
|
Loading…
Reference in a new issue