diff options
author | Morgan Jones <me@numin.it> | 2023-10-26 17:07:45 -0700 |
---|---|---|
committer | github-actions[bot] <github-actions[bot]@users.noreply.github.com> | 2023-11-27 00:03:57 +0000 |
commit | 5326135a50a833e86c1ad6acd02e1f81e27841dd (patch) | |
tree | 7622a002aed841cbdcc59e8d0973ee6dbfdacee2 /pkgs/games | |
parent | 20fd38001f3a2763f3682ef4e8fe0a925728b3f9 (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.nix | 187 |
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; }) |