# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

inherit flag-o-matic toolchain-funcs readme.gentoo-r1

MY_PN="${PN/-sdl/}"
MY_PV="${PV/e/-5}"
MY_P="${MY_PN}-${MY_PV}"

DESCRIPTION="Portable redcode simulator's sdl port for core war"
HOMEPAGE="https://corewar.co.uk/pihlaja/pmars-sdl/"
SRC_URI="https://corewar.co.uk/pihlaja/pmars-sdl/${MY_P}.tar.gz"
S="${WORKDIR}/${MY_P}"

LICENSE="BSD GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE="sdl X"

RDEPEND="
	sdl? ( x11-libs/libX11 media-libs/libsdl[video] )
	X? ( x11-libs/libX11 )
	!sdl? ( !X? ( sys-libs/ncurses:0= ) )
"
DEPEND="${RDEPEND}"
BDEPEND="virtual/pkgconfig"

PATCHES=(
	"${FILESDIR}"/${P}-format.patch
	"${FILESDIR}"/${P}-ncurses-opaque.patch
	"${FILESDIR}"/${P}-c23.patch
)

DOC_CONTENTS="
	There are some macros in /usr/share/pmars/macros
	which you should make accessible to pmars by typing
	export PMARSHOME=/usr/share/pmars/macros\n
"

src_compile() {
	local LIB=""
	export LFLAGS="-x"

	append-cppflags -DEXT94 -DPERMUTATE

	if use sdl ; then
		append-cflags $(sdl-config --cflags)
		append-cppflags -DSDLGRAPHX

		LIB="$(sdl-config --libs)"
	elif use X ; then
		append-cppflags -DXWINGRAPHX

		LIB="$($(tc-getPKG_CONFIG) --libs x11)"
	else
		append-cppflags -DCURSESGRAPHX

		LIB="$($(tc-getPKG_CONFIG) --libs ncurses)"
	fi

	cd src || die

	local programs=(
		asm.c
		cdb.c
		clparse.c
		disasm.c
		eval.c
		global.c
		pmars.c
		sim.c
		pos.c
		str_eng.c
		token.c
	)

	for program in "${programs[@]}" ; do
		einfo "Compiling ${program}"
		$(tc-getCC) ${CPPFLAGS} ${CFLAGS} ${program} -c || die
	done

	einfo "Linking with LIB: ${LIB}"
	$(tc-getCC) ${LDFLAGS} *.o ${LIB} -o ${MY_PN} || die
}

src_install() {
	dobin src/${MY_PN}
	doman doc/${MY_PN}.6

	dodoc AUTHORS CONTRIB ChangeLog README doc/redcode.ref
	readme.gentoo_create_doc

	insinto /usr/share/${MY_PN}/warriors
	doins warriors/*

	insinto /usr/share/${MY_PN}/macros
	doins config/*.mac
}

pkg_postinst() {
	readme.gentoo_print_elog
}