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;
 | 
						|
}
 |