74 lines
1.6 KiB
Nix
74 lines
1.6 KiB
Nix
|
{ stdenv, lib, idris2
|
||
|
}:
|
||
|
# Usage: let
|
||
|
# pkg = idris2Packages.buildIdris {
|
||
|
# src = ...;
|
||
|
# projectName = "my-pkg";
|
||
|
# idrisLibraries = [ ];
|
||
|
# };
|
||
|
# in {
|
||
|
# lib = pkg.library { withSource = true; };
|
||
|
# bin = pkg.executable;
|
||
|
# }
|
||
|
#
|
||
|
{ src
|
||
|
, projectName
|
||
|
, idrisLibraries # Other libraries built with buildIdris
|
||
|
, ... }@attrs:
|
||
|
|
||
|
let
|
||
|
ipkgName = projectName + ".ipkg";
|
||
|
idrName = "idris2-${idris2.version}";
|
||
|
libSuffix = "lib/${idrName}";
|
||
|
libDirs =
|
||
|
lib.makeSearchPath libSuffix idrisLibraries;
|
||
|
drvAttrs = builtins.removeAttrs attrs [ "idrisLibraries" ];
|
||
|
|
||
|
sharedAttrs = {
|
||
|
name = projectName;
|
||
|
src = src;
|
||
|
nativeBuildInputs = [ idris2 ];
|
||
|
|
||
|
IDRIS2_PACKAGE_PATH = libDirs;
|
||
|
|
||
|
configurePhase = ''
|
||
|
runHook preConfigure
|
||
|
runHook postConfigure
|
||
|
'';
|
||
|
|
||
|
buildPhase = ''
|
||
|
runHook preBuild
|
||
|
idris2 --build ${ipkgName}
|
||
|
runHook postBuild
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
in {
|
||
|
executable = stdenv.mkDerivation (lib.attrsets.mergeAttrsList [
|
||
|
sharedAttrs
|
||
|
{ installPhase = ''
|
||
|
runHook preInstall
|
||
|
mkdir -p $out/bin
|
||
|
mv build/exec/* $out/bin
|
||
|
runHook postInstall
|
||
|
'';
|
||
|
}
|
||
|
drvAttrs
|
||
|
]);
|
||
|
library = { withSource ? false }:
|
||
|
let installCmd = if withSource then "--install-with-src" else "--install";
|
||
|
in stdenv.mkDerivation (lib.attrsets.mergeAttrsList [
|
||
|
sharedAttrs
|
||
|
{
|
||
|
installPhase = ''
|
||
|
runHook preInstall
|
||
|
mkdir -p $out/${libSuffix}
|
||
|
export IDRIS2_PREFIX=$out/lib
|
||
|
idris2 ${installCmd} ${ipkgName}
|
||
|
runHook postInstall
|
||
|
'';
|
||
|
}
|
||
|
drvAttrs
|
||
|
]);
|
||
|
}
|