65 lines
1.5 KiB
Nix
65 lines
1.5 KiB
Nix
|
{ lib, stdenvNoCC }:
|
||
|
|
||
|
/**
|
||
|
A utility builder to get the source code of the input derivation, with any patches applied.
|
||
|
|
||
|
# Examples
|
||
|
|
||
|
```nix
|
||
|
srcOnly pkgs.hello
|
||
|
=> «derivation /nix/store/gyfk2jg9079ga5g5gfms5i4h0k9jhf0f-hello-2.12.1-source.drv»
|
||
|
|
||
|
srcOnly {
|
||
|
inherit (pkgs.hello) name version src stdenv;
|
||
|
}
|
||
|
=> «derivation /nix/store/vf9hdhz38z7rfhzhrk0vi70h755fnsw7-hello-2.12.1-source.drv»
|
||
|
```
|
||
|
|
||
|
# Type
|
||
|
|
||
|
```
|
||
|
srcOnly :: (Derivation | AttrSet) -> Derivation
|
||
|
```
|
||
|
|
||
|
# Input
|
||
|
|
||
|
`attrs`
|
||
|
|
||
|
: One of the following:
|
||
|
|
||
|
- A derivation with (at minimum) an unpackPhase and a patchPhase.
|
||
|
- A set of attributes that would be passed to a `stdenv.mkDerivation` or `stdenvNoCC.mkDerivation` call.
|
||
|
|
||
|
# Output
|
||
|
|
||
|
A derivation that runs a derivation's `unpackPhase` and `patchPhase`, and then copies the result to the output path.
|
||
|
*/
|
||
|
|
||
|
attrs:
|
||
|
let
|
||
|
args = attrs.drvAttrs or attrs;
|
||
|
name = args.name or "${args.pname}-${args.version}";
|
||
|
stdenv = args.stdenv or (lib.warn "srcOnly: stdenv not provided, using stdenvNoCC" stdenvNoCC);
|
||
|
drv = stdenv.mkDerivation (
|
||
|
args
|
||
|
// {
|
||
|
name = "${name}-source";
|
||
|
|
||
|
outputs = [ "out" ];
|
||
|
|
||
|
phases = [
|
||
|
"unpackPhase"
|
||
|
"patchPhase"
|
||
|
"installPhase"
|
||
|
];
|
||
|
separateDebugInfo = false;
|
||
|
|
||
|
dontUnpack = false;
|
||
|
|
||
|
dontInstall = false;
|
||
|
installPhase = "cp -pr --reflink=auto -- . $out";
|
||
|
}
|
||
|
);
|
||
|
in
|
||
|
lib.warnIf (args.dontUnpack or false) "srcOnly: derivation has dontUnpack set, overriding" drv
|