From 90aaea8dfb3731c7b97b0f0d5d280124b5dc2f59 Mon Sep 17 00:00:00 2001 From: binarycat Date: Thu, 15 Feb 2024 15:34:40 -0500 Subject: [PATCH] lua*: support relative modules even when there are system modules previously, when the lua setup hook found a system lua module, it would simply add that library to LUA_PATH, meaning the default path would no longer be used. for luajit, this bug would always occur, due to it having several inbuilt libraries such as luabitop. lua5 still passed unit tests, simply because the test environment doesn't include any system lua libaries, but the bug would still occur if lua5 was used in a derivation with a buildInput from luaPackages, since that package would be found by the envHook and overwrite the default path. now, the setup hook will use any system module paths in addition to the default path, instead of overriding it. --- pkgs/development/interpreters/lua-5/hooks/setup-hook.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkgs/development/interpreters/lua-5/hooks/setup-hook.sh b/pkgs/development/interpreters/lua-5/hooks/setup-hook.sh index 1c445b82afded..f5843d8882473 100644 --- a/pkgs/development/interpreters/lua-5/hooks/setup-hook.sh +++ b/pkgs/development/interpreters/lua-5/hooks/setup-hook.sh @@ -22,6 +22,11 @@ addToLuaSearchPathWithCustomDelimiter() { # export only if we haven't already got this dir in the search path if [[ ${!varName-} == *"$absPattern"* ]]; then return; fi + # if the path variable has not yet been set, initialize it to ";;" + # this is a magic value that will be replaced by the default, + # allowing relative modules to be used even when there are system modules. + if [[ -v "${varName}" ]]; then export "${varName}=;;"; fi + export "${varName}=${!varName:+${!varName};}${absPattern}" }