2017-04-06 14:27:36 +01:00
|
|
|
{ stdenv, lib, fetchurl, writeScript, coreutils, ncurses, gzip, flex, bison, less }:
|
2015-06-29 12:19:12 +01:00
|
|
|
|
2015-12-08 14:45:44 +00:00
|
|
|
let
|
|
|
|
platform =
|
|
|
|
if lib.elem stdenv.system lib.platforms.unix then "unix"
|
2017-12-05 23:06:43 +00:00
|
|
|
else throw "Unknown platform for NetHack: ${stdenv.system}";
|
2015-12-08 14:45:44 +00:00
|
|
|
unixHint =
|
|
|
|
if stdenv.isLinux then "linux"
|
2016-02-29 03:04:23 +00:00
|
|
|
else if stdenv.isDarwin then "macosx10.10"
|
2015-12-08 14:45:44 +00:00
|
|
|
# We probably want something different for Darwin
|
|
|
|
else "unix";
|
2015-12-08 15:10:53 +00:00
|
|
|
userDir = "~/.config/nethack";
|
2017-04-06 14:27:36 +01:00
|
|
|
binPath = lib.makeBinPath [ coreutils less ];
|
2015-12-08 14:45:44 +00:00
|
|
|
|
|
|
|
in stdenv.mkDerivation {
|
|
|
|
name = "nethack-3.6.0";
|
2015-06-29 12:19:12 +01:00
|
|
|
|
2009-05-12 05:27:10 +01:00
|
|
|
src = fetchurl {
|
2015-12-08 14:45:44 +00:00
|
|
|
url = "mirror://sourceforge/nethack/nethack-360-src.tgz";
|
|
|
|
sha256 = "12mi5kgqw3q029y57pkg3gnp930p7yvlqi118xxdif2qhj6nkphs";
|
2009-05-12 05:27:10 +01:00
|
|
|
};
|
|
|
|
|
2015-06-29 12:19:12 +01:00
|
|
|
buildInputs = [ ncurses ];
|
|
|
|
|
|
|
|
nativeBuildInputs = [ flex bison ];
|
2009-05-12 05:27:10 +01:00
|
|
|
|
2015-12-08 14:45:44 +00:00
|
|
|
makeFlags = [ "PREFIX=$(out)" ];
|
2009-05-12 05:27:10 +01:00
|
|
|
|
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
|
|
|
|
'';
|
|
|
|
|
2015-12-08 14:45:44 +00:00
|
|
|
configurePhase = ''
|
|
|
|
cd sys/${platform}
|
|
|
|
${lib.optionalString (platform == "unix") ''
|
|
|
|
sh setup.sh hints/${unixHint}
|
|
|
|
''}
|
|
|
|
cd ../..
|
2015-06-29 12:19:12 +01:00
|
|
|
'';
|
|
|
|
|
|
|
|
postInstall = ''
|
2015-12-08 14:45:44 +00:00
|
|
|
mkdir -p $out/games/lib/nethackuserdir
|
2016-06-03 07:46:34 +01:00
|
|
|
for i in xlogfile logfile perm record save; do
|
2015-12-08 14:45:44 +00:00
|
|
|
mv $out/games/lib/nethackdir/$i $out/games/lib/nethackuserdir
|
2015-06-29 12:19:12 +01:00
|
|
|
done
|
|
|
|
|
2012-01-18 20:16:00 +00:00
|
|
|
mkdir -p $out/bin
|
2015-06-29 12:19:12 +01:00
|
|
|
cat <<EOF >$out/bin/nethack
|
2015-12-08 15:10:53 +00:00
|
|
|
#! ${stdenv.shell} -e
|
2017-04-06 14:27:36 +01:00
|
|
|
PATH=${binPath}:\$PATH
|
2015-06-29 12:19:12 +01: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 12:19:12 +01:00
|
|
|
|
2016-02-29 03:04:23 +00:00
|
|
|
RUNDIR=\$(mktemp -d)
|
2015-06-29 12:19:12 +01: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 12:19:12 +01:00
|
|
|
EOF
|
|
|
|
chmod +x $out/bin/nethack
|
|
|
|
'';
|
|
|
|
|
|
|
|
meta = with stdenv.lib; {
|
|
|
|
description = "Rogue-like game";
|
2017-08-01 21:03:30 +01:00
|
|
|
homepage = http://nethack.org/;
|
2015-06-29 12:19:12 +01:00
|
|
|
license = "nethack";
|
|
|
|
platforms = platforms.unix;
|
|
|
|
maintainers = with maintainers; [ abbradar ];
|
2009-05-12 05:27:10 +01:00
|
|
|
};
|
|
|
|
}
|