lib.haskell.substitutePkgs: init
This commit is contained in:
parent
a9b82ce412
commit
478ccdaac7
@ -5,6 +5,7 @@ let
|
||||
evalSource = import ./eval-source.nix;
|
||||
|
||||
git = import ./git.nix { inherit lib; };
|
||||
haskell = import ./haskell.nix { inherit lib; };
|
||||
krebs = import ./krebs lib;
|
||||
krops = import ../submodules/krops/lib;
|
||||
shell = import ./shell.nix { inherit lib; };
|
||||
|
51
lib/haskell.nix
Normal file
51
lib/haskell.nix
Normal file
@ -0,0 +1,51 @@
|
||||
{ lib }:
|
||||
|
||||
with builtins;
|
||||
|
||||
rec {
|
||||
|
||||
# Derive a file by substituting
|
||||
# "${pkgs.foo}/bin/foo" for each {-pkg-}"foo", and
|
||||
# "${pkgs.bar}/bin/foo" for each {-pkg:bar-}"foo".
|
||||
# If a package doesn't exist, a warning gets printed.
|
||||
substitutePkgs = name: { callsite ? null, pkgs, path }:
|
||||
pkgs.writeText name (substitutePkgs' {
|
||||
inherit pkgs;
|
||||
sourceDescription =
|
||||
if callsite != null then
|
||||
"${name} in ${toString callsite}"
|
||||
else
|
||||
"${name} from ${toString path}";
|
||||
text = readFile path;
|
||||
});
|
||||
|
||||
substitutePkgs' = { pkgs, sourceDescription, text }:
|
||||
let
|
||||
f = s:
|
||||
let
|
||||
parse = match "(.*)([{]-pkg(:([^}]+))?-[}]\"([^\"]+)\")(.*)" s;
|
||||
prefix = elemAt parse 0;
|
||||
pname = if elemAt parse 3 != null then elemAt parse 3 else exename;
|
||||
exename = elemAt parse 4;
|
||||
suffix = elemAt parse 5;
|
||||
pkg = pkgs.${pname} or null;
|
||||
|
||||
substitute =
|
||||
if pkg != null then
|
||||
"${pkg}/bin/${exename}"
|
||||
else
|
||||
trace (toString [
|
||||
"lib.haskell.replacePkg:"
|
||||
"warning:"
|
||||
"while deriving ${sourceDescription}:"
|
||||
"no substitute found for ${elemAt parse 1}"
|
||||
])
|
||||
exename;
|
||||
in
|
||||
if parse == null then
|
||||
s
|
||||
else
|
||||
f (prefix + toJSON substitute + suffix);
|
||||
in
|
||||
f text;
|
||||
}
|
Loading…
Reference in New Issue
Block a user