diff options
Diffstat (limited to 'nixpkgs/pkgs/games/nethack/default.nix')
-rw-r--r-- | nixpkgs/pkgs/games/nethack/default.nix | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/games/nethack/default.nix b/nixpkgs/pkgs/games/nethack/default.nix new file mode 100644 index 000000000000..56904ae2dfe1 --- /dev/null +++ b/nixpkgs/pkgs/games/nethack/default.nix @@ -0,0 +1,151 @@ +{ stdenv, lib, fetchurl, coreutils, ncurses, gzip, flex, bison +, less, makeWrapper +, buildPackages +, x11Mode ? false, qtMode ? false, libXaw, libXext, bdftopcf, mkfontdir, pkgconfig, qt5 +}: + +let + platform = + if stdenv.hostPlatform.isUnix then "unix" + else throw "Unknown platform for NetHack: ${stdenv.hostPlatform.system}"; + unixHint = + if x11Mode then "linux-x11" + else if qtMode then "linux-qt4" + else if stdenv.hostPlatform.isLinux then "linux" + else if stdenv.hostPlatform.isDarwin then "macosx10.10" + # We probably want something different for Darwin + else "unix"; + userDir = "~/.config/nethack"; + binPath = lib.makeBinPath [ coreutils less ]; + +in stdenv.mkDerivation rec { + version = "3.6.1"; + name = if x11Mode then "nethack-x11-${version}" + else if qtMode then "nethack-qt-${version}" + else "nethack-${version}"; + + src = fetchurl { + url = "https://nethack.org/download/3.6.1/nethack-361-src.tgz"; + sha256 = "1dha0ijvxhx7c9hr0452h93x81iiqsll8bc9msdnp7xdqcfbz32b"; + }; + + buildInputs = [ ncurses ] + ++ lib.optionals x11Mode [ libXaw libXext ] + ++ lib.optionals qtMode [ gzip qt5.qtbase.bin qt5.qtmultimedia.bin ]; + + nativeBuildInputs = [ flex bison ] + ++ lib.optionals x11Mode [ mkfontdir bdftopcf ] + ++ lib.optionals qtMode [ + pkgconfig mkfontdir qt5.qtbase.dev + qt5.qtmultimedia.dev makeWrapper + bdftopcf + ]; + + makeFlags = [ "PREFIX=$(out)" ]; + + postPatch = '' + 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,^WINQT4LIB =.*,WINQT4LIB = `pkg-config Qt5Gui --libs` \\\ + `pkg-config Qt5Widgets --libs` \\\ + `pkg-config Qt5Multimedia --libs`,' \ + -i sys/unix/Makefile.src + sed \ + -e 's,^CFLAGS=-g,CFLAGS=,' \ + -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,' \ + -e 's,^CFLAGS=-g,CFLAGS=,' \ + -i sys/unix/hints/macosx10.10 + sed -e '/define CHDIR/d' -i include/config.h + ${lib.optionalString qtMode '' + sed \ + -e 's,^QTDIR *=.*,QTDIR=${qt5.qtbase.dev},' \ + -e 's,CFLAGS.*QtGui.*,CFLAGS += `pkg-config Qt5Gui --cflags`,' \ + -e 's,CFLAGS+=-DCOMPRESS.*,CFLAGS+=-DCOMPRESS=\\"${gzip}/bin/gzip\\" \\\ + -DCOMPRESS_EXTENSION=\\".gz\\",' \ + -i sys/unix/hints/linux-qt4 + ''} + ${lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform) + # If we're cross-compiling, replace the paths to the data generation tools + # with the ones from the build platform's nethack package, since we can't + # run the ones we've built here. + '' + ${buildPackages.perl}/bin/perl -p \ + -e 's,[a-z./]+/(makedefs|dgn_comp|lev_comp|dlb)(?!\.),${buildPackages.nethack}/libexec/nethack/\1,g' \ + -i sys/unix/Makefile.* + ''} + sed -i -e '/rm -f $(MAKEDEFS)/d' sys/unix/Makefile.src + ''; + + configurePhase = '' + pushd sys/${platform} + ${lib.optionalString (platform == "unix") '' + sh setup.sh hints/${unixHint} + ''} + popd + ''; + + enableParallelBuilding = true; + + 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 + done + + mkdir -p $out/bin + cat <<EOF >$out/bin/nethack + #! ${stdenv.shell} -e + PATH=${binPath}:\$PATH + + if [ ! -d ${userDir} ]; then + mkdir -p ${userDir} + cp -r $out/games/lib/nethackuserdir/* ${userDir} + chmod -R +w ${userDir} + fi + + RUNDIR=\$(mktemp -d) + + 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 + EOF + chmod +x $out/bin/nethack + ${lib.optionalString x11Mode "mv $out/bin/nethack $out/bin/nethack-x11"} + ${lib.optionalString qtMode "mv $out/bin/nethack $out/bin/nethack-qt"} + install -Dm 555 util/{makedefs,dgn_comp,lev_comp} -t $out/libexec/nethack/ + ${lib.optionalString (!(x11Mode || qtMode)) "install -Dm 555 util/dlb -t $out/libexec/nethack/"} + ''; + + postFixup = lib.optionalString qtMode '' + wrapProgram $out/bin/nethack-qt \ + --prefix QT_PLUGIN_PATH : "${qt5.qtbase}/${qt5.qtbase.qtPluginPrefix}" + ''; + + meta = with stdenv.lib; { + description = "Rogue-like game"; + homepage = http://nethack.org/; + license = "nethack"; + platforms = if x11Mode then platforms.linux else platforms.unix; + maintainers = with maintainers; [ abbradar ]; + }; +} |