about summary refs log tree commit diff
path: root/pkgs/games
diff options
context:
space:
mode:
authorMorgan Jones <me@numin.it>2023-10-26 17:07:45 -0700
committergithub-actions[bot] <github-actions[bot]@users.noreply.github.com>2023-11-27 00:03:57 +0000
commit5326135a50a833e86c1ad6acd02e1f81e27841dd (patch)
tree7622a002aed841cbdcc59e8d0973ee6dbfdacee2 /pkgs/games
parent20fd38001f3a2763f3682ef4e8fe0a925728b3f9 (diff)
armagetronad: 0.2.9.1.0 -> 0.2.9.1.1 + passthrus for other versions
Support the following passthrus for more obscure game server setups:

- `armagetronad."0.2.9-sty+ct+ap"[.dedicated]`
- `armagetronad."0.4"[.dedicated]`

(cherry picked from commit f5803331cff1674cb36f58a98fcfe750b8433b35)
Diffstat (limited to 'pkgs/games')
-rw-r--r--pkgs/games/armagetronad/default.nix187
1 files changed, 149 insertions, 38 deletions
diff --git a/pkgs/games/armagetronad/default.nix b/pkgs/games/armagetronad/default.nix
index 27f509c3f72a8..3b406c6a8b50c 100644
--- a/pkgs/games/armagetronad/default.nix
+++ b/pkgs/games/armagetronad/default.nix
@@ -1,42 +1,153 @@
-{ lib, stdenv, fetchurl
-, pkg-config, SDL, libxml2, SDL_image, libjpeg, libpng, libGLU, libGL, zlib
-, dedicatedServer ? false }:
+{ lib
+, stdenv
+, fetchFromGitLab
+, autoconf
+, automake
+, gnum4
+, pkg-config
+, bison
+, python3
+, which
+, boost
+, ftgl
+, freetype
+, glew
+, SDL
+, SDL_image
+, SDL_mixer
+, SDL2
+, SDL2_image
+, SDL2_mixer
+, libpng
+, libxml2
+, protobuf
+, dedicatedServer ? false
+}:
 
 let
