33 lines
1.2 KiB
Nix
33 lines
1.2 KiB
Nix
|
builderArgs:
|
||
|
let
|
||
|
|
||
|
myself = { nixpkgs ? <nixpkgs>, pkgs ? import nixpkgs {}, rargs, cwd }:
|
||
|
builder:
|
||
|
with builtins;
|
||
|
let
|
||
|
resolveLocal = arg: let
|
||
|
fullPath = cwd + "/" + arg + ".nix";
|
||
|
recurse = myself { rargs = [ (toString arg) (toString arg) ]; inherit cwd; };
|
||
|
in recurse fullPath;
|
||
|
funcPkgs = { __functor = self: arg: resolveLocal arg; } // pkgs;
|
||
|
|
||
|
_builder = if (tryEval (import builder)).success
|
||
|
then import builder
|
||
|
else ''
|
||
|
#!/bin/sh
|
||
|
${builder} $1 $2 $out >$out
|
||
|
'';
|
||
|
__builder = if isFunction _builder then _builder funcPkgs
|
||
|
else _builder;
|
||
|
args = { stdenv = pkgs.stdenvNoCC; } // (if isString __builder
|
||
|
then { builder = __builder; }
|
||
|
else __builder);
|
||
|
in (args.deriver or args.stdenv.mkDerivation) ({
|
||
|
name = pkgs.lib.strings.sanitizeDerivationName (builtins.elemAt rargs 0);
|
||
|
buildCommand = args.builder;
|
||
|
passAsFile = [ "buildCommand" ];
|
||
|
preferLocalBuild = true;
|
||
|
allowSubstitutes = false;
|
||
|
} // (removeAttrs args [ "builder" "system" "deriver" ])); # myself
|
||
|
in myself builderArgs
|