lua: create a folder for hooks

- moved lua hooks to a specific folder as I foresee to add more
- moved generateLuarocksConfig to lib
- fix getLuaPath
- removed the useless rockspecDir
This commit is contained in:
Matthieu Coudron
2021-09-27 23:42:54 +02:00
committed by Matthieu Coudron
parent 99a1d8ef57
commit abc36451d7
6 changed files with 112 additions and 77 deletions
+68
View File
@@ -60,4 +60,72 @@ rec {
requiredLuaModules = requiredLuaModules drv.propagatedBuildInputs;
};
});
/* generate luarocks config
generateLuarocksConfig {
externalDeps = [ { name = "CRYPTO"; dep = pkgs.openssl; } ];
rocksSubdir = "subdir";
};
*/
generateLuarocksConfig = {
externalDeps
, requiredLuaRocks
, extraVariables ? {}
, rocksSubdir
}: let
rocksTrees = lib.imap0
(i: dep: "{ name = [[dep-${toString i}]], root = '${dep}', rocks_dir = '${dep}/${dep.rocksSubdir}' }")
requiredLuaRocks;
# Explicitly point luarocks to the relevant locations for multiple-output
# derivations that are external dependencies, to work around an issue it has
# (https://github.com/luarocks/luarocks/issues/766)
depVariables = lib.concatMap ({name, dep}: [
"${name}_INCDIR='${lib.getDev dep}/include';"
"${name}_LIBDIR='${lib.getLib dep}/lib';"
"${name}_BINDIR='${lib.getBin dep}/bin';"
]) externalDeps';
# example externalDeps': [ { name = "CRYPTO"; dep = pkgs.openssl; } ]
externalDeps' = lib.filter (dep: !lib.isDerivation dep) externalDeps;
externalDepsDirs = map
(x: "'${builtins.toString x}'")
(lib.filter (lib.isDerivation) externalDeps);
extraVariablesStr = lib.concatStringsSep "\n "
(lib.mapAttrsToList (k: v: "${k}='${v}';") extraVariables);
in ''
local_cache = ""
-- To prevent collisions when creating environments, we install the rock
-- files into per-package subdirectories
rocks_subdir = '${rocksSubdir}'
-- Then we need to tell luarocks where to find the rock files per
-- dependency
rocks_trees = {
${lib.concatStringsSep "\n, " rocksTrees}
}
'' + lib.optionalString lua.pkgs.isLuaJIT ''
-- Luajit provides some additional functionality built-in; this exposes
-- that to luarock's dependency system
rocks_provided = {
jit='${lua.luaversion}-1';
ffi='${lua.luaversion}-1';
luaffi='${lua.luaversion}-1';
bit='${lua.luaversion}-1';
}
'' + ''
-- For single-output external dependencies
external_deps_dirs = {
${lib.concatStringsSep "\n, " externalDepsDirs}
}
variables = {
-- Some needed machinery to handle multiple-output external dependencies,
-- as per https://github.com/luarocks/luarocks/issues/766
${lib.optionalString (lib.length depVariables > 0) ''
${lib.concatStringsSep "\n " depVariables}''}
${extraVariablesStr}
}
'';
}