about summary refs log tree commit diff
path: root/pkgs/development/tools/misc/luarocks
diff options
context:
space:
mode:
authorMatthieu Coudron <mattator@gmail.com>2019-01-22 14:58:35 +0900
committerMatthieu Coudron <mattator@gmail.com>2019-01-22 16:52:43 +0900
commitd7a48fc80d5d5a45385315a285e6e2644f1c5705 (patch)
tree540f2a19c7c9fec796a2cef0f0001422baadf977 /pkgs/development/tools/misc/luarocks
parenta5de41088031e6d3d4f799ef3964317a74e72169 (diff)
downloadnixlib-d7a48fc80d5d5a45385315a285e6e2644f1c5705.tar
nixlib-d7a48fc80d5d5a45385315a285e6e2644f1c5705.tar.gz
nixlib-d7a48fc80d5d5a45385315a285e6e2644f1c5705.tar.bz2
nixlib-d7a48fc80d5d5a45385315a285e6e2644f1c5705.tar.lz
nixlib-d7a48fc80d5d5a45385315a285e6e2644f1c5705.tar.xz
nixlib-d7a48fc80d5d5a45385315a285e6e2644f1c5705.tar.zst
nixlib-d7a48fc80d5d5a45385315a285e6e2644f1c5705.zip
luarocks: support more usage
better support for luarocks in a shell (helpful to develop on luarocks).
Also adds unpacker for src.rock/rockspec files.
Also allows to use luarocks to build cmake based rocks.
Diffstat (limited to 'pkgs/development/tools/misc/luarocks')
-rw-r--r--pkgs/development/tools/misc/luarocks/default.nix37
-rw-r--r--pkgs/development/tools/misc/luarocks/setup-hook.sh20
2 files changed, 50 insertions, 7 deletions
diff --git a/pkgs/development/tools/misc/luarocks/default.nix b/pkgs/development/tools/misc/luarocks/default.nix
index afe026359e53..8b9bf453c468 100644
--- a/pkgs/development/tools/misc/luarocks/default.nix
+++ b/pkgs/development/tools/misc/luarocks/default.nix
@@ -1,4 +1,11 @@
-{stdenv, fetchurl, lua, curl, makeWrapper, which, unzip}:
+{stdenv, fetchurl
+, curl, makeWrapper, which, unzip
+, lua
+# for 'luarocks pack'
+, zip
+# some packages need to be compiled with cmake
+, cmake
+}:
 let
   s = # Generated upstream information
   rec {
@@ -36,17 +43,33 @@ stdenv.mkDerivation {
     for i in "$out"/bin/*; do
         test -L "$i" || {
 	    wrapProgram "$i" \
-	      --prefix LUA_PATH ";" "$(echo "$out"/share/lua/*/)?.lua" \
-	      --prefix LUA_PATH ";" "$(echo "$out"/share/lua/*/)?/init.lua" \
+	      --suffix LUA_PATH ";" "$(echo "$out"/share/lua/*/)?.lua" \
+	      --suffix LUA_PATH ";" "$(echo "$out"/share/lua/*/)?/init.lua" \
+	      --suffix LUA_CPATH ";" "$(echo "$out"/lib/lua/*/)?.so" \
+	      --suffix LUA_CPATH ";" "$(echo "$out"/share/lua/*/)?/init.lua"
 
 	}
     done
   '';
-  meta = {
+
+  propagatedBuildInputs = [ zip unzip cmake ];
+
+  # unpack hook for src.rock and rockspec files
+  setupHook = ./setup-hook.sh;
+
+  # cmake is just to compile packages with "cmake" buildType, not luarocks itself
+  dontUseCmakeConfigure = true;
+
+  shellHook = ''
+    export PATH="src/bin:''${PATH:-}"
+    export LUA_PATH="src/?.lua;''${LUA_PATH:-}"
+  '';
+
+  meta = with stdenv.lib; {
     inherit (s) version;
     description = ''A package manager for Lua'';
-    license = stdenv.lib.licenses.mit ;
-    maintainers = [stdenv.lib.maintainers.raskin];
-    platforms = stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin;
+    license = licenses.mit ;
+    maintainers = with maintainers; [raskin teto];
+    platforms = platforms.linux ++ platforms.darwin;
   };
 }
diff --git a/pkgs/development/tools/misc/luarocks/setup-hook.sh b/pkgs/development/tools/misc/luarocks/setup-hook.sh
new file mode 100644
index 000000000000..593ee8bbe83e
--- /dev/null
+++ b/pkgs/development/tools/misc/luarocks/setup-hook.sh
@@ -0,0 +1,20 @@
+unpackCmdHooks+=(_trySourceRock)
+unpackCmdHooks+=(_tryRockSpec)
+
+_tryRockSpec() {
+    if ! [[ "$curSrc" =~ \.rockspec$ ]]; then return 1; fi
+}
+
+_trySourceRock() {
+
+    if ! [[ "$curSrc" =~ \.src.rock$ ]]; then return 1; fi
+
+    export PATH=${unzip}/bin:$PATH
+
+    # luarocks expects a clean <name>.rock.spec name to be the package name
+    # so we have to strip the hash
+    renamed="$(stripHash $curSrc)"
+    cp "$curSrc" "$renamed"
+    luarocks unpack --force "$renamed"
+}
+