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

EAPI=8

LUA_COMPAT=(luajit)
# TODO: other targets (buildsystem is crazy and needs patches)

inherit cmake lua-single djs-functions

DESCRIPTION="Heroes of Might and Magic III game engine rewrite"
HOMEPAGE="http://forum.vcmi.eu/index.php"
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

FUZZYLITE_VERSION="6.0"
GOOGLETEST_VERSION="1.17.0"
LIBSQUISH_VERSION="1.15.1.3"
OBCMAKE_VERSION="0.3.11"

INNOEXTRACT_COMMIT="96e9566a35fb51ebf13ffbdadfd49a93c1ae5c1a"

SRC_URI="
	https://github.com/vcmi/vcmi/archive/refs/tags/${PACKAGE_VERSION}.tar.gz -> ${P}.tar.gz
	https://github.com/fuzzylite/fuzzylite/archive/refs/tags/v${FUZZYLITE_VERSION}.tar.gz -> vcmi-fuzzylite.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
	https://github.com/oblivioncth/libsquish/archive/refs/tags/v${LIBSQUISH_VERSION}.tar.gz -> vcmi-libsquish.tar.gz
	https://github.com/oblivioncth/OBCMake/archive/v${OBCMAKE_VERSION}.tar.gz -> vcmi-obcmake.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/fuzzylite
	>=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:=
"

BDEPEND="
	dev-vcs/git
	sci-libs/onnxruntime
"

DEPEND="${RDEPEND}"

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}/AI/FuzzyLite" || die "FuzzyLite dir not deleted"
	rmdir "${WORKDIR}/${P}/launcher/lib/innoextract" || die "innoextract dir not deleted"
	rmdir "${WORKDIR}/${P}/test/googletest" || die "Googletest dir not deleted"

	# Create external libraries
	mkdir -p "${WORKDIR}/${P}/external" || die "Cannot create external directory"

	# Make symlinks, mostly mv is used, but I will try to go using ln -s, dosym doesnt work here
	ln -s "${WORKDIR}/fuzzylite-${FUZZYLITE_VERSION}" "${WORKDIR}/${P}/AI/FuzzyLite"\
		|| die "FuzzyLite symlink not created"
	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"
	ln -s "${WORKDIR}/libsquish-${LIBSQUISH_VERSION}" "${WORKDIR}/${P}/external/libsquish"\
		|| die "libsquish symlink not created"
	# Symlink OBCMake into libsquish's expected location
	#ln -s "${WORKDIR}/OBCMake-${OBCMAKE_VERSION}" "${WORKDIR}/libsquish-${LIBSQUISH_VERSION}/cmake/OBCMake"\
	#	|| die "OBCMake symlink not created"
}

src_prepare() {
  # Since I need dependencies for CMake file to work and I need to apply pathes to it
  # I will do most magic here
	eapply_user

	# OBC/libsquish git workaround
	cd "${WORKDIR}/OBCmake-${OBCMAKE_VERSION}" || die "False git failed"
	git init || die
	git config user.email "portage@gentoo.org" || die
	git config user.name "Gentoo Portage" || die
	git config --global --add safe.directory "${WORKDIR}/OBCmake-${OBCMAKE_VERSION}" || die
	git add -A || die
	git commit -m "Fake commit for vcmi ebuild" || die
	git tag "v${OBCMAKE_VERSION}" || die

	# Also do the same for libsquish if needed
	cd "${WORKDIR}/libsquish-${LIBSQUISH_VERSION}" || die
	git init || die
	git config user.email "portage@gentoo.org" || die
	git config user.name "Gentoo Portage" || die
	git config --global --add safe.directory "${WORKDIR}/libsquish-${LIBSQUISH_VERSION}" || die
	git add -A || die
	git commit -m "Fake commit for vcmi ebuild" || die
	cd "${S}" || die

  patchPackage "${FILESDIR}" "${PN}" "${PVR}"

	cmake_src_prepare
}

src_configure() {
	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
		-DFORCE_BUNDLED_MINIZIP=OFF
		-DENABLE_GITVERSION=OFF
		-DBoost_NO_BOOST_CMAKE=ON
		# Tell FetchContent to use our local OBCMake
		-DFETCHCONTENT_SOURCE_DIR_OBCMAKE="${WORKDIR}/OBCmake-${OBCMAKE_VERSION}"
		# Disable OBCMake's git versioning feature
		#-DOB_STANDARD_PROJECT_SETUP_VERBOSITY="QUIET"
	)

	cmake_src_configure
}

pkg_postinst() {
  xdg_icon_cache_update

	elog "For the game to work properly, please copy your"
	elog 'Heroes Of Might and Magic ("The Wake Of Gods" or'
	elog '"Shadow of Death" or "Complete edition")'
	elog "game directory into /usr/share/${PN}."
	elog "or use 'vcmibuilder' utility on your:"
	elog "   a) One or two CD's or CD images"
	elog "   b) gog.com installer"
	elog "   c) Directory with installed game"
	elog "(although installing it in such way is 'bad practices')."
	elog "For more information, please visit:"
	elog "http://wiki.vcmi.eu/index.php?title=Installation_on_Linux"
	elog ""
	elog "Also, you may want to install VCMI Extras and Wake of Gods"
	elog "mods from the launcher after you'll start the game"
}