nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{ pkgs }:
2final: prev:
3with prev;
4{
5 ##########################################3
6 #### manual fixes for generated packages
7 ##########################################3
8 bit32 = prev.bit32.overrideAttrs(oa: {
9 # Small patch in order to no longer redefine a Lua 5.2 function that Luajit
10 # 2.1 also provides, see https://github.com/LuaJIT/LuaJIT/issues/325 for
11 # more
12 patches = [
13 ./bit32.patch
14 ];
15 });
16
17 busted = prev.busted.overrideAttrs(oa: {
18 postConfigure = ''
19 substituteInPlace ''${rockspecFilename} \
20 --replace "'lua_cliargs = 3.0-1'," "'lua_cliargs >= 3.0-1',"
21 '';
22 postInstall = ''
23 install -D completions/zsh/_busted $out/share/zsh/site-functions/_busted
24 install -D completions/bash/busted.bash $out/share/bash-completion/completions/busted
25 '';
26 });
27
28 cqueues = (prev.lib.overrideLuarocks prev.cqueues (drv: {
29 nativeBuildInputs = [
30 pkgs.gnum4
31 ];
32 externalDeps = [
33 { name = "CRYPTO"; dep = pkgs.openssl; }
34 { name = "OPENSSL"; dep = pkgs.openssl; }
35 ];
36 disabled = luaOlder "5.1" || luaAtLeast "5.4";
37 })).overrideAttrs(oa: rec {
38 # Parse out a version number without the Lua version inserted
39 version = with pkgs.lib; let
40 version' = prev.cqueues.version;
41 rel = splitVersion version';
42 date = head rel;
43 rev = last (splitString "-" (last rel));
44 in "${date}-${rev}";
45 # Upstream rockspec is pointlessly broken into separate rockspecs, per Lua
46 # version, which doesn't work well for us, so modify it
47 postConfigure = let inherit (prev.cqueues) pname; in ''
48 # 'all' target auto-detects correct Lua version, which is fine for us as
49 # we only have the right one available :)
50 sed -Ei ''${rockspecFilename} \
51 -e 's|lua == 5.[[:digit:]]|lua >= 5.1, <= 5.3|' \
52 -e 's|build_target = "[^"]+"|build_target = "all"|' \
53 -e 's|version = "[^"]+"|version = "${version}"|'
54 specDir=$(dirname ''${rockspecFilename})
55 cp ''${rockspecFilename} "$specDir/${pname}-${version}.rockspec"
56 rockspecFilename="$specDir/${pname}-${version}.rockspec"
57 '';
58 });
59
60 cyrussasl = prev.lib.overrideLuarocks prev.cyrussasl (drv: {
61 externalDeps = [
62 { name = "LIBSASL"; dep = pkgs.cyrus_sasl; }
63 ];
64 });
65
66 http = prev.http.overrideAttrs(oa: {
67 patches = [
68 (pkgs.fetchpatch {
69 name = "invalid-state-progression.patch";
70 url = "https://github.com/daurnimator/lua-http/commit/cb7b59474a.diff";
71 sha256 = "1vmx039n3nqfx50faqhs3wgiw28ws416rhw6vh6srmh9i826dac7";
72 })
73 ];
74 /* TODO: separate docs derivation? (pandoc is heavy)
75 nativeBuildInputs = [ pandoc ];
76 makeFlags = [ "-C doc" "lua-http.html" "lua-http.3" ];
77 */
78 });
79
80 ldbus = prev.lib.overrideLuarocks prev.ldbus (drv: {
81 extraVariables = {
82 DBUS_DIR="${pkgs.dbus.lib}";
83 DBUS_ARCH_INCDIR="${pkgs.dbus.lib}/lib/dbus-1.0/include";
84 DBUS_INCDIR="${pkgs.dbus.dev}/include/dbus-1.0";
85 };
86 buildInputs = with pkgs; [
87 dbus
88 ];
89 });
90
91 ljsyscall = prev.lib.overrideLuarocks prev.ljsyscall (drv: rec {
92 version = "unstable-20180515";
93 # package hasn't seen any release for a long time
94 src = pkgs.fetchFromGitHub {
95 owner = "justincormack";
96 repo = "ljsyscall";
97 rev = "e587f8c55aad3955dddab3a4fa6c1968037b5c6e";
98 sha256 = "06v52agqyziwnbp2my3r7liv245ddmb217zmyqakh0ldjdsr8lz4";
99 };
100 knownRockspec = "rockspec/ljsyscall-scm-1.rockspec";
101 # actually library works fine with lua 5.2
102 preConfigure = ''
103 sed -i 's/lua == 5.1/lua >= 5.1, < 5.3/' ${knownRockspec}
104 '';
105 disabled = luaOlder "5.1" || luaAtLeast "5.3";
106
107 propagatedBuildInputs = with pkgs.lib; optional (!isLuaJIT) luaffi;
108 });
109
110 lgi = prev.lib.overrideLuarocks prev.lgi (drv: {
111 nativeBuildInputs = [
112 pkgs.pkg-config
113 ];
114 buildInputs = [
115 pkgs.glib
116 pkgs.gobject-introspection
117 ];
118 patches = [
119 (pkgs.fetchpatch {
120 name = "lgi-find-cairo-through-typelib.patch";
121 url = "https://github.com/psychon/lgi/commit/46a163d9925e7877faf8a4f73996a20d7cf9202a.patch";
122 sha256 = "0gfvvbri9kyzhvq3bvdbj2l6mwvlz040dk4mrd5m9gz79f7w109c";
123 })
124 ];
125
126 # there is only a rockspec.in in the repo, the actual rockspec must be generated
127 preConfigure = ''
128 make rock
129 '';
130 });
131
132 lmathx = prev.lib.overrideLuarocks prev.lmathx (drv:
133 if luaAtLeast "5.1" && luaOlder "5.2" then {
134 version = "20120430.51-1";
135 knownRockspec = (pkgs.fetchurl {
136 url = "https://luarocks.org/lmathx-20120430.51-1.rockspec";
137 sha256 = "148vbv2g3z5si2db7rqg5bdily7m4sjyh9w6r3jnx3csvfaxyhp0";
138 }).outPath;
139 src = pkgs.fetchurl {
140 url = "https://web.tecgraf.puc-rio.br/~lhf/ftp/lua/5.1/lmathx.tar.gz";
141 sha256 = "0sa553d0zlxhvpsmr4r7d841f16yq4wr3fg7i07ibxkz6yzxax51";
142 };
143 } else
144 if luaAtLeast "5.2" && luaOlder "5.3" then {
145 version = "20120430.52-1";
146 knownRockspec = (pkgs.fetchurl {
147 url = "https://luarocks.org/lmathx-20120430.52-1.rockspec";
148 sha256 = "14rd625sipakm72wg6xqsbbglaxyjba9nsajsfyvhg0sz8qjgdya";
149 }).outPath;
150 src = pkgs.fetchurl {
151 url = "http://www.tecgraf.puc-rio.br/~lhf/ftp/lua/5.2/lmathx.tar.gz";
152 sha256 = "19dwa4z266l2njgi6fbq9rak4rmx2fsx1s0p9sl166ar3mnrdwz5";
153 };
154 } else
155 {
156 disabled = luaOlder "5.1" || luaAtLeast "5.5";
157 # works fine with 5.4 as well
158 postConfigure = ''
159 substituteInPlace ''${rockspecFilename} \
160 --replace 'lua ~> 5.3' 'lua >= 5.3, < 5.5'
161 '';
162 });
163
164 lmpfrlib = prev.lib.overrideLuarocks prev.lmpfrlib (drv: {
165 externalDeps = [
166 { name = "GMP"; dep = pkgs.gmp; }
167 { name = "MPFR"; dep = pkgs.mpfr; }
168 ];
169 unpackPhase = ''
170 cp $src $(stripHash $src)
171 '';
172 });
173
174 lrexlib-gnu = prev.lib.overrideLuarocks prev.lrexlib-gnu (drv: {
175 buildInputs = [
176 pkgs.gnulib
177 ];
178 });
179
180 lrexlib-pcre = prev.lib.overrideLuarocks prev.lrexlib-pcre (drv: {
181 externalDeps = [
182 { name = "PCRE"; dep = pkgs.pcre; }
183 ];
184 });
185
186 lrexlib-posix = prev.lib.overrideLuarocks prev.lrexlib-posix (drv: {
187 buildInputs = [
188 pkgs.glibc.dev
189 ];
190 });
191
192 lua-iconv = prev.lib.overrideLuarocks prev.lua-iconv (drv: {
193 buildInputs = [
194 pkgs.libiconv
195 ];
196 });
197
198 lua-lsp = prev.lua-lsp.overrideAttrs(oa: {
199 # until Alloyed/lua-lsp#28
200 postConfigure = ''
201 substituteInPlace ''${rockspecFilename} \
202 --replace '"lpeglabel ~> 1.5",' '"lpeglabel >= 1.5",'
203 '';
204 });
205
206 lua-zlib = prev.lib.overrideLuarocks prev.lua-zlib (drv: {
207 buildInputs = [
208 pkgs.zlib.dev
209 ];
210 disabled = luaOlder "5.1" || luaAtLeast "5.4";
211 });
212
213 luadbi-mysql = prev.lib.overrideLuarocks prev.luadbi-mysql (drv: {
214 extraVariables = {
215 # Can't just be /include and /lib, unfortunately needs the trailing 'mysql'
216 MYSQL_INCDIR="${pkgs.libmysqlclient.dev}/include/mysql";
217 MYSQL_LIBDIR="${pkgs.libmysqlclient}/lib/mysql";
218 };
219 buildInputs = [
220 pkgs.mariadb.client
221 pkgs.libmysqlclient
222 ];
223 });
224
225 luadbi-postgresql = prev.lib.overrideLuarocks prev.luadbi-postgresql (drv: {
226 buildInputs = [
227 pkgs.postgresql
228 ];
229 });
230
231 luadbi-sqlite3 = prev.lib.overrideLuarocks prev.luadbi-sqlite3 (drv: {
232 externalDeps = [
233 { name = "SQLITE"; dep = pkgs.sqlite; }
234 ];
235 });
236
237 luaevent = prev.lib.overrideLuarocks prev.luaevent (drv: {
238 propagatedBuildInputs = [
239 luasocket
240 ];
241 externalDeps = [
242 { name = "EVENT"; dep = pkgs.libevent; }
243 ];
244 disabled = luaOlder "5.1" || luaAtLeast "5.4";
245 });
246
247 luaexpat = prev.lib.overrideLuarocks prev.luaexpat (drv: {
248 externalDeps = [
249 { name = "EXPAT"; dep = pkgs.expat; }
250 ];
251 });
252
253 # TODO Somehow automatically amend buildInputs for things that need luaffi
254 # but are in luajitPackages?
255 luaffi = prev.lib.overrideLuarocks prev.luaffi (drv: {
256 # The packaged .src.rock version is pretty old, and doesn't work with Lua 5.3
257 src = pkgs.fetchFromGitHub {
258 owner = "facebook"; repo = "luaffifb";
259 rev = "532c757e51c86f546a85730b71c9fef15ffa633d";
260 sha256 = "1nwx6sh56zfq99rcs7sph0296jf6a9z72mxknn0ysw9fd7m1r8ig";
261 };
262 knownRockspec = with prev.luaffi; "${pname}-${version}.rockspec";
263 disabled = luaOlder "5.1" || luaAtLeast "5.4" || isLuaJIT;
264 });
265
266 luaossl = prev.lib.overrideLuarocks prev.luaossl (drv: {
267 externalDeps = [
268 { name = "CRYPTO"; dep = pkgs.openssl; }
269 { name = "OPENSSL"; dep = pkgs.openssl; }
270 ];
271 });
272
273 luasec = prev.lib.overrideLuarocks prev.luasec (drv: {
274 externalDeps = [
275 { name = "OPENSSL"; dep = pkgs.openssl; }
276 ];
277 });
278
279 luasql-sqlite3 = prev.lib.overrideLuarocks prev.luasql-sqlite3 (drv: {
280 externalDeps = [
281 { name = "SQLITE"; dep = pkgs.sqlite; }
282 ];
283 });
284
285 luasystem = prev.lib.overrideLuarocks prev.luasystem (drv: pkgs.lib.optionalAttrs pkgs.stdenv.isLinux {
286 buildInputs = [ pkgs.glibc.out ];
287 });
288
289 luazip = prev.lib.overrideLuarocks prev.luazip (drv: {
290 buildInputs = [
291 pkgs.zziplib
292 ];
293 });
294
295 lua-yajl = prev.lib.overrideLuarocks prev.lua-yajl (drv: {
296 buildInputs = [
297 pkgs.yajl
298 ];
299 });
300
301 luaunbound = prev.lib.overrideLuarocks prev.luaunbound(drv: {
302 externalDeps = [
303 { name = "libunbound"; dep = pkgs.unbound; }
304 ];
305 });
306
307 luuid = (prev.lib.overrideLuarocks prev.luuid (drv: {
308 externalDeps = [
309 { name = "LIBUUID"; dep = pkgs.libuuid; }
310 ];
311 disabled = luaOlder "5.1" || (luaAtLeast "5.4");
312 })).overrideAttrs(oa: {
313 meta = oa.meta // {
314 platforms = pkgs.lib.platforms.linux;
315 };
316 # Trivial patch to make it work in both 5.1 and 5.2. Basically just the
317 # tiny diff between the two upstream versions placed behind an #if.
318 # Upstreams:
319 # 5.1: http://webserver2.tecgraf.puc-rio.br/~lhf/ftp/lua/5.1/luuid.tar.gz
320 # 5.2: http://webserver2.tecgraf.puc-rio.br/~lhf/ftp/lua/5.2/luuid.tar.gz
321 patchFlags = [ "-p2" ];
322 patches = [
323 ./luuid.patch
324 ];
325 postConfigure = let inherit (prev.luuid) version pname; in ''
326 sed -Ei ''${rockspecFilename} -e 's|lua >= 5.2|lua >= 5.1,|'
327 '';
328 });
329
330
331 # as advised in https://github.com/luarocks/luarocks/issues/1402#issuecomment-1080616570
332 # we shouldn't use luarocks machinery to build complex cmake components
333 libluv = pkgs.stdenv.mkDerivation {
334
335 inherit (prev.luv) pname version meta src;
336
337 cmakeFlags = [
338 "-DBUILD_SHARED_LIBS=ON"
339 "-DBUILD_MODULE=OFF"
340 "-DWITH_SHARED_LIBUV=ON"
341 ];
342
343 buildInputs = [ pkgs.libuv ];
344
345 nativeBuildInputs = [ pkgs.pkg-config pkgs.cmake ]
346 ++ pkgs.lib.optionals pkgs.stdenv.isDarwin [ pkgs.fixDarwinDylibNames ];
347 };
348
349 luv = prev.lib.overrideLuarocks prev.luv (drv: {
350
351 buildInputs = [ pkgs.pkg-config pkgs.libuv ];
352
353 doInstallCheck = true;
354
355 # Use system libuv instead of building local and statically linking
356 extraVariables = {
357 "WITH_SHARED_LIBUV" = "ON";
358 };
359
360 # we unset the LUA_PATH since the hook erases the interpreter defaults (To fix)
361 installCheckPhase = ''
362 unset LUA_PATH
363 rm tests/test-{dns,thread}.lua
364 lua tests/run.lua
365 '';
366
367 passthru.libluv = final.libluv;
368
369 });
370
371 lyaml = prev.lib.overrideLuarocks prev.lyaml (oa: {
372 buildInputs = [
373 pkgs.libyaml
374 ];
375 });
376
377 mpack = prev.lib.overrideLuarocks prev.mpack (drv: {
378 buildInputs = [ pkgs.libmpack ];
379 # the rockspec doesn't use the makefile so you may need to export more flags
380 USE_SYSTEM_LUA = "yes";
381 USE_SYSTEM_MPACK = "yes";
382 });
383
384 rapidjson = prev.rapidjson.overrideAttrs(oa: {
385 preBuild = ''
386 sed -i '/set(CMAKE_CXX_FLAGS/d' CMakeLists.txt
387 sed -i '/set(CMAKE_C_FLAGS/d' CMakeLists.txt
388 '';
389 });
390
391 readline = (prev.lib.overrideLuarocks prev.readline (drv: {
392 unpackCmd = ''
393 unzip "$curSrc"
394 tar xf *.tar.gz
395 '';
396 propagatedBuildInputs = prev.readline.propagatedBuildInputs ++ [ pkgs.readline.out ];
397 extraVariables = rec {
398 READLINE_INCDIR = "${pkgs.readline.dev}/include";
399 HISTORY_INCDIR = READLINE_INCDIR;
400 };
401 })).overrideAttrs (old: {
402 # Without this, source root is wrongly set to ./readline-2.6/doc
403 setSourceRoot = ''
404 sourceRoot=./readline-3.0
405 '';
406 });
407
408 std-_debug = prev.std-_debug.overrideAttrs(oa: {
409 # run make to generate lib/std/_debug/version.lua
410 preConfigure = ''
411 make all
412 '';
413 });
414
415 std-normalize = prev.std-normalize.overrideAttrs(oa: {
416 # run make to generate lib/std/_debug/version.lua
417 preConfigure = ''
418 make all
419 '';
420 });
421
422 # TODO just while testing, remove afterwards
423 # toVimPlugin should do it instead
424 gitsigns-nvim = prev.gitsigns-nvim.overrideAttrs(oa: {
425 nativeBuildInputs = oa.nativeBuildInputs or [] ++ [ pkgs.vimUtils.vimGenDocHook ];
426 });
427
428 # aliases
429 cjson = prev.lua-cjson;
430}