Unverified Commit f5803331 authored by Morgan Jones's avatar Morgan Jones
Browse files

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]`
parent 8fa4bf50
Loading
Loading
Loading
Loading
+149 −38
Original line number Diff line number Diff line
{ 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}";
  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;
    };

    ${unstableVersionMajor} =
      let
        rev = "4bf6245a668ce181cd464b767ce436a6b7bf8506";
      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";
      {
        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-memmanager"
        "--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-dedicated"
        ++ lib.optional (!dedicatedServer) "--enable-music";

      buildInputs = [ libxml2 ] ++ extraBuildInputs;

      nativeBuildInputs = [ autoconf automake gnum4 pkg-config which python3 ]
        ++ extraNativeBuildInputs;

  nativeBuildInputs = [ pkg-config ];
      doInstallCheck = true;

  buildInputs = [ libxml2 zlib ]
    ++ lib.optionals (!dedicatedServer) [ SDL SDL_image libxml2 libjpeg libpng libGLU libGL ];
      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";
@@ -39,4 +148,6 @@ stdenv.mkDerivation {
        license = licenses.gpl2Plus;
        platforms = platforms.linux;
      };
}
    };
in
mkArmagetron (srcs.${latestVersionMajor} // { inherit dedicatedServer; })