diff options
author | Luis Ressel <aranea@aixah.de> | 2018-08-21 23:11:34 +0200 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2018-08-23 21:50:07 +0200 |
commit | c9efdc6e013f8e2fdaf9b83e39e4f1339b793387 (patch) | |
tree | ca5264364bc45cf6e7c4a6f140047ad7c77fb024 /games-roguelike | |
parent | net-misc/connman: restore IUSE="+wifi" on 1.36 (diff) | |
download | gentoo-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
Diffstat (limited to 'games-roguelike')
-rw-r--r-- | games-roguelike/nethack/Manifest | 1 | ||||
-rw-r--r-- | games-roguelike/nethack/files/nethack-3.6.1-recover.patch | 115 | ||||
-rw-r--r-- | games-roguelike/nethack/nethack-3.6.1.ebuild | 128 |
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" +} |