112 lines
3.8 KiB
Nix
112 lines
3.8 KiB
Nix
{ lua
|
|
, hello
|
|
, wrapLua
|
|
, lib
|
|
, pkgs
|
|
}:
|
|
let
|
|
runTest = lua: { name, command }:
|
|
pkgs.runCommandLocal "test-${lua.name}-${name}" ({
|
|
nativeBuildInputs = [lua];
|
|
meta.platforms = lua.meta.platforms;
|
|
}) (''
|
|
source ${./assert.sh}
|
|
''
|
|
+ command
|
|
+ "touch $out"
|
|
);
|
|
|
|
wrappedHello = hello.overrideAttrs(oa: {
|
|
propagatedBuildInputs = [
|
|
wrapLua
|
|
lua.pkgs.cjson
|
|
];
|
|
postFixup = ''
|
|
wrapLuaPrograms
|
|
'';
|
|
});
|
|
|
|
luaWithModule = lua.withPackages(ps: [
|
|
ps.lua-cjson
|
|
]);
|
|
|
|
golden_LUA_PATHS = {
|
|
|
|
# Looking at lua interpreter 'setpath' code
|
|
# for instance https://github.com/lua/lua/blob/69ea087dff1daba25a2000dfb8f1883c17545b7a/loadlib.c#L599
|
|
# replace ";;" by ";LUA_PATH_DEFAULT;"
|
|
"5.1" = ";./?.lua;${lua}/share/lua/5.1/?.lua;${lua}/share/lua/5.1/?/init.lua;${lua}/lib/lua/5.1/?.lua;${lua}/lib/lua/5.1/?/init.lua;";
|
|
"5.2" = ";${lua}/share/lua/5.2/?.lua;${lua}/share/lua/5.2/?/init.lua;${lua}/lib/lua/5.2/?.lua;${lua}/lib/lua/5.2/?/init.lua;./?.lua;";
|
|
"5.3" = ";${lua}/share/lua/5.3/?.lua;${lua}/share/lua/5.3/?/init.lua;${lua}/lib/lua/5.3/?.lua;${lua}/lib/lua/5.3/?/init.lua;./?.lua;./?/init.lua;";
|
|
# lua5.4 seems to be smarter about it and dont add the lua separators when nothing left or right
|
|
"5.4" = "${lua}/share/lua/5.4/?.lua;${lua}/share/lua/5.4/?/init.lua;${lua}/lib/lua/5.4/?.lua;${lua}/lib/lua/5.4/?/init.lua;./?.lua;./?/init.lua";
|
|
|
|
# luajit versions
|
|
"2.0" = ";./?.lua;${lua}/share/luajit-2.0/?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua;${lua}/share/lua/5.1/?.lua;${lua}/share/lua/5.1/?/init.lua;";
|
|
"2.1" = ";./?.lua;${lua}/share/luajit-2.1/?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua;${lua}/share/lua/5.1/?.lua;${lua}/share/lua/5.1/?/init.lua;";
|
|
};
|
|
in
|
|
pkgs.recurseIntoAttrs ({
|
|
|
|
checkInterpreterPatch = let
|
|
golden_LUA_PATH = golden_LUA_PATHS.${lib.versions.majorMinor lua.version};
|
|
in
|
|
runTest lua {
|
|
name = "check-default-lua-path";
|
|
command = ''
|
|
export LUA_PATH=";;"
|
|
generated=$(lua -e 'print(package.path)')
|
|
assertStringEqual "$generated" "${golden_LUA_PATH}"
|
|
'';
|
|
};
|
|
|
|
checkWrapping = pkgs.runCommandLocal "test-${lua.name}-wrapping" ({
|
|
}) (''
|
|
grep -- 'LUA_PATH=' ${wrappedHello}/bin/hello
|
|
touch $out
|
|
'');
|
|
|
|
# checks that lua's setup-hook adds dependencies to LUA_PATH
|
|
# Prevents the following regressions
|
|
# $ env NIX_PATH=nixpkgs=. nix-shell --pure -Q -p luajitPackages.lua luajitPackages.http
|
|
# nix-shell$ luajit
|
|
# > require('http.request')
|
|
# stdin:1: module 'http.request' not found:
|
|
checkSetupHook = pkgs.runCommandLocal "test-${lua.name}-setup-hook" ({
|
|
nativeBuildInputs = [lua];
|
|
buildInputs = [ lua.pkgs.http ];
|
|
meta.platforms = lua.meta.platforms;
|
|
}) (''
|
|
${lua}/bin/lua -e "require'http.request'"
|
|
touch $out
|
|
'');
|
|
|
|
checkRelativeImports = pkgs.runCommandLocal "test-${lua.name}-relative-imports" ({
|
|
}) (''
|
|
source ${./assert.sh}
|
|
|
|
lua_vanilla_package_path="$(${lua}/bin/lua -e "print(package.path)")"
|
|
lua_with_module_package_path="$(${luaWithModule}/bin/lua -e "print(package.path)")"
|
|
|
|
assertStringContains "$lua_vanilla_package_path" "./?.lua"
|
|
assertStringContains "$lua_vanilla_package_path" "./?/init.lua"
|
|
|
|
assertStringContains "$lua_with_module_package_path" "./?.lua"
|
|
assertStringContains "$lua_with_module_package_path" "./?/init.lua"
|
|
|
|
touch $out
|
|
'');
|
|
|
|
|
|
/*
|
|
Check that a lua package's propagatedBuildInputs end up in LUA_PATH
|
|
*/
|
|
checkPropagatedBuildInputs = pkgs.runCommandLocal "test-${lua.name}-setup-hook" ({
|
|
# lua-curl is a propagatedBuildInput of rest-nvim has
|
|
buildInputs = [ lua.pkgs.rest-nvim ];
|
|
}) (''
|
|
${lua}/bin/lua -e "require'cURL'"
|
|
touch $out
|
|
'');
|
|
|
|
})
|