about summary refs log tree commit diff
path: root/nixpkgs/pkgs/games/urbanterror/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/games/urbanterror/default.nix')
-rw-r--r--nixpkgs/pkgs/games/urbanterror/default.nix143
1 files changed, 95 insertions, 48 deletions
diff --git a/nixpkgs/pkgs/games/urbanterror/default.nix b/nixpkgs/pkgs/games/urbanterror/default.nix
index fbb633bb657b..6c54984eccbf 100644
--- a/nixpkgs/pkgs/games/urbanterror/default.nix
+++ b/nixpkgs/pkgs/games/urbanterror/default.nix
@@ -1,64 +1,113 @@
-{ lib, stdenv, fetchurl, unzip, SDL, libGLU, libGL, openal, curl, libXxf86vm }:
+{ lib
+, fetchzip
+, stdenv
+, copyDesktopItems
+, imagemagick
+, libicns
+, makeBinaryWrapper
+, curl
+, libGL
+, libGLU
+, openal
+, libXxf86vm
+, SDL
+, makeDesktopItem
+}:
 
-stdenv.mkDerivation rec {
-  pname = "urbanterror";
+let
   version = "4.3.4";
 
-  srcs =
-    [ (fetchurl {
-         url = "http://cdn.urbanterror.info/urt/43/releases/zips/UrbanTerror434_full.zip";
-         sha256 = "1rx4nnndsk88nvd7k4p35cw6znclkkzm2bl5j6vn6mjjdk66jrki";
-       })
-      (fetchurl {
-         url = "https://github.com/FrozenSand/ioq3-for-UrbanTerror-4/archive/release-${version}.zip";
-         sha256 = "1s9pmw7rbnzwzl1llcs0kr2krf4daf8hhnz1j89qk4bq9a9qfp71";
-       })
-    ];
-
-  nativeBuildInputs = [ unzip ];
-  buildInputs = [ SDL libGL libGLU openal curl libXxf86vm ];
-  sourceRoot = "ioq3-for-UrbanTerror-4-release-${version}";
+  urbanterror-maps = fetchzip {
+    name = "urbanterror-maps";
+    url = "http://cdn.urbanterror.info/urt/43/releases/zips/UrbanTerror${builtins.replaceStrings ["."] [""] version}_full.zip";
+    hash = "sha256-C6Gb5PPECAOjQhmkrzkV6dpY/zHVtUj9oq3507o2PUI=";
+  };
+
+  urbanterror-source = fetchzip {
+    name = "urbanterror-source";
+    url = "https://github.com/FrozenSand/ioq3-for-UrbanTerror-4/archive/release-${version}.zip";
+    hash = "sha256-zF6Tkaj5WYkFU66VwpBFr1P18OJGrGgxnc/jvcvt8hA=";
+  };
+in
+stdenv.mkDerivation {
+  pname = "urbanterror";
+  inherit version;
+
+  srcs = [
+    urbanterror-maps
+    urbanterror-source
+  ];
+
+  sourceRoot = "urbanterror-source";
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    imagemagick
+    libicns
+    makeBinaryWrapper
+  ];
+
+  buildInputs = [
+    curl
+    libGL
+    libGLU
+    openal
+    libXxf86vm
+    SDL
+  ];
 
   configurePhase = ''
+    runHook preConfigure
+
     echo "USE_OPENAL = 1" > Makefile.local
     echo "USE_OPENAL_DLOPEN = 0" >> Makefile.local
     echo "USE_CURL = 1" >> Makefile.local
     echo "USE_CURL_DLOPEN = 0" >> Makefile.local
+
+    runHook postConfigure
   '';
 
-  installPhase = ''
-    destDir="$out/opt/urbanterror"
-    mkdir -p "$destDir"
-    mkdir -p "$out/bin"
-    cp -v build/release-linux-*/Quake3-UrT.* \
-          "$destDir/Quake3-UrT"
-    cp -v build/release-linux-*/Quake3-UrT-Ded.* \
-          "$destDir/Quake3-UrT-Ded"
-    cp -rv ../UrbanTerror43/q3ut4 "$destDir"
-    cat << EOF > "$out/bin/urbanterror"
-    #! ${stdenv.shell}
-    cd "$destDir"
-    exec ./Quake3-UrT "\$@"
-    EOF
-    chmod +x "$out/bin/urbanterror"
-    cat << EOF > "$out/bin/urbanterror-ded"
-    #! ${stdenv.shell}
-    cd "$destDir"
-    exec ./Quake3-UrT-Ded "\$@"
-    EOF
-    chmod +x "$out/bin/urbanterror-ded"
+  installTargets = [ "copyfiles" ];
+  installFlags = [ "COPYDIR=$(out)/share/urbanterror" ];
+
+  preInstall = ''
+    mkdir -p $out/share/urbanterror
   '';
 
-  postFixup = ''
-    p=$out/opt/urbanterror/Quake3-UrT
-    cur_rpath=$(patchelf --print-rpath $p)
-    patchelf --set-rpath $cur_rpath:${libGL}/lib:${libGLU}/lib $p
+  postInstall = ''
+    icns2png --extract ${urbanterror-maps}/Quake3-UrT.app/Contents/Resources/quake3-urt.icns
+
+    for size in 16 24 32 48 64 128 256 512 1024; do
+      mkdir -pv $out/share/icons/hicolor/"$size"x"$size"/apps
+      if [ ! -e quake3-urt_"$size"x"$size"x32.png ] ; then
+        convert -resize "$size"x"$size" quake3-urt_512x512x32.png quake3-urt_"$size"x"$size"x32.png
+      fi
+      install -Dm644 quake3-urt_"$size"x"$size"x32.png $out/share/icons/hicolor/"$size"x"$size"/apps/urbanterror.png
+    done;
+
+    makeWrapper $out/share/urbanterror/Quake3-UrT.* $out/bin/urbanterror
+    makeWrapper $out/share/urbanterror/Quake3-UrT-Ded.* $out/bin/urbanterror-ded
+
+    ln -s ${urbanterror-maps}/q3ut4 $out/share/urbanterror/
   '';
 
   hardeningDisable = [ "format" ];
 
-  meta = with lib; {
+  desktopItems = [
+    (makeDesktopItem {
+      name = "urbanterror";
+      exec = "urbanterror";
+      icon = "urbanterror";
+      comment = "A multiplayer tactical FPS on top of Quake 3 engine";
+      desktopName = "Urban Terror";
+      categories = [ "Game" "ActionGame" ];
+    })
+  ];
+
+  meta = {
     description = "A multiplayer tactical FPS on top of Quake 3 engine";
+    homepage = "https://www.urbanterror.info";
+    license = lib.licenses.unfreeRedistributable;
     longDescription = ''
       Urban Terror is a free multiplayer first person shooter developed by
       FrozenSand, that (thanks to the ioquake3-code) does not require
@@ -66,10 +115,8 @@ stdenv.mkDerivation rec {
       tactical shooter; somewhat realism based, but the motto is "fun over
       realism". This results in a very unique, enjoyable and addictive game.
     '';
-    homepage = "http://www.urbanterror.info";
-    license = licenses.unfreeRedistributable;
-    maintainers = with maintainers; [ astsmtl ];
-    platforms = platforms.linux;
-    hydraPlatforms = [];
+    mainProgram = "urbanterror";
+    maintainers = with lib.maintainers; [ astsmtl drupol ];
+    platforms = lib.platforms.linux;
   };
 }