Skip to content

Commit

Permalink
games-roguelike/nethack: Bump to 3.6.0
Browse files Browse the repository at this point in the history
Thorough ebuild rewrite.

Gentoo-Bug: 567762
  • Loading branch information
atlaua committed Dec 30, 2015
1 parent 6150c6e commit 9d33d1d
Show file tree
Hide file tree
Showing 5 changed files with 332 additions and 0 deletions.
1 change: 1 addition & 0 deletions games-roguelike/nethack/Manifest
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
DIST nethack-343-src.tgz 3497458 SHA256 bb39c3d2a9ee2df4a0c8fdde708fbc63740853a7608d2f4c560b488124866fe4 SHA512 052342c19619219f291571d48cf7799f962eb6ec6f8a276427225c0abbd833eada18abeff9fbd647919f2a9e3bb097d7f154675e283fe48abc4752f24c192d8f WHIRLPOOL 397c787f83149d96ddbfa6a2235c20c3724ed67946889d432774901cb7ddc71b177e2cbd6c3029f4eb0b4df21c81c6a427494dad550fdbace01876a3d9c79d75
DIST nethack-360-src.tgz 4261282 SHA256 1ade698d8458b8d87a4721444cb73f178c74ed1b6fde537c12000f8edf2cb18a SHA512 92370a3c60a4f6861b9c0f1e1320fc23d91cedc1615d0d09e06a0ee3e13c9c8c0cd931389bfd7a25845ed07ef966d19d9e46e77ae07084a941685dc67f49c813 WHIRLPOOL 14ff7a8bcf06b18e5192a7478f1fcd25eb55ecc149d9fa8b80def95311a498ef8d172ee4ff7e69c62e36b2a190a0f14b4a3d4f61183a48676fa77e2e7268690c
19 changes: 19 additions & 0 deletions games-roguelike/nethack/files/nethack-3.6.0-hint-tty
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#-PRE

LINK=$(CC)

WINSRC = $(WINTTYSRC)
WINOBJ = $(WINTTYOBJ)
WINLIB = $(WINTTYLIB)

GAMEPERM = 02755
VARDIRPERM = 0770
VARFILEPERM = 0660
CHOWN = true
CHGRP = true


#-POST

# needed for external pager, bug #57410
DATNODLB = $(VARDATND) license $(DATHELP)
23 changes: 23 additions & 0 deletions games-roguelike/nethack/files/nethack-3.6.0-hint-x11
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#-PRE

LINK=$(CC)

VARDATND = x11tiles NetHack.ad pet_mark.xbm pilemark.xbm rip.xpm

WINSRC = $(WINTTYSRC) $(WINX11SRC)
WINOBJ = $(WINTTYOBJ) $(WINX11OBJ)
WINLIB = $(WINTTYLIB) $(WINX11LIB)

GAMEPERM = 02755
VARDIRPERM = 0770
VARFILEPERM = 0660
CHOWN = true
CHGRP = true


#-POST

# needed for external pager, bug #57410
DATNODLB = $(VARDATND) license $(DATHELP)

WINX11LIB = -lXaw -lXmu -lXext -lXt -lX11 -lXpm
110 changes: 110 additions & 0 deletions games-roguelike/nethack/files/nethack-3.6.0-recover.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
From c15cf56e61c908ce756d698a8afa3064030761b3 Mon Sep 17 00:00:00 2001
From: Luis Ressel <[email protected]>
Date: Fri, 18 Dec 2015 23:16:56 +0100
Subject: [PATCH] doc: Rename recover to recover-nethack

---
doc/recover.6 | 30 +++++++++++++++---------------
1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/doc/recover.6 b/doc/recover.6
index 4c9f509..edd05e3 100644
--- a/doc/recover.6
+++ b/doc/recover.6
@@ -1,10 +1,10 @@
-.TH RECOVER 6 "9 January 1993"
+.TH RECOVER-NETHACK 6 "9 January 1993"
.\" NetHack 3.6 recover.6 $NHDT-Date: 1432512786 2015/05/25 00:13:06 $ $NHDT-Branch: master $:$NHDT-Revision: 1.6 $
.UC 4
.SH NAME
-recover \- recover a NetHack game interrupted by disaster
+recover-nethack \- recover a NetHack game interrupted by disaster
.SH SYNOPSIS
-.B recover
+.B recover-nethack
[
.B \-d
.I directory
@@ -22,7 +22,7 @@ so such games can be recovered at the point of the last level change.
The
.I base
options tell
-.I recover
+.I recover-nethack
which files to process.
Each base option specifies recovery of a separate game.
.PP
@@ -72,47 +72,47 @@ by a user number to avoid conflicts,
or "xlock" if the number of concurrent players is being limited.
It may be necessary to look in the playground to find the correct
base name of the interrupted game.
-.I recover
+.I recover-nethack
will transform these level files into a save file of the same name as
.I nethack
would have used.
.PP
Since
-.I recover
+.I recover-nethack
must be able to read and delete files from the playground
and create files in the save directory,
it has interesting interactions with game security.
Giving ordinary players access to
-.I recover
+.I recover-nethack
through setuid or setgid is tantamount to leaving the playground
world-writable,
with respect to both cheating and messing up other players.
For a single-user system, this of course does not change anything,
so some of the microcomputer ports install
-.I recover
+.I recover-nethack
by default.
.PP
For a multi-user system,
the game administrator may want to arrange for all .0 files in the
-playground to be fed to recover when the host machine boots,
+playground to be fed to recover-nethack when the host machine boots,
and handle game crashes individually.
If the user population is sufficiently trustworthy,
-.I recover
+.I recover-nethack
can be installed with the same permissions the
.I nethack
executable has.
In either case,
-.I recover
+.I recover-nethack
is easily compiled from the distribution utility directory.
.SH NOTES
.PP
Like
.I nethack
itself,
-.I recover
+.I recover-nethack
will overwrite existing savefiles of the same name.
Savefiles created by
-.I recover
+.I recover-nethack
are uncompressed;
they may be compressed afterwards if desired,
but even a compression-using
@@ -122,11 +122,11 @@ will find them in the uncompressed form.
nethack(6)
.SH BUGS
.PP
-.I recover
+.I recover-nethack
makes no attempt to find out if a base name specifies a game in progress.
If multiple machines share a playground, this would be impossible to
determine.
.PP
-.I recover
+.I recover-nethack
should be taught to use the nethack playground locking mechanism to
avoid conflicts.
--
2.6.4

179 changes: 179 additions & 0 deletions games-roguelike/nethack/nethack-3.6.0.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

EAPI=5
inherit eutils toolchain-funcs flag-o-matic user

MY_PV=${PV//.}
DESCRIPTION="The ultimate old-school single player dungeon exploration game"
HOMEPAGE="http://www.nethack.org/"
SRC_URI="mirror://sourceforge/nethack/${PN}-${MY_PV}-src.tgz"

LICENSE="nethack"
SLOT="0"
KEYWORDS="~amd64 ~hppa ~ppc ~sparc ~x86 ~x86-fbsd"
IUSE="X"

RDEPEND="sys-libs/ncurses:0=
X? (
x11-libs/libXaw
x11-libs/libXpm
x11-libs/libXt
)"
DEPEND="${RDEPEND}
virtual/pkgconfig
X? (
x11-proto/xproto
x11-apps/bdftopcf
x11-apps/mkfontdir
)"

BINDIR="/usr/bin"
STATEDIR="/var/games/${PN}"

NETHACK_GROUP="gamestat"

pkg_setup() {
HACKDIR="/usr/$(get_libdir)/${PN}"

enewgroup gamestat 36
}

src_prepare() {
epatch "${FILESDIR}/${P}-recover.patch"
epatch_user

cp "${FILESDIR}/${P}-hint-$(usex X x11 tty)" hint || die "Failed to copy hint file"
sys/unix/setup.sh hint || die "Failed to run setup.sh"
}

src_compile() {
append-cflags -I../include -DDLB -DSECURE -DLINUX -DTIMED_DELAY -DVISION_TABLES
append-cflags '-DCOMPRESS=\"/bin/gzip\"' '-DCOMPRESS_EXTENSION=\".gz\"'
append-cflags "-DHACKDIR=\\\"${HACKDIR}\\\"" "-DVAR_PLAYGROUND=\\\"${STATEDIR}\\\""
append-cflags "-DLOCKDIR=\\\"${STATEDIR}\\\"" "-DDEF_PAGER=\\\"${PAGER}\\\""
append-cflags -DSYSCF "-DSYSCF_FILE=\\\"/etc/nethack.sysconf\\\""

use X && append-cflags -DX11_GRAPHICS -DUSE_XPM

emake \
CC="$(tc-getCC)" CFLAGS="${CFLAGS}" LFLAGS="${LDFLAGS}" \
WINTTYLIB="$($(tc-getPKG_CONFIG) --libs ncurses)" \
HACKDIR="${HACKDIR}" INSTDIR="${D}/${HACKDIR}" \
SHELLDIR="${D}/${BINDIR}" VARDIR="${D}/${STATEDIR}" \
nethack recover Guidebook spec_levs

# Upstream still has some parallel compilation bugs
emake -j1 \
CC="$(tc-getCC)" CFLAGS="${CFLAGS}" LFLAGS="${LDFLAGS}" \
WINTTYLIB="$($(tc-getPKG_CONFIG) --libs ncurses)" \
HACKDIR="${HACKDIR}" INSTDIR="${D}/${HACKDIR}" \
SHELLDIR="${D}/${BINDIR}" VARDIR="${D}/${STATEDIR}" \
all
}

src_install() {
emake \
CC="$(tc-getCC)" CFLAGS="${CFLAGS}" LFLAGS="${LDFLAGS}" \
WINTTYLIB="$($(tc-getPKG_CONFIG) --libs ncurses)" \
HACKDIR="${HACKDIR}" INSTDIR="${D}/${HACKDIR}" \
SHELLDIR="${D}/${BINDIR}" VARDIR="${D}/${STATEDIR}" \
install

exeinto "${BINDIR}"
newexe util/recover recover-nethack
rm "${D}/${HACKDIR}/recover" || die "Failed to remove HACKDIR/recover"

doman doc/nethack.6
newman doc/recover.6 recover-nethack.6
dodoc doc/Guidebook.txt

insinto /etc
newins sys/unix/sysconf nethack.sysconf

insinto /etc/skel
newins "${FILESDIR}/dot.nethackrc" .nethackrc

local windowtypes="tty"
use X && windowtypes="x11 ${windowtypes}"
set -- ${windowtypes}
sed -i \
-e "s:GENTOO_WINDOWTYPES:${windowtypes}:" \
-e "s:GENTOO_DEFWINDOWTYPE:$1:" \
"${D}/etc/skel/.nethackrc" \
|| die "sed /etc/skel/.nethackrc failed"

if use X ; then
cd "${S}/win/X11" || die "Failed to enter win/X11 directory"

# copy nethack x application defaults
insinto /etc/X11/app-defaults
newins NetHack.ad NetHack
rm "${D}/${HACKDIR}/NetHack.ad" || die "Failed to remove NetHack.ad"

newicon nh_icon.xpm nethack.xpm
make_desktop_entry ${PN} Nethack

# install nethack fonts
bdftopcf -o nh10.pcf nh10.bdf || die "Converting fonts failed"
bdftopcf -o ibm.pcf ibm.bdf || die "Converting fonts failed"
insinto "${HACKDIR}/fonts"
doins *.pcf
cd "${D}/${HACKDIR}/fonts" || die "Failed to enter fonts directory"
mkfontdir || die "The action mkfontdir ${HACKDIR}/fonts failed"
fi

rm -r "${D}/${STATEDIR}" || die "Failed to clean STATEDIR"
keepdir "${STATEDIR}/save"

fowners -R "root:${NETHACK_GROUP}" "${STATEDIR}"
fperms 770 "${STATEDIR}" "${STATEDIR}/save"

fowners "root:${NETHACK_GROUP}" "${HACKDIR}/nethack"
fperms g+s "${HACKDIR}/nethack"
}

pkg_preinst() {
if has_version "<${CATEGORY}/${PN}-3.4.3-r3" ; then
migration=true

# preserve STATEDIR/{logfile,record}
# (previous ebuild rev mistakenly removes it)
for f in "${ROOT}/${STATEDIR}/"{logfile,record} ; do
if [[ -e "$f" ]] ; then
cp "$f" "$T" || die "Failed to preserve ${ROOT}/${STATEDIR} files"
else
touch "$T/$f" || die "Failed to preserve ${ROOT}/${STATEDIR} files"
fi
done
fi
}

pkg_postinst() {
cd "${ROOT}/${STATEDIR}" || die "Failed to enter ${STATEDIR} directory"

if [[ -v migration ]] ; then
cp "$T/"{logfile,record} . ||
die "Failed to preserve ${ROOT}/${STATEDIR} files"
fi

touch logfile perm record xlogfile || die "Failed to create log files"

chown -R root:"${NETHACK_GROUP}" . &&
chmod -R 660 . &&
chmod 770 . save ||
die "Adjustment of file permissions in ${ROOT}/${STATEDIR} failed"

touch -c bones* save/* # non-critical

elog "A minimal default .nethackrc has been placed in /etc/skel/"
elog "The sysconf file is at /etc/nethack.sysconf"

if has_version "<${CATEGORY}/${PN}-3.6.0" ; then
elog
elog "Nethack 3.6 includes many new features."
elog "You might want to review your options and local patchset."
elog "Have a look at http://www.nethack.org/v360/release.html"
fi
}

0 comments on commit 9d33d1d

Please sign in to comment.