# Copyright 1999-2022 Ophelia Beatrice de Sica
# Distributed under the terms of the GNU General Public License v2

EAPI=7
inherit flag-o-matic

DESCRIPTION="id Software's Quake 2 v3.21 with mission packs and Vulkan support"
HOMEPAGE="https://github.com/kondrak/vkQuake2"

if [[ ${PV} = "9999" ]] ; then
	inherit git-r3
	EGIT_REPO_URI="https://github.com/kondrak/vkQuake2.git"
else
	SRC_URI="https://github.com/kondrak/vkQuake2/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz"
fi

LICENSE="GPL-2+"
SLOT="0"
KEYWORDS="~amd64"
IUSE="debug"

BDEPEND="virtual/pkgconfig"
DEPEND="
	media-libs/alsa-lib
	media-libs/libglvnd
	media-libs/mesa[vulkan]
	media-libs/vulkan-loader[layers]
	virtual/glu
	x11-libs/libX11
	x11-libs/libXext
	x11-libs/libXxf86dga
	x11-libs/libXxf86vm
	x11-libs/libxcb"

RDEPEND="${DEPEND}"

src_prepare() {
	eapply "${FILESDIR}/${P}-fix_executable_stack.patch"
	S="${S}/linux"
	eapply_user
}

src_compile() {
	btype="release"
	if use debug; then
		btype="debug"
	fi

	emake $btype
}

src_install() {
	dobin "${FILESDIR}/vkq2-link"

	btype="release"
	if use debug; then
		btype="debug"
	fi

	# Note: Files are installed with doexe to preserve folder structure.
	# dobin/dolib.so would cause files to be placed into a bin/lib64 subfolder.
	# Due to how quake2 loads game specific code at runtime
	# it is important to maintain this folder structure.
	cd "${btype}x64-glibc"
	exeinto "/usr/share/vkquake2"
	doexe q2ded
	doexe quake2
	doexe ref_glx.so
	doexe ref_vk.so

	exeinto "/usr/share/vkquake2/baseq2"
	doexe baseq2/gamex64.so

	exeinto "/usr/share/vkquake2/ctf"
	doexe ctf/gamex64.so

	exeinto "/usr/share/vkquake2/rogue"
	doexe rogue/gamex64.so

	exeinto "/usr/share/vkquake2/xatrix"
	doexe xatrix/gamex64.so

	exeinto "/usr/share/vkquake2/zaero"
	doexe zaero/gamex64.so
}

pkg_postinst() {
	elog "Run vkq2-link in your game directory"
	elog "or copy game files to /usr/share/vkquake2 (not recommended)"
	elog "The way Quake II loads game files sadly forces a rigorous folder structure"
	elog ""
	elog "This package does not come with any game files. (.pak files)"
	elog "Besides the main game vkQuake2 currently supports:"
	elog "* Quake II Mission Pack: The Reckoning (+set game xatrix)"
	elog "* Quake II Mission Pack: Ground Zero (+set game rogue)"
	elog "* Capture the Flag (Multiplayer) (+set game ctf)"
	elog "* Quake II: Zaero (free on moddb) (+set game zaero)"
}