-  versionMajor = "0.2.9";
-  versionMinor = "1.0";
-  version = "${versionMajor}.${versionMinor}";
-in
-stdenv.mkDerivation {
-  pname = if dedicatedServer then "armagetronad-dedicated" else "armagetronad";
-  inherit version;
-  src = fetchurl {
-    url = "https://launchpad.net/armagetronad/${versionMajor}/${version}/+download/armagetronad-${version}.tbz";
-    sha256 = "sha256-WbbHwBzj+MylQ34z+XSmN1KVQaEapPUsGlwXSZ4m9qE";
-  };
+  latestVersionMajor = "0.2.9";
+  unstableVersionMajor = "0.4";
+
+  latestCommonBuildInputs = [ SDL SDL_image SDL_mixer libpng ];
+
+  unstableCommonBuildInputs = [ SDL2 SDL2_image SDL2_mixer glew ftgl freetype ];
+  unstableCommonNativeBuildInputs = [ SDL ]; # for sdl-config
+
+  srcs = {
+    ${latestVersionMajor} = rec {
+      version = "${latestVersionMajor}.1.1";
+      src = fetchFromGitLab {
+        owner = "armagetronad";
+        repo = "armagetronad";
+        rev = "v${version}";
+        sha256 = "tvmKGqzH8IYTSeahc8XmN3RV+GdE5GsP8pAlwG8Ph3M=";
+      };
+      extraBuildInputs = latestCommonBuildInputs;
+    };
 
-  enableParallelBuilding = true;
-
-  configureFlags = [
-    "--enable-memmanager"
-    "--enable-automakedefaults"
-    "--disable-useradd"
-    "--disable-initscripts"
-    "--disable-etc"
-    "--disable-uninstall"
-    "--disable-sysinstall"
-  ] ++ lib.optional dedicatedServer "--enable-dedicated";
-
-  nativeBuildInputs = [ pkg-config ];
-
-  buildInputs = [ libxml2 zlib ]
-    ++ lib.optionals (!dedicatedServer) [ SDL SDL_image libxml2 libjpeg libpng libGLU libGL ];
-
-  meta = with lib; {
-    homepage = "http://armagetronad.org";
-    description = "A multiplayer networked arcade racing game in 3D similar to Tron";
-    maintainers = with maintainers; [ numinit ];
-    license = licenses.gpl2Plus;
-    platforms = platforms.linux;
+    ${unstableVersionMajor} =
+      let
+        rev = "4bf6245a668ce181cd464b767ce436a6b7bf8506";
+      in
+      {
+        version = "${unstableVersionMajor}-${builtins.substring 0 8 rev}";
+        src = fetchFromGitLab {
+          owner = "armagetronad";
+          repo = "armagetronad";
+          inherit rev;
+          sha256 = "cpJmQHCS6asGasD7anEgNukG9hRXpsIJZrCr3Q7uU4I=";
+        };
+        extraBuildInputs = [ protobuf boost ] ++ unstableCommonBuildInputs;
+        extraNativeBuildInputs = [ bison ] ++ unstableCommonNativeBuildInputs;
+      };
+
+    "${latestVersionMajor}-sty+ct+ap" =
+      let
+        rev = "fdfd5fb97083aed45467385b96d50d87669e4023";
+      in
+      {
+        version = "${latestVersionMajor}-sty+ct+ap-${builtins.substring 0 8 rev}";
+        src = fetchFromGitLab {
+          owner = "armagetronad";
+          repo = "armagetronad";
+          inherit rev;
+          sha256 = "UDbe7DiMLzNFAs4C6BbnmdEjqSltSbnk/uQfNOLGAfo=";
+        };
+        extraBuildInputs = latestCommonBuildInputs;
+        extraNativeBuildInputs = [ python3 ];
+      };
   };
-}
+
+  mkArmagetron = { version, src, dedicatedServer ? false, extraBuildInputs ? [ ], extraNativeBuildInputs ? [ ] }@params:
+    stdenv.mkDerivation rec {
+      pname = if dedicatedServer then "armagetronad-dedicated" else "armagetronad";
+      inherit version src;
+
+      # Build works fine; install has a race.
+      enableParallelBuilding = true;
+      enableParallelInstalling = false;
+
+      preConfigure = ''
+        patchShebangs .
+
+        ./bootstrap.sh
+      '';
+
+      configureFlags = [
+        "--enable-automakedefaults"
+        "--enable-authentication"
+        "--disable-memmanager"
+        "--disable-useradd"
+        "--disable-initscripts"
+        "--disable-etc"
+        "--disable-uninstall"
+        "--disable-sysinstall"
+      ] ++ lib.optional dedicatedServer "--enable-dedicated"
+        ++ lib.optional (!dedicatedServer) "--enable-music";
+
+      buildInputs = [ libxml2 ] ++ extraBuildInputs;
+
+      nativeBuildInputs = [ autoconf automake gnum4 pkg-config which python3 ]
+        ++ extraNativeBuildInputs;
+
+      doInstallCheck = true;
+
+      installCheckPhase = ''
+        export XDG_RUNTIME_DIR=/tmp
+        bin="$out/bin/${pname}"
+        prefix="$("$bin" --prefix || true)"
+        rubber="$("$bin" --doc | grep -m1 CYCLE_RUBBER)"
+        if [ "$prefix" != "$out" ] || \
+           [[ ! "$rubber" =~ ^CYCLE_RUBBER[[:space:]]+Niceness[[:space:]]factor ]]; then
+          exit 1
+        fi
+      '';
+
+      passthru =
+        if (dedicatedServer) then {
+          # No passthru, end of the line.
+          # https://www.youtube.com/watch?v=NOMa56y_Was
+        }
+        else if (version != srcs.${latestVersionMajor}.version) then {
+          # Allow a "dedicated" passthru for versions other than the default.
+          dedicated = mkArmagetron (params // {
+            dedicatedServer = true;
+          });
+        }
+        else (lib.mapAttrs (name: value: mkArmagetron value) (lib.filterAttrs (name: value: value.version != srcs.${latestVersionMajor}.version) srcs)) // {
+          # Allow both a "dedicated" passthru and a passthru for all the options other than the latest version, which this is.
+          dedicated = mkArmagetron (params // {
+            dedicatedServer = true;
+          });
+        };
+
+      meta = with lib; {
+        homepage = "http://armagetronad.org";
+        description = "A multiplayer networked arcade racing game in 3D similar to Tron";
+        maintainers = with maintainers; [ numinit ];
+        license = licenses.gpl2Plus;
+        platforms = platforms.linux;
+      };
+    };
+in
+mkArmagetron (srcs.${latestVersionMajor} // { inherit dedicatedServer; })