83647f4ef1
common attribution so that they're evaluated only once, etc. Note that the default output is now the first element of the "outputs" attribute, rather than the first element of the sorted list of outputs. This seems more user-friendly.
24 lines
706 B
Nix
24 lines
706 B
Nix
/* This is the implementation of the ‘derivation’ builtin function.
|
||
It's actually a wrapper around the ‘derivationStrict’ primop. */
|
||
|
||
drvAttrs @ { outputs ? [ "out" ], ... }:
|
||
|
||
let
|
||
|
||
strict = derivationStrict drvAttrs;
|
||
|
||
commonAttrs = drvAttrs // (builtins.listToAttrs outputsList) // { all = map (x: x.value) outputsList; };
|
||
|
||
outputToAttrListElement = outputName:
|
||
{ name = outputName;
|
||
value = commonAttrs // {
|
||
outPath = builtins.getAttr outputName strict;
|
||
drvPath = strict.drvPath;
|
||
type = "derivation";
|
||
currentOutput = outputName;
|
||
};
|
||
};
|
||
|
||
outputsList = map outputToAttrListElement outputs;
|
||
|
||
in (builtins.head outputsList).value
|