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