diff --git a/pkgs/development/tools/misc/luarocks/default.nix b/pkgs/development/tools/misc/luarocks/default.nix index afe026359e5..8b9bf453c46 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 00000000000..593ee8bbe83 --- /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 .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" +} +