Merge pull request #250105 from NixOS/openarena/use-source

openarena: compile from sources

Changed files
+113 -34
nixos
modules
services
pkgs
games
openarena
+3 -3
nixos/modules/services/games/openarena.nix
···
{ config, lib, pkgs, ... }:
-
with lib;
-
let
+
inherit (lib) concatStringsSep mkEnableOption mkIf mkOption types;
cfg = config.services.openarena;
in
{
options = {
services.openarena = {
enable = mkEnableOption (lib.mdDoc "OpenArena");
+
package = lib.mkPackageOptionMD pkgs "openarena" { };
openPorts = mkOption {
type = types.bool;
···
serviceConfig = {
DynamicUser = true;
StateDirectory = "openarena";
-
ExecStart = "${pkgs.openarena}/bin/oa_ded +set fs_basepath ${pkgs.openarena}/openarena-0.8.8 +set fs_homepath /var/lib/openarena ${concatStringsSep " " cfg.extraFlags}";
+
ExecStart = "${cfg.package}/bin/oa_ded +set fs_basepath ${cfg.package}/share/openarena +set fs_homepath /var/lib/openarena ${concatStringsSep " " cfg.extraFlags}";
Restart = "on-failure";
# Hardening
+110 -31
pkgs/games/openarena/default.nix
···
-
{ lib, fetchurl, makeWrapper, patchelf, pkgs, stdenv, SDL, libglvnd, libogg, libvorbis, curl, openal }:
+
{ lib
+
, fetchzip
+
, fetchFromGitHub
+
, stdenv
+
, fetchpatch
+
, copyDesktopItems
+
, curl
+
, makeBinaryWrapper
+
, pkg-config
+
, which
+
, freetype
+
, libglvnd
+
, libogg
+
, libvorbis
+
, libxmp
+
, openal
+
, SDL2
+
, speex
+
, makeDesktopItem
+
}:
-
stdenv.mkDerivation {
+
let
+
openarena-maps = fetchzip {
+
name = "openarena-maps";
+
url = "https://download.tuxfamily.org/openarena/rel/088/openarena-0.8.8.zip";
+
hash = "sha256-Rup1n14k9sKcyVFYzFqPYV+BEBCnUNwpnFsnyGrhl20=";
+
};
+
+
openarena-source = fetchFromGitHub {
+
name = "openarena-source";
+
owner = "OpenArena";
+
repo = "engine";
+
rev = "075cb860a4d2bc43e75e5f506eba7da877708aba";
+
hash = "sha256-ofQKQyS3ti5TSN+zqwPFYuJiB9kvdER6zTWn8yrOpQU=";
+
};
+
in
+
stdenv.mkDerivation (finalAttrs: {
pname = "openarena";
-
version = "0.8.8";
+
version = "unstable-2023-03-02";
+
+
srcs = [
+
openarena-source
+
openarena-maps
+
];
+
+
sourceRoot = "openarena-source";
+
+
patches = [
+
# Fix Makefile `copyFiles` target
+
# Related upstream issue: https://github.com/OpenArena/engine/issues/83
+
(fetchpatch {
+
url = "https://github.com/OpenArena/engine/commit/f2b424bd332e90a1e2592edd21c62bdb8cd05214.patch";
+
hash = "sha256-legiXLtZAeG2t1esiBa37qkAgxPJVM7JLhjpxGUmWCo=";
+
})
+
];
+
+
nativeBuildInputs = [
+
copyDesktopItems
+
curl
+
makeBinaryWrapper
+
pkg-config
+
which
+
];
+
+
buildInputs = [
+
freetype
+
libglvnd
+
libogg
+
libvorbis
+
libxmp
+
openal
+
SDL2
+
speex
+
];
-
src = fetchurl {
-
name = "openarena.zip";
-
url = "http://openarena.ws/request.php?4";
-
sha256 = "0jmc1cmdz1rcvqc9ilzib1kilpwap6v0d331l6q53wsibdzsz3ss";
-
};
+
enableParallelBuilding = true;
-
nativeBuildInputs = [ pkgs.unzip patchelf makeWrapper];
+
makeFlags = [
+
"USE_INTERNAL_LIBS=0"
+
"USE_FREETYPE=1"
+
"USE_OPENAL_DLOPEN=0"
+
"USE_CURL_DLOPEN=0"
+
"ARCH=${stdenv.hostPlatform.linuxArch}"
+
];
-
installPhase = let
-
gameDir = "$out/openarena-$version";
-
interpreter = "$(< \"$NIX_CC/nix-support/dynamic-linker\")";
-
libPath = lib.makeLibraryPath [ SDL libglvnd libogg libvorbis curl openal ];
-
arch = {
-
"x86_64-linux" = "x86_64";
-
"i386-linux" = "i386";
-
}.${stdenv.hostPlatform.system};
-
in ''
-
mkdir -pv $out/bin
-
cd $out
-
unzip $src
+
installTargets = [ "copyfiles" ];
+
installFlags = [ "COPYDIR=$(out)/share/openarena" ];
-
patchelf --set-interpreter "${interpreter}" "${gameDir}/openarena.${arch}"
-
patchelf --set-interpreter "${interpreter}" "${gameDir}/oa_ded.${arch}"
+
preInstall = ''
+
mkdir -p $out/share/openarena
+
'';
+
+
postInstall = ''
+
install -Dm644 misc/quake3.svg $out/share/icons/hicolor/scalable/apps/openarena.svg
-
makeWrapper "${gameDir}/openarena.${arch}" "$out/bin/openarena" \
-
--prefix LD_LIBRARY_PATH : "${libPath}"
-
makeWrapper "${gameDir}/oa_ded.${arch}" "$out/bin/oa_ded"
+
makeWrapper $out/share/openarena/openarena.* $out/bin/openarena
+
makeWrapper $out/share/openarena/oa_ded.* $out/bin/oa_ded
+
+
ln -s ${openarena-maps}/baseoa $out/share/openarena/baseoa
+
ln -s ${openarena-maps}/missionpack $out/share/openarena/missionpack
'';
+
desktopItems = [
+
(makeDesktopItem {
+
name = "OpenArena";
+
exec = "openarena";
+
icon = "openarena";
+
comment = "A fast-paced 3D first-person shooter, similar to id Software Inc.'s Quake III Arena";
+
desktopName = "openarena";
+
categories = [ "Game" "ActionGame" ];
+
})
+
];
+
meta = {
-
description = "Crossplatform openarena client";
+
description = "A fast-paced 3D first-person shooter, similar to id Software Inc.'s Quake III Arena";
homepage = "http://openarena.ws/";
-
maintainers = [ lib.maintainers.wyvie ];
-
platforms = [ "i386-linux" "x86_64-linux" ];
-
license = lib.licenses.gpl2;
+
license = lib.licenses.gpl2Plus;
+
mainProgram = "openarena";
+
maintainers = with lib.maintainers; [ drupol wyvie ];
+
platforms = lib.platforms.linux;
};
-
}
+
})