nixpkgs/pkgs/games/nethack/default.nix

103 lines
2.8 KiB
Nix
Raw Normal View History

{ stdenv, lib, fetchurl, writeScript, coreutils, ncurses, gzip, flex, bison, less
, x11Mode ? false, libXaw, libXext, mkfontdir
}:
2015-06-29 11:19:12 +00:00
let
platform =
2018-03-09 23:40:51 +00:00
if stdenv.hostPlatform.isUnix then "unix"
else throw "Unknown platform for NetHack: ${stdenv.system}";
unixHint =
if x11Mode then "linux-x11"
else if stdenv.hostPlatform.isLinux then "linux"
2018-03-09 23:40:51 +00:00
else if stdenv.hostPlatform.isDarwin then "macosx10.10"
# We probably want something different for Darwin
else "unix";
2015-12-08 15:10:53 +00:00
userDir = "~/.config/nethack";
2017-04-06 13:27:36 +00:00
binPath = lib.makeBinPath [ coreutils less ];
in stdenv.mkDerivation {
name = "nethack${lib.optionalString x11Mode "-x11"}-3.6.1";
2015-06-29 11:19:12 +00:00
src = fetchurl {
url = "https://nethack.org/download/3.6.1/nethack-361-src.tgz";
2018-06-10 02:33:13 +00:00
sha256 = "1dha0ijvxhx7c9hr0452h93x81iiqsll8bc9msdnp7xdqcfbz32b";
};
buildInputs = [ ncurses ] ++ lib.optionals x11Mode [ libXaw libXext ];
2015-06-29 11:19:12 +00:00
nativeBuildInputs = [ flex bison ] ++ lib.optionals x11Mode [ mkfontdir ];
makeFlags = [ "PREFIX=$(out)" ];
2016-02-29 03:04:23 +00:00
patchPhase = ''
sed -e '/^ *cd /d' -i sys/unix/nethack.sh
sed \
-e 's/^YACC *=.*/YACC = bison -y/' \
-e 's/^LEX *=.*/LEX = flex/' \
-i sys/unix/Makefile.utl
sed \
-e 's,/bin/gzip,${gzip}/bin/gzip,g' \
-e 's,^WINTTYLIB=.*,WINTTYLIB=-lncurses,' \
-i sys/unix/hints/linux
sed \
-e 's,^CC=.*$,CC=cc,' \
-e 's,^HACKDIR=.*$,HACKDIR=\$(PREFIX)/games/lib/\$(GAME)dir,' \
-e 's,^SHELLDIR=.*$,SHELLDIR=\$(PREFIX)/games,' \
-i sys/unix/hints/macosx10.10
sed -e '/define CHDIR/d' -i include/config.h
'';
configurePhase = ''
cd sys/${platform}
${lib.optionalString (platform == "unix") ''
sh setup.sh hints/${unixHint}
''}
cd ../..
2015-06-29 11:19:12 +00:00
'';
postInstall = ''
mkdir -p $out/games/lib/nethackuserdir
for i in xlogfile logfile perm record save; do
mv $out/games/lib/nethackdir/$i $out/games/lib/nethackuserdir
2015-06-29 11:19:12 +00:00
done
mkdir -p $out/bin
2015-06-29 11:19:12 +00:00
cat <<EOF >$out/bin/nethack
2015-12-08 15:10:53 +00:00
#! ${stdenv.shell} -e
2017-04-06 13:27:36 +00:00
PATH=${binPath}:\$PATH
2015-06-29 11:19:12 +00:00
2015-12-08 15:10:53 +00:00
if [ ! -d ${userDir} ]; then
mkdir -p ${userDir}
cp -r $out/games/lib/nethackuserdir/* ${userDir}
chmod -R +w ${userDir}
fi
2015-06-29 11:19:12 +00:00
2016-02-29 03:04:23 +00:00
RUNDIR=\$(mktemp -d)
2015-06-29 11:19:12 +00:00
2015-12-08 15:10:53 +00:00
cleanup() {
rm -rf \$RUNDIR
}
trap cleanup EXIT
cd \$RUNDIR
for i in ${userDir}/*; do
ln -s \$i \$(basename \$i)
done
for i in $out/games/lib/nethackdir/*; do
ln -s \$i \$(basename \$i)
done
$out/games/nethack
2015-06-29 11:19:12 +00:00
EOF
chmod +x $out/bin/nethack
${lib.optionalString x11Mode "mv $out/bin/nethack $out/bin/nethack-x11"}
2015-06-29 11:19:12 +00:00
'';
meta = with stdenv.lib; {
description = "Rogue-like game";
homepage = http://nethack.org/;
2015-06-29 11:19:12 +00:00
license = "nethack";
platforms = if x11Mode then platforms.linux else platforms.unix;
2015-06-29 11:19:12 +00:00
maintainers = with maintainers; [ abbradar ];
};
}