8d4b2f3d54
This should ease migrating to a distinction between depot.third_party and pkgs (as in nixpkgs) in the future. Ref cl/2910, b/108. Change-Id: I53a854071fddd7c0d0526cc4c5b16998202082c6 Reviewed-on: https://cl.tvl.fyi/c/depot/+/2913 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in>
76 lines
1.5 KiB
Nix
76 lines
1.5 KiB
Nix
{ depot, pkgs, lib, ... }:
|
|
|
|
let
|
|
inherit (pkgs)
|
|
gzip
|
|
mandoc
|
|
coreutils
|
|
;
|
|
|
|
inherit (depot.nix)
|
|
runExecline
|
|
getBins
|
|
;
|
|
|
|
bins = getBins mandoc [ "mandoc" ]
|
|
// getBins gzip [ "gzip" ]
|
|
// getBins coreutils [ "mkdir" "ln" "cp" ]
|
|
;
|
|
|
|
defaultGzip = true;
|
|
|
|
basename = gzip: { name, section, ... }:
|
|
"${name}.${toString section}${lib.optionalString gzip ".gz"}";
|
|
|
|
manDir = { section, ... }:
|
|
"\${out}/share/man/man${toString section}";
|
|
|
|
target = gzip: args:
|
|
"${manDir args}/${basename gzip args}";
|
|
|
|
buildManPage =
|
|
{ requireLint ? false
|
|
, gzip ? defaultGzip
|
|
, ...
|
|
}:
|
|
{ content
|
|
, ...
|
|
}@page: let
|
|
source = builtins.toFile (basename false page) content;
|
|
in runExecline (basename gzip page) {} ([
|
|
(if requireLint then "if" else "foreground") [
|
|
bins.mandoc "-mdoc" "-T" "lint" source
|
|
]
|
|
"importas" "out" "out"
|
|
] ++ (if gzip then [
|
|
"redirfd" "-w" "1" "$out"
|
|
bins.gzip "-c" source
|
|
] else [
|
|
bins.cp "--reflink=auto" source "$out"
|
|
]));
|
|
|
|
buildManPages =
|
|
name:
|
|
{ derivationArgs ? {}
|
|
, gzip ? defaultGzip
|
|
, ...
|
|
}@args:
|
|
pages:
|
|
runExecline "${name}-man-pages" {
|
|
inherit derivationArgs;
|
|
} ([
|
|
"importas" "out" "out"
|
|
] ++ lib.concatMap ({ name, section, content }@page: [
|
|
"if" [ bins.mkdir "-p" (manDir page) ]
|
|
"if" [
|
|
bins.ln "-s"
|
|
(buildManPage args page)
|
|
(target gzip page)
|
|
]
|
|
]) pages);
|
|
|
|
in {
|
|
__functor = _: buildManPages;
|
|
|
|
single = buildManPage;
|
|
}
|