luarocks-check-hook: init

The hook is added to buildLuarocksPackage when doCheck is set to true.
This commit is contained in:
Matthieu Coudron 2022-06-18 18:26:29 +02:00
parent e0a42267f7
commit 011911bc54
5 changed files with 51 additions and 12 deletions

View file

@ -4,6 +4,7 @@
, wrapLua , wrapLua
# Whether the derivation provides a lua module or not. # Whether the derivation provides a lua module or not.
, toLuaModule , toLuaModule
, luarocksCheckHook
}: }:
{ {
@ -42,6 +43,7 @@ pname
, passthru ? {} , passthru ? {}
, doCheck ? false , doCheck ? false
, doInstallCheck ? false
# Non-Lua / system (e.g. C library) dependencies. Is a list of deps, where # 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 # 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 # Filter out the lua derivation itself from the Lua module dependency
# closure, as it doesn't have a rock tree :) # closure, as it doesn't have a rock tree :)
requiredLuaRocks = lib.filter (d: d ? luaModule) 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; } ] # 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; externalDeps' = lib.filter (dep: !lib.isDerivation dep) externalDeps;
luarocksDrv = toLuaModule ( lua.stdenv.mkDerivation ( luarocksDrv = toLuaModule ( lua.stdenv.mkDerivation (
@ -108,15 +112,17 @@ builtins.removeAttrs attrs ["disabled" "checkInputs" "externalDeps" "extraVariab
name = namePrefix + pname + "-" + version; name = namePrefix + pname + "-" + version;
buildInputs = [ wrapLua lua.pkgs.luarocks ] nativeBuildInputs = [
wrapLua
lua.pkgs.luarocks
]
++ buildInputs ++ buildInputs
++ lib.optionals doCheck checkInputs ++ lib.optionals doCheck ([ luarocksCheckHook ] ++ checkInputs)
++ (map (d: d.dep) externalDeps') ++ (map (d: d.dep) externalDeps')
; ;
# propagate lua to active setup-hook in nix-shell # propagate lua to active setup-hook in nix-shell
propagatedBuildInputs = propagatedBuildInputs ++ [ lua ]; propagatedBuildInputs = propagatedBuildInputs ++ [ lua ];
inherit doCheck;
# @-patterns do not capture formal argument default values, so we need to # @-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 # 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 runHook postCheck
''; '';
LUAROCKS_CONFIG="$PWD/${luarocks_config}";
shellHook = ''
runHook preShell
export LUAROCKS_CONFIG="$PWD/${luarocks_config}";
runHook postShell
'';
passthru = { passthru = {
inherit lua; # The lua interpreter inherit lua; # The lua interpreter
inherit externalDeps; inherit externalDeps;

View file

@ -24,4 +24,9 @@ in {
mv hook.sh $out mv hook.sh $out
''; '';
luarocksCheckHook = callPackage ({ luarocks }:
makeSetupHook {
name = "luarocks-check-hook";
deps = [ luarocks ];
} ./luarocks-check-hook.sh) {};
} }

View file

@ -0,0 +1,18 @@
# Setup hook for checking whether Python imports succeed
echo "Sourcing luarocks-check-hook.sh"
luarocksCheckPhase () {
echo "Executing luarocksCheckPhase"
runHook preCheck
luarocks test
runHook postCheck
echo "Finished executing luarocksCheckPhase"
}
if [ -z "${dontLuarocksCheck-}" ] && [ -z "${checkPhase-}" ]; then
echo "Using luarocksCheckPhase"
checkPhase+=" luarocksCheckPhase"
fi

View file

@ -15,7 +15,7 @@ with prev;
}); });
busted = prev.busted.overrideAttrs(oa: { busted = prev.busted.overrideAttrs(oa: {
nativeBuildInputs = [ nativeBuildInputs = oa.nativeBuildInputs ++ [
pkgs.installShellFiles pkgs.installShellFiles
]; ];
postConfigure = '' postConfigure = ''
@ -30,9 +30,6 @@ with prev;
}); });
cqueues = (prev.lib.overrideLuarocks prev.cqueues (drv: { cqueues = (prev.lib.overrideLuarocks prev.cqueues (drv: {
nativeBuildInputs = [
pkgs.gnum4
];
externalDeps = [ externalDeps = [
{ name = "CRYPTO"; dep = pkgs.openssl; } { name = "CRYPTO"; dep = pkgs.openssl; }
{ name = "OPENSSL"; dep = pkgs.openssl; } { name = "OPENSSL"; dep = pkgs.openssl; }
@ -46,6 +43,11 @@ with prev;
date = head rel; date = head rel;
rev = last (splitString "-" (last rel)); rev = last (splitString "-" (last rel));
in "${date}-${rev}"; in "${date}-${rev}";
nativeBuildInputs = oa.nativeBuildInputs ++ [
pkgs.gnum4
];
# Upstream rockspec is pointlessly broken into separate rockspecs, per Lua # Upstream rockspec is pointlessly broken into separate rockspecs, per Lua
# version, which doesn't work well for us, so modify it # version, which doesn't work well for us, so modify it
postConfigure = let inherit (prev.cqueues) pname; in '' postConfigure = let inherit (prev.cqueues) pname; in ''
@ -111,8 +113,8 @@ with prev;
propagatedBuildInputs = with pkgs.lib; optional (!isLuaJIT) luaffi; propagatedBuildInputs = with pkgs.lib; optional (!isLuaJIT) luaffi;
}); });
lgi = prev.lib.overrideLuarocks prev.lgi (drv: { lgi = prev.lgi.overrideAttrs (oa: {
nativeBuildInputs = [ nativeBuildInputs = oa.nativeBuildInputs ++ [
pkgs.pkg-config pkgs.pkg-config
]; ];
buildInputs = [ buildInputs = [

View file

@ -50,7 +50,7 @@ in
getLuaCPath = drv: getPath drv luaLib.luaCPathList; getLuaCPath = drv: getPath drv luaLib.luaCPathList;
inherit (callPackage ../development/interpreters/lua-5/hooks { inherit (args) lib;}) inherit (callPackage ../development/interpreters/lua-5/hooks { inherit (args) lib;})
lua-setup-hook; luarocksCheckHook lua-setup-hook;
inherit lua callPackage; inherit lua callPackage;
inherit buildLuaPackage buildLuarocksPackage buildLuaApplication; inherit buildLuaPackage buildLuarocksPackage buildLuaApplication;