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

EAPI=8

inherit udev wrapper xdg

MY_BUILD="29186_20260626_0934"
MY_SH="stm32cubeide_${PV}_${MY_BUILD}-Lin-Deb-x86_64.sh"

DESCRIPTION="Integrated development environment for STM32 microcontrollers"
HOMEPAGE="https://www.st.com/en/development-tools/stm32cubeide.html"
SRC_URI="stm32cubeide_${PV}-Lin-Deb-x86_64.sh.zip"

S="${WORKDIR}"

LICENSE="SLA0048 jlink? ( SEGGER )"
SLOT="0"
KEYWORDS="~amd64"
IUSE="+stlink-server +udev jlink"

BDEPEND="
	app-arch/unzip
	sys-devel/binutils
"
RDEPEND="
	app-accessibility/at-spi2-core
	app-shells/bash
	dev-libs/glib:2
	gui-libs/gtk:4
	media-libs/freetype
	net-libs/webkit-gtk:4.1
	virtual/opengl
	x11-libs/cairo
	x11-libs/gtk+:3
	x11-libs/libX11
	x11-libs/libXext
	x11-libs/libXi
	x11-libs/libXrender
	x11-libs/libXtst
	jlink? ( !dev-embedded/jlink )
	stlink-server? ( virtual/libusb:1 )
	udev? ( virtual/udev )
"

RESTRICT="fetch mirror bindist strip"

QA_PREBUILT="*"

unpack_deb() {
	local deb="${1}" dest="${2}" work="${WORKDIR}"/deb-$(basename "${deb}" .deb)
	local member

	mkdir -p "${work}" "${dest}" || die
	pushd "${work}" > /dev/null || die
	ar x "${deb}" || die "failed to extract ${deb}"

	for member in data.tar.*; do
		tar -xf "${member}" --no-same-owner -C "${dest}" \
			|| die "failed to unpack ${member}"
	done
	popd > /dev/null || die
}

src_unpack() {
	unpack "${A}"

	sh "${WORKDIR}"/${MY_SH} --noexec --keep --nox11 --quiet \
		--target "${WORKDIR}"/payload || die "failed to extract ${MY_SH}"
}

src_install() {
	local deb stage="${WORKDIR}"/stage

	for deb in "${WORKDIR}"/payload/stm32cubeide-*.deb; do
		unpack_deb "${deb}" "${ED}"
	done

	# the IDE expects stlink-server to be present, mirroring the deb dependencies
	for deb in "${WORKDIR}"/payload/st-stlink-udev-rules-*.deb \
		"${WORKDIR}"/payload/segger-jlink-udev-rules-*.deb \
		"${WORKDIR}"/payload/st-stlink-server-*.deb; do
		unpack_deb "${deb}" "${stage}"
	done

	if use udev; then
		udev_dorules "${stage}"/etc/udev/rules.d/49-stlinkv*.rules
	fi

	if use jlink; then
		udev_dorules "${stage}"/etc/udev/rules.d/99-jlink.rules
	fi

	if use stlink-server; then
		exeinto /usr/bin
		doexe "${stage}"/usr/bin/stlink-server
	fi

	make_wrapper ${PN} ./stm32cubeide_wayland /opt/st/stm32cubeide_${PV}
}

pkg_nofetch() {
	einfo "Download ${SRC_URI} from ${HOMEPAGE}"
	einfo "under Tools & Software (STM32CubeIDE, Debian Linux) and place it in DISTDIR."
	einfo "ST requires a registration before the download is offered."
}

pkg_postinst() {
	if use udev; then
		udev_reload
	fi

	xdg_desktop_database_update
}

pkg_postrm() {
	if use udev; then
		udev_reload
	fi

	xdg_desktop_database_update
}