View Raw Ebuild
# Copyright 2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit flag-o-matic toolchain-funcs
DESCRIPTION="NetHack 3.6 variant features GruntHack, SporkHack and others with custom content"
HOMEPAGE="https://nethackwiki.com/wiki/EvilHack"
if [[ "${PV}" == "9999" ]]; then
inherit git-r3
EGIT_REPO_URI="https://github.com/k21971/EvilHack.git"
else
SRC_URI="https://github.com/k21971/EvilHack/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~ppc ~ppc64 ~riscv ~x86"
S="${WORKDIR}/EvilHack-${PV}"
fi
LICENSE="nethack"
SLOT="0"
RDEPEND="acct-group/gamestat
sys-libs/ncurses:0=
dev-debug/gdb"
DEPEND="${RDEPEND}
"
BDEPEND="virtual/pkgconfig"
src_prepare() {
eapply_user
cp "${FILESDIR}/evilhack-hint-tty.1" hint || die "Failed to copy hint file"
sed -i "s:@HACKDIR@:${EPREFIX}/usr/$(get_libdir)/evilhack:" hint || die
sed -i "s:@SHELLDIR@:${EPREFIX}/usr/bin:" hint || die
sed -i "s:@VARDIR@:${EPREFIX}/var/games/evilhack:" hint || die
sed -i "s:@WINTTYLIB@:$($(tc-getPKG_CONFIG) --libs ncurses):" hint || die
sys/unix/setup.sh hint || die "Failed to run setup.sh"
}
src_compile() {
# evilhack sys/unix/hints/linux-debug
append-cflags -I../include -DNOTPARMDECL -fno-common
append-cflags -DDLB
append-cflags "-DCOMPRESS=\\\"${EPREFIX}/bin/gzip\\\"" '-DCOMPRESS_EXTENSION=\".gz\"'
## append-cflags -DGCC_WARN -Wall -Wextra -Wformat=2 #-Werror
## append-cflags -Wimplicit -Wreturn-type -Wunused -Wswitch -Wshadow -Wwrite-strings
## append-cflags -Wno-format-nonliteral
## append-cflags -Wno-stringop-truncation
## append-cflags -Wno-missing-field-initializers
## append-cflags -Wno-format-overflow -Wno-stringop-overflow
append-cflags -DSYSCF "-DSYSCF_FILE=\\\"${EPREFIX}/etc/evilhack.sysconf\\\"" -DSECURE
append-cflags -DTIMED_DELAY
append-cflags "-DHACKDIR=\\\"${EPREFIX}/usr/$(get_libdir)/evilhack\\\""
append-cflags "-DVAR_PLAYGROUND=\\\"${EPREFIX}/var/games/evilhack\\\""
append-cflags -DCONFIG_ERROR_SECURE=FALSE
append-cflags -DCURSES_GRAPHICS
append-cflags -DPANICLOG_FMT2
append-cflags -DTTY_TILES_ESCCODES
append-cflags -DSCORE_ON_BOTL
append-cflags -DREALTIME_ON_BOTL
append-cflags -DDGAMELAUNCH
append-cflags -DLIVELOG_ENABLE
append-cflags -DDUMPLOG
append-cflags -DDUMPHTML
# Upstream still has some parallel compilation bugs
emake -j1 all
}
src_install() {
sed -i "s:^HACKDIR=.*:HACKDIR=/usr/$(get_libdir)/evilhack:" sys/unix/nethack.sh || die
sed -i "s:^HACK=.*:HACK=\$HACKDIR/evilhack:" sys/unix/nethack.sh || die
newbin sys/unix/nethack.sh evilhack
newbin util/recover recover-evilhack
dodir /usr/$(get_libdir)/evilhack
for f in cmdhelp help hh history keyhelp license nhdat opthelp symbols wizhelp; do
mv "${S}/dat/${f}" "${ED}/usr/$(get_libdir)/evilhack/${f}" || die
done
mv src/evilhack "${ED}/usr/$(get_libdir)/evilhack/" || die
newman doc/evilhack.6 evilhack.6
newman doc/recover.6 recover-evilhack.6
dodoc doc/Guidebook.txt
insinto /etc
newins sys/unix/sysconf evilhack.sysconf
insinto /etc/skel
newins "${FILESDIR}/nethack-3.6.0-nethackrc" .evilhackrc
keepdir /var/games/evilhack/save
keepdir /var/games/evilhack/whereis
}
pkg_preinst() {
fowners root:gamestat /var/games/evilhack /var/games/evilhack/save /var/games/evilhack/whereis
fperms 2770 /var/games/evilhack /var/games/evilhack/save /var/games/evilhack/whereis
fowners root:gamestat "/usr/$(get_libdir)/evilhack/evilhack"
fperms g+s "/usr/$(get_libdir)/evilhack/evilhack"
}
pkg_postinst() {
cd "${EROOT}/var/games/evilhack" || die "Failed to enter ${EROOT}/var/games/evilhack directory"
# Those files can't be created earlier because we don't want portage to wipe them during upgrades
( umask 007 && touch livelog logfile perm record wishtracker xlogfile ) || die "Failed to create log files"
# Instead of using a proper version header in its save files, evilhack 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/* )
[[ -n "${saves[*]}" ]] && touch -c "${saves[@]}"
) # non-fatal
elog "A minimal default .evilhackrc has been placed in /etc/skel/"
elog "The sysconf file is at /etc/evilhack.sysconf"
}