mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-02 11:53:27 +00:00
61 lines
1.6 KiB
Nix
61 lines
1.6 KiB
Nix
{ lib
|
|
, buildPlatform
|
|
, callPackage
|
|
, kaem
|
|
, mescc-tools-extra
|
|
, checkMeta
|
|
}:
|
|
rec {
|
|
derivationWithMeta = attrs:
|
|
let
|
|
passthru = attrs.passthru or {};
|
|
validity = checkMeta.assertValidity { inherit meta attrs; };
|
|
meta = checkMeta.commonMeta { inherit validity attrs; };
|
|
baseDrv = derivation ({
|
|
inherit (buildPlatform) system;
|
|
inherit (meta) name;
|
|
} // (builtins.removeAttrs attrs [ "meta" "passthru" ]));
|
|
passthru' = passthru // lib.optionalAttrs (passthru ? tests) {
|
|
tests = lib.mapAttrs (_: f: f baseDrv) passthru.tests;
|
|
};
|
|
in
|
|
lib.extendDerivation
|
|
validity.handled
|
|
({ inherit meta; passthru = passthru'; } // passthru')
|
|
baseDrv;
|
|
|
|
writeTextFile =
|
|
{ name # the name of the derivation
|
|
, text
|
|
, executable ? false # run chmod +x ?
|
|
, destination ? "" # relative path appended to $out eg "/bin/foo"
|
|
}:
|
|
derivationWithMeta {
|
|
inherit name text;
|
|
passAsFile = [ "text" ];
|
|
|
|
builder = "${kaem}/bin/kaem";
|
|
args = [
|
|
"--verbose"
|
|
"--strict"
|
|
"--file"
|
|
(builtins.toFile "write-text-file.kaem" (''
|
|
target=''${out}''${destination}
|
|
'' + lib.optionalString (builtins.dirOf destination == ".") ''
|
|
mkdir -p ''${out}''${destinationDir}
|
|
'' + ''
|
|
cp ''${textPath} ''${target}
|
|
'' + lib.optionalString executable ''
|
|
chmod 555 ''${target}
|
|
''))
|
|
];
|
|
|
|
PATH = lib.makeBinPath [ mescc-tools-extra ];
|
|
destinationDir = builtins.dirOf destination;
|
|
inherit destination;
|
|
};
|
|
|
|
writeText = name: text: writeTextFile {inherit name text;};
|
|
|
|
}
|