From 6df05dd279bb0508840101ece88d926137979c14 Mon Sep 17 00:00:00 2001 From: Morgan Jones Date: Sun, 28 Jan 2024 14:36:18 -0800 Subject: [PATCH 1/4] armagetronad.*: no graphical deps in buildInputs for dedicated servers --- pkgs/games/armagetronad/default.nix | 119 +++++++++++++++------------- 1 file changed, 63 insertions(+), 56 deletions(-) diff --git a/pkgs/games/armagetronad/default.nix b/pkgs/games/armagetronad/default.nix index 20f253dcfc2f..c58bea2dd343 100644 --- a/pkgs/games/armagetronad/default.nix +++ b/pkgs/games/armagetronad/default.nix @@ -28,64 +28,68 @@ 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}.1.1"; rev = "v${version}"; - sha256 = "tvmKGqzH8IYTSeahc8XmN3RV+GdE5GsP8pAlwG8Ph3M="; + hash = "sha256-tvmKGqzH8IYTSeahc8XmN3RV+GdE5GsP8pAlwG8Ph3M="; + 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 ]; }; + # 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 +97,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 +128,11 @@ 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 []); postInstall = lib.optionalString (!dedicatedServer) '' mkdir -p $out/share/{applications,icons/hicolor} @@ -139,7 +144,7 @@ let installCheckPhase = '' export XDG_RUNTIME_DIR=/tmp - bin="$out/bin/${pname}" + bin="$out/bin/${mainProgram}" version="$("$bin" --version || true)" prefix="$("$bin" --prefix || true)" rubber="$("$bin" --doc | grep -m1 CYCLE_RUBBER)" @@ -148,7 +153,7 @@ let 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,21 +165,23 @@ 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 ]; @@ -183,4 +190,4 @@ let }; }; in -mkArmagetron (srcs.${latestVersionMajor} // { inherit dedicatedServer; }) +mkArmagetron srcs.${latestVersionMajor} dedicatedServer From 4fb4d7a3b4c571ea633d7fca01aba0d558176593 Mon Sep 17 00:00:00 2001 From: Morgan Jones Date: Wed, 20 Mar 2024 19:45:36 -0700 Subject: [PATCH 2/4] nixos/tests/armagetronad: fix test runner --- nixos/tests/armagetronad.nix | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/nixos/tests/armagetronad.nix b/nixos/tests/armagetronad.nix index ff2841dedd21..d59827354b77 100644 --- a/nixos/tests/armagetronad.nix +++ b/nixos/tests/armagetronad.nix @@ -1,4 +1,9 @@ -import ./make-test-python.nix ({ pkgs, ...} : +{ system ? builtins.currentSystem, + config ? {}, + pkgs ? import ../.. { inherit system config; } +}: + +with import ../lib/testing-python.nix { inherit system pkgs; }; let user = "alice"; @@ -16,7 +21,8 @@ let test-support.displayManager.auto.user = user; }; -in { +in +makeTest { name = "armagetronad"; meta = with pkgs.lib.maintainers; { maintainers = [ numinit ]; @@ -269,4 +275,4 @@ in { srv.node.wait_until_fails(f"ss --numeric --udp --listening | grep -q {srv.port}") ''; -}) +} From 24c913ddeb1a6d294448b06f2dcafd155f316dd9 Mon Sep 17 00:00:00 2001 From: Morgan Jones Date: Wed, 20 Mar 2024 19:46:04 -0700 Subject: [PATCH 3/4] armagetronad: 0.2.9.1.1 -> 0.2.9.2.3 --- pkgs/games/armagetronad/default.nix | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pkgs/games/armagetronad/default.nix b/pkgs/games/armagetronad/default.nix index c58bea2dd343..91e2fd024535 100644 --- a/pkgs/games/armagetronad/default.nix +++ b/pkgs/games/armagetronad/default.nix @@ -41,9 +41,9 @@ let # https://gitlab.com/armagetronad/armagetronad/-/tags ${latestVersionMajor} = let - version = "${latestVersionMajor}.1.1"; + version = "${latestVersionMajor}.2.3"; rev = "v${version}"; - hash = "sha256-tvmKGqzH8IYTSeahc8XmN3RV+GdE5GsP8pAlwG8Ph3M="; + hash = "sha256-lfYJ3luGK9hB0aiiBiJIqq5ddANqGaVtKXckbo4fl2g="; in dedicatedServer: { inherit version; src = fetchArmagetron rev hash; @@ -183,7 +183,6 @@ let 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; From f744631376da02ca1c2776dd353f0fc5ae9a2ab1 Mon Sep 17 00:00:00 2001 From: Morgan Jones Date: Wed, 20 Mar 2024 20:12:32 -0700 Subject: [PATCH 4/4] armagetronad."0.4": fix installCheckPhase requiring an X server --- pkgs/games/armagetronad/default.nix | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/pkgs/games/armagetronad/default.nix b/pkgs/games/armagetronad/default.nix index 91e2fd024535..fc22e7162f6d 100644 --- a/pkgs/games/armagetronad/default.nix +++ b/pkgs/games/armagetronad/default.nix @@ -21,6 +21,7 @@ , libpng , libxml2 , protobuf +, xvfb-run , dedicatedServer ? false }: @@ -61,6 +62,7 @@ let 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 @@ -134,6 +136,8 @@ let nativeBuildInputs = [ autoconf automake gnum4 pkg-config which python3 ] ++ (resolvedParams.extraNativeBuildInputs or []); + nativeInstallCheckInputs = resolvedParams.extraNativeInstallCheckInputs or []; + postInstall = lib.optionalString (!dedicatedServer) '' mkdir -p $out/share/{applications,icons/hicolor} ln -s $out/share/games/armagetronad/desktop/armagetronad*.desktop $out/share/applications/ @@ -145,9 +149,14 @@ let installCheckPhase = '' export XDG_RUNTIME_DIR=/tmp bin="$out/bin/${mainProgram}" - version="$("$bin" --version || true)" - prefix="$("$bin" --prefix || true)" - rubber="$("$bin" --doc | grep -m1 CYCLE_RUBBER)" + 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