pytrainer: unpin python 3.10
[NixPkgs.git] / pkgs / by-name / ut / ut1999 / package.nix
blobdb063696996f14ccf022fe0c10ca89449d5c30de
1 { lib, stdenv, requireFile, autoPatchelfHook, undmg, fetchurl, makeDesktopItem, copyDesktopItems, imagemagick
2 , runCommand, libgcc, wxGTK32, innoextract, libGL, SDL2, openal, libmpg123, libxmp }:
4 let
5   version = "469d";
6   srcs = {
7     x86_64-linux = fetchurl {
8       url = "https://github.com/OldUnreal/UnrealTournamentPatches/releases/download/v${version}/OldUnreal-UTPatch${version}-Linux-amd64.tar.bz2";
9       hash = "sha256-aoGzWuakwN/OL4+xUq8WEpd2c1rrNN/DkffI2vDVGjs=";
10     };
11     aarch64-linux = fetchurl {
12       url = "https://github.com/OldUnreal/UnrealTournamentPatches/releases/download/v${version}/OldUnreal-UTPatch${version}-Linux-arm64.tar.bz2";
13       hash = "sha256-2e9lHB12jLTR8UYofLWL7gg0qb2IqFk6eND3T5VqAx0=";
14     };
15     i686-linux = fetchurl {
16       url = "https://github.com/OldUnreal/UnrealTournamentPatches/releases/download/v${version}/OldUnreal-UTPatch${version}-Linux-x86.tar.bz2";
17       hash = "sha256-1JsFKuAAj/LtYvOUPFu0Hn+zvY3riW0YlJbLd4UnaKU=";
18     };
19     x86_64-darwin = fetchurl {
20       url = "https://github.com/OldUnreal/UnrealTournamentPatches/releases/download/v${version}/OldUnreal-UTPatch${version}-macOS-Sonoma.dmg";
21       hash = "sha256-TbhJbOH4E5WOb6XR9dmqLkXziK3/CzhNjd1ypBkkmvw=";
22     };
23   };
24   unpackGog = runCommand "ut1999-gog" {
25     src = requireFile rec {
26       name = "setup_ut_goty_2.0.0.5.exe";
27       hash = "sha256-TMJX1U2XZZxQYvK/GG0KjGlZVh0R5C2Pzy6sB/GSaAM=";
28       message = ''
29         Unreal Tournament 1999 requires the official GOG package, version 2.0.0.5.
31         Once you download the file, run the following command:
33         nix-prefetch-url file://\$PWD/${name}
34       '';
35     };
37     nativeBuildInputs = [ innoextract ];
38   } ''
39     innoextract --extract --exclude-temp "$src"
40     mkdir $out
41     cp -r app/* $out
42   '';
43   systemDir = {
44     x86_64-linux = "System64";
45     aarch64-linux = "SystemARM64";
46     x86_64-darwin = "System";
47     i686-linux = "System";
48   }.${stdenv.hostPlatform.system} or (throw "unsupported system: ${stdenv.hostPlatform.system}");
49 in stdenv.mkDerivation {
50   name = "ut1999";
51   inherit version;
52   sourceRoot = ".";
53   src = srcs.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
55   buildInputs = [
56     libgcc
57     wxGTK32
58     SDL2
59     libGL
60     openal
61     libmpg123
62     libxmp
63     stdenv.cc.cc
64   ];
66   nativeBuildInputs = lib.optionals stdenv.hostPlatform.isLinux [
67     copyDesktopItems
68     autoPatchelfHook
69     imagemagick
70   ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
71     undmg
72   ];
74   installPhase = let
75     outPrefix = if stdenv.hostPlatform.isDarwin then "$out/UnrealTournament.app/Contents/MacOS" else "$out";
76   in ''
77     runHook preInstall
79     mkdir -p $out/bin
80     cp -r ${if stdenv.hostPlatform.isDarwin then "UnrealTournament.app" else "./*"} $out
81     chmod -R 755 $out
82     cd ${outPrefix}
84     rm -rf ./{Music,Sounds,Maps}
85     ln -s ${unpackGog}/{Music,Sounds,Maps} .
87     cp -n ${unpackGog}/Textures/* ./Textures || true
88     cp -n ${unpackGog}/System/*.{u,int} ./System || true
89   '' + lib.optionalString (stdenv.hostPlatform.isLinux) ''
90     ln -s "$out/${systemDir}/ut-bin" "$out/bin/ut1999"
91     ln -s "$out/${systemDir}/ucc-bin" "$out/bin/ut1999-ucc"
93     convert "${unpackGog}/gfw_high.ico" "ut1999.png"
94     install -D ut1999-5.png "$out/share/icons/hicolor/256x256/apps/ut1999.png"
96     # Remove bundled libraries to use native versions instead
97     rm $out/${systemDir}/libmpg123.so* \
98       $out/${systemDir}/libopenal.so* \
99       $out/${systemDir}/libSDL2* \
100       $out/${systemDir}/libxmp.so*
101   '' + ''
102     runHook postInstall
103   '';
105   # Bring in game's .so files into lookup. Otherwise game fails to start
106   # as: `Object not found: Class Render.Render`
107   appendRunpaths = [
108     "${placeholder "out"}/${systemDir}"
109   ];
111   desktopItems = [
112     (makeDesktopItem {
113       name = "ut1999";
114       desktopName = "Unreal Tournament GOTY (1999)";
115       exec = "ut1999";
116       icon = "ut1999";
117       comment = "Unreal Tournament GOTY (1999) with the OldUnreal patch.";
118       categories = [ "Game" ];
119     })
120   ];
122   meta = with lib; {
123     description = "Unreal Tournament GOTY (1999) with the OldUnreal patch";
124     license = licenses.unfree;
125     platforms = attrNames srcs;
126     maintainers = with maintainers; [ eliandoran ];
127     sourceProvenance = with sourceTypes; [ binaryNativeCode ];
128     mainProgram = "ut1999";
129   };