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}