summary refs log tree commit diff
path: root/pkgs/games/openarena
diff options
context:
space:
mode:
authorPol Dellaiera <pol.dellaiera@protonmail.com>2023-08-18 09:58:31 +0200
committerPol Dellaiera <pol.dellaiera@protonmail.com>2023-08-19 07:25:46 +0200
commit758b6fa94ba056a54b9cf0fd574232d987b93439 (patch)
tree38ad7ca48cdf56c0ec5f48e01d2fc564bf92f81a /pkgs/games/openarena
parent30683ca1d46999b588bb9f2b46f88bdbd511abb0 (diff)
downloadnixpkgs-758b6fa94ba056a54b9cf0fd574232d987b93439.tar
nixpkgs-758b6fa94ba056a54b9cf0fd574232d987b93439.tar.gz
nixpkgs-758b6fa94ba056a54b9cf0fd574232d987b93439.tar.bz2
nixpkgs-758b6fa94ba056a54b9cf0fd574232d987b93439.tar.lz
nixpkgs-758b6fa94ba056a54b9cf0fd574232d987b93439.tar.xz
nixpkgs-758b6fa94ba056a54b9cf0fd574232d987b93439.tar.zst
nixpkgs-758b6fa94ba056a54b9cf0fd574232d987b93439.zip
openarena: compile from sources
- Add desktop item
- Use `finalAttrs` pattern
- Sort attributes and parameters naturally
- Update license
- Add `meta.mainProgram` attribute
- Add `drupol` as maintainer
Diffstat (limited to 'pkgs/games/openarena')
-rw-r--r--pkgs/games/openarena/default.nix147
1 files changed, 113 insertions, 34 deletions
diff --git a/pkgs/games/openarena/default.nix b/pkgs/games/openarena/default.nix
index 7b1f793895e..a90a6752ac8 100644
--- a/pkgs/games/openarena/default.nix
+++ b/pkgs/games/openarena/default.nix
@@ -1,43 +1,122 @@
-{ lib, fetchurl, makeWrapper, patchelf, pkgs, stdenv, SDL, libglvnd, libogg, libvorbis, curl, openal }:
+{ lib
+, fetchzip
+, fetchFromGitHub
+, stdenv
+, fetchpatch
+, copyDesktopItems
+, curl
+, makeBinaryWrapper
+, pkg-config
+, which
+, freetype
+, libglvnd
+, libogg
+, libvorbis
+, libxmp
+, openal
+, SDL2
+, speex
+, makeDesktopItem
+}:
 
-stdenv.mkDerivation {
-  pname = "openarena";
-  version = "0.8.8";
+let
+  openarena-maps = fetchzip {
+    name = "openarena-maps";
+    url = "https://download.tuxfamily.org/openarena/rel/088/openarena-0.8.8.zip";
+    hash = "sha256-Rup1n14k9sKcyVFYzFqPYV+BEBCnUNwpnFsnyGrhl20=";
+  };
 
-  src = fetchurl {
-    name = "openarena.zip";
-    url = "http://openarena.ws/request.php?4";
-    sha256 = "0jmc1cmdz1rcvqc9ilzib1kilpwap6v0d331l6q53wsibdzsz3ss";
+  openarena-source = fetchFromGitHub {
+    name = "openarena-source";
+    owner = "OpenArena";
+    repo = "engine";
+    rev = "075cb860a4d2bc43e75e5f506eba7da877708aba";
+    hash = "sha256-ofQKQyS3ti5TSN+zqwPFYuJiB9kvdER6zTWn8yrOpQU=";
   };
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "openarena";
+  version = "unstable-2023-03-02";
+
+  srcs = [
+    openarena-source
+    openarena-maps
+  ];
+
+  sourceRoot = "openarena-source";
+
+  patches = [
+    # Fix Makefile `copyFiles` target
+    # Related upstream issue: https://github.com/OpenArena/engine/issues/83
+    (fetchpatch {
+      url = "https://github.com/OpenArena/engine/commit/f2b424bd332e90a1e2592edd21c62bdb8cd05214.patch";
+      hash = "sha256-legiXLtZAeG2t1esiBa37qkAgxPJVM7JLhjpxGUmWCo=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    curl
+    makeBinaryWrapper
+    pkg-config
+    which
+  ];
+
+  buildInputs = [
+    freetype
+    libglvnd
+    libogg
+    libvorbis
+    libxmp
+    openal
+    SDL2
+    speex
+  ];
 
-  nativeBuildInputs = [ pkgs.unzip patchelf makeWrapper];
-
-  installPhase = let
-    gameDir = "$out/openarena-$version";
-    interpreter = "$(< \"$NIX_CC/nix-support/dynamic-linker\")";
-    libPath = lib.makeLibraryPath [ SDL libglvnd libogg libvorbis curl openal ];
-    arch = {
-      "x86_64-linux" = "x86_64";
-      "i386-linux" = "i386";
-    }.${stdenv.hostPlatform.system};
-  in ''
-    mkdir -pv $out/bin
-    cd $out
-    unzip $src
-
-    patchelf --set-interpreter "${interpreter}" "${gameDir}/openarena.${arch}"
-    patchelf --set-interpreter "${interpreter}" "${gameDir}/oa_ded.${arch}"
-
-    makeWrapper "${gameDir}/openarena.${arch}" "$out/bin/openarena" \
-      --prefix LD_LIBRARY_PATH : "${libPath}"
-    makeWrapper "${gameDir}/oa_ded.${arch}" "$out/bin/oa_ded"
+  enableParallelBuilding = true;
+
+  makeFlags = [
+    "USE_INTERNAL_LIBS=0"
+    "USE_FREETYPE=1"
+    "USE_OPENAL_DLOPEN=0"
+    "USE_CURL_DLOPEN=0"
+    "ARCH=${stdenv.hostPlatform.linuxArch}"
+  ];
+
+  installTargets = [ "copyfiles" ];
+  installFlags = [ "COPYDIR=$(out)/share/openarena" ];
+
+  preInstall = ''
+    mkdir -p $out/share/openarena
+  '';
+
+  postInstall = ''
+    install -Dm644 misc/quake3.svg $out/share/icons/hicolor/scalable/apps/openarena.svg
+
+    makeWrapper $out/share/openarena/openarena.* $out/bin/openarena
+    makeWrapper $out/share/openarena/oa_ded.* $out/bin/oa_ded
+
+    ln -s ${openarena-maps}/baseoa $out/share/openarena/baseoa
+    ln -s ${openarena-maps}/missionpack $out/share/openarena/missionpack
   '';
 
+  desktopItems = [
+    (makeDesktopItem {
+      name = "OpenArena";
+      exec = "openarena";
+      icon = "openarena";
+      comment = "A fast-paced 3D first-person shooter, similar to id Software Inc.'s Quake III Arena";
+      desktopName = "openarena";
+      categories = [ "Game" "ActionGame" ];
+    })
+  ];
+
   meta = {
-    description = "Crossplatform openarena client";
+    description = "A fast-paced 3D first-person shooter, similar to id Software Inc.'s Quake III Arena";
     homepage = "http://openarena.ws/";
-    maintainers = [ lib.maintainers.wyvie ];
-    platforms = [ "i386-linux" "x86_64-linux" ];
-    license = lib.licenses.gpl2;
+    license = lib.licenses.gpl2Plus;
+    mainProgram = "openarena";
+    maintainers = with lib.maintainers; [ drupol wyvie ];
+    platforms = lib.platforms.linux;
   };
-}
+})