107 lines
2.9 KiB
Nix
107 lines
2.9 KiB
Nix
{
|
|||
stdenv,
|
|||
lib,
|
|||
fetchzip,
|
|||
installShellFiles,
|
|||
libX11,
|
|||
ncurses,
|
|||
pkg-config,
|
|||
enableXwinGraphics ? false,
|
|||
}:
|
|||
|
|||
let
|
|||
options = [
|
|||
"${if enableXwinGraphics then "XWIN" else "CURSES"}GRAPHX"
|
|||
"EXT94"
|
|||
"PERMUTATE"
|
|||
"RWLIMIT"
|
|||
];
|
|||
pkgConfigLibs =
|
|||
lib.optionals enableXwinGraphics [ "x11" ]
|
|||
++ lib.optionals (!enableXwinGraphics) [ "ncurses" ];
|
|||
in
|
|||
stdenv.mkDerivation (finalAttrs: {
|
|||
pname = "pmars";
|
|||
version = "0.9.4";
|
|||
|
|||
src = fetchzip {
|
|||
url = "http://www.koth.org/pmars/pmars-${finalAttrs.version}.zip";
|
|||
hash = "sha256-68zsH9HWWp13pozjMajayS/VhY8iTosUp1CvcAmj/dE=";
|
|||
};
|
|||
|
|||
patches = [
|
|||
# Error under Clang due to global "round" variable: redefinition of 'round' as different kind of symbol
|
|||
./0001-fix-round-redefinition.patch
|
|||
|
|||
# call to undeclared function 'sighandler' & undefined sighandler on Darwin
|
|||
./0002-fix-sighandler.patch
|
|||
];
|
|||
|
|||
postPatch = ''
|
|||
substituteInPlace src/Makefile \
|
|||
--replace-fail 'CC = gcc' "CC = $CC" \
|
|||
--replace-fail '@strip' "@$STRIP" \
|
|||
--replace-fail 'CFLAGS = -O -DEXT94 -DXWINGRAPHX -DPERMUTATE -DRWLIMIT' "CFLAGS = ${
|
|||
lib.concatMapStringsSep " " (opt: "-D${opt}") options
|
|||
} ${
|
|||
lib.optionalString (
|
|||
pkgConfigLibs != [ ]
|
|||
) "$($PKG_CONFIG --cflags ${lib.strings.concatStringsSep " " pkgConfigLibs})"
|
|||
}" \
|
|||
--replace-fail 'LIB = -L/usr/X11R6/lib -lX11' "LIB = ${
|
|||
lib.optionalString (
|
|||
pkgConfigLibs != [ ]
|
|||
) "$($PKG_CONFIG --libs ${lib.strings.concatStringsSep " " pkgConfigLibs})"
|
|||
}"
|
|||
'';
|
|||
|
|||
nativeBuildInputs = [ installShellFiles ] ++ lib.optionals (pkgConfigLibs != [ ]) [ pkg-config ];
|
|||
|
|||
buildInputs =
|
|||
lib.optionals enableXwinGraphics [ libX11 ]
|
|||
++ lib.optionals (!enableXwinGraphics) [ ncurses ];
|
|||
|
|||
preConfigure = ''
|
|||
cd src
|
|||
'';
|
|||
|
|||
hardeningDisable = [ "format" ];
|
|||
|
|||
enableParallelBuilding = true;
|
|||
|
|||
installPhase = ''
|
|||
runHook preInstall
|
|||
|
|||
install -Dm755 pmars $out/bin/pmars
|
|||
|
|||
mkdir -p $out/share/pmars
|
|||
cp -R -t $out/share/pmars/ ../{AUTHORS,COPYING,README,config,warriors}
|
|||
|
|||
installManPage ../doc/pmars.6
|
|||
|
|||
mkdir -p $out/share/doc/pmars
|
|||
cp -t $out/share/doc/pmars/ ../doc/{primer.*,redcode.ref}
|
|||
|
|||
runHook postInstall
|
|||
'';
|
|||
|
|||
passthru = {
|
|||
inherit options;
|
|||
};
|
|||
|
|||
meta = {
|
|||
description = "Official Core War simulator";
|
|||
longDescription = ''
|
|||
Portable MARS is the official Core War simulator of the ICWS and the rec.games.corewar newsgroup. pMARS serves as
|
|||
a test bed for new Redcode standards and tournament styles. It has also been used in genetic algorithm experiments
|
|||
and as an assembly language teaching aid. pMARS is under active development by a group of Core War enthusiasts who
|
|||
put a lot of time into this project.
|
|||
'';
|
|||
homepage = "http://www.koth.org/pmars/";
|
|||
license = lib.licenses.gpl2Plus;
|
|||
mainProgram = "pmars";
|
|||
maintainers = with lib.maintainers; [ OPNA2608 ];
|
|||
platforms = lib.platforms.unix;
|
|||
};
|
|||
})
|