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