lib.haskell.substitutePkgs: init
This commit is contained in:
parent
a9b82ce412
commit
478ccdaac7
@ -5,6 +5,7 @@ let
|
|||||||
evalSource = import ./eval-source.nix;
|
evalSource = import ./eval-source.nix;
|
||||||
|
|
||||||
git = import ./git.nix { inherit lib; };
|
git = import ./git.nix { inherit lib; };
|
||||||
|
haskell = import ./haskell.nix { inherit lib; };
|
||||||
krebs = import ./krebs lib;
|
krebs = import ./krebs lib;
|
||||||
krops = import ../submodules/krops/lib;
|
krops = import ../submodules/krops/lib;
|
||||||
shell = import ./shell.nix { inherit 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