about summary refs log tree commit diff
path: root/nixpkgs/pkgs/games/armagetronad/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/games/armagetronad/default.nix')
-rw-r--r--nixpkgs/pkgs/games/armagetronad/default.nix135
1 files changed, 75 insertions, 60 deletions
diff --git a/nixpkgs/pkgs/games/armagetronad/default.nix b/nixpkgs/pkgs/games/armagetronad/default.nix
index 20f253dcfc2f..fc22e7162f6d 100644
--- a/nixpkgs/pkgs/games/armagetronad/default.nix
+++ b/nixpkgs/pkgs/games/armagetronad/default.nix
@@ -21,6 +21,7 @@
 , libpng
 , libxml2
 , protobuf
+, xvfb-run
 , dedicatedServer ? false
 }:
 
@@ -28,64 +29,69 @@ let
   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 {
+  srcs =
+  let
+    fetchArmagetron = rev: hash:
+      fetchFromGitLab {
         owner = "armagetronad";
         repo = "armagetronad";
+        inherit rev hash;
+      };
+  in
+  {
+    # https://gitlab.com/armagetronad/armagetronad/-/tags
+    ${latestVersionMajor} =
+      let
+        version = "${latestVersionMajor}.2.3";
         rev = "v${version}";
-        sha256 = "tvmKGqzH8IYTSeahc8XmN3RV+GdE5GsP8pAlwG8Ph3M=";
+        hash = "sha256-lfYJ3luGK9hB0aiiBiJIqq5ddANqGaVtKXckbo4fl2g=";
+      in dedicatedServer: {
+        inherit version;
+        src = fetchArmagetron rev hash;
+        extraBuildInputs = lib.optionals (!dedicatedServer) [ libpng SDL SDL_image SDL_mixer ];
       };
-      extraBuildInputs = latestCommonBuildInputs;
-    };
 
+    # https://gitlab.com/armagetronad/armagetronad/-/commits/trunk/?ref_type=heads
     ${unstableVersionMajor} =
       let
-        rev = "4bf6245a668ce181cd464b767ce436a6b7bf8506";
-      in
-      {
+        rev = "e7f41fd26363e7c6a72f0c673470ed06ab54ae08";
+        hash = "sha256-Uxxk6L7WPxKYQ4CNxWwEtvbZjK8BqYNTuwwdleZ44Ro=";
+      in dedicatedServer: {
         version = "${unstableVersionMajor}-${builtins.substring 0 8 rev}";
-        src = fetchFromGitLab {
-          owner = "armagetronad";
-          repo = "armagetronad";
-          inherit rev;
-          sha256 = "cpJmQHCS6asGasD7anEgNukG9hRXpsIJZrCr3Q7uU4I=";
-        };
-        extraBuildInputs = [ protobuf boost ] ++ unstableCommonBuildInputs;
-        extraNativeBuildInputs = [ bison ] ++ unstableCommonNativeBuildInputs;
+        src = fetchArmagetron rev hash;
+        extraBuildInputs = [ protobuf boost ]
+          ++ lib.optionals (!dedicatedServer) [ glew ftgl freetype SDL2 SDL2_image SDL2_mixer ];
+        extraNativeBuildInputs = [ bison ];
+        extraNativeInstallCheckInputs = lib.optionals (!dedicatedServer) [ xvfb-run ];
       };
 
+    # https://gitlab.com/armagetronad/armagetronad/-/commits/hack-0.2.8-sty+ct+ap/?ref_type=heads
     "${latestVersionMajor}-sty+ct+ap" =
       let
-        rev = "fdfd5fb97083aed45467385b96d50d87669e4023";
-      in
-      {
+        rev = "a5bffe9dda2b43d330433f76f14eb374701f326a";
+        hash = "sha256-cNABxfg3MSmbxU/R78QyPOMwXGqJEamaFOPNw5yhDGE=";
+      in dedicatedServer: {
         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 ];
+        src = fetchArmagetron rev hash;
+        extraBuildInputs = lib.optionals (!dedicatedServer) [ libpng SDL SDL_image SDL_mixer ];
       };
   };
 
-  mkArmagetron = { version, src, dedicatedServer ? false, extraBuildInputs ? [ ], extraNativeBuildInputs ? [ ] }@params:
+  # Creates an Armagetron build. Takes a function returning build inputs for a particular value of dedicatedServer.
+  mkArmagetron = fn: dedicatedServer:
   let
+    # Compute the build params.
+    resolvedParams = fn dedicatedServer;
+
+    # Figure out the binary name depending on whether this is a dedicated server.
+    mainProgram = if dedicatedServer then "armagetronad-dedicated" else "armagetronad";
+
     # Split the version into the major and minor parts
-    versionParts = lib.splitString "-" version;
+    versionParts = lib.splitString "-" resolvedParams.version;
     splitVersion = lib.splitVersion (builtins.elemAt versionParts 0);
     majorVersion = builtins.concatStringsSep "." (lib.lists.take 2 splitVersion);
 
-    minorVersionPart =  parts: sep: expectedSize:
+    minorVersionPart = parts: sep: expectedSize:
       if builtins.length parts > expectedSize then
         sep + (builtins.concatStringsSep sep (lib.lists.drop expectedSize parts))
       else
@@ -93,9 +99,9 @@ let
 
     minorVersion = (minorVersionPart splitVersion "." 2) + (minorVersionPart versionParts "-" 1) + "-nixpkgs";
   in
-    stdenv.mkDerivation rec {
-      pname = if dedicatedServer then "armagetronad-dedicated" else "armagetronad";
-      inherit version src;
+    stdenv.mkDerivation {
+      pname = mainProgram;
+      inherit (resolvedParams) version src;
 
       # Build works fine; install has a race.
       enableParallelBuilding = true;
@@ -124,10 +130,13 @@ let
       ] ++ lib.optional dedicatedServer "--enable-dedicated"
         ++ lib.optional (!dedicatedServer) "--enable-music";
 
-      buildInputs = [ libxml2 ] ++ extraBuildInputs;
+      buildInputs = [ libxml2 ]
+        ++ (resolvedParams.extraBuildInputs or []);
 
       nativeBuildInputs = [ autoconf automake gnum4 pkg-config which python3 ]
-        ++ extraNativeBuildInputs;
+        ++ (resolvedParams.extraNativeBuildInputs or []);
+
+      nativeInstallCheckInputs = resolvedParams.extraNativeInstallCheckInputs or [];
 
       postInstall = lib.optionalString (!dedicatedServer) ''
         mkdir -p $out/share/{applications,icons/hicolor}
@@ -139,16 +148,21 @@ let
 
       installCheckPhase = ''
         export XDG_RUNTIME_DIR=/tmp
-        bin="$out/bin/${pname}"
-        version="$("$bin" --version || true)"
-        prefix="$("$bin" --prefix || true)"
-        rubber="$("$bin" --doc | grep -m1 CYCLE_RUBBER)"
+        bin="$out/bin/${mainProgram}"
+        if command -v xvfb-run &>/dev/null; then
+          run="xvfb-run $bin"
+        else
+          run="$bin"
+        fi
+        version="$($run --version || true)"
+        prefix="$($run --prefix || true)"
+        rubber="$($run --doc | grep -m1 CYCLE_RUBBER)"
 
         echo "Version: $version" >&2
         echo "Prefix: $prefix" >&2
         echo "Docstring: $rubber" >&2
 
-        if [[ "$version" != *"${version}"* ]] || \
+        if [[ "$version" != *"${resolvedParams.version}"* ]] || \
            [ "$prefix" != "$out" ] || \
            [[ ! "$rubber" =~ ^CYCLE_RUBBER[[:space:]]+Niceness[[:space:]]factor ]]; then
           exit 1
@@ -160,27 +174,28 @@ let
           # No passthru, end of the line.
           # https://www.youtube.com/watch?v=NOMa56y_Was
         }
-        else if (version != srcs.${latestVersionMajor}.version) then {
+        else if (resolvedParams.version != (srcs.${latestVersionMajor} dedicatedServer).version) then {
           # Allow a "dedicated" passthru for versions other than the default.
-          dedicated = mkArmagetron (params // {
-            dedicatedServer = true;
-          });
+          dedicated = mkArmagetron fn 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;
-          });
-        };
+        else
+          (
+            lib.mapAttrs (name: value: mkArmagetron value dedicatedServer)
+            (lib.filterAttrs (name: value: (value dedicatedServer).version != (srcs.${latestVersionMajor} dedicatedServer).version) srcs)
+          ) //
+          {
+            # Allow both a "dedicated" passthru and a passthru for all the options other than the latest version, which this is.
+            dedicated = mkArmagetron fn true;
+          };
 
       meta = with lib; {
-        homepage = "http://armagetronad.org";
+        inherit mainProgram;
+        homepage = "https://www.armagetronad.org";
         description = "A multiplayer networked arcade racing game in 3D similar to Tron";
-        mainProgram = "armagetronad-dedicated";
         maintainers = with maintainers; [ numinit ];
         license = licenses.gpl2Plus;
         platforms = platforms.linux;
       };
     };
 in
-mkArmagetron (srcs.${latestVersionMajor} // { inherit dedicatedServer; })
+mkArmagetron srcs.${latestVersionMajor} dedicatedServer