88842910b5
Goal is to improve separation between packages and utilities. Can help with autocompletion/navigate nixpkgs faster. Also it will help standardize how LUA_PATH is exported across packages, so that one can more easily make lua changes across nixpkgs (for instance changing where lua modules are installed).
76 lines
2.1 KiB
Nix
76 lines
2.1 KiB
Nix
{ lib, stdenv, lua, buildEnv, makeWrapper
|
|
, extraLibs ? []
|
|
, extraOutputsToInstall ? []
|
|
, postBuild ? ""
|
|
, ignoreCollisions ? false
|
|
, requiredLuaModules
|
|
, makeWrapperArgs ? []
|
|
}:
|
|
|
|
# Create a lua executable that knows about additional packages.
|
|
let
|
|
env = let
|
|
paths = requiredLuaModules (extraLibs ++ [ lua ] );
|
|
in buildEnv {
|
|
name = "${lua.name}-env";
|
|
|
|
inherit paths;
|
|
inherit ignoreCollisions;
|
|
extraOutputsToInstall = [ "out" ] ++ extraOutputsToInstall;
|
|
|
|
nativeBuildInputs = [
|
|
makeWrapper
|
|
(lua.pkgs.lua-setup-hook lua.LuaPathSearchPaths lua.LuaCPathSearchPaths)
|
|
];
|
|
|
|
# we create wrapper for the binaries in the different packages
|
|
postBuild = ''
|
|
if [ -L "$out/bin" ]; then
|
|
unlink "$out/bin"
|
|
fi
|
|
mkdir -p "$out/bin"
|
|
|
|
addToLuaPath "$out"
|
|
|
|
# take every binary from lua packages and put them into the env
|
|
for path in ${lib.concatStringsSep " " paths}; do
|
|
nix_debug "looking for binaries in path = $path"
|
|
if [ -d "$path/bin" ]; then
|
|
cd "$path/bin"
|
|
for prg in *; do
|
|
if [ -f "$prg" ]; then
|
|
rm -f "$out/bin/$prg"
|
|
if [ -x "$prg" ]; then
|
|
nix_debug "Making wrapper $prg"
|
|
makeWrapper "$path/bin/$prg" "$out/bin/$prg" \
|
|
--set-default LUA_PATH ";;" \
|
|
--suffix LUA_PATH ';' "$LUA_PATH" \
|
|
--set-default LUA_CPATH ";;" \
|
|
--suffix LUA_CPATH ';' "$LUA_CPATH" \
|
|
${lib.concatStringsSep " " makeWrapperArgs}
|
|
fi
|
|
fi
|
|
done
|
|
fi
|
|
done
|
|
'' + postBuild;
|
|
|
|
inherit (lua) meta;
|
|
|
|
passthru = lua.passthru // {
|
|
interpreter = "${env}/bin/lua";
|
|
inherit lua;
|
|
env = stdenv.mkDerivation {
|
|
name = "interactive-${lua.name}-environment";
|
|
nativeBuildInputs = [ env ];
|
|
|
|
buildCommand = ''
|
|
echo >&2 ""
|
|
echo >&2 "*** lua 'env' attributes are intended for interactive nix-shell sessions, not for building! ***"
|
|
echo >&2 ""
|
|
exit 1
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
in env
|