# Copyright 2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=7

DESCRIPTION="A Nintendo Switch emulator"
HOMEPAGE="https://yuzu-emu.org/"
LICENSE="GPL-2+"
SLOT="0"
[[ ${PV} == 9999 ]] || KEYWORDS="~amd64 ~x86"
IUSE="compat-list compat-reporting system-xbyak system-opus system-qt5 gui desktop cli test qt-translations generic abi_x86_32 abi_x86_64 +sdl2 qt-webengine qt5 +boxcat +webservice discord +cubeb vulkan"
REQUIRED_USE="
	!qt5? ( !qt-webengine  !qt-translations !system-qt5 )
	!gui? ( !desktop !qt5 )
	|| ( gui cli test )
"
RESTRICT="
	!test? ( test )
"

DEPEND=""
BDEPEND=""
RDEPEND="
	system-qt5? (
		qt5? ( >=dev-qt/qtwidgets-5.9:5 )
		qt-translations? ( >=dev-qt/qttranslations-5.9:5 )
		qt-webengine? ( >=dev-qt/qtwebengine-5.9:5[widgets] )
	)
	system-xbyak? (
		abi_x86_64? ( !generic? ( >=dev-libs/xbyak-5.91 ) )
		abi_x86_32? ( !generic? ( >=dev-libs/xbyak-5.91 ) )
	)
	discord? ( >=dev-libs/rapidjson-1.1.0 )
	system-opus? ( >=media-libs/opus-1.3.1 )
	sdl2? ( media-libs/libsdl2 )
	>=app-arch/lz4-1.8
	>=dev-cpp/catch-2.11
	>=dev-cpp/nlohmann_json-3.7
	>=app-arch/zstd-1.4
	>=sys-libs/zlib-1.2
	>=dev-libs/libfmt-7.0
	>=dev-libs/boost-1.73:=[context]
	>=dev-libs/libzip-1.5
	${DEPEND}
"

PYTHON_COMPAT=( python2_7 )

inherit git-r3 xdg cmake python-single-r1

EGIT_REPO_URI="https://github.com/yuzu-emu/yuzu-mainline.git"
EGIT_SUBMODULES=( '*' )

if [[ ${PV} == 9999 ]]; then
	EGIT_BRANCH="master"
else
	EGIT_COMMIT="mainline-$(ver_rs 1- '-')"
fi

src_prepare() {
	eapply "${FILESDIR}"/{fix-cmake,static-externals,inject-git-info}.patch

	if use system-xbyak; then
		eapply "${FILESDIR}/unbundle-xbyak.patch"
	fi

	if use system-opus; then
		eapply "${FILESDIR}/unbundle-opus.patch"
	fi

	if use discord; then
		eapply "${FILESDIR}/unbundle-rapidjson.patch"
	fi

	if use desktop; then
		eapply "${FILESDIR}"/{mime-type,mainline-metadata}.patch
	fi

	cmake_src_prepare
	xdg_src_prepare
}

src_configure() {
	if use compat-list; then
		local compat_list_dir="${WORKDIR}/${P}_build/dist/compatibility_list"
		mkdir -p "$compat_list_dir"
		if [[ -f "${FILESDIR}/compatibility_list-${PV}.json" ]]; then
			cp "${FILESDIR}/compatibility_list-${PV}.json" "${compat_list_dir}/compatibility_list.json"
		else
			cp "${FILESDIR}/compatibility_list.json" "${compat_list_dir}/compatibility_list.json"
		fi
	fi

	pwd
	ls -lR dist


	local mycmakeargs=(
		-DGIT_REV="${PV}"
		-DBUILD_FULLNAME="${EGIT_BRANCH:-$EGIT_COMMIT}"
		-DGIT_BRANCH="${PN}"
		-DGIT_DESC="${PV}"
		-DCMAKE_INSTALL_PREFIX="${D}/usr"
		-DUSE_DISCORD_PRESENCE=$(usex discord ON OFF)
		-DENABLE_CUBEB=$(usex cubeb ON OFF)
		-DENABLE_WEB_SERVICE=$(usex webservice ON OFF)
		-DENABLE_VULKAN=$(usex vulkan ON OFF)
		-DENABLE_SDL2=$(usex sdl2 ON OFF)
		-DYUZU_ENABLE_BOXCAT=$(usex boxcat ON OFF)
		-DYUZU_USE_BUNDLED_UNICORN=ON
		-DENABLE_QT=$(usex qt5 ON OFF)
		-DYUZU_USE_BUNDLED_QT=$(usex !system-qt5 ON OFF)
		-DYUZU_USE_QT_WEB_ENGINE=$(usex qt-webengine ON OFF)
		-DENABLE_QT_TRANSLATION=$(usex qt-translations ON OFF)
		-DENABLE_COMPATIBILITY_LIST_DOWNLOAD=$(usex compat-list ON OFF)
		-DYUZU_ENABLE_COMPATIBILITY_REPORTING=$(usex compat-reporting ON OFF)
	)

	cmake_src_configure
}

src_compile() {
	cmake_src_compile $(usex gui yuzu "") $(usex cli yuzu-cmd "") $(usex test "tests yuzu-tester" "")
}

src_install() {
	debug-print-function ${FUNCNAME} "$@"

	_cmake_check_build_dir
	pushd "${BUILD_DIR}" > /dev/null || die

	local install_component="$CMAKE_BINARY --install . --component "

	# Do component installs
	use gui && $install_component yuzu
	use desktop && $install_component desktop
	use cli && $install_component yuzu-cmd
	use test && $install_component yuzu-tester

	popd > /dev/null || die

	# Try to install docs
	pushd "${S}" > /dev/null || die
	einstalldocs
	popd > /dev/null || die
}