ttaenc: init at 3.4.1 (#238757)
[NixPkgs.git] / pkgs / games / quakespasm / default.nix
blobc947356d226d3b49fc9e939a238bf4f9dcadb6cf
2   lib,
3   stdenv,
4   SDL,
5   SDL2,
6   fetchurl,
7   gzip,
8   libvorbis,
9   libmad,
10   flac,
11   libopus,
12   opusfile,
13   libogg,
14   libxmp,
15   Cocoa,
16   CoreAudio,
17   CoreFoundation,
18   IOKit,
19   OpenGL,
20   copyDesktopItems,
21   makeDesktopItem,
22   pkg-config,
23   useSDL2 ? stdenv.hostPlatform.isDarwin, # TODO: CoreAudio fails to initialize with SDL 1.x for some reason.
26 stdenv.mkDerivation rec {
27   pname = "quakespasm";
28   version = "0.96.3";
30   src = fetchurl {
31     url = "mirror://sourceforge/quakespasm/quakespasm-${version}.tar.gz";
32     sha256 = "sha256-tXjWzkpPf04mokRY8YxLzI04VK5iUuuZgu6B2V5QGA4=";
33   };
35   sourceRoot = "${pname}-${version}/Quake";
37   patches = lib.optionals stdenv.hostPlatform.isDarwin [
38     # Makes Darwin Makefile use system libraries instead of ones from app bundle
39     ./quakespasm-darwin-makefile-improvements.patch
40   ];
42   # Quakespasm tries to set a 10.6 deployment target, but that’s too low for SDL2.
43   postPatch = ''
44     sed -i Makefile.darwin -e '/-mmacosx-version-min/d'
45   '';
47   nativeBuildInputs = [
48     copyDesktopItems
49     pkg-config
50   ];
52   buildInputs =
53     [
54       gzip
55       libvorbis
56       libmad
57       flac
58       libopus
59       opusfile
60       libogg
61       libxmp
62       (if useSDL2 then SDL2 else SDL)
63     ]
64     ++ lib.optionals stdenv.hostPlatform.isDarwin [
65       Cocoa
66       CoreAudio
67       IOKit
68       OpenGL
69     ]
70     ++ lib.optionals (stdenv.hostPlatform.isDarwin && useSDL2) [
71       CoreFoundation
72     ];
74   buildFlags =
75     [
76       "DO_USERDIRS=1"
77       # Makefile defaults, set here to enforce consistency on Darwin build
78       "USE_CODEC_WAVE=1"
79       "USE_CODEC_MP3=1"
80       "USE_CODEC_VORBIS=1"
81       "USE_CODEC_FLAC=1"
82       "USE_CODEC_OPUS=1"
83       "USE_CODEC_MIKMOD=0"
84       "USE_CODEC_UMX=0"
85       "USE_CODEC_XMP=1"
86       "MP3LIB=mad"
87       "VORBISLIB=vorbis"
88     ]
89     ++ lib.optionals useSDL2 [
90       "SDL_CONFIG=sdl2-config"
91       "USE_SDL2=1"
92     ];
94   makefile = if (stdenv.hostPlatform.isDarwin) then "Makefile.darwin" else "Makefile";
96   preInstall = ''
97     mkdir -p "$out/bin"
98     substituteInPlace Makefile --replace "/usr/local/games" "$out/bin"
99     substituteInPlace Makefile.darwin --replace "/usr/local/games" "$out/bin"
100   '';
102   postInstall = lib.optionalString stdenv.hostPlatform.isDarwin ''
103     # Let's build app bundle
104     mkdir -p $out/Applications/Quake.app/Contents/MacOS
105     mkdir -p $out/Applications/Quake.app/Contents/Resources
106     cp ../MacOSX/Info.plist $out/Applications/Quake.app/Contents/
107     cp ../MacOSX/QuakeSpasm.icns $out/Applications/Quake.app/Contents/Resources/
108     cp -r ../MacOSX/English.lproj $out/Applications/Quake.app/Contents/Resources/
109     ln -sf $out/bin/quake $out/Applications/Quake.app/Contents/MacOS/quake
111     substituteInPlace $out/Applications/Quake.app/Contents/Info.plist \
112       --replace '>''${EXECUTABLE_NAME}' '>quake'
113     substituteInPlace $out/Applications/Quake.app/Contents/Info.plist \
114       --replace '>''${PRODUCT_NAME}' '>QuakeSpasm'
115   '';
117   enableParallelBuilding = true;
119   desktopItems = [
120     (makeDesktopItem {
121       name = "quakespasm";
122       exec = "quake";
123       desktopName = "Quakespasm";
124       categories = [ "Game" ];
125     })
126   ];
128   meta = with lib; {
129     description = "Engine for iD software's Quake";
130     homepage = "https://quakespasm.sourceforge.net/";
131     longDescription = ''
132       QuakeSpasm is a modern, cross-platform Quake 1 engine based on FitzQuake.
133       It includes support for 64 bit CPUs and custom music playback, a new sound driver,
134       some graphical niceities, and numerous bug-fixes and other improvements.
135       Quakespasm utilizes either the SDL or SDL2 frameworks, so choose which one
136       works best for you. SDL is probably less buggy, but SDL2 has nicer features
137       and smoother mouse input - though no CD support.
138     '';
140     platforms = platforms.unix;
141     maintainers = with maintainers; [ mikroskeem ];
142     mainProgram = "quake";
143   };