|
|
|
@ -4,6 +4,7 @@ |
|
|
|
|
, wrapLua |
|
|
|
|
# Whether the derivation provides a lua module or not. |
|
|
|
|
, toLuaModule |
|
|
|
|
, luarocksCheckHook |
|
|
|
|
}: |
|
|
|
|
|
|
|
|
|
{ |
|
|
|
@ -42,6 +43,7 @@ pname |
|
|
|
|
|
|
|
|
|
, passthru ? {} |
|
|
|
|
, doCheck ? false |
|
|
|
|
, doInstallCheck ? false |
|
|
|
|
|
|
|
|
|
# Non-Lua / system (e.g. C library) dependencies. Is a list of deps, where |
|
|
|
|
# each dep is either a derivation, or an attribute set like |
|
|
|
@ -97,10 +99,12 @@ let |
|
|
|
|
# Filter out the lua derivation itself from the Lua module dependency |
|
|
|
|
# closure, as it doesn't have a rock tree :) |
|
|
|
|
requiredLuaRocks = lib.filter (d: d ? luaModule) |
|
|
|
|
(lua.pkgs.requiredLuaModules luarocksDrv.propagatedBuildInputs); |
|
|
|
|
(lua.pkgs.requiredLuaModules (luarocksDrv.nativeBuildInputs ++ luarocksDrv.propagatedBuildInputs)); |
|
|
|
|
|
|
|
|
|
# example externalDeps': [ { name = "CRYPTO"; dep = pkgs.openssl; } ] |
|
|
|
|
externalDepsGenerated = lib.unique (lib.filter (drv: !drv ? luaModule) (luarocksDrv.propagatedBuildInputs ++ luarocksDrv.buildInputs)); |
|
|
|
|
externalDepsGenerated = lib.unique (lib.filter (drv: !drv ? luaModule) ( |
|
|
|
|
luarocksDrv.nativeBuildInputs ++ luarocksDrv.propagatedBuildInputs ++ luarocksDrv.buildInputs) |
|
|
|
|
); |
|
|
|
|
externalDeps' = lib.filter (dep: !lib.isDerivation dep) externalDeps; |
|
|
|
|
|
|
|
|
|
luarocksDrv = toLuaModule ( lua.stdenv.mkDerivation ( |
|
|
|
@ -108,15 +112,17 @@ builtins.removeAttrs attrs ["disabled" "checkInputs" "externalDeps" "extraVariab |
|
|
|
|
|
|
|
|
|
name = namePrefix + pname + "-" + version; |
|
|
|
|
|
|
|
|
|
buildInputs = [ wrapLua lua.pkgs.luarocks ] |
|
|
|
|
nativeBuildInputs = [ |
|
|
|
|
wrapLua |
|
|
|
|
lua.pkgs.luarocks |
|
|
|
|
] |
|
|
|
|
++ buildInputs |
|
|
|
|
++ lib.optionals doCheck checkInputs |
|
|
|
|
++ lib.optionals doCheck ([ luarocksCheckHook ] ++ checkInputs) |
|
|
|
|
++ (map (d: d.dep) externalDeps') |
|
|
|
|
; |
|
|
|
|
|
|
|
|
|
# propagate lua to active setup-hook in nix-shell |
|
|
|
|
propagatedBuildInputs = propagatedBuildInputs ++ [ lua ]; |
|
|
|
|
inherit doCheck; |
|
|
|
|
|
|
|
|
|
# @-patterns do not capture formal argument default values, so we need to |
|
|
|
|
# explicitly inherit this for it to be available as a shell variable in the |
|
|
|
@ -190,6 +196,14 @@ builtins.removeAttrs attrs ["disabled" "checkInputs" "externalDeps" "extraVariab |
|
|
|
|
runHook postCheck |
|
|
|
|
''; |
|
|
|
|
|
|
|
|
|
LUAROCKS_CONFIG="$PWD/${luarocks_config}"; |
|
|
|
|
|
|
|
|
|
shellHook = '' |
|
|
|
|
runHook preShell |
|
|
|
|
export LUAROCKS_CONFIG="$PWD/${luarocks_config}"; |
|
|
|
|
runHook postShell |
|
|
|
|
''; |
|
|
|
|
|
|
|
|
|
passthru = { |
|
|
|
|
inherit lua; # The lua interpreter |
|
|
|
|
inherit externalDeps; |
|
|
|
|