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

EAPI=7

MULTILIB_COMPAT=( abi_x86_{32,64} )
inherit multilib-minimal

MY_P="dxvk-${PV}"
DESCRIPTION="Vulkan-based implementation of D3D9, D3D10 and D3D11 for Linux / Wine"
HOMEPAGE="https://github.com/doitsujin/dxvk"
SRC_URI="https://github.com/doitsujin/dxvk/releases/download/v${PV}/${MY_P}.tar.gz -> ${P}.tar.gz"

LICENSE="ZLIB"
SLOT="0"
KEYWORDS="~amd64"
IUSE="video_cards_nvidia"

DEPEND=""
RDEPEND="
	|| (
		video_cards_nvidia? ( >=x11-drivers/nvidia-drivers-440.31 )
		>=media-libs/mesa-19.2
	)
	|| (
		>=app-emulation/wine-staging-4.5[${MULTILIB_USEDEP},vulkan]
		>=app-emulation/wine-vanilla-4.5[${MULTILIB_USEDEP},vulkan]
	)
"

S="${WORKDIR}/${MY_P}"

# NOTE: Various repos contain dxvk ebuilds that install into …/dxvk.
# To not clash with them, this ebuild installs into …/dxvk-bin.

src_prepare() {
	default

	sed -i "s|^basedir=.*$|basedir=\"${EPREFIX}\"|" setup_dxvk.sh || die

	# Delete installation instructions for unused ABIs.
	if ! use abi_x86_64; then
		sed -i '/installFile "$win64_sys_path"/d' setup_dxvk.sh || die
	fi
	if ! use abi_x86_32; then
		sed -i '/installFile "$win32_sys_path"/d' setup_dxvk.sh || die
	fi

	fix_install_dir() {
		local bits="${MULTILIB_ABI_FLAG:8:2}"
		# Fix installation directory.
		sed -i "s|\"x${bits}\"|\"usr/$(get_libdir)/dxvk-bin\"|" \
			setup_dxvk.sh || die
	}
	multilib_foreach_abi fix_install_dir
}

multilib_src_install() {
	local bits="${MULTILIB_ABI_FLAG:8:2}"
	insinto "usr/$(get_libdir)/dxvk-bin"
	insopts --mode=755
	doins "${S}/x${bits}/"*.dll
}

multilib_src_install_all() {
	newbin setup_dxvk.sh setup_dxvk-bin.sh
}

pkg_postinst() {
	elog "dxvk-bin is installed, but not activated. You have to create DLL overrides"
	elog "in order to make use of it. To do so, set WINEPREFIX and execute"
	elog "setup_dxvk-bin.sh install --symlink."
}
