lua:: reworked setup-hook to source utils.sh

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.
This commit is contained in:
Matthieu C. 2024-04-24 00:30:33 +02:00
parent 80011bef3c
commit 6427d04c23
10 changed files with 83 additions and 76 deletions

View File

@ -168,6 +168,7 @@ let
buildPhase = ''
runHook preBuild
source ${lua}/nix-support/utils.sh
nix_debug "Using LUAROCKS_CONFIG=$LUAROCKS_CONFIG"
LUAROCKS_EXTRA_ARGS=""

View File

@ -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";

View File

@ -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

View File

@ -3,6 +3,7 @@
, makeWrapper
, self
, packageOverrides ? (final: prev: {})
, substituteAll
, pkgsBuildBuild
, pkgsBuildHost
, pkgsBuildTarget
@ -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 ];
@ -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"

View File

@ -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
}

View File

@ -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

View File

@ -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"
}

View File

@ -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

View File

@ -3,6 +3,7 @@
, buildPackages
, version
, src
, substituteAll
, extraMeta ? { }
, self
, packageOverrides ? (final: prev: {})
@ -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
'';
@ -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
@ -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

View File

@ -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;