about summary refs log tree commit diff
path: root/nixpkgs/pkgs/games/quake2/yquake2/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/games/quake2/yquake2/default.nix')
-rw-r--r--nixpkgs/pkgs/games/quake2/yquake2/default.nix90
1 files changed, 90 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/games/quake2/yquake2/default.nix b/nixpkgs/pkgs/games/quake2/yquake2/default.nix
new file mode 100644
index 000000000000..522a8e39fd88
--- /dev/null
+++ b/nixpkgs/pkgs/games/quake2/yquake2/default.nix
@@ -0,0 +1,90 @@
+{ stdenv, lib, fetchFromGitHub, buildEnv, makeWrapper
+, SDL2, libGL, curl
+, openalSupport ? true, openal
+, Cocoa, OpenAL
+}:
+
+let
+  mkFlag = b: if b then "yes" else "no";
+
+  games = import ./games.nix { inherit stdenv lib fetchFromGitHub; };
+
+  wrapper = import ./wrapper.nix { inherit stdenv lib buildEnv makeWrapper yquake2; };
+
+  yquake2 = stdenv.mkDerivation rec {
+    pname = "yquake2";
+    version = "8.20";
+
+    src = fetchFromGitHub {
+      owner = "yquake2";
+      repo = "yquake2";
+      rev = "QUAKE2_${builtins.replaceStrings ["."] ["_"] version}";
+      sha256 = "sha256-x1mk6qo03b438ZBS16/f7pzMCfugtQvaRcV+hg7Zc/w=";
+    };
+
+    postPatch = ''
+      substituteInPlace src/client/curl/qcurl.c \
+        --replace "\"libcurl.so.3\", \"libcurl.so.4\"" "\"${curl.out}/lib/libcurl.so\", \"libcurl.so.3\", \"libcurl.so.4\""
+    '' + lib.optionalString (openalSupport && !stdenv.isDarwin) ''
+      substituteInPlace Makefile \
+        --replace "\"libopenal.so.1\"" "\"${openal}/lib/libopenal.so.1\""
+    '';
+
+    buildInputs = [ SDL2 libGL curl ]
+      ++ lib.optionals stdenv.isDarwin [ Cocoa OpenAL ]
+      ++ lib.optional openalSupport openal;
+
+    makeFlags = [
+      "WITH_OPENAL=${mkFlag openalSupport}"
+      "WITH_SYSTEMWIDE=yes"
+      "WITH_SYSTEMDIR=$\{out}/share/games/quake2"
+    ];
+
+    enableParallelBuilding = true;
+
+    installPhase = ''
+      # Yamagi Quake II expects all binaries (executables and libs) to be in the
+      # same directory.
+      mkdir -p $out/bin $out/lib/yquake2 $out/share/games/quake2/baseq2
+      cp -r release/* $out/lib/yquake2
+      ln -s $out/lib/yquake2/quake2 $out/bin/yquake2
+      ln -s $out/lib/yquake2/q2ded $out/bin/yq2ded
+      cp $src/stuff/yq2.cfg $out/share/games/quake2/baseq2
+    '';
+
+    meta = with lib; {
+      description = "Yamagi Quake II client";
+      homepage = "https://www.yamagi.org/quake2/";
+      license = licenses.gpl2;
+      platforms = platforms.unix;
+      maintainers = with maintainers; [ tadfisher ];
+    };
+  };
+
+in {
+  inherit yquake2;
+
+  yquake2-ctf = wrapper {
+    games = [ games.ctf ];
+    name = "yquake2-ctf";
+    inherit (games.ctf) description;
+  };
+
+  yquake2-ground-zero = wrapper {
+    games = [ games.ground-zero ];
+    name = "yquake2-ground-zero";
+    inherit (games.ground-zero) description;
+  };
+
+  yquake2-the-reckoning = wrapper {
+    games = [ games.the-reckoning ];
+    name = "yquake2-the-reckoning";
+    inherit (games.the-reckoning) description;
+  };
+
+  yquake2-all-games = wrapper {
+    games = lib.attrValues games;
+    name = "yquake2-all-games";
+    description = "Yamagi Quake II with all add-on games";
+  };
+}