unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: ludo@gnu.org (Ludovic Courtès)
To: Kei Kebreau <kei@openmailbox.org>
Cc: guix-devel@gnu.org
Subject: Re: [PATCH] gnu: Add nethack.
Date: Sat, 04 Jun 2016 23:15:57 +0200	[thread overview]
Message-ID: <87y46kwt82.fsf@gnu.org> (raw)
In-Reply-To: <20160531175630.0bfd76ff@openmailbox.org> (Kei Kebreau's message of "Tue, 31 May 2016 17:56:30 -0400")

Hi!

Kei Kebreau <kei@openmailbox.org> skribis:

> From b728e078408f17136e8a4c3344b606e8f152b9e4 Mon Sep 17 00:00:00 2001
> From: Kei Kebreau <kei@openmailbox.org>
> Date: Tue, 31 May 2016 17:42:28 -0400
> Subject: [PATCH] gnu: Add nethack.
>
> * gnu/packages/games.scm (nethack): New variable.

You need to mention the new .patch file here (see ‘git log’ for
examples.)

You also need to add the .patch file to gnu/local.mk, and to mention the
change to gnu/local.mk in the commit log.

[...]

> +         (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")))

Should be: (zero? (system* …)), which returns #t on success (a phase
must return a true value to be considered successful.)

> +         (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")))

Instead of using the ‘mv’ command (or any other Coreutils command, for
that matter), use the Scheme equivalent.  Here it would be:

  (install-file file directory)

Besides, “/games” is unusual in the file system hierarchy.  Usually,
state files go to the localstatedir, i.e., the var/PACKAGE subdirectory.

Thus, what about putting state files in OUT/var/nethack?

But again, OUT is immutable, so these files cannot be modified, so
they’re not really “state.”

> +                         '("logfile" "perm" "record" "save" "xlogfile")))))

For clarity, have the phase return #t.

> +         (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~%"

Do we really need this wrapper?  Can’t we instead take it as a patch
from Debian or something?  I’m not a fan of inline Bash code, and not
very confident of scripts that do ‘rm -rf’.  :-)


> +--- 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

Patches must always start with a line or two indicating what they do and
what their upstream status or origin is.

> +@@ -308,7 +308,6 @@
> + #define INSURANCE /* allow crashed game recovery */
> + 
> + #ifndef MAC
> +-#define CHDIR /* delete if no chdir() available */
> + #endif

Why?

> +-# 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

Would it work to, instead, do:

  #:make-flags '("CC=gcc" "LEX=flex" …)

If it does, I think it’s preferable.

Could you send an updated patch?

Thanks for working on this tricky package!  ;-)

Ludo’.

  reply	other threads:[~2016-06-04 21:16 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-31 21:56 [PATCH] gnu: Add nethack Kei Kebreau
2016-06-04 21:15 ` Ludovic Courtès [this message]
2016-06-06 20:25   ` Kei Kebreau
2016-06-07 17:20     ` Leo Famulari
2016-06-08 12:59       ` Ludovic Courtès
2016-06-08 18:05         ` Kei Kebreau
2016-06-08 20:44           ` Leo Famulari
2016-06-09  1:17             ` Kei Kebreau
2016-12-30 21:30               ` Chris Marusich
2016-12-30 21:47                 ` Kei Kebreau

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87y46kwt82.fsf@gnu.org \
    --to=ludo@gnu.org \
    --cc=guix-devel@gnu.org \
    --cc=kei@openmailbox.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).