depot/third_party/nixpkgs/pkgs/by-name/ut/ut1999/package.nix

162 lines
4.5 KiB
Nix

{
lib,
stdenv,
requireFile,
autoPatchelfHook,
undmg,
fetchurl,
makeDesktopItem,
copyDesktopItems,
imagemagick,
runCommand,
libgcc,
wxGTK32,
innoextract,
libGL,
SDL2,
openal,
libmpg123,
libxmp,
}:
let
version = "469d";
srcs = {
x86_64-linux = fetchurl {
url = "https://github.com/OldUnreal/UnrealTournamentPatches/releases/download/v${version}/OldUnreal-UTPatch${version}-Linux-amd64.tar.bz2";
hash = "sha256-aoGzWuakwN/OL4+xUq8WEpd2c1rrNN/DkffI2vDVGjs=";
};
aarch64-linux = fetchurl {
url = "https://github.com/OldUnreal/UnrealTournamentPatches/releases/download/v${version}/OldUnreal-UTPatch${version}-Linux-arm64.tar.bz2";
hash = "sha256-2e9lHB12jLTR8UYofLWL7gg0qb2IqFk6eND3T5VqAx0=";
};
i686-linux = fetchurl {
url = "https://github.com/OldUnreal/UnrealTournamentPatches/releases/download/v${version}/OldUnreal-UTPatch${version}-Linux-x86.tar.bz2";
hash = "sha256-1JsFKuAAj/LtYvOUPFu0Hn+zvY3riW0YlJbLd4UnaKU=";
};
x86_64-darwin = fetchurl {
url = "https://github.com/OldUnreal/UnrealTournamentPatches/releases/download/v${version}/OldUnreal-UTPatch${version}-macOS-Sonoma.dmg";
hash = "sha256-TbhJbOH4E5WOb6XR9dmqLkXziK3/CzhNjd1ypBkkmvw=";
};
};
unpackGog =
runCommand "ut1999-gog"
{
src = requireFile rec {
name = "setup_ut_goty_2.0.0.5.exe";
hash = "sha256-TMJX1U2XZZxQYvK/GG0KjGlZVh0R5C2Pzy6sB/GSaAM=";
message = ''
Unreal Tournament 1999 requires the official GOG package, version 2.0.0.5.
Once you download the file, run the following command:
nix-prefetch-url file://\$PWD/${name}
'';
};
nativeBuildInputs = [ innoextract ];
}
''
innoextract --extract --exclude-temp "$src"
mkdir $out
cp -r app/* $out
'';
systemDir =
{
x86_64-linux = "System64";
aarch64-linux = "SystemARM64";
x86_64-darwin = "System";
i686-linux = "System";
}
.${stdenv.hostPlatform.system} or (throw "unsupported system: ${stdenv.hostPlatform.system}");
in
stdenv.mkDerivation {
name = "ut1999";
inherit version;
sourceRoot = ".";
src =
srcs.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
buildInputs = [
libgcc
wxGTK32
SDL2
libGL
openal
libmpg123
libxmp
stdenv.cc.cc
];
nativeBuildInputs =
lib.optionals stdenv.hostPlatform.isLinux [
copyDesktopItems
autoPatchelfHook
imagemagick
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
undmg
];
installPhase =
let
outPrefix =
if stdenv.hostPlatform.isDarwin then "$out/UnrealTournament.app/Contents/MacOS" else "$out";
in
''
runHook preInstall
mkdir -p $out/bin
cp -r ${if stdenv.hostPlatform.isDarwin then "UnrealTournament.app" else "./*"} $out
chmod -R 755 $out
cd ${outPrefix}
rm -rf ./{Music,Sounds,Maps}
ln -s ${unpackGog}/{Music,Sounds,Maps} .
cp -n ${unpackGog}/Textures/* ./Textures || true
cp -n ${unpackGog}/System/*.{u,int} ./System || true
''
+ lib.optionalString (stdenv.hostPlatform.isLinux) ''
ln -s "$out/${systemDir}/ut-bin" "$out/bin/ut1999"
ln -s "$out/${systemDir}/ucc-bin" "$out/bin/ut1999-ucc"
convert "${unpackGog}/gfw_high.ico" "ut1999.png"
install -D ut1999-5.png "$out/share/icons/hicolor/256x256/apps/ut1999.png"
# Remove bundled libraries to use native versions instead
rm $out/${systemDir}/libmpg123.so* \
$out/${systemDir}/libopenal.so* \
$out/${systemDir}/libSDL2* \
$out/${systemDir}/libxmp.so*
''
+ ''
runHook postInstall
'';
# Bring in game's .so files into lookup. Otherwise game fails to start
# as: `Object not found: Class Render.Render`
appendRunpaths = [
"${placeholder "out"}/${systemDir}"
];
desktopItems = [
(makeDesktopItem {
name = "ut1999";
desktopName = "Unreal Tournament GOTY (1999)";
exec = "ut1999";
icon = "ut1999";
comment = "Unreal Tournament GOTY (1999) with the OldUnreal patch.";
categories = [ "Game" ];
})
];
meta = with lib; {
description = "Unreal Tournament GOTY (1999) with the OldUnreal patch";
license = licenses.unfree;
platforms = attrNames srcs;
maintainers = with maintainers; [ eliandoran ];
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
mainProgram = "ut1999";
};
}