Unverified Commit 59cf37fd authored by Jörg Thalheim's avatar Jörg Thalheim Committed by GitHub
Browse files

Merge pull request #38864 from tadfisher/yquake2

yquake2: init at 7.20
parents 00e2a4bd 29b18945
Loading
Loading
Loading
Loading
+93 −0
Original line number Diff line number Diff line
{ stdenv, lib, fetchFromGitHub, buildEnv, cmake, makeWrapper
, SDL2, libGL
, oggSupport ? true, libogg, libvorbis
, openalSupport ? true, openal
, zipSupport ? true, zlib
}:

let
  mkFlag = b: if b then "ON" else "OFF";

  games = import ./games.nix { inherit stdenv lib fetchFromGitHub cmake; };

  wrapper = import ./wrapper.nix { inherit stdenv lib buildEnv makeWrapper yquake2; };

  yquake2 = stdenv.mkDerivation rec {
    name = "yquake2-${version}";
    version = "7.20";

    src = fetchFromGitHub {
      owner = "yquake2";
      repo = "yquake2";
      rev = "QUAKE2_${builtins.replaceStrings ["."] ["_"] version}";
      sha256 = "1yrmn8vajab3zd0fni029s6wrvv2ljn1kyhaiw02wm1dc5yyzb2g";
    };

    enableParallelBuilding = true;

    nativeBuildInputs = [ cmake ];

    buildInputs = [ SDL2 libGL ]
      ++ lib.optionals oggSupport [ libogg libvorbis ]
      ++ lib.optional openalSupport openal
      ++ lib.optional zipSupport zlib;

    cmakeFlags = [
      "-DCMAKE_BUILD_TYPE=Release"
      "-DOGG_SUPPORT=${mkFlag oggSupport}"
      "-DOPENAL_SUPPORT=${mkFlag openalSupport}"
      "-DZIP_SUPPORT=${mkFlag zipSupport}"
      "-DSYSTEMWIDE_SUPPORT=ON"
    ];

    preConfigure = ''
      # Since we can't expand $out in `cmakeFlags`
      cmakeFlags="$cmakeFlags -DSYSTEMDIR=$out/share/games/quake2"
    '';

    installPhase = ''
      # Yamagi Quake II expects all binaries (executables and libs) to be in the
      # same directory.
      mkdir -p $out/bin $out/lib/yquake2 $out/share/games/quake2
      cp -r release/* $out/lib/yquake2
      ln -s $out/lib/yquake2/quake2 $out/bin/yquake2
      ln -s $out/lib/yquake2/q2ded $out/bin/yq2ded
      cp $src/stuff/yq2.cfg $out/share/games/quake2
    '';

    meta = with stdenv.lib; {
      description = "Yamagi Quake II client";
      homepage = "https://www.yamagi.org/quake2/";
      license = licenses.gpl2;
      platforms = platforms.unix;
      maintainers = with maintainers; [ tadfisher ];
    };
  };

in rec {
  inherit yquake2;

  yquake2-ctf = wrapper {
    games = [ games.ctf ];
    name = "yquake2-ctf";
    inherit (games.ctf) description;
  };

  yquake2-ground-zero = wrapper {
    games = [ games.ground-zero ];
    name = "yquake2-ground-zero";
    inherit (games.ground-zero) description;
  };

  yquake2-the-reckoning = wrapper {
    games = [ games.the-reckoning ];
    name = "yquake2-the-reckoning";
    inherit (games.the-reckoning) description;
  };

  yquake2-all-games = wrapper {
    games = lib.attrValues games;
    name = "yquake2-all-games";
    description = "Yamagi Quake II with all add-on games";
  };
}
+59 −0
Original line number Diff line number Diff line
{ stdenv, lib, fetchFromGitHub, cmake }:

let
  games = {
    ctf = {
      id = "ctf";
      version = "1.05";
      description = "'Capture The Flag' for Yamagi Quake II";
      sha256 = "15ihspyshls645ig0gq6bwdzvghyyysqk60g6ad3n4idb2ms52md";
    };

    ground-zero = {
      id = "rogue";
      version = "2.04";
      description = "'Ground Zero' for Yamagi Quake II";
      sha256 = "0x1maaycrxv7d3xvvk1ih2zymhvcd3jnab7g3by8qh6g5y33is5l";
    };

    the-reckoning = {
      id = "xatrix";
      version = "2.05";
      description = "'The Reckoning' for Yamagi Quake II";
      sha256 = "0gf2ryhgz8nw1mb1arlbriihjsx09fa0wmkgcayc8ijignfi1qkh";
    };
  };

  toDrv = title: data: stdenv.mkDerivation rec {
    inherit (data) id version description sha256;
    inherit title;

    name = "yquake2-${title}-${version}";

    src = fetchFromGitHub {
      inherit sha256;
      owner = "yquake2";
      repo = data.id;
      rev = "${lib.toUpper id}_${builtins.replaceStrings ["."] ["_"] version}";
    };

    enableParallelBuilding = true;

    nativeBuildInputs = [ cmake ];

    installPhase = ''
      mkdir -p $out/lib/yquake2/${id}
      cp Release/* $out/lib/yquake2/${id}
    '';

    meta = with stdenv.lib; {
      inherit (data) description;
      homepage = "https://www.yamagi.org/quake2/";
      license = licenses.unfree;
      platforms = platforms.unix;
      maintainers = with maintainers; [ tadfisher ];
    };
  };

in
  lib.mapAttrs toDrv games
+31 −0
Original line number Diff line number Diff line
{ stdenv, lib, buildEnv, makeWrapper, yquake2 }:

{ games
, name
, description
}:

let
  env = buildEnv {
    name = "${name}-env";
    paths = [ yquake2 ] ++ games;
  };

in stdenv.mkDerivation {
  inherit name;

  nativeBuildInputs = [ makeWrapper ];

  buildCommand = ''
    mkdir -p $out/bin
  '' + lib.concatMapStringsSep "\n" (game: ''
    makeWrapper ${env}/bin/yquake2 $out/bin/yquake2-${game.title} \
      --add-flags "+set game ${game.id}"
    makeWrapper ${env}/bin/yq2ded $out/bin/yq2ded-${game.title} \
      --add-flags "+set game ${game.id}"
  '') games;

  meta = {
    inherit description;
  };
}
+7 −0
Original line number Diff line number Diff line
@@ -19507,6 +19507,13 @@ with pkgs;
  xsokoban = callPackage ../games/xsokoban { };
  inherit (callPackage ../games/quake2/yquake2 { })
    yquake2
    yquake2-ctf
    yquake2-ground-zero
    yquake2-the-reckoning
    yquake2-all-games;
  zandronum = callPackage ../games/zandronum { };
  zandronum-server = zandronum.override {