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

EAPI=8

LUA_COMPAT=(luajit)

inherit cmake lua-single

DESCRIPTION="open-source engine for Heroes III"
HOMEPAGE="http://vcmi.eu"
INSTALL_PATH="/opt/vcmi"

# Get package version, get default values, if not underscore keep them
PACKAGE_VERSION=${PV}
PACKAGE_NAME=${P}
if [[ ${PACKAGE_VERSION} == *_p* ]]; then
	PACKAGE_VERSION="${PV%%_*}"
	PACKAGE_NAME="${PN}-${PACKAGE_VERSION}"
fi

GOOGLETEST_VERSION="1.15.2"

INNOEXTRACT_COMMIT="9977089412ebafe9f79936aa65a2edf16a84ae3e"

SRC_URI="
	https://github.com/vcmi/vcmi/archive/refs/tags/${PACKAGE_VERSION}.tar.gz -> ${P}.tar.gz
	https://github.com/google/googletest/archive/refs/tags/v${GOOGLETEST_VERSION}.tar.gz -> vcmi-googletest.tar.gz
	https://github.com/vcmi/innoextract/archive/${INNOEXTRACT_COMMIT}.tar.gz -> vcmi-innoextract.tar.gz
"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="amd64"
# TODO: other arches
IUSE="+editor debug erm +launcher lua +nullkiller-ai +translations"

REQUIRED_USE="
	erm? ( lua )
	lua? ( ${LUA_REQUIRED_USE} )
"

RDEPEND="
	nullkiller-ai? ( dev-cpp/tbb )
	dev-lang/luajit
	>=dev-libs/boost-1.70:=
	launcher? (
		dev-qt/qtcore:=
		dev-qt/qtgui:=
		dev-qt/qtnetwork:=
		dev-qt/qtwidgets:=
		translations? ( dev-qt/linguist-tools )
	)
	editor? (
		dev-qt/qtcore:=
		dev-qt/qtgui:=
		dev-qt/qtnetwork:=
		dev-qt/qtwidgets
		translations? ( dev-qt/linguist-tools )
	)
	sys-libs/zlib:=[minizip]
	media-video/ffmpeg:=
	media-libs/libsdl2:=[X]
	media-libs/sdl2-image:=
	media-libs/sdl2-mixer:=
	media-libs/sdl2-ttf:=
	dev-libs/fuzzylite
	media-libs/libsquish
	dev-cpp/glaze
	sci-libs/onnxruntime
"

DEPEND="${RDEPEND}"

PATCHES=(
	"${FILESDIR}/${P}-cmake-4.1.patch"
)

src_unpack() {
	# Unpack ALL Packages
	unpack ${A}

	# Move if not equal
	if [[ "${P}" != "${PACKAGE_NAME}" ]]; then
		mv "${WORKDIR}/${PACKAGE_NAME}" "${WORKDIR}/${P}"
	fi

	# Delete target directories
	rmdir "${WORKDIR}/${P}/launcher/lib/innoextract" || die "innoextract dir not deleted"
	rmdir "${WORKDIR}/${P}/test/googletest" || die "Googletest dir not deleted"

	# Make symlinks, mostly mv is used, but I will try to go using ln -s, dosym doesnt work here
	ln -s "${WORKDIR}/googletest-${GOOGLETEST_VERSION}" "${WORKDIR}/${P}/test/googletest"\
		|| die "Googletest symlink not created"
	ln -s "${WORKDIR}/innoextract-${INNOEXTRACT_COMMIT}" "${WORKDIR}/${P}/launcher/lib/innoextract"\
		|| die "innoextract symlink not created"
}

src_configure() {
	patch -p1 launcher/lib/innoextract/CMakeLists.txt  < "${FILESDIR}/innoextract-cmake-4.1.patch"
	CMAKE_BUILD_TYPE="None"
	local mycmakeargs=(
		-DENABLE_ERM=$(usex erm)
		-DENABLE_LUA=$(usex lua)
		-DENABLE_LAUNCHER=$(usex launcher)
		-DENABLE_EDITOR=$(usex editor)
		-DENABLE_TRANSLATIONS=$(usex translations)
		-DENABLE_PCH=$(usex !debug)
		-DENABLE_NULLKILLER_AI=$(usex nullkiller-ai)
		-DENABLE_MONOLITHIC_INSTALL=OFF
		-DFORCE_BUNDLED_FL=OFF
		-DENABLE_GITVERSION=OFF
		-DENABLE_DISCORD=OFF
	)
	append-cppflags -DNDEBUG
	cmake_src_configure
}

pkg_postinst() {
	xdg_icon_cache_update
}

pkg_postrm() {
	xdg_icon_cache_update
}