1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
/*
This is a minimal/manual luarocks derivation used by `buildLuarocksPackage` to install lua packages.
As a nix user, you should use the generated lua.pkgs.luarocks that contains a luarocks manifest
which makes it recognizable to luarocks.
Generating the manifest for luarocks_bootstrap seemed too hackish, which is why we end up
with two "luarocks" derivations.
*/
{
lib,
stdenv,
fetchFromGitHub,
curl,
makeWrapper,
which,
unzip,
lua,
versionCheckHook,
# for 'luarocks pack'
zip,
nix-update-script,
# some packages need to be compiled with cmake
cmake,
installShellFiles,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "luarocks_bootstrap";
version = "3.13.0";
src = fetchFromGitHub {
owner = "luarocks";
repo = "luarocks";
tag = "v${finalAttrs.version}";
hash = "sha256-ETVoDpeFSsW7ld2z31Vog3RKsMquoxd7c8m9y7Fb1wk=";
};
patches = [
./darwin-3.7.0.patch
];
postPatch = lib.optionalString stdenv.targetPlatform.isDarwin ''
substituteInPlace src/luarocks/core/cfg.lua --subst-var-by 'darwinMinVersion' '${stdenv.targetPlatform.darwinMinVersion}'
'';
# Manually written ./configure does not support --build= or --host=:
# Error: Unknown flag: --build=x86_64-unknown-linux-gnu
configurePlatforms = [ ];
preConfigure = ''
lua -e "" || {
luajit -e "" && {
export LUA_SUFFIX=jit
appendToVar configureFlags "--lua-suffix=$LUA_SUFFIX"
}
}
lua_inc="$(echo "${lua}/include"/*/)"
if test -n "$lua_inc"; then
appendToVar configureFlags "--with-lua-include=$lua_inc"
fi
'';
nativeBuildInputs = [
makeWrapper
installShellFiles
lua
unzip
versionCheckHook
];
buildInputs = [
curl
which
];
postInstall = ''
sed -e "1s@.*@#! ${lua}/bin/lua$LUA_SUFFIX@" -i "$out"/bin/*
substituteInPlace $out/etc/luarocks/* \
--replace-quiet '${lua.luaOnBuild}' '${lua}'
''
+ lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
installShellCompletion --cmd luarocks \
--bash <($out/bin/luarocks completion bash) \
--fish <($out/bin/luarocks completion fish) \
--zsh <($out/bin/luarocks completion zsh)
installShellCompletion --cmd luarocks-admin \
--bash <($out/bin/luarocks-admin completion bash) \
--fish <($out/bin/luarocks-admin completion fish) \
--zsh <($out/bin/luarocks-admin completion zsh)
''
+ ''
for i in "$out"/bin/*; do
test -L "$i" || {
wrapProgram "$i" \
--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" \
--suffix PATH : ${lib.makeBinPath finalAttrs.propagatedNativeBuildInputs}
}
done
'';
propagatedNativeBuildInputs = [
zip
unzip
cmake
];
doInstallCheck = true;
versionCheckProgram = "${placeholder "out"}/bin/luarocks";
# 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:-}"
'';
disallowedReferences = lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
lua.luaOnBuild
];
passthru = {
updateScript = nix-update-script { };
};
meta = {
description = "Package manager for Lua";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [
raskin
teto
];
mainProgram = "luarocks";
platforms = lib.platforms.linux ++ lib.platforms.darwin;
downloadPage = "http://luarocks.org/releases/";
};
})
|