@@ -49,10 +49,12 @@
#:use-module (gnu packages autotools)
#:use-module (gnu packages backup)
#:use-module (gnu packages base)
+ #:use-module (gnu packages bison)
#:use-module (gnu packages admin)
#:use-module (gnu packages audio)
#:use-module (gnu packages avahi)
#:use-module (gnu packages boost)
+ #:use-module (gnu packages flex)
#:use-module (gnu packages fribidi)
#:use-module (gnu packages game-development)
#:use-module (gnu packages gettext)
@@ -2243,3 +2245,99 @@ Red Eclipse provides fast paced and accessible gameplay.")
license:cc-by-sa3.0
license:cc-by3.0
license:cc0)))))
+
+(define-public nethack
+ (package
+ (name "nethack")
+ (version "3.6.0")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "mirror://sourceforge/" name "/" name "-"
+ (string-join (string-split version #\.) "")
+ "-src.tgz"))
+ (sha256
+ (base32
+ "12mi5kgqw3q029y57pkg3gnp930p7yvlqi118xxdif2qhj6nkphs"))
+ (patches
+ (search-patches
+ "nethack-correct-directories-and-permissions.patch"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:tests? #f ; no check target
+ #:phases
+ (modify-phases %standard-phases
+ (replace 'configure
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ (substitute* "sys/unix/hints/linux"
+ (("^PREFIX=.*$")
+ (string-append "PREFIX=" out "\n"))
+ (("/bin/gzip") (which "gzip")))
+ (substitute* "sys/unix/setup.sh"
+ (("/bin/sh") (which "bash"))))
+ (system* "sh" "sys/unix/setup.sh" "sys/unix/hints/linux")))
+ (add-after 'install 'move-state-files
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out")))
+ (mkdir (string-append out "/games/lib/nethack-state-files"))
+ (chdir (string-append out "/games/lib/nethackdir"))
+ (for-each (lambda (file)
+ (system* "mv" file
+ (string-append
+ out "/games/lib/nethack-state-files")))
+ '("logfile" "perm" "record" "save" "xlogfile")))))
+ (add-after 'move-state-files 'wrap-program
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (bin (string-append out "/bin"))
+ (nethack-user-dir "~/.nethack"))
+ (mkdir bin)
+ (with-directory-excursion bin
+ (call-with-output-file "nethack"
+ (lambda (port)
+ (format port "#!~a/bin/sh -e
+# Create NetHack directory in user's $HOME if it isn't there
+if [ ! -d ~a ]; then
+ mkdir -p ~a
+ cp -r ~a/* ~a
+ chmod -R +w ~a
+fi
+
+RUNDIR=$(mktemp -d)
+
+cleanup() {
+ rm -rf $RUNDIR
+}
+trap cleanup EXIT
+
+cd $RUNDIR
+for i in ~a/*; do
+ ln -s $i $(basename $i)
+done
+for i in ~a/*; do
+ ln -s $i $(basename $i)
+done
+./nethack~%"
+ (assoc-ref inputs "bash") ;implicit input
+ (string-append nethack-user-dir)
+ (string-append nethack-user-dir)
+ (string-append
+ out "/games/lib/nethack-state-files")
+ (string-append nethack-user-dir)
+ (string-append nethack-user-dir)
+ (string-append nethack-user-dir)
+ (string-append out "/games/lib/nethackdir")
+ (string-append out))))
+ (chmod "nethack" #o555)))
+ #t)))))
+ (native-inputs
+ `(("bison" ,bison)
+ ("flex" ,flex)))
+ (inputs `(("ncurses" ,ncurses)))
+ (home-page "http://nethack.org")
+ (synopsis "Single player dungeon exploration game")
+ (description
+ "Nethack is a roguelike game that emphasizes discovery of details in the
+dungeon. The random number generator provides an unlimited number of
+variations of the dungeon.")
+ (license (license:fsf-free "http://nethack.org/common/license.html"))))
new file mode 100644
@@ -0,0 +1,72 @@
+diff -r -u nethack-3.6.0.orig/include/config.h nethack-3.6.0/include/config.h
+--- nethack-3.6.0.orig/include/config.h 2016-05-27 17:20:03.062318307 -0400
++++ nethack-3.6.0/include/config.h 2016-05-31 16:48:04.283642766 -0400
+@@ -308,7 +308,6 @@
+ #define INSURANCE /* allow crashed game recovery */
+
+ #ifndef MAC
+-#define CHDIR /* delete if no chdir() available */
+ #endif
+
+ #ifdef CHDIR
+diff -r -u nethack-3.6.0.orig/include/unixconf.h nethack-3.6.0/include/unixconf.h
+--- nethack-3.6.0.orig/include/unixconf.h 2016-05-27 17:20:03.062318307 -0400
++++ nethack-3.6.0/include/unixconf.h 2016-05-30 20:33:52.132273630 -0400
+@@ -36,7 +36,7 @@
+ #define NETWORK /* if running on a networked system */
+ /* e.g. Suns sharing a playground through NFS */
+ /* #define SUNOS4 */ /* SunOS 4.x */
+-/* #define LINUX */ /* Another Unix clone */
++#define LINUX /* Another Unix clone */
+ /* #define CYGWIN32 */ /* Unix on Win32 -- use with case sensitive defines */
+ /* #define GENIX */ /* Yet Another Unix Clone */
+ /* #define HISX */ /* Bull Unix for XPS Machines */
+diff -r -u nethack-3.6.0.orig/sys/unix/Makefile.src nethack-3.6.0/sys/unix/Makefile.src
+--- nethack-3.6.0.orig/sys/unix/Makefile.src 2016-05-27 17:20:03.082318966 -0400
++++ nethack-3.6.0/sys/unix/Makefile.src 2016-05-27 17:42:47.183397931 -0400
+@@ -64,7 +64,7 @@
+ # if you get setcgtty() warnings during execution, you are feeding gcc
+ # a non-ANSI <sys/ioctl.h> -- either run fixincludes on it or use
+ # -traditional in CFLAGS
+-# CC = gcc
++CC = gcc
+ #
+ # For Bull DPX/2 systems at B.O.S. 2.0 or higher use the following:
+ #
+@@ -238,7 +238,7 @@
+ # WINTTYLIB = -ltermcap
+ # WINTTYLIB = -lcurses
+ # WINTTYLIB = -lcurses16
+-# WINTTYLIB = -lncurses
++WINTTYLIB = -lncurses
+ #WINTTYLIB = -ltermlib
+ #
+ # libraries for X11
+diff -r -u nethack-3.6.0.orig/sys/unix/Makefile.utl nethack-3.6.0/sys/unix/Makefile.utl
+--- nethack-3.6.0.orig/sys/unix/Makefile.utl 2016-05-27 17:20:03.082318966 -0400
++++ nethack-3.6.0/sys/unix/Makefile.utl 2016-05-27 20:01:54.605040799 -0400
+@@ -18,7 +18,7 @@
+
+ # if you are using gcc as your compiler,
+ # uncomment the CC definition below if it's not in your environment
+-# CC = gcc
++CC = gcc
+ #
+ # For Bull DPX/2 systems at B.O.S. 2.0 or higher use the following:
+ #
+@@ -104,11 +104,11 @@
+
+ # yacc/lex programs to use to generate *_comp.h, *_lex.c, and *_yacc.c.
+ # if, instead of yacc/lex you have bison/flex, comment/uncomment the following.
+-YACC = yacc
+-LEX = lex
+-# YACC = bison -y
++# YACC = yacc
++# LEX = lex
++YACC = bison -y
+ # YACC = byacc
+-# LEX = flex
++LEX = flex
+
+ # these are the names of the output files from YACC/LEX. Under MS-DOS
+ # and similar systems, they may differ