Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
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 lrexlib-gnu = prev.lib.overrideLuarocks prev.lrexlib-gnu (drv: {
133 buildInputs = [
134 pkgs.gnulib
135 ];
136 });
137
138 lrexlib-pcre = prev.lib.overrideLuarocks prev.lrexlib-pcre (drv: {
139 externalDeps = [
140 { name = "PCRE"; dep = pkgs.pcre; }
141 ];
142 });
143
144 lrexlib-posix = prev.lib.overrideLuarocks prev.lrexlib-posix (drv: {
145 buildInputs = [
146 pkgs.glibc.dev
147 ];
148 });
149
150 lua-iconv = prev.lib.overrideLuarocks prev.lua-iconv (drv: {
151 buildInputs = [
152 pkgs.libiconv
153 ];
154 });
155
156 lua-lsp = prev.lua-lsp.overrideAttrs(oa: {
157 # until Alloyed/lua-lsp#28
158 postConfigure = ''
159 substituteInPlace ''${rockspecFilename} \
160 --replace '"lpeglabel ~> 1.5",' '"lpeglabel >= 1.5",'
161 '';
162 });
163
164 lua-zlib = prev.lib.overrideLuarocks prev.lua-zlib (drv: {
165 buildInputs = [
166 pkgs.zlib.dev
167 ];
168 disabled = luaOlder "5.1" || luaAtLeast "5.4";
169 });
170
171 luadbi-mysql = prev.lib.overrideLuarocks prev.luadbi-mysql (drv: {
172 extraVariables = {
173 # Can't just be /include and /lib, unfortunately needs the trailing 'mysql'
174 MYSQL_INCDIR="${pkgs.libmysqlclient.dev}/include/mysql";
175 MYSQL_LIBDIR="${pkgs.libmysqlclient}/lib/mysql";
176 };
177 buildInputs = [
178 pkgs.mariadb.client
179 pkgs.libmysqlclient
180 ];
181 });
182
183 luadbi-postgresql = prev.lib.overrideLuarocks prev.luadbi-postgresql (drv: {
184 buildInputs = [
185 pkgs.postgresql
186 ];
187 });
188
189 luadbi-sqlite3 = prev.lib.overrideLuarocks prev.luadbi-sqlite3 (drv: {
190 externalDeps = [
191 { name = "SQLITE"; dep = pkgs.sqlite; }
192 ];
193 });
194
195 luaevent = prev.lib.overrideLuarocks prev.luaevent (drv: {
196 propagatedBuildInputs = [
197 luasocket
198 ];
199 externalDeps = [
200 { name = "EVENT"; dep = pkgs.libevent; }
201 ];
202 disabled = luaOlder "5.1" || luaAtLeast "5.4";
203 });
204
205 luaexpat = prev.lib.overrideLuarocks prev.luaexpat (drv: {
206 externalDeps = [
207 { name = "EXPAT"; dep = pkgs.expat; }
208 ];
209 patches = [
210 ./luaexpat.patch
211 ];
212 });
213
214 # TODO Somehow automatically amend buildInputs for things that need luaffi
215 # but are in luajitPackages?
216 luaffi = prev.lib.overrideLuarocks prev.luaffi (drv: {
217 # The packaged .src.rock version is pretty old, and doesn't work with Lua 5.3
218 src = pkgs.fetchFromGitHub {
219 owner = "facebook"; repo = "luaffifb";
220 rev = "532c757e51c86f546a85730b71c9fef15ffa633d";
221 sha256 = "1nwx6sh56zfq99rcs7sph0296jf6a9z72mxknn0ysw9fd7m1r8ig";
222 };
223 knownRockspec = with prev.luaffi; "${pname}-${version}.rockspec";
224 disabled = luaOlder "5.1" || luaAtLeast "5.4" || isLuaJIT;
225 });
226
227 luaossl = prev.lib.overrideLuarocks prev.luaossl (drv: {
228 externalDeps = [
229 { name = "CRYPTO"; dep = pkgs.openssl; }
230 { name = "OPENSSL"; dep = pkgs.openssl; }
231 ];
232 });
233
234 luasec = prev.lib.overrideLuarocks prev.luasec (drv: {
235 externalDeps = [
236 { name = "OPENSSL"; dep = pkgs.openssl; }
237 ];
238 });
239
240 luasql-sqlite3 = prev.lib.overrideLuarocks prev.luasql-sqlite3 (drv: {
241 externalDeps = [
242 { name = "SQLITE"; dep = pkgs.sqlite; }
243 ];
244 });
245
246 luasystem = prev.lib.overrideLuarocks prev.luasystem (drv: { buildInputs = [ pkgs.glibc.out ]; });
247
248 luazip = prev.lib.overrideLuarocks prev.luazip (drv: {
249 buildInputs = [
250 pkgs.zziplib
251 ];
252 });
253
254 lua-yajl = prev.lib.overrideLuarocks prev.lua-yajl (drv: {
255 buildInputs = [
256 pkgs.yajl
257 ];
258 });
259
260 luuid = (prev.lib.overrideLuarocks prev.luuid (drv: {
261 externalDeps = [
262 { name = "LIBUUID"; dep = pkgs.libuuid; }
263 ];
264 disabled = luaOlder "5.1" || (luaAtLeast "5.4");
265 })).overrideAttrs(oa: {
266 meta = oa.meta // {
267 platforms = pkgs.lib.platforms.linux;
268 };
269 # Trivial patch to make it work in both 5.1 and 5.2. Basically just the
270 # tiny diff between the two upstream versions placed behind an #if.
271 # Upstreams:
272 # 5.1: http://webserver2.tecgraf.puc-rio.br/~lhf/ftp/lua/5.1/luuid.tar.gz
273 # 5.2: http://webserver2.tecgraf.puc-rio.br/~lhf/ftp/lua/5.2/luuid.tar.gz
274 patchFlags = [ "-p2" ];
275 patches = [
276 ./luuid.patch
277 ];
278 postConfigure = let inherit (prev.luuid) version pname; in ''
279 sed -Ei ''${rockspecFilename} -e 's|lua >= 5.2|lua >= 5.1,|'
280 '';
281 });
282
283 luv = prev.lib.overrideLuarocks prev.luv (drv: {
284 # Use system libuv instead of building local and statically linking
285 # This is a hacky way to specify -DWITH_SHARED_LIBUV=ON which
286 # is not possible with luarocks and the current luv rockspec
287 # While at it, remove bundled libuv source entirely to be sure.
288 # We may wish to drop bundled lua submodules too...
289 preBuild = ''
290 sed -i 's,\(option(WITH_SHARED_LIBUV.*\)OFF,\1ON,' CMakeLists.txt
291 rm -rf deps/libuv
292 '';
293
294 buildInputs = [ pkgs.libuv ];
295
296 passthru = {
297 libluv = final.luv.overrideAttrs (oa: {
298 preBuild = final.luv.preBuild + ''
299 sed -i 's,\(option(BUILD_MODULE.*\)ON,\1OFF,' CMakeLists.txt
300 sed -i 's,\(option(BUILD_SHARED_LIBS.*\)OFF,\1ON,' CMakeLists.txt
301 sed -i 's,${"\${.*INSTALL_INC_DIR}"},${placeholder "out"}/include/luv,' CMakeLists.txt
302 '';
303
304 nativeBuildInputs = [ pkgs.fixDarwinDylibNames ];
305
306 # Fixup linking libluv.dylib, for some reason it's not linked against lua correctly.
307 NIX_LDFLAGS = pkgs.lib.optionalString pkgs.stdenv.isDarwin
308 (if isLuaJIT then "-lluajit-${lua.luaversion}" else "-llua");
309 });
310 };
311 });
312
313 lyaml = prev.lib.overrideLuarocks prev.lyaml (oa: {
314 buildInputs = [
315 pkgs.libyaml
316 ];
317 });
318
319 mpack = prev.lib.overrideLuarocks prev.mpack (drv: {
320 buildInputs = [ pkgs.libmpack ];
321 # the rockspec doesn't use the makefile so you may need to export more flags
322 USE_SYSTEM_LUA = "yes";
323 USE_SYSTEM_MPACK = "yes";
324 });
325
326 rapidjson = prev.rapidjson.overrideAttrs(oa: {
327 preBuild = ''
328 sed -i '/set(CMAKE_CXX_FLAGS/d' CMakeLists.txt
329 sed -i '/set(CMAKE_C_FLAGS/d' CMakeLists.txt
330 '';
331 });
332
333 readline = (prev.lib.overrideLuarocks prev.readline (drv: {
334 unpackCmd = ''
335 unzip "$curSrc"
336 tar xf *.tar.gz
337 '';
338 propagatedBuildInputs = prev.readline.propagatedBuildInputs ++ [ pkgs.readline.out ];
339 extraVariables = rec {
340 READLINE_INCDIR = "${pkgs.readline.dev}/include";
341 HISTORY_INCDIR = READLINE_INCDIR;
342 };
343 })).overrideAttrs (old: {
344 # Without this, source root is wrongly set to ./readline-2.6/doc
345 setSourceRoot = ''
346 sourceRoot=./readline-3.0
347 '';
348 });
349
350 std-_debug = prev.std-_debug.overrideAttrs(oa: {
351 # run make to generate lib/std/_debug/version.lua
352 preConfigure = ''
353 make all
354 '';
355 });
356
357 std-normalize = prev.std-normalize.overrideAttrs(oa: {
358 # run make to generate lib/std/_debug/version.lua
359 preConfigure = ''
360 make all
361 '';
362 });
363
364 # TODO just while testing, remove afterwards
365 # toVimPlugin should do it instead
366 gitsigns-nvim = prev.gitsigns-nvim.overrideAttrs(oa: {
367 nativeBuildInputs = oa.nativeBuildInputs or [] ++ [ pkgs.vimUtils.vimGenDocHook ];
368 });
369
370 # aliases
371 cjson = prev.lua-cjson;
372}