1{ stdenv, fetchurl, flac, gtk, libvorbis, libvpx, makeDesktopItem, mesa, nasm
2, pkgconfig, SDL2, SDL2_mixer }:
3
4let
5 date = "20150420";
6 rev = "5160";
7 version = "${date}-${rev}";
8in stdenv.mkDerivation rec {
9 name = "eduke32-${version}";
10
11 src = fetchurl {
12 url = "http://dukeworld.duke4.net/eduke32/synthesis/${version}/eduke32_src_${version}.tar.xz";
13 sha256 = "1nlq5jbglg00c1z1vsyl627fh0mqfxvk5qyxav5vzla2b4svik2v";
14 };
15
16 buildInputs = [ flac gtk libvorbis libvpx mesa SDL2 SDL2_mixer ]
17 ++ stdenv.lib.optional (stdenv.system == "i686-linux") nasm;
18 nativeBuildInputs = [ pkgconfig ];
19
20 postPatch = ''
21 substituteInPlace build/src/glbuild.c \
22 --replace libGL.so ${mesa}/lib/libGL.so \
23 --replace libGLU.so ${mesa}/lib/libGLU.so
24 '';
25
26 NIX_CFLAGS_COMPILE = "-I${SDL2}/include/SDL";
27 NIX_LDFLAGS = "-L${SDL2}/lib";
28
29 makeFlags = "LINKED_GTK=1 SDLCONFIG=${SDL2}/bin/sdl2-config VC_REV=${rev}";
30
31 desktopItem = makeDesktopItem {
32 name = "eduke32";
33 exec = "eduke32-wrapper";
34 comment = "Duke Nukem 3D port";
35 desktopName = "Enhanced Duke Nukem 3D";
36 genericName = "Duke Nukem 3D port";
37 categories = "Application;Game;";
38 };
39
40 installPhase = ''
41 # Make wrapper script
42 cat > eduke32-wrapper <<EOF
43 #!/bin/sh
44
45 if [ "$EDUKE32_DATA_DIR" = "" ]; then
46 EDUKE32_DATA_DIR=/var/lib/games/eduke32
47 fi
48 if [ "$EDUKE32_GRP_FILE" = "" ]; then
49 EDUKE32_GRP_FILE=\$EDUKE32_DATA_DIR/DUKE3D.GRP
50 fi
51
52 cd \$EDUKE32_DATA_DIR
53 exec $out/bin/eduke32 -g \$EDUKE32_GRP_FILE
54 EOF
55
56 # Install binaries
57 mkdir -p $out/bin
58 install -Dm755 eduke32{,-wrapper} mapster32 $out/bin
59
60 # Install desktop item
61 cp -rv ${desktopItem}/share $out
62 '';
63
64 meta = with stdenv.lib; {
65 inherit version;
66 description = "Enhanched port of Duke Nukem 3D for various platforms";
67 license = licenses.gpl2Plus;
68 homepage = http://eduke32.com;
69 maintainers = with maintainers; [ nckx sander ];
70 };
71}