summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuis Ressel <aranea@aixah.de>2018-08-21 23:11:34 +0200
committerMichał Górny <mgorny@gentoo.org>2018-08-23 21:50:07 +0200
commitc9efdc6e013f8e2fdaf9b83e39e4f1339b793387 (patch)
treeca5264364bc45cf6e7c4a6f140047ad7c77fb024
parentnet-misc/connman: restore IUSE="+wifi" on 1.36 (diff)
downloadgentoo-c9efdc6e013f8e2fdaf9b83e39e4f1339b793387.tar.gz
gentoo-c9efdc6e013f8e2fdaf9b83e39e4f1339b793387.tar.bz2
gentoo-c9efdc6e013f8e2fdaf9b83e39e4f1339b793387.zip
games-roguelike/nethack: Bump to 3.6.1
* Bump to EAPI 7 * Update SRC_URI * (Hopefully?) support prefix builds * Various improvements suggested by mgorny * Set SGID on the /var/games/nethack directory to avoid a potential privilege escalation during package upgrades * Don't redefine LINUX and STATUS_HILITES * Unconditionally enable DUMPLOG and SCORE_ON_BOTL per upstream recommendations * Remove obsolete STATUS_VIA_WINDOWPORT and the now empty "experimental" USE flag Thanks-to: Michał Górny <mgorny@gentoo.org> Thanks-to: Laurent Bercot Closes: https://github.com/gentoo/gentoo/pull/9661
-rw-r--r--games-roguelike/nethack/Manifest1
-rw-r--r--games-roguelike/nethack/files/nethack-3.6.1-recover.patch115
-rw-r--r--games-roguelike/nethack/nethack-3.6.1.ebuild128
3 files changed, 244 insertions, 0 deletions
diff --git a/games-roguelike/nethack/Manifest b/games-roguelike/nethack/Manifest
index 8acf75891075..97ad7b566d2f 100644
--- a/games-roguelike/nethack/Manifest
+++ b/games-roguelike/nethack/Manifest
@@ -1 +1,2 @@
DIST nethack-360-src.tgz 4261282 BLAKE2B 7be22b8bdc7b5124418fa904aa3776d77440f67ec18782b878e037b989a18092ed88ca192224c7bc1eaa3cb438823188035c3e6d2aa85d13a7aa1e86c8527d32 SHA512 92370a3c60a4f6861b9c0f1e1320fc23d91cedc1615d0d09e06a0ee3e13c9c8c0cd931389bfd7a25845ed07ef966d19d9e46e77ae07084a941685dc67f49c813
+DIST nethack-361-src.tgz 4640769 BLAKE2B 3793a753e4012df64335e7e7ec60284de206012d5bb5d30a7ccfb458e456818f30dd0b4bfa9c41b1691bd01ee6aec2e44b57327586f0c9d76a573bf4c9bb00b1 SHA512 bd6e36c163f0d85e1ab1fc659464696b5a02c3864a800ad47e047fdc4a35fff4ef7dd28a9b071fa46f7f67fa45c97fdc77bc1f2bdbad80cc02950d73731d9c30
diff --git a/games-roguelike/nethack/files/nethack-3.6.1-recover.patch b/games-roguelike/nethack/files/nethack-3.6.1-recover.patch
new file mode 100644
index 000000000000..c7ad7808a2c3
--- /dev/null
+++ b/games-roguelike/nethack/files/nethack-3.6.1-recover.patch
@@ -0,0 +1,115 @@
+From 5d9a3ac6b9eaf63167e5c7c01f0bb33d383dab14 Mon Sep 17 00:00:00 2001
+From: Luis Ressel <aranea@aixah.de>
+Date: Tue, 21 Aug 2018 22:57:09 +0200
+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 1209d31d..c3fdd851 100644
+--- a/doc/recover.6
++++ b/doc/recover.6
+@@ -1,4 +1,4 @@
+-.TH RECOVER 6 "14 December 2015" NETHACK
++.TH RECOVER-NETHACK 6 "14 December 2015" NETHACK
+ .de ND
+ .ds Nd \\$3
+ ..
+@@ -13,9 +13,9 @@
+ .NR $NHDT-Revision: 1.9 $
+ .ds Na Kenneth Lorber
+ .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
+@@ -33,7 +33,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
+@@ -83,47 +83,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
+@@ -133,12 +133,12 @@ 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.
+ .SH COPYRIGHT
+--
+2.18.0
+
diff --git a/games-roguelike/nethack/nethack-3.6.1.ebuild b/games-roguelike/nethack/nethack-3.6.1.ebuild
new file mode 100644
index 000000000000..3c6526d8c1ca
--- /dev/null
+++ b/games-roguelike/nethack/nethack-3.6.1.ebuild
@@ -0,0 +1,128 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+inherit desktop flag-o-matic toolchain-funcs user
+
+MY_PV=${PV//.}
+DESCRIPTION="The ultimate old-school single player dungeon exploration game"
+HOMEPAGE="https://www.nethack.org/"
+SRC_URI="https://nethack.org/download/${PV}/nethack-${MY_PV}-src.tgz"
+
+LICENSE="nethack"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~hppa ~x86 ~x86-fbsd"
+IUSE="X"
+
+RDEPEND="sys-libs/ncurses:0=
+ X? (
+ x11-libs/libXaw
+ x11-libs/libXpm
+ x11-libs/libXt
+ )"
+DEPEND="${RDEPEND}
+ X? ( x11-base/xorg-proto )
+ "
+BDEPEND="virtual/pkgconfig
+ X? (
+ x11-apps/bdftopcf
+ x11-apps/mkfontdir
+ )"
+
+src_prepare() {
+ eapply "${FILESDIR}/${P}-recover.patch"
+ eapply_user
+
+ cp "${FILESDIR}/${PN}-3.6.0-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 -DTIMED_DELAY -DVISION_TABLES -DDUMPLOG -DSCORE_ON_BOTL
+ append-cflags '-DCOMPRESS=\"${EPREFIX}/bin/gzip\"' '-DCOMPRESS_EXTENSION=\".gz\"'
+ append-cflags "-DHACKDIR=\\\"${EPREFIX}/usr/$(get_libdir)/nethack\\\"" "-DVAR_PLAYGROUND=\\\"${EPREFIX}/var/games/nethack\\\""
+ append-cflags "-DDEF_PAGER=\\\"${PAGER}\\\""
+ append-cflags -DSYSCF "-DSYSCF_FILE=\\\"${EPREFIX}/etc/nethack.sysconf\\\""
+
+ use X && append-cflags -DX11_GRAPHICS -DUSE_XPM
+
+ LOCAL_MAKEOPTS=(
+ CC="$(tc-getCC)" CFLAGS="${CFLAGS}" LFLAGS="${LDFLAGS}"
+ WINTTYLIB="$($(tc-getPKG_CONFIG) --libs ncurses)"
+ HACKDIR="${EPREFIX}/usr/$(get_libdir)/nethack" INSTDIR="${ED}/usr/$(get_libdir)/nethack"
+ SHELLDIR="${ED}/usr/bin" VARDIR="${ED}/var/games/nethack"
+ )
+
+ emake "${LOCAL_MAKEOPTS[@]}" nethack recover Guidebook spec_levs
+
+ # Upstream still has some parallel compilation bugs
+ emake -j1 "${LOCAL_MAKEOPTS[@]}" all
+}
+
+src_install() {
+ emake "${LOCAL_MAKEOPTS[@]}" install
+
+ mv "${ED}/usr/$(get_libdir)/nethack/recover" "${ED}/usr/bin/recover-nethack" || die "Failed to move recover-nethack"
+
+ 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}/${PN}-3.6.0-nethackrc" .nethackrc
+
+ if use X ; then
+ cd "${S}/win/X11" || die "Failed to enter win/X11 directory"
+
+ mkdir -p "${ED}/etc/X11/app-defaults/" || die "Failed to make app-defaults directory"
+ mv "${ED}/usr/$(get_libdir)/nethack/NetHack.ad" "${ED}/etc/X11/app-defaults/" || die "Failed to move 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 "/usr/$(get_libdir)/nethack/fonts"
+ doins *.pcf
+ mkfontdir "${ED}/usr/$(get_libdir)/nethack/fonts" || die "mkfontdir failed"
+ fi
+
+ rm -r "${ED}/var/games/nethack" || die "Failed to clean var/games/nethack"
+ keepdir /var/games/nethack/save
+}
+
+pkg_preinst() {
+ enewgroup gamestat 36
+
+ fowners root:gamestat /var/games/nethack /var/games/nethack/save
+ fperms 2770 /var/games/nethack /var/games/nethack/save
+
+ fowners root:gamestat "/usr/$(get_libdir)/nethack/nethack"
+ fperms g+s "/usr/$(get_libdir)/nethack/nethack"
+}
+
+pkg_postinst() {
+ cd "${EROOT}/var/games/nethack" || die "Failed to enter ${EROOT}/var/games/nethack directory"
+
+ # Transition mechanism for <nethack-3.6.1 ebuilds. It's perfectly safe, so we'll just run it unconditionally.
+ chmod 2770 . save || die "Failed to chmod statedir"
+
+ # Those files can't be created earlier because we don't want portage to wipe them during upgrades
+ ( umask 007 && touch logfile perm record xlogfile ) || die "Failed to create log files"
+
+ # Instead of using a proper version header in its save files, nethack checks for incompatibilities
+ # by comparing the mtimes of save files and its own binary. This would require admin interaction even
+ # during upgrades which don't change the file format, so we'll just touch the files and warn the admin
+ # manually in case of compatibility issues.
+ ( shopt -s nullglob
+ local saves=( bones* save/* )
+ test ${#saves[@]} -gt 0 && touch -c "${saves[@]}"
+ ) # non-fatal
+
+ elog "A minimal default .nethackrc has been placed in /etc/skel/"
+ elog "The sysconf file is at /etc/nethack.sysconf"
+}