k3s: format with nixfmt-rfc-style
[NixPkgs.git] / pkgs / games / eduke32 / default.nix
blob1ddcccd27f9d2e58435d9c39bad9692c6bac46ef
1 { lib
2 , stdenv
3 , fetchFromGitLab
4 , makeWrapper
5 , pkg-config
6 , nasm
7 , makeDesktopItem
8 , copyDesktopItems
9 , alsa-lib
10 , flac
11 , gtk2
12 , libvorbis
13 , libvpx
14 , libGL
15 , SDL2
16 , SDL2_mixer
17 , AGL
18 , Cocoa
19 , GLUT
20 , OpenGL
21 , graphicsmagick
24 let
25   wrapper = "eduke32-wrapper";
26   swWrapper = "voidsw-wrapper";
28 in stdenv.mkDerivation (finalAttrs: {
29   pname = "eduke32";
30   version = "0-unstable-2024-02-17";
32   src = fetchFromGitLab {
33     domain = "voidpoint.io";
34     owner = "terminx";
35     repo = "eduke32";
36     rev = "8afa42e388e0434b38979fdddc763363717a2727";
37     hash = "sha256-dyZ4JtDBxsTDe9uQDWxJe7M74X7m+5wpEHm+i+s9hwo=";
38   };
40   buildInputs = [
41     flac
42     libvorbis
43     libvpx
44     SDL2
45     SDL2_mixer
46   ] ++ lib.optionals stdenv.isLinux [
47     alsa-lib
48     gtk2
49     libGL
50   ] ++ lib.optionals stdenv.isDarwin [
51     AGL
52     Cocoa
53     GLUT
54     OpenGL
55   ];
57   nativeBuildInputs = [
58     makeWrapper
59     pkg-config
60     copyDesktopItems
61     graphicsmagick
62   ] ++ lib.optionals (stdenv.hostPlatform.system == "i686-linux") [
63     nasm
64   ];
66   postPatch = ''
67     substituteInPlace source/imgui/src/imgui_impl_sdl2.cpp \
68       --replace-fail '#include <SDL.h>' '#include <SDL2/SDL.h>' \
69       --replace-fail '#include <SDL_syswm.h>' '#include <SDL2/SDL_syswm.h>' \
70       --replace-fail '#include <SDL_vulkan.h>' '#include <SDL2/SDL_vulkan.h>'
71   '' + lib.optionalString stdenv.isLinux ''
72     for f in glad.c glad_wgl.c ; do
73       substituteInPlace source/glad/src/$f \
74         --replace-fail libGL.so ${libGL}/lib/libGL.so
75     done
76   '';
78   makeFlags = [
79     "SDLCONFIG=${SDL2}/bin/sdl2-config"
80   ] ++ lib.optionals stdenv.isDarwin [
81     # broken, see: https://github.com/NixOS/nixpkgs/issues/19098
82     "LTO=0"
83   ];
85   buildFlags = [
86     "duke3d"
87     "sw"
88   ];
90   desktopItems = [
91     (makeDesktopItem {
92       name = "eduke32";
93       icon = "eduke32";
94       exec = "${wrapper}";
95       comment = "Duke Nukem 3D port";
96       desktopName = "Enhanced Duke Nukem 3D";
97       genericName = "Duke Nukem 3D port";
98       categories = [ "Game" ];
99     })
100     (makeDesktopItem {
101       name = "voidsw";
102       icon = "voidsw";
103       exec = "${swWrapper}";
104       comment = "Shadow Warrior eduke32 source port";
105       desktopName = "VoidSW";
106       genericName = "Shadow Warrior source port";
107       categories = [ "Game" ];
108     })
109   ];
111   enableParallelBuilding = true;
113   installPhase = ''
114     runHook preInstall
116     install -Dm755 -t $out/bin eduke32 mapster32 voidsw wangulator
117   '' + lib.optionalString stdenv.isLinux ''
118     makeWrapper $out/bin/eduke32 $out/bin/${wrapper} \
119       --set-default EDUKE32_DATA_DIR /var/lib/games/eduke32 \
120       --add-flags '-g "$EDUKE32_DATA_DIR/DUKE3D.GRP"'
121     makeWrapper $out/bin/voidsw $out/bin/${swWrapper} \
122       --set-default EDUKE32_DATA_DIR /var/lib/games/eduke32 \
123       --add-flags '-g"$EDUKE32_DATA_DIR/SW.GRP"'
124     mkdir -p $out/share/icons/hicolor/scalable/apps
125     gm convert "./source/duke3d/rsrc/game_icon.ico[10]" $out/share/icons/hicolor/scalable/apps/eduke32.png
126     install -Dm644 ./source/sw/rsrc/game_icon.svg $out/share/icons/hicolor/scalable/apps/voidsw.svg
127   '' + lib.optionalString stdenv.isDarwin ''
128     mkdir -p $out/Applications/EDuke32.app/Contents/MacOS
129     mkdir -p $out/Applications/Mapster32.app/Contents/MacOS
130     mkdir -p $out/Applications/VoidSW.app/Contents/MacOS
131     mkdir -p $out/Applications/Wangulator.app/Contents/MacOS
133     cp -r platform/Apple/bundles/EDuke32.app/* $out/Applications/EDuke32.app/
134     cp -r platform/Apple/bundles/Mapster32.app/* $out/Applications/Mapster32.app/
135     cp -r platform/Apple/bundles/VoidSW.app/* $out/Applications/VoidSW.app/
136     cp -r platform/Apple/bundles/Wangulator.app/* $out/Applications/Wangulator.app/
138     ln -sf $out/bin/eduke32 $out/Applications/EDuke32.app/Contents/MacOS/eduke32
139     ln -sf $out/bin/mapster32 $out/Applications/Mapster32.app/Contents/MacOS/mapster32
140     ln -sf $out/bin/voidsw $out/Applications/VoidSW.app/Contents/MacOS/voidsw
141     ln -sf $out/bin/wangulator $out/Applications/Wangulator.app/Contents/MacOS/wangulator
142   '' + ''
143     runHook postInstall
144   '';
146   meta = {
147     description = "Enhanched port of Duke Nukem 3D for various platforms";
148     homepage = "http://eduke32.com";
149     license = with lib.licenses; [ gpl2Plus ];
150     maintainers = with lib.maintainers; [ mikroskeem sander ];
151     platforms = lib.platforms.all;
152   };