Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at 21.11 372 lines 12 kB view raw
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}