Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1{ lib 2, stdenv 3, fetchFromGitHub 4, cmake 5, irrlichtmt 6, coreutils 7, libpng 8, bzip2 9, curl 10, libogg 11, jsoncpp 12, libjpeg 13, libGLU 14, openal 15, libvorbis 16, sqlite 17, luajit 18, freetype 19, gettext 20, doxygen 21, ncurses 22, graphviz 23, xorg 24, gmp 25, libspatialindex 26, leveldb 27, postgresql 28, hiredis 29, libiconv 30, zlib 31, libXrandr 32, libX11 33, ninja 34, prometheus-cpp 35, OpenGL 36, OpenAL ? openal 37, Carbon 38, Cocoa 39, withTouchSupport ? false 40}: 41 42with lib; 43 44let 45 boolToCMake = b: if b then "ON" else "OFF"; 46 47 irrlichtmtInput = irrlichtmt.override { inherit withTouchSupport; }; 48 49 generic = { version, rev ? version, sha256, dataRev ? version, dataSha256, buildClient ? true, buildServer ? false }: let 50 sources = { 51 src = fetchFromGitHub { 52 owner = "minetest"; 53 repo = "minetest"; 54 inherit rev sha256; 55 }; 56 data = fetchFromGitHub { 57 owner = "minetest"; 58 repo = "minetest_game"; 59 rev = dataRev; 60 sha256 = dataSha256; 61 }; 62 }; 63 in stdenv.mkDerivation { 64 pname = "minetest"; 65 inherit version; 66 67 src = sources.src; 68 69 cmakeFlags = [ 70 "-G Ninja" 71 "-DBUILD_CLIENT=${boolToCMake buildClient}" 72 "-DBUILD_SERVER=${boolToCMake buildServer}" 73 "-DENABLE_GETTEXT=1" 74 "-DENABLE_SPATIAL=1" 75 "-DENABLE_SYSTEM_JSONCPP=1" 76 77 # Remove when https://github.com/NixOS/nixpkgs/issues/144170 is fixed 78 "-DCMAKE_INSTALL_BINDIR=bin" 79 "-DCMAKE_INSTALL_DATADIR=share" 80 "-DCMAKE_INSTALL_DOCDIR=share/doc" 81 "-DCMAKE_INSTALL_DOCDIR=share/doc" 82 "-DCMAKE_INSTALL_MANDIR=share/man" 83 "-DCMAKE_INSTALL_LOCALEDIR=share/locale" 84 85 ] ++ optionals buildServer [ 86 "-DENABLE_PROMETHEUS=1" 87 ] ++ optionals withTouchSupport [ 88 "-DENABLE_TOUCH=TRUE" 89 ]; 90 91 env.NIX_CFLAGS_COMPILE = "-DluaL_reg=luaL_Reg"; # needed since luajit-2.1.0-beta3 92 93 nativeBuildInputs = [ cmake doxygen graphviz ninja ]; 94 95 buildInputs = [ 96 irrlichtmtInput luajit jsoncpp gettext freetype sqlite curl bzip2 ncurses 97 gmp libspatialindex 98 ] ++ optionals stdenv.isDarwin [ 99 libiconv OpenGL OpenAL Carbon Cocoa 100 ] ++ optionals buildClient [ 101 libpng libjpeg libGLU openal libogg libvorbis xorg.libX11 102 ] ++ optionals buildServer [ 103 leveldb postgresql hiredis prometheus-cpp 104 ]; 105 106 postPatch = '' 107 substituteInPlace src/filesys.cpp --replace "/bin/rm" "${coreutils}/bin/rm" 108 '' + lib.optionalString stdenv.isDarwin '' 109 sed -i '/pagezero_size/d;/fixup_bundle/d' src/CMakeLists.txt 110 ''; 111 112 postInstall = lib.optionalString stdenv.isLinux '' 113 mkdir -pv $out/share/minetest/games/minetest_game/ 114 cp -rv ${sources.data}/* $out/share/minetest/games/minetest_game/ 115 patchShebangs $out 116 '' + lib.optionalString stdenv.isDarwin '' 117 mkdir -p $out/Applications 118 mv $out/minetest.app $out/Applications 119 ''; 120 121 meta = with lib; { 122 homepage = "http://minetest.net/"; 123 description = "Infinite-world block sandbox game"; 124 license = licenses.lgpl21Plus; 125 platforms = platforms.linux ++ platforms.darwin; 126 maintainers = with maintainers; [ pyrolagus fpletz fgaz ]; 127 }; 128 }; 129 130 v5 = { 131 version = "5.7.0"; 132 sha256 = "sha256-9AL6gTmy05yTeYfCq3EMK4gqpBWdHwvJ5Flpzj8hFAE="; 133 dataSha256 = "sha256-wWgeO8513N5jQdWvZrq357fPpAU5ik06mgZraWCQawo="; 134 }; 135 136 mkClient = version: generic (version // { buildClient = true; buildServer = false; }); 137 mkServer = version: generic (version // { buildClient = false; buildServer = true; }); 138in { 139 minetestclient_5 = mkClient v5; 140 minetestserver_5 = mkServer v5; 141}