1{
2 stdenv,
3 lib,
4 fetchFromGitHub,
5 which,
6 sqlite,
7 lua5_1,
8 perl,
9 python3,
10 zlib,
11 pkg-config,
12 ncurses,
13 dejavu_fonts,
14 libpng,
15 SDL2,
16 SDL2_image,
17 SDL2_mixer,
18 libGLU,
19 libGL,
20 freetype,
21 pngcrush,
22 advancecomp,
23 tileMode ? false,
24 enableSound ? tileMode,
25 buildPackages,
26}:
27
28stdenv.mkDerivation rec {
29 pname = "crawl${lib.optionalString tileMode "-tiles"}";
30 version = "0.33.1";
31
32 src = fetchFromGitHub {
33 owner = "crawl";
34 repo = "crawl";
35 rev = version;
36 hash = "sha256-GXrYLGoQ1UwDHs+kLLcaBNpJ2BVMv4NhmpyfNFxPmg8=";
37 };
38
39 # Patch hard-coded paths and remove force library builds
40 postPatch = ''
41 substituteInPlace crawl-ref/source/util/find_font \
42 --replace '/usr/share/fonts /usr/local/share/fonts /usr/*/lib/X11/fonts' '${fontsPath}/share/fonts'
43 substituteInPlace crawl-ref/source/windowmanager-sdl.cc \
44 --replace 'SDL_image.h' 'SDL2/SDL_image.h'
45 '';
46
47 nativeBuildInputs = [
48 pkg-config
49 which
50 perl
51 pngcrush
52 advancecomp
53 ];
54
55 # Still unstable with luajit
56 buildInputs = [
57 lua5_1
58 zlib
59 sqlite
60 ncurses
61 ]
62 ++ (with python3.pkgs; [ pyyaml ])
63 ++ lib.optionals tileMode [
64 libpng
65 SDL2
66 SDL2_image
67 freetype
68 libGLU
69 libGL
70 ]
71 ++ lib.optional enableSound SDL2_mixer;
72
73 preBuild = ''
74 cd crawl-ref/source
75 echo "${version}" > util/release_ver
76 patchShebangs 'util'
77 patchShebangs util/gen-mi-enum
78 rm -rf contrib
79 mkdir -p $out/xdg-data
80 ''
81 + lib.optionalString tileMode "mv xdg-data/*_tiles.* $out/xdg-data"
82 + lib.optionalString (!tileMode) "mv xdg-data/*_console.* $out/xdg-data";
83
84 fontsPath = lib.optionalString tileMode dejavu_fonts;
85
86 makeFlags = [
87 "prefix=${placeholder "out"}"
88 "FORCE_CC=${stdenv.cc.targetPrefix}cc"
89 "FORCE_CXX=${stdenv.cc.targetPrefix}c++"
90 "HOSTCXX=${buildPackages.stdenv.cc.targetPrefix}c++"
91 "FORCE_PKGCONFIG=y"
92 "SAVEDIR=~/.crawl"
93 "sqlite=${sqlite.dev}"
94 "DATADIR=${placeholder "out"}"
95 ]
96 ++ lib.optional tileMode "TILES=y"
97 ++ lib.optional enableSound "SOUND=y";
98
99 postInstall =
100 lib.optionalString tileMode ''
101 mv $out/bin/crawl $out/bin/crawl-tiles
102 echo "Exec=crawl-tiles" >> $out/xdg-data/org.develz.Crawl_tiles.desktop
103 echo "Icon=crawl" >> $out/xdg-data/org.develz.Crawl_tiles.desktop
104 install -Dm444 $out/xdg-data/org.develz.Crawl_tiles.desktop -t $out/share/applications
105 install -Dm444 $out/xdg-data/org.develz.Crawl_tiles.appdata.xml -t $out/share/metainfo
106 ''
107 + lib.optionalString (!tileMode) ''
108 echo "Exec=crawl" >> $out/xdg-data/org.develz.Crawl_console.desktop
109 echo "Icon=crawl" >> $out/xdg-data/org.develz.Crawl_console.desktop
110 install -Dm444 $out/xdg-data/org.develz.Crawl_console.desktop -t $out/share/applications
111 install -Dm444 $out/xdg-data/org.develz.Crawl_console.appdata.xml -t $out/share/metainfo
112 ''
113 + "install -Dm444 dat/tiles/stone_soup_icon-512x512.png $out/share/icons/hicolor/512x512/apps/crawl.png";
114
115 enableParallelBuilding = true;
116
117 meta = with lib; {
118 description = "Open-source, single-player, role-playing roguelike game";
119 homepage = "http://crawl.develz.org/";
120 longDescription = ''
121 Dungeon Crawl: Stone Soup, an open-source, single-player, role-playing
122 roguelike game of exploration and treasure-hunting in dungeons filled
123 with dangerous and unfriendly monsters in a quest to rescue the
124 mystifyingly fabulous Orb of Zot.
125 '';
126 platforms = platforms.linux ++ platforms.darwin;
127 license = with licenses; [
128 gpl2Plus
129 bsd2
130 bsd3
131 mit
132 licenses.zlib
133 cc0
134 ];
135 maintainers = [ maintainers.abbradar ];
136 };
137}