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/luarocks-nix.nix b/pkgs/development/tools/misc/luarocks/luarocks-nix.nix new file mode 100644 index 000000000000..3728caf193ae --- /dev/null +++ b/pkgs/development/tools/misc/luarocks/luarocks-nix.nix @@ -0,0 +1,9 @@ +{ luarocks, fetchFromGitHub }: +luarocks.overrideAttrs(old: { + src = fetchFromGitHub { + owner = "teto"; + repo = "luarocks"; + rev = "d669e8e118e6ca8bff05f32dbc9e5589e6ac45d2"; + sha256 = "1lay3905a5sx2a4y68lbys0913qs210hcj9kn2lbqinw86c1vyc3"; + }; +}) 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 .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" +} + diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 86a75c06a632..e8dde47b5bee 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -7860,6 +7860,7 @@ in luajit luajit_2_0 luajit_2_1; luarocks = luaPackages.luarocks; + luarocks-nix = luaPackages.luarocks-nix; toluapp = callPackage ../development/tools/toluapp { lua = lua5_1; # doesn't work with any other :( diff --git a/pkgs/top-level/lua-packages.nix b/pkgs/top-level/lua-packages.nix index ec2ced52eb4c..628a3f6aa45c 100644 --- a/pkgs/top-level/lua-packages.nix +++ b/pkgs/top-level/lua-packages.nix @@ -43,6 +43,8 @@ let inherit lua; }; + luarocks-nix = callPackage ../development/tools/misc/luarocks/luarocks-nix.nix { }; + basexx = buildLuaPackage rec { version = "0.4.0"; name = "basexx-${version}";