forked from DGNum/liminix
343d3b6508
The second parameter is now an options attrset, wherein we will pile all kinds of cool stuff. Right now the only cool bit is `mainFunction`, which allows you to compile a fennel module into a lua script and name the function that should be executed when the script runs. This makes it easier to write testable Fennel code, because the test script can require the module and call stuff in it.
37 lines
1 KiB
Nix
37 lines
1 KiB
Nix
{
|
|
lua
|
|
, lib
|
|
, fennel
|
|
, stdenv
|
|
}:
|
|
name :
|
|
{
|
|
packages ? [],
|
|
correlate ? false,
|
|
mainFunction ? null
|
|
} @ options : source :
|
|
let
|
|
luapath = builtins.map
|
|
(f:
|
|
"${f}/share/lua/${lua.luaversion}/?.lua;" +
|
|
"${f}/share/lua/${lua.luaversion}/?/init.lua;")
|
|
packages;
|
|
luacpath = builtins.map (f: "${f}/lib/lua/${lua.luaversion}/?.so;") packages;
|
|
luaFlags = lib.optionalString (mainFunction !=null) "-e dofile(arg[0]).${mainFunction}()";
|
|
in stdenv.mkDerivation {
|
|
inherit name;
|
|
src = ./.;
|
|
nativeBuildInputs = [ fennel ];
|
|
buildPhase = ''
|
|
(
|
|
echo "#!${lua}/bin/lua ${luaFlags}"
|
|
echo "package.path = ${lib.strings.escapeShellArg (builtins.concatStringsSep "" luapath)} .. package.path"
|
|
echo "package.cpath = ${lib.strings.escapeShellArg (builtins.concatStringsSep "" luacpath)} .. package.cpath"
|
|
fennel ${if correlate then "--correlate" else ""} --compile ${source}
|
|
) > ${name}.lua
|
|
'';
|
|
installPhase = ''
|
|
cp ${name}.lua $out
|
|
chmod +x $out
|
|
'';
|
|
}
|