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

EAPI=8

CRATES=""
RUST_MIN_VER="1.95.0"

F128_COMMIT="7f971c34568dd6ae4e97a602bf15c23137b2cad5"
INSTDEC_COMMIT="4cd6db5be5d8bb1dc321d98ab93648078ab2b1b6"

inherit cargo xdg desktop

DESCRIPTION="Modern waveform viewer for FPGA/ASIC development"
HOMEPAGE="https://surfer-project.org/ https://gitlab.com/surfer-project/surfer"
SRC_URI="
	https://gitlab.com/surfer-project/surfer/-/archive/v${PV}/surfer-v${PV}.tar.gz -> ${P}.tar.gz
	https://github.com/jkarns275/f128/archive/${F128_COMMIT}.tar.gz -> f128-${F128_COMMIT}.tar.gz
	https://github.com/ics-jku/instruction-decoder/archive/${INSTDEC_COMMIT}.tar.gz -> instruction-decoder-${INSTDEC_COMMIT}.tar.gz
	https://vendors.simple-co.de/${PN}/${P}-vendor.tar.xz
"

LICENSE="EUPL-1.2"
SLOT="0"
KEYWORDS="~amd64"
IUSE="lto wayland X"

RDEPEND="
	X? ( x11-libs/libX11 )
	wayland? ( dev-libs/wayland )
	media-libs/fontconfig
"
DEPEND="${RDEPEND}"
S="${WORKDIR}/surfer-v${PV}"

src_unpack() {
	unpack ${P}.tar.gz

	# adding our own vendors
	mkdir -p "${ECARGO_VENDOR}" || die
	pushd "${ECARGO_VENDOR}" > /dev/null || die
	unpack ${P}-vendor.tar.xz
	popd > /dev/null || die

	# adding submodules manually
	unpack f128-${F128_COMMIT}.tar.gz
	unpack instruction-decoder-${INSTDEC_COMMIT}.tar.gz

	# remove commit-hashes
	mv "${WORKDIR}/f128-${F128_COMMIT}"/* "${S}/f128/" || die
	mv "${WORKDIR}/instruction-decoder-${INSTDEC_COMMIT}"/* "${S}/instruction-decoder/" || die
}

src_configure() {
	cargo_gen_config

	cat <<- EOF > "${ECARGO_HOME}/config.toml" || die
		[source.crates-io]
		replace-with = "vendored-sources"

		[source."git+https://gitlab.com/oscargus/egui_skia_renderer.git?rev=36fe7b49a59a87f9d4b62533bd81e6e37139e9cd"]
		git = "https://gitlab.com/oscargus/egui_skia_renderer.git"
		rev = "36fe7b49a59a87f9d4b62533bd81e6e37139e9cd"
		replace-with = "vendored-sources"

		[source.vendored-sources]
		directory = "${ECARGO_VENDOR}"
	EOF
}

src_prepare() {
	# enable LTO thin by default
	! use lto \ 
		sed -i 's/lto = true/lto = "thin"/' "${S}/Cargo.toml" || die

	# correcting icon
	sed -i 's/Icon=com.gitlab.surferproject.surfer.png/Icon=com.gitlab.surferproject.surfer/' \
		surfer/assets/com.gitlab.surferproject.surfer.desktop || die

	# version overrides
	export VERGEN_GIT_BRANCH="v${PV}"
	export VERGEN_GIT_COMMIT_DATE="2026-04-27"
	export VERGEN_GIT_SHA="bd749b1f"
	export VERGEN_GIT_DESCRIBE="v${PV}"
	export VERGEN_IDEMPOTENT=1
	export VERGEN_IDEMPOTENT_OUTPUT="$(date -u +%Y-%m-%dT%H:%M:%SZ)"

	default
}

src_compile() {
	cargo_src_compile --frozen --offline --package surfer
}

src_install() {
	cargo_src_install --path surfer

	domenu surfer/assets/com.gitlab.surferproject.surfer.desktop
	doicon surfer/assets/com.gitlab.surferproject.surfer.png
}

pkg_postinst() {
	xdg_icon_cache_update
	xdg_desktop_database_update
}

pkg_postrm() {
	xdg_icon_cache_update
	xdg_desktop_database_update
}