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