Skip to content

Commit

Permalink
lua:: reworked setup-hook to source utils.sh
Browse files Browse the repository at this point in the history
which contains lua shell utilities that can be reused during the
creation of an environment.
Makes sense because the generation of LUA_PATH is a bit different than
other ecosystems.
  • Loading branch information
teto committed Apr 30, 2024
1 parent 80011be commit 6427d04
Show file tree
Hide file tree
Showing 10 changed files with 83 additions and 76 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@ let
buildPhase = ''
runHook preBuild
source ${lua}/nix-support/utils.sh
nix_debug "Using LUAROCKS_CONFIG=$LUAROCKS_CONFIG"
LUAROCKS_EXTRA_ARGS=""
Expand Down
13 changes: 0 additions & 13 deletions pkgs/development/interpreters/lua-5/hooks/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,6 @@ let
callPackage = lua.pkgs.callPackage;
in {

lua-setup-hook = LuaPathSearchPaths: LuaCPathSearchPaths:
let
hook = ./setup-hook.sh;
in runCommand "lua-setup-hook.sh" {
# hum doesn't seem to like caps !! BUG ?
luapathsearchpaths=lib.escapeShellArgs LuaPathSearchPaths;
luacpathsearchpaths=lib.escapeShellArgs LuaCPathSearchPaths;
} ''
cp ${hook} hook.sh
substituteAllInPlace hook.sh
mv hook.sh $out
'';

luarocksCheckHook = callPackage ({ luarocks }:
makeSetupHook {
name = "luarocks-check-hook";
Expand Down
54 changes: 1 addition & 53 deletions pkgs/development/interpreters/lua-5/hooks/setup-hook.sh
Original file line number Diff line number Diff line change
@@ -1,56 +1,4 @@
# set -e

nix_print() {
if [ ${NIX_DEBUG:-0} -ge $1 ]; then
echo "$2"
fi
}

nix_debug() {
nix_print 3 "$1"
}

addToLuaSearchPathWithCustomDelimiter() {
local varName="$1"
local absPattern="$2"

# 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 only if the folder contains lua files
shopt -s globstar

local adjustedPattern="${absPattern/\?/\*\*\/\*}"
for _file in $adjustedPattern; do
export "${varName}=${!varName:+${!varName};}${absPattern}"
shopt -u globstar
return;
done
shopt -u globstar
}

addToLuaPath() {
local dir="$1"

if [[ ! -d "$dir" ]]; then
nix_debug "$dir not a directory abort"
return 0
fi
cd "$dir"
for pattern in @luapathsearchpaths@; do
addToLuaSearchPathWithCustomDelimiter LUA_PATH "$PWD/$pattern"
done

# LUA_CPATH
for pattern in @luacpathsearchpaths@; do
addToLuaSearchPathWithCustomDelimiter LUA_CPATH "$PWD/$pattern"
done
cd - >/dev/null
}

source ./utils.sh
addEnvHooks "$hostOffset" addToLuaPath
15 changes: 11 additions & 4 deletions pkgs/development/interpreters/lua-5/interpreter.nix
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
, makeWrapper
, self
, packageOverrides ? (final: prev: {})
, substituteAll
, pkgsBuildBuild
, pkgsBuildHost
, pkgsBuildTarget
Expand Down Expand Up @@ -51,9 +52,10 @@ stdenv.mkDerivation (finalAttrs:

LuaPathSearchPaths = luaPackages.luaLib.luaPathList;
LuaCPathSearchPaths = luaPackages.luaLib.luaCPathList;
setupHook = luaPackages.lua-setup-hook
finalAttrs.LuaPathSearchPaths
finalAttrs.LuaCPathSearchPaths;
setupHook = builtins.toFile "lua-setup-hook" ''
source @out@/nix-support/utils.sh
addEnvHooks "$hostOffset" addToLuaPath
'';

nativeBuildInputs = [ makeWrapper ];
buildInputs = [ readline ];
Expand Down Expand Up @@ -107,7 +109,12 @@ stdenv.mkDerivation (finalAttrs:
inherit postBuild;

postInstall = ''
mkdir -p "$out/share/doc/lua" "$out/lib/pkgconfig"
mkdir -p "$out/nix-support" "$out/share/doc/lua" "$out/lib/pkgconfig"
cp ${substituteAll {
src = ./utils.sh;
luapathsearchpaths=lib.escapeShellArgs finalAttrs.LuaPathSearchPaths;
luacpathsearchpaths=lib.escapeShellArgs finalAttrs.LuaCPathSearchPaths;
}} $out/nix-support/utils.sh
mv "doc/"*.{gif,png,css,html} "$out/share/doc/lua/"
rmdir $out/{share,lib}/lua/${luaversion} $out/{share,lib}/lua
mkdir -p "$out/lib/pkgconfig"
Expand Down
54 changes: 54 additions & 0 deletions pkgs/development/interpreters/lua-5/utils.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
#!/bin/sh
nix_print() {
if [ ${NIX_DEBUG:-0} -ge $1 ]; then
echo "$2"
fi
}

nix_debug() {
nix_print 3 "$1"
}

addToLuaSearchPathWithCustomDelimiter() {
local varName="$1"
local absPattern="$2"

# 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 only if the folder contains lua files
shopt -s globstar

local adjustedPattern="${absPattern/\?/\*\*\/\*}"
for _file in $adjustedPattern; do
export "${varName}=${!varName:+${!varName};}${absPattern}"
shopt -u globstar
return;
done
shopt -u globstar
}

addToLuaPath() {
local dir="$1"

if [[ ! -d "$dir" ]]; then
nix_debug "$dir not a directory abort"
return 0
fi
cd "$dir"
for pattern in @luapathsearchpaths@; do
addToLuaSearchPathWithCustomDelimiter LUA_PATH "$PWD/$pattern"
done

# LUA_CPATH
for pattern in @luacpathsearchpaths@; do
addToLuaSearchPathWithCustomDelimiter LUA_CPATH "$PWD/$pattern"
done
cd - >/dev/null
}

2 changes: 0 additions & 2 deletions pkgs/development/interpreters/lua-5/wrap-lua.nix
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,4 @@ makeSetupHook {
propagatedBuildInputs = [ makeWrapper ];
substitutions.executable = lua.interpreter;
substitutions.lua = lua;
substitutions.LuaPathSearchPaths = lib.escapeShellArgs lua.LuaPathSearchPaths;
substitutions.LuaCPathSearchPaths = lib.escapeShellArgs lua.LuaPathSearchPaths;
} ./wrap.sh
2 changes: 2 additions & 0 deletions pkgs/development/interpreters/lua-5/wrap.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
# variable is passed in from the buildLuarocksPackage function.
set -e

source @lua@/nix-support/utils.sh

wrapLuaPrograms() {
wrapLuaProgramsIn "$out/bin" "$out $luaPath"
}
Expand Down
2 changes: 1 addition & 1 deletion pkgs/development/interpreters/lua-5/wrapper.nix
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@ let

nativeBuildInputs = [
makeWrapper
(lua.pkgs.lua-setup-hook lua.LuaPathSearchPaths lua.LuaCPathSearchPaths)
];

# we create wrapper for the binaries in the different packages
postBuild = ''
source ${lua}/nix-support/utils.sh
if [ -L "$out/bin" ]; then
unlink "$out/bin"
fi
Expand Down
14 changes: 12 additions & 2 deletions pkgs/development/interpreters/luajit/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
, buildPackages
, version
, src
, substituteAll
, extraMeta ? { }
, self
, packageOverrides ? (final: prev: {})
Expand Down Expand Up @@ -73,7 +74,7 @@ stdenv.mkDerivation (finalAttrs: {
if test -n "''${dontStrip-}"; then
# CCDEBUG must be non-empty or everything will be stripped, -g being
# passed by nixpkgs CC wrapper is insufficient on its own
substituteInPlace src/Makefile --replace "#CCDEBUG= -g" "CCDEBUG= -g"
substituteInPlace src/Makefile --replace-fail "#CCDEBUG= -g" "CCDEBUG= -g"
fi
'';

Expand All @@ -95,6 +96,12 @@ stdenv.mkDerivation (finalAttrs: {
env.NIX_CFLAGS_COMPILE = toString XCFLAGS;

postInstall = ''
mkdir -p $out/nix-support
cp ${substituteAll {
src = ../lua-5/utils.sh;
luapathsearchpaths=lib.escapeShellArgs finalAttrs.LuaPathSearchPaths;
luacpathsearchpaths=lib.escapeShellArgs finalAttrs.LuaCPathSearchPaths;
}} $out/nix-support/utils.sh
( cd "$out/include"; ln -s luajit-*/* . )
ln -s "$out"/bin/luajit-* "$out"/bin/lua
if [[ ! -e "$out"/bin/luajit ]]; then
Expand All @@ -105,7 +112,10 @@ stdenv.mkDerivation (finalAttrs: {
LuaPathSearchPaths = luaPackages.luaLib.luaPathList;
LuaCPathSearchPaths = luaPackages.luaLib.luaCPathList;

setupHook = luaPackages.lua-setup-hook luaPackages.luaLib.luaPathList luaPackages.luaLib.luaCPathList;
setupHook = builtins.toFile "lua-setup-hook" ''
source @out@/nix-support/utils.sh
addEnvHooks "$hostOffset" addToLuaPath
'';

# copied from python
passthru = let
Expand Down
2 changes: 1 addition & 1 deletion pkgs/top-level/lua-packages.nix
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ rec {
getLuaCPath = drv: getPath drv luaLib.luaCPathList;

inherit (callPackage ../development/interpreters/lua-5/hooks { })
luarocksMoveDataFolder luarocksCheckHook lua-setup-hook;
luarocksMoveDataFolder luarocksCheckHook;

inherit lua;
inherit buildLuaPackage buildLuarocksPackage buildLuaApplication;
Expand Down

0 comments on commit 6427d04

Please sign in to comment.