depot/pkgs/build-support/src-only/default.nix
Luke Granger-Brown 57725ef3ec Squashed 'third_party/nixpkgs/' content from commit 76612b17c0ce
git-subtree-dir: third_party/nixpkgs
git-subtree-split: 76612b17c0ce71689921ca12d9ffdc9c23ce40b2
2024-11-10 23:59:47 +00:00

64 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