summaryrefslogtreecommitdiffstats
path: root/pkgs/development/interpreters/lua-5/wrapper.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/interpreters/lua-5/wrapper.nix')
-rw-r--r--pkgs/development/interpreters/lua-5/wrapper.nix73
1 files changed, 73 insertions, 0 deletions
diff --git a/pkgs/development/interpreters/lua-5/wrapper.nix b/pkgs/development/interpreters/lua-5/wrapper.nix
new file mode 100644
index 000000000000..9abbd77d575e
--- /dev/null
+++ b/pkgs/development/interpreters/lua-5/wrapper.nix
@@ -0,0 +1,73 @@
+{ stdenv, lua, buildEnv, makeWrapper
+, extraLibs ? []
+, extraOutputsToInstall ? []
+, postBuild ? ""
+, ignoreCollisions ? false
+, lib
+, 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;
+
+ # we create wrapper for the binaries in the different packages
+ postBuild = ''
+
+ . "${makeWrapper}/nix-support/setup-hook"
+
+ # get access to lua functions
+ . ${lua}/nix-support/setup-hook
+
+ 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 ${stdenv.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" --suffix LUA_PATH ';' "$LUA_PATH" --suffix LUA_CPATH ';' "$LUA_CPATH" ${stdenv.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