incus: fix container tests from image rename (#360305)
[NixPkgs.git] / pkgs / development / lua-modules / overrides.nix
blob62d1cf91c85cdafb011ab8e39066a5028154201e
1 # do not add pkgs, it messes up splicing
2 { stdenv
3 , cargo
4 , cmake
6 # plenary utilities
7 , which
8 , findutils
9 , clang
10 , coreutils
11 , curl
12 , cyrus_sasl
13 , dbus
14 , expat
15 , fetchFromGitHub
16 , fetchpatch
17 , fetchurl
18 , fixDarwinDylibNames
19 , glib
20 , glibc
21 , gmp
22 , gnulib
23 , gnum4
24 , gobject-introspection
25 , imagemagick
26 , installShellFiles
27 , lib
28 , libevent
29 , libiconv
30 , libmpack
31 , libmysqlclient
32 , libpsl
33 , libuuid
34 , libuv
35 , libxcrypt
36 , libyaml
37 , luajitPackages
38 , lua-language-server
39 , mariadb
40 , magic-enum
41 , mpfr
42 , neovim-unwrapped
43 , openldap
44 , openssl
45 , pcre
46 , pkg-config
47 , postgresql
48 , readline
49 , rustPlatform
50 , sol2
51 , sqlite
52 , tomlplusplus
53 , tree-sitter
54 , unbound
55 , vimPlugins
56 , vimUtils
57 , yajl
58 , zip
59 , unzip
60 , zlib
61 , zziplib
64 final: prev:
65 let
66   inherit (prev) luaOlder luaAtLeast lua isLuaJIT isLua51;
69   argparse = prev.argparse.overrideAttrs(oa: {
71     doCheck = true;
72     checkInputs = [ final.busted ];
74     checkPhase = ''
75       runHook preCheck
76       export LUA_PATH="src/?.lua;$LUA_PATH"
77       busted spec/
78       runHook postCheck
79     '';
80   });
81   ##########################################3
82   #### manual fixes for generated packages
83   ##########################################3
84   bit32 = prev.bit32.overrideAttrs (oa: {
85     # Small patch in order to no longer redefine a Lua 5.2 function that Luajit
86     # 2.1 also provides, see https://github.com/LuaJIT/LuaJIT/issues/325 for
87     # more
88     patches = [
89       ./bit32.patch
90     ];
91     meta.broken = luaOlder "5.1" || luaAtLeast "5.4";
92   });
94   busted = prev.busted.overrideAttrs (oa: {
95     nativeBuildInputs = oa.nativeBuildInputs ++ [
96       installShellFiles
97     ];
98     postConfigure = ''
99       substituteInPlace ''${rockspecFilename} \
100         --replace-fail "'lua_cliargs = 3.0'," "'lua_cliargs >= 3.0-1',"
101     '';
102     postInstall = ''
103       installShellCompletion --cmd busted \
104         --zsh completions/zsh/_busted \
105         --bash completions/bash/busted.bash
106     '';
107   });
109   cqueues = prev.cqueues.overrideAttrs (oa: rec {
110     # Parse out a version number without the Lua version inserted
111     version = let
112       version' = prev.cqueues.version;
113       rel = lib.splitVersion version';
114       date = lib.head rel;
115       rev = lib.last (lib.splitString "-" (lib.last rel));
116     in
117     "${date}-${rev}";
119     meta.broken = luaOlder "5.1" || luaAtLeast "5.4";
121     nativeBuildInputs = oa.nativeBuildInputs ++ [
122       gnum4
123     ];
125     externalDeps = [
126       { name = "CRYPTO"; dep = openssl; }
127       { name = "OPENSSL"; dep = openssl; }
128     ];
130     # Upstream rockspec is pointlessly broken into separate rockspecs, per Lua
131     # version, which doesn't work well for us, so modify it
132     postConfigure = let inherit (prev.cqueues) pname; in
133       ''
134         # 'all' target auto-detects correct Lua version, which is fine for us as
135         # we only have the right one available :)
136         sed -Ei ''${rockspecFilename} \
137           -e 's|lua == 5.[[:digit:]]|lua >= 5.1, <= 5.3|' \
138           -e 's|build_target = "[^"]+"|build_target = "all"|' \
139           -e 's|version = "[^"]+"|version = "${version}"|'
140         specDir=$(dirname ''${rockspecFilename})
141         cp ''${rockspecFilename} "$specDir/${pname}-${version}.rockspec"
142         rockspecFilename="$specDir/${pname}-${version}.rockspec"
143       '';
144   });
146   # Until https://github.com/swarn/fzy-lua/pull/8 is merged,
147   # we have to invoke busted manually
148   fzy = prev.fzy.overrideAttrs(oa: {
149     doCheck = true;
150     nativeCheckInputs = [ final.busted ];
151     checkPhase = ''
152       busted
153     '';
154   });
156   http = prev.http.overrideAttrs (oa: {
157     patches = [
158       (fetchpatch {
159         name = "invalid-state-progression.patch";
160         url = "https://github.com/daurnimator/lua-http/commit/cb7b59474a.diff";
161         sha256 = "1vmx039n3nqfx50faqhs3wgiw28ws416rhw6vh6srmh9i826dac7";
162       })
163     ];
164     /* TODO: separate docs derivation? (pandoc is heavy)
165       nativeBuildInputs = [ pandoc ];
166       makeFlags = [ "-C doc" "lua-http.html" "lua-http.3" ];
167     */
168   });
170   image-nvim = prev.image-nvim.overrideAttrs (oa: {
171     propagatedBuildInputs = [
172       lua
173       luajitPackages.magick
174     ];
175   });
177   ldbus = prev.ldbus.overrideAttrs (oa: {
178     luarocksConfig = oa.luarocksConfig // {
179       variables = {
180         DBUS_DIR = "${dbus.lib}";
181         DBUS_ARCH_INCDIR = "${dbus.lib}/lib/dbus-1.0/include";
182         DBUS_INCDIR = "${dbus.dev}/include/dbus-1.0";
183       };
184     };
185     buildInputs = [
186       dbus
187     ];
188   });
190   ljsyscall = prev.ljsyscall.overrideAttrs (oa: rec {
191     version = "unstable-20180515";
192     # package hasn't seen any release for a long time
193     src = fetchFromGitHub {
194       owner = "justincormack";
195       repo = "ljsyscall";
196       rev = "e587f8c55aad3955dddab3a4fa6c1968037b5c6e";
197       sha256 = "06v52agqyziwnbp2my3r7liv245ddmb217zmyqakh0ldjdsr8lz4";
198     };
199     knownRockspec = "rockspec/ljsyscall-scm-1.rockspec";
200     # actually library works fine with lua 5.2
201     preConfigure = ''
202       sed -i 's/lua == 5.1/lua >= 5.1, < 5.3/' ${knownRockspec}
203     '';
204     meta.broken = luaOlder "5.1" || luaAtLeast "5.3";
206     propagatedBuildInputs = oa.propagatedBuildInputs ++ lib.optional (!isLuaJIT) final.luaffi;
207   });
209   lgi = prev.lgi.overrideAttrs (oa: {
210     nativeBuildInputs = oa.nativeBuildInputs ++ [
211       pkg-config
212     ];
213     buildInputs = [
214       glib
215       gobject-introspection
216     ];
217     patches = [
218       (fetchpatch {
219         name = "lgi-find-cairo-through-typelib.patch";
220         url = "https://github.com/psychon/lgi/commit/46a163d9925e7877faf8a4f73996a20d7cf9202a.patch";
221         sha256 = "0gfvvbri9kyzhvq3bvdbj2l6mwvlz040dk4mrd5m9gz79f7w109c";
222       })
223     ];
225     # https://github.com/lgi-devs/lgi/pull/300
226     postPatch = ''
227       substituteInPlace lgi/Makefile tests/Makefile \
228         --replace 'PKG_CONFIG =' 'PKG_CONFIG ?='
229     '';
231     # there is only a rockspec.in in the repo, the actual rockspec must be generated
232     preConfigure = ''
233       make rock
234     '';
236     # Lua 5.4 support is experimental at the moment, see
237     # https://github.com/lgi-devs/lgi/pull/249
238     meta.broken = luaOlder "5.1" || luaAtLeast "5.4";
239   });
241   llscheck = prev.llscheck.overrideAttrs (oa: {
242     propagatedBuildInputs = oa.propagatedBuildInputs ++ [ lua-language-server ];
243   });
245   lmathx = prev.luaLib.overrideLuarocks prev.lmathx (drv:
246     if luaAtLeast "5.1" && luaOlder "5.2" then {
247       version = "20120430.51-1";
248       knownRockspec = (fetchurl {
249         url = "mirror://luarocks/lmathx-20120430.51-1.rockspec";
250         sha256 = "148vbv2g3z5si2db7rqg5bdily7m4sjyh9w6r3jnx3csvfaxyhp0";
251       }).outPath;
252       src = fetchurl {
253         url = "https://web.tecgraf.puc-rio.br/~lhf/ftp/lua/5.1/lmathx.tar.gz";
254         sha256 = "0sa553d0zlxhvpsmr4r7d841f16yq4wr3fg7i07ibxkz6yzxax51";
255       };
256     } else
257       if luaAtLeast "5.2" && luaOlder "5.3" then {
258         version = "20120430.52-1";
259         knownRockspec = (fetchurl {
260           url = "mirror://luarocks/lmathx-20120430.52-1.rockspec";
261           sha256 = "14rd625sipakm72wg6xqsbbglaxyjba9nsajsfyvhg0sz8qjgdya";
262         }).outPath;
263         src = fetchurl {
264           url = "http://www.tecgraf.puc-rio.br/~lhf/ftp/lua/5.2/lmathx.tar.gz";
265           sha256 = "19dwa4z266l2njgi6fbq9rak4rmx2fsx1s0p9sl166ar3mnrdwz5";
266         };
267       } else
268         {
269           disabled = luaOlder "5.1" || luaAtLeast "5.5";
270           # works fine with 5.4 as well
271           postConfigure = ''
272             substituteInPlace ''${rockspecFilename} \
273               --replace 'lua ~> 5.3' 'lua >= 5.3, < 5.5'
274           '';
275         });
277   lmpfrlib = prev.lmpfrlib.overrideAttrs (oa: {
278     externalDeps = [
279       { name = "GMP"; dep = gmp; }
280       { name = "MPFR"; dep = mpfr; }
281     ];
282     unpackPhase = ''
283       cp $src $(stripHash $src)
284     '';
285   });
287   lrexlib-gnu = prev.lrexlib-gnu.overrideAttrs (oa: {
288     buildInputs = oa.buildInputs ++ [
289       gnulib
290     ];
291   });
293   lrexlib-pcre = prev.lrexlib-pcre.overrideAttrs (oa: {
294     externalDeps = [
295       { name = "PCRE"; dep = pcre; }
296     ];
297   });
299   lrexlib-posix = prev.lrexlib-posix.overrideAttrs (oa: {
300     buildInputs = oa.buildInputs ++ [
301       glibc.dev
302     ];
303   });
305   luacheck = prev.luacheck.overrideAttrs (oa: {
306     meta = oa.meta // {
307       mainProgram = "luacheck";
308     };
309   });
311   lua-curl = prev.lua-curl.overrideAttrs (oa: {
312     buildInputs = oa.buildInputs ++ [
313       curl.dev
314     ];
315   });
317   lua-iconv = prev.lua-iconv.overrideAttrs (oa: {
318     buildInputs = oa.buildInputs ++ [
319       libiconv
320     ];
321   });
323   lua-lsp = prev.lua-lsp.overrideAttrs (oa: {
324     # until Alloyed/lua-lsp#28
325     postConfigure = ''
326       substituteInPlace ''${rockspecFilename} \
327         --replace '"dkjson ~> 2.5",' '"dkjson >= 2.5",'
328     '';
329   });
331   lua-resty-jwt = prev.lua-resty-jwt.overrideAttrs(oa: {
332     src = fetchFromGitHub {
333       owner = "cdbattags";
334       repo = "lua-resty-jwt";
335       rev = "v0.2.3";
336       hash = "sha256-5lnr0ka6ijfujiRjqwCPb6jzItXx45FIN8CvhR/KiB8=";
337       fetchSubmodules = true;
338     };
339   });
341   lua-zlib = prev.lua-zlib.overrideAttrs (oa: {
342     buildInputs = oa.buildInputs ++ [
343       zlib.dev
344     ];
345     meta = oa.meta // { broken = luaOlder "5.1" || luaAtLeast "5.4"; };
346   });
348   luadbi-mysql = prev.luadbi-mysql.overrideAttrs (oa: {
350     luarocksConfig = lib.recursiveUpdate oa.luarocksConfig {
351       variables = {
352         MYSQL_INCDIR = "${lib.getDev libmysqlclient}/include/";
353         MYSQL_LIBDIR = "${lib.getLib libmysqlclient}/lib/";
354       };
355     };
356     buildInputs = oa.buildInputs ++ [
357       mariadb.client
358       libmysqlclient
359     ];
360   });
362   luadbi-postgresql = prev.luadbi-postgresql.overrideAttrs (oa: {
363     buildInputs = oa.buildInputs ++ [
364       (lib.getDev postgresql)
365     ];
366   });
368   luadbi-sqlite3 = prev.luadbi-sqlite3.overrideAttrs (oa: {
369     externalDeps = [
370       { name = "SQLITE"; dep = sqlite; }
371     ];
372   });
374   luaevent = prev.luaevent.overrideAttrs (oa: {
375     propagatedBuildInputs = oa.propagatedBuildInputs ++ [
376       final.luasocket
377     ];
378     externalDeps = [
379       { name = "EVENT"; dep = libevent; }
380     ];
381     meta.broken = luaOlder "5.1" || luaAtLeast "5.4";
382   });
384   luaexpat = prev.luaexpat.overrideAttrs (_: {
385     externalDeps = [
386       { name = "EXPAT"; dep = expat; }
387     ];
388   });
390   # TODO Somehow automatically amend buildInputs for things that need luaffi
391   # but are in luajitPackages?
392   luaffi = prev.luaffi.overrideAttrs (oa: {
393     # The packaged .src.rock version is pretty old, and doesn't work with Lua 5.3
394     src = fetchFromGitHub {
395       owner = "facebook";
396       repo = "luaffifb";
397       rev = "532c757e51c86f546a85730b71c9fef15ffa633d";
398       sha256 = "1nwx6sh56zfq99rcs7sph0296jf6a9z72mxknn0ysw9fd7m1r8ig";
399     };
400     knownRockspec = with prev.luaffi; "${pname}-${version}.rockspec";
401     meta.broken = luaOlder "5.1" || luaAtLeast "5.4" || isLuaJIT;
402   });
404   lualdap = prev.lualdap.overrideAttrs (_: {
405     externalDeps = [
406       { name = "LDAP"; dep = openldap; }
407     ];
408   });
410   luaossl = prev.luaossl.overrideAttrs (_: {
411     externalDeps = [
412       { name = "CRYPTO"; dep = openssl; }
413       { name = "OPENSSL"; dep = openssl; }
414     ];
415   });
417   luaposix = prev.luaposix.overrideAttrs (_: {
418     externalDeps = [
419       { name = "CRYPT"; dep = libxcrypt; }
420     ];
421   });
423   luaprompt = prev.luaprompt.overrideAttrs (oa: {
424     externalDeps = [
425       { name = "READLINE"; dep = readline; }
426       { name = "HISTORY"; dep = readline; }
427     ];
429     nativeBuildInputs = oa.nativeBuildInputs ++ [ installShellFiles ];
431     postInstall = ''
432       installManPage luap.1
433     '';
434   });
436   # As a nix user, use this derivation instead of "luarocks_bootstrap"
437   luarocks = prev.luarocks.overrideAttrs (oa: {
439     nativeBuildInputs = oa.nativeBuildInputs ++ [ installShellFiles lua unzip ];
440     # cmake is just to compile packages with "cmake" buildType, not luarocks itself
441     dontUseCmakeConfigure = true;
443     propagatedBuildInputs = [ zip unzip cmake ];
445     postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
446       installShellCompletion --cmd luarocks \
447         --bash <($out/bin/luarocks completion bash) \
448         --fish <($out/bin/luarocks completion fish) \
449         --zsh <($out/bin/luarocks completion zsh)
451       installShellCompletion --cmd luarocks-admin \
452         --bash <($out/bin/luarocks-admin completion bash) \
453         --fish <($out/bin/luarocks-admin completion fish) \
454         --zsh <($out/bin/luarocks-admin completion zsh)
455     '';
457     meta = oa.meta // {
458       mainProgram = "luarocks";
459     };
461   });
463   luasec = prev.luasec.overrideAttrs (oa: {
464     externalDeps = [
465       { name = "OPENSSL"; dep = openssl; }
466     ];
467   });
469   luasql-sqlite3 = prev.luasql-sqlite3.overrideAttrs (oa: {
470     externalDeps = [
471       { name = "SQLITE"; dep = sqlite; }
472     ];
473   });
475   luasystem = prev.luasystem.overrideAttrs (oa: lib.optionalAttrs stdenv.hostPlatform.isLinux {
476     buildInputs = [ glibc.out ];
477   });
479   luazip = prev.luazip.overrideAttrs (oa: {
480     buildInputs = oa.buildInputs ++ [
481       zziplib
482     ];
483   });
485   # lua-resty-session =  prev.lua-resty-session.overrideAttrs (oa: {
486   #   # lua_pack and lua-ffi-zlib are unpackaged, causing this package to not evaluate
487   #   meta.broken = true;
488   # });
490   lua-yajl =  prev.lua-yajl.overrideAttrs (oa: {
491     buildInputs = oa.buildInputs ++ [
492       yajl
493     ];
494   });
496   luaunbound = prev.luaunbound.overrideAttrs (oa: {
497     externalDeps = [
498       { name = "libunbound"; dep = unbound; }
499     ];
500   });
502   lua-subprocess = prev.lua-subprocess.overrideAttrs (oa: {
503     meta.broken = luaOlder "5.1" || luaAtLeast "5.4";
504   });
506   lua-rtoml = prev.lua-rtoml.overrideAttrs (oa: {
508     cargoDeps = rustPlatform.fetchCargoTarball {
509       src = oa.src;
510       hash = "sha256-EcP4eYsuOVeEol+kMqzsVHd8F2KoBdLzf6K0KsYToUY=";
511     };
513     propagatedBuildInputs = oa.propagatedBuildInputs ++ [ cargo rustPlatform.cargoSetupHook ];
515     # ld: symbol(s) not found for architecture arm64
516     # clang-16: error: linker command failed with exit code 1 (use -v to see invocation)
517     meta.broken = stdenv.hostPlatform.isDarwin;
518   });
520   lush-nvim = prev.lush-nvim.overrideAttrs (drv: {
521     doCheck = false;
522   });
524   luuid = prev.luuid.overrideAttrs (oa: {
525     externalDeps = [
526       { name = "LIBUUID"; dep = libuuid; }
527     ];
528     # Trivial patch to make it work in both 5.1 and 5.2.  Basically just the
529     # tiny diff between the two upstream versions placed behind an #if.
530     # Upstreams:
531     # 5.1: http://webserver2.tecgraf.puc-rio.br/~lhf/ftp/lua/5.1/luuid.tar.gz
532     # 5.2: http://webserver2.tecgraf.puc-rio.br/~lhf/ftp/lua/5.2/luuid.tar.gz
533     patchFlags = [ "-p2" ];
534     patches = [
535       ./luuid.patch
536     ];
537     postConfigure =  ''
538       sed -Ei ''${rockspecFilename} -e 's|lua >= 5.2|lua >= 5.1,|'
539     '';
540     meta = oa.meta // {
541       broken = luaOlder "5.1" || (luaAtLeast "5.4");
542       platforms = lib.platforms.linux;
543     };
544   });
546   lz-n  = prev.lz-n.overrideAttrs(oa: {
547     doCheck = lua.luaversion == "5.1";
548     nativeCheckInputs = [ final.nlua final.busted ];
549     checkPhase = ''
550       runHook preCheck
551       export HOME=$(mktemp -d)
552       busted --lua=nlua
553       runHook postCheck
554       '';
555   });
557   lze  = prev.lze.overrideAttrs(oa: {
558     doCheck = lua.luaversion == "5.1";
559     nativeCheckInputs = [ final.nlua final.busted ];
560     checkPhase = ''
561       runHook preCheck
562       export HOME=$(mktemp -d)
563       busted --lua=nlua
564       runHook postCheck
565     '';
566   });
568   neotest  = prev.neotest.overrideAttrs(oa: {
569     doCheck = stdenv.hostPlatform.isLinux;
570     nativeCheckInputs = oa.nativeCheckInputs ++ [
571       final.nlua final.busted neovim-unwrapped
572     ];
574     # stick to neovim's lua version else loading shared libraries fail
575     meta = oa.meta // { broken = !isLua51; };
577     checkPhase = ''
578       runHook preCheck
579       export HOME=$(mktemp -d)
580       export LUA_PATH="./lua/?.lua;./lua/?/init.lua;$LUA_PATH"
581       nvim --headless -i NONE \
582         --cmd "set rtp+=${vimPlugins.plenary-nvim}" \
583         -c "PlenaryBustedDirectory tests/ {sequential = true}"
585       runHook postCheck
586       '';
587   });
589   haskell-tools-nvim  = prev.haskell-tools-nvim.overrideAttrs(oa: {
590     doCheck = lua.luaversion == "5.1";
591     nativeCheckInputs = [ final.nlua final.busted ];
592     checkPhase = ''
593       runHook preCheck
594       export HOME=$(mktemp -d)
595       busted --lua=nlua
596       runHook postCheck
597     '';
598   });
600   neorg = prev.neorg.overrideAttrs (oa: {
601     postConfigure = ''
602       substituteInPlace ''${rockspecFilename} \
603         --replace-fail "'nvim-nio ~> 1.7'," "'nvim-nio >= 1.7'," \
604         --replace-fail "'plenary.nvim == 0.1.4'," "'plenary.nvim',"
605     '';
606   });
608   plenary-nvim = prev.plenary-nvim.overrideAttrs (oa: {
609     postPatch = ''
610       sed -Ei lua/plenary/curl.lua \
611           -e 's@(command\s*=\s*")curl(")@\1${curl}/bin/curl\2@'
612     '';
614     # disabled for now because too flaky
615     doCheck = false;
616     # for env/find/ls
617     checkInputs = [
618       which
619       neovim-unwrapped
620       coreutils
621       findutils
622     ];
624     checkPhase = ''
625       runHook preCheck
626       # remove failing tests, need internet access for instance
627       rm tests/plenary/job_spec.lua tests/plenary/scandir_spec.lua tests/plenary/curl_spec.lua
628       export HOME="$TMPDIR"
629       make test
630       runHook postCheck
631     '';
632   });
634   # as advised in https://github.com/luarocks/luarocks/issues/1402#issuecomment-1080616570
635   # we shouldn't use luarocks machinery to build complex cmake components
636   libluv = stdenv.mkDerivation {
638     pname = "libluv";
639     inherit (prev.luv) version meta src;
641     cmakeFlags = [
642       "-DBUILD_SHARED_LIBS=ON"
643       "-DBUILD_MODULE=OFF"
644       "-DWITH_SHARED_LIBUV=ON"
645       "-DLUA_BUILD_TYPE=System"
646       "-DWITH_LUA_ENGINE=${if isLuaJIT then "LuaJit" else "Lua"}"
647     ];
649     # to make sure we dont use bundled deps
650     postUnpack = ''
651       rm -rf deps/lua deps/libuv
652     '';
654     buildInputs = [ libuv final.lua ];
656     nativeBuildInputs = [ pkg-config cmake ]
657       ++ lib.optionals stdenv.hostPlatform.isDarwin [ fixDarwinDylibNames ];
658   };
660   luv = prev.luv.overrideAttrs (oa: {
662     nativeBuildInputs = oa.nativeBuildInputs ++ [ pkg-config ];
663     buildInputs = [ libuv ];
665     # Use system libuv instead of building local and statically linking
666     luarocksConfig = lib.recursiveUpdate oa.luarocksConfig {
667       variables = { WITH_SHARED_LIBUV = "ON"; };
668     };
670     # we unset the LUA_PATH since the hook erases the interpreter defaults (To fix)
671     # tests is not run since they are not part of the tarball anymore
672     preCheck = ''
673       unset LUA_PATH
674       rm tests/test-{dns,thread}.lua
675     '';
676   });
678   lyaml = prev.lyaml.overrideAttrs (oa: {
679     buildInputs = [
680       libyaml
681     ];
682   });
684   magick = prev.magick.overrideAttrs (oa: {
685     buildInputs = oa.buildInputs ++ [
686       imagemagick
687     ];
689     # Fix MagickWand not being found in the pkg-config search path
690     patches = [
691       ./magick.patch
692     ];
694     postPatch = ''
695       substituteInPlace magick/wand/lib.lua \
696         --replace @nix_wand@ ${imagemagick}/lib/libMagickWand-7.Q16HDRI${stdenv.hostPlatform.extensions.sharedLibrary}
697     '';
699     # Requires ffi
700     meta.broken = !isLuaJIT;
701   });
703   mpack = prev.mpack.overrideAttrs (drv: {
704     buildInputs = (drv.buildInputs or []) ++ [ libmpack ];
705     env = {
706       # the rockspec doesn't use the makefile so you may need to export more flags
707       USE_SYSTEM_LUA = "yes";
708       USE_SYSTEM_MPACK = "yes";
709     };
710   });
712   nlua = prev.nlua.overrideAttrs(oa: {
714     # patchShebang removes the nvim in nlua's shebang so we hardcode one
715     postFixup = ''
716       sed -i -e "1 s|.*|#\!${coreutils}/bin/env -S ${neovim-unwrapped}/bin/nvim -l|" "$out/bin/nlua"
717       '';
718     dontPatchShebangs = true;
719   });
721   psl = prev.psl.overrideAttrs (drv: {
722     buildInputs = drv.buildInputs or [ ] ++ [ libpsl ];
724     luarocksConfig.variables = drv.luarocksConfig.variables // {
725       PSL_INCDIR = lib.getDev libpsl + "/include";
726       PSL_DIR = lib.getLib libpsl;
727     };
728   });
730   rapidjson = prev.rapidjson.overrideAttrs (oa: {
731     preBuild = ''
732       sed -i '/set(CMAKE_CXX_FLAGS/d' CMakeLists.txt
733       sed -i '/set(CMAKE_C_FLAGS/d' CMakeLists.txt
734     '';
735   });
737   # upstream broken, can't be generated, so moved out from the generated set
738   readline = final.callPackage({ buildLuarocksPackage, fetchurl, luaAtLeast, luaOlder, lua, luaposix }:
739   buildLuarocksPackage ({
740     pname = "readline";
741     version = "3.2-0";
742     knownRockspec = (fetchurl {
743       url    = "mirror://luarocks/readline-3.2-0.rockspec";
744       sha256 = "1r0sgisxm4xd1r6i053iibxh30j7j3rcj4wwkd8rzkj8nln20z24";
745     }).outPath;
746     src = fetchurl {
747       # the rockspec url doesn't work because 'www.' is not covered by the certificate so
748       # I manually removed the 'www' prefix here
749       url    = "http://pjb.com.au/comp/lua/readline-3.2.tar.gz";
750       sha256 = "1mk9algpsvyqwhnq7jlw4cgmfzj30l7n2r6ak4qxgdxgc39f48k4";
751     };
753     luarocksConfig.variables = rec {
754       READLINE_INCDIR = "${readline.dev}/include";
755       HISTORY_INCDIR = READLINE_INCDIR;
756     };
757     unpackCmd = ''
758       unzip "$curSrc"
759       tar xf *.tar.gz
760     '';
762     propagatedBuildInputs = [
763       luaposix
764       readline.out
765     ];
767     meta = {
768       homepage = "http://pjb.com.au/comp/lua/readline.html";
769       description = "Interface to the readline library";
770       license.fullName = "MIT/X11";
771       broken = (luaOlder "5.1") || (luaAtLeast "5.5");
772     };
773   })) {};
775   rtp-nvim  = prev.rtp-nvim.overrideAttrs(oa: {
776     doCheck = lua.luaversion == "5.1";
777     nativeCheckInputs = [ final.nlua final.busted ];
778     checkPhase = ''
779       runHook preCheck
780       export HOME=$(mktemp -d)
781       busted --lua=nlua
782       runHook postCheck
783       '';
784   });
786   rustaceanvim  = prev.rustaceanvim.overrideAttrs(oa: {
787     doCheck = lua.luaversion == "5.1";
788     nativeCheckInputs = [ final.nlua final.busted ];
789     checkPhase = ''
790       runHook preCheck
791       export HOME=$(mktemp -d)
792       busted --lua=nlua
793       runHook postCheck
794       '';
795   });
797   sqlite = prev.sqlite.overrideAttrs (drv: {
798     doCheck = stdenv.hostPlatform.isLinux;
799     nativeCheckInputs = [ final.plenary-nvim neovim-unwrapped ];
801     # the plugin loads the library from either the LIBSQLITE env
802     # or the vim.g.sqlite_clib_path variable.
803     postPatch = ''
804       substituteInPlace lua/sqlite/defs.lua \
805         --replace-fail "path = vim.g.sqlite_clib_path" 'path = vim.g.sqlite_clib_path or  "${sqlite.out}/lib/libsqlite3${stdenv.hostPlatform.extensions.sharedLibrary}"'
806     '';
808     # we override 'luarocks test' because otherwise neovim doesn't find/load the plenary plugin
809     checkPhase = ''
810       export HOME="$TMPDIR";
812       nvim --headless -i NONE \
813         -u test/minimal_init.vim --cmd "set rtp+=${vimPlugins.plenary-nvim}" \
814         -c "PlenaryBustedDirectory test/auto/ { sequential = true, minimal_init = './test/minimal_init.vim' }"
815     '';
817   });
819   std-_debug = prev.std-_debug.overrideAttrs (oa: {
820     # run make to generate lib/std/_debug/version.lua
821     preConfigure = ''
822       make all
823     '';
824   });
826   std-normalize = prev.std-normalize.overrideAttrs (oa: {
827     # run make to generate lib/std/_debug/version.lua
828     preConfigure = ''
829       make all
830     '';
831   });
833   tiktoken_core = prev.tiktoken_core.overrideAttrs (oa: {
834     cargoDeps = rustPlatform.fetchCargoTarball {
835       src = oa.src;
836       hash = "sha256-pKqG8aiV8BvvDO6RE6J3HEA/S4E4QunbO4WBpV5jUYk=";
837     };
838     nativeBuildInputs = oa.nativeBuildInputs ++ [ cargo rustPlatform.cargoSetupHook ];
839   });
841   toml-edit = prev.toml-edit.overrideAttrs (oa: {
843     cargoDeps = rustPlatform.fetchCargoTarball {
844       src = oa.src;
845       hash = "sha256-lguGj8fDqztrvqvEYVcJLmiuxPDaCpXU8aztInKjF+E=";
846     };
848     NIX_LDFLAGS = lib.optionalString stdenv.hostPlatform.isDarwin
849       (if lua.pkgs.isLuaJIT then "-lluajit-${lua.luaversion}" else "-llua");
851     nativeBuildInputs = oa.nativeBuildInputs ++ [
852       cargo
853       rustPlatform.cargoSetupHook
854       lua.pkgs.luarocks-build-rust-mlua
855     ];
857   });
859   tree-sitter-norg = prev.tree-sitter-norg.overrideAttrs (oa: {
860     propagatedBuildInputs = let
861       # HACK: luarocks-nix puts rockspec build dependencies in the nativeBuildInputs,
862       # but that doesn't seem to work
863       lua = lib.head oa.propagatedBuildInputs;
864     in oa.propagatedBuildInputs ++ [
865       lua.pkgs.luarocks-build-treesitter-parser-cpp
866     ];
867   });
869   tl = prev.tl.overrideAttrs ({
870     preConfigure = ''
871       rm luarocks.lock
872     '';
873   });
875   vstruct = prev.vstruct.overrideAttrs (_: {
876     meta.broken = (luaOlder "5.1" || luaAtLeast "5.4");
877   });
879   vusted = prev.vusted.overrideAttrs (_: {
880     postConfigure = ''
881       cat ''${rockspecFilename}
882       substituteInPlace ''${rockspecFilename} \
883         --replace-fail '"luasystem = 0.2.1",' "'luasystem >= 0.2',"
884     '';
886     # make sure vusted_entry.vim doesn't get wrapped
887     postInstall = ''
888       chmod -x $out/bin/vusted_entry.vim
889     '';
890   });
893   # aliases
894   cjson = prev.lua-cjson;