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

EAPI=8

PYTHON_COMPAT=( python3_{10..12} )
inherit check-reqs cmake flag-o-matic multiprocessing python-single-r1 xdg

DESCRIPTION="Free turn-based space empire and galactic conquest game"
HOMEPAGE="https://www.freeorion.org/"
SRC_URI="https://github.com/freeorion/freeorion/releases/download/v${PV}/FreeOrion_v${PV}_Source.tar.gz"
S=${WORKDIR}/src-tarball

LICENSE="GPL-2+ CC-BY-SA-3.0 LGPL-2.1+"
SLOT="0"
KEYWORDS="~amd64"
IUSE="+client doc test"
REQUIRED_USE="${PYTHON_REQUIRED_USE}"
RESTRICT="!test? ( test )"

DEPEND="
	${PYTHON_DEPS}
	$(python_gen_cond_dep 'dev-libs/boost:=[${PYTHON_USEDEP},nls,python]')
	sys-libs/zlib:=
	client? (
		media-libs/freetype
		media-libs/glew:0=
		media-libs/libglvnd
		media-libs/libogg
		media-libs/libpng:=
		media-libs/libsdl2[opengl,video]
		media-libs/libvorbis
		media-libs/openal
	)
"
RDEPEND="
	${DEPEND}
	client? (
		media-fonts/dejavu
		media-fonts/roboto
	)
"
BDEPEND="
	${PYTHON_DEPS}
	doc? (
		app-text/doxygen
		media-gfx/graphviz
	)
	test? ( $(python_gen_cond_dep 'dev-python/pytest[${PYTHON_USEDEP}]') )
"

PATCHES=(
	"${FILESDIR}"/${P}-boost1.85.patch
)

freeorion_check-reqs() {
	# cc1plus processes may suddenly use ~1.5GB all at once early on (2+GB
	# if debug symbols) then far less for the rest, check minimal jobs*1.5
	local CHECKREQS_MEMORY=$(($(makeopts_jobs)*1500))M
	check-reqs_${EBUILD_PHASE_FUNC}
}

pkg_pretend() {
	freeorion_check-reqs
}

pkg_setup() {
	freeorion_check-reqs
	python-single-r1_pkg_setup
}

src_prepare() {
	cmake_src_prepare

	sed -i 's/-O3//' CMakeLists.txt || die

	cmake_comment_add_subdirectory check #904124
}

src_configure() {
	filter-lto # -Werror=odr issues

	# TODO: drop this after boost-1.85.0-r0 been gone for some time
	has_version =dev-libs/boost-1.85.0-r0 &&
		append-flags -fno-strict-aliasing #932780,933289

	local mycmakeargs=(
		-DCCACHE_PROGRAM=no
		-DBUILD_CLIENT_GG=$(usex client)
		-DBUILD_CLIENT_GODOT=no # TODO? perhaps with system godot (experimental)
		-DBUILD_TESTING=$(usex test)
	)

	cmake_src_configure
}

src_compile() {
	cmake_src_compile all $(usev doc)
}

src_test() {
	cmake_src_test -j1 # avoid running 2 conflicting servers

	local EPYTEST_DESELECT=(
		# broken with 3.11 but is not known to cause issues, just skip for now
		tests/AI/save_game_codec/test_savegame_manager.py::test_setstate_call
	)

	epytest -o cache_dir="${T}"/pytest_cache default/python/tests
}

src_install() {
	local DOCS=( ChangeLog.md README.md )
	cmake_src_install

	use doc && dodoc -r "${BUILD_DIR}"/doc/cpp-apidoc/html

	if use client; then
		local font
		for font in roboto/Roboto-{Bold,Regular}.ttf dejavu/DejaVuSans{-Bold,}.ttf; do
			dosym -r /usr/share/{fonts/${font%/*},${PN}/default/data/fonts}/${font##*/}
		done
		rm -- "${ED}"/usr/share/${PN}/default/data/fonts/LICENSE.{Roboto,DejaVu} || die
	else
		rm -r -- "${ED}"/usr/share/freeorion/default/data/fonts || die
	fi
}