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

EAPI=8

inherit desktop wrapper xdg-utils

DESCRIPTION="ICA Client for Citrix Presentation servers"
HOMEPAGE="https://www.citrix.com/"
SRC_URI="linuxx64-${PV}.tar.gz"

LICENSE="icaclient"
SLOT="0"
KEYWORDS="-* ~amd64"
IUSE="l10n_de l10n_es l10n_fr l10n_ja l10n_zh-CN hdx usb"
RESTRICT="mirror strip fetch"

ICAROOT="/opt/Citrix/ICAClient"

QA_PREBUILT="${ICAROOT#/}/*"

# we have binaries for two conflicting kerberos implementations
# https://bugs.gentoo.org/792090
# https://bugs.gentoo.org/775995
REQUIRES_EXCLUDE="
	libgssapi.so.3
	libgssapi_krb5.so.2 libkrb5.so.3
"
# when using media-plugins/hdx-realtime-media-engine we better not ignore that
REQUIRES_EXCLUDE="${REQUIRES_EXCLUDE}
	!hdx? ( libunwind.so.1 )
"
# we have binaries which would still support gstreamer:0.10
REQUIRES_EXCLUDE="${REQUIRES_EXCLUDE}
	libgstapp-0.10.so.0
	libgstbase-0.10.so.0
	libgstinterfaces-0.10.so.0
	libgstpbutils-0.10.so.0
	libgstreamer-0.10.so.0
"

# video background blurring, optional
REQUIRES_EXCLUDE="${REQUIRES_EXCLUDE}
	libopencv_core.so.407
	libopencv_imgcodecs.so.407
	libopencv_imgproc.so.407
"

BDEPEND="
	hdx? ( media-plugins/hdx-realtime-media-engine )
"

RDEPEND="
	>=app-accessibility/at-spi2-core-2.46.0:2
	app-crypt/libsecret
	dev-libs/glib:2
	dev-libs/libxml2
	media-fonts/font-adobe-100dpi
	media-fonts/font-cursor-misc
	media-fonts/font-misc-ethiopic
	media-fonts/font-misc-misc
	media-fonts/font-xfree86-type1
	media-libs/alsa-lib
	media-libs/fontconfig
	media-libs/freetype
	media-libs/gst-plugins-base:1.0
	media-libs/gstreamer:1.0
	media-libs/libogg
	media-libs/libpng
	media-libs/libpulse
	media-libs/libvorbis
	media-libs/mesa
	media-libs/speex
	media-libs/speexdsp
	net-libs/libsoup:2.4
	net-libs/webkit-gtk:4
	sys-apps/util-linux
	sys-libs/libcxx
	sys-libs/libcxxabi
	sys-libs/zlib
	virtual/krb5
	virtual/libudev
	x11-libs/cairo
	x11-libs/gdk-pixbuf:2
	x11-libs/gtk+:2
	x11-libs/gtk+:3
	x11-libs/libX11
	x11-libs/libXaw
	x11-libs/libXcomposite
	x11-libs/libXdamage
	x11-libs/libXext
	x11-libs/libXfixes
	x11-libs/libXinerama
	x11-libs/libXmu
	x11-libs/libXrender
	x11-libs/libXt
	x11-libs/pango
	${BDEPEND}
	!hdx? ( !media-plugins/hdx-realtime-media-engine )
	usb? ( virtual/libudev )
"

DEPEND="dev-util/patchelf"

pkg_nofetch() {
	elog "Download the client file ${A} from
	https://www.citrix.com/downloads/workspace-app/"
	elog "and place it into your DISTDIR directory."
}

pkg_setup() {
	case ${ARCH} in
		amd64)
			ICAARCH=linuxx64
		;;
		*)
			eerror "Given architecture is not supported by Citrix."
		;;
	esac
}

src_unpack() {
	default
	mv "${WORKDIR}/${ICAARCH}/${ICAARCH}.cor" "${S}" || die
}

src_prepare() {
	default
	rm lib/UIDialogLibWebKit.so || die

	cp nls/en/module.ini . || die
	if use usb; then
		# inspired by debian usb support package postinst
		sed -i -e 's/^[ \t]*VirtualDriver[ \t]*=.*$/&, GenericUSB/' module.ini || die
		sed -i -e '/\[ICA 3.0\]/a\GenericUSB=on' module.ini || true
		echo "[GenericUSB]" >> module.ini || true
		echo "DriverName=VDGUSB.DLL" >> module.ini
	fi

	if use hdx; then
		"${BROOT}${ICAROOT}"/rtme/RTMEconfig -install -ignoremm || die
		mv new_module.ini module.ini || die
	fi
	mv module.ini config/ || die
}

src_install() {
	local bin tmpl dest

	dodir "${ICAROOT}"

	keepdir /etc/icaclient

	insinto "${ICAROOT}"
	exeinto "${ICAROOT}"
	doexe *.DLL libproxy.so wfica AuthManagerDaemon PrimaryAuthManager selfservice ServiceRecord
	if use usb; then
		doexe usb/ctxusb usb/ctxusbd usb/ctx_usb_isactive
		doins usb/*.DLL
		insinto /etc/icaclient
		doins usb/usb.conf
		dosym ../../../etc/icaclient/usb.conf "${ICAROOT}"/usb.conf
		insinto "${ICAROOT}"
	fi

	# libwebrtc has a DT_RPATH problem
	patchelf --set-rpath '$ORIGIN' lib/libwebrpc.so || die

	exeinto "${ICAROOT}"/lib
	doexe lib/*.so

	for dest in "${ICAROOT}"{,/nls/en{,.UTF-8}} ; do
		insinto "${dest}"
		doins nls/en.UTF-8/eula.txt
	done

	insinto "${ICAROOT}"/config
	doins config/*
	mv "${ED}/${ICAROOT}"/config/module.ini "${ED}"/etc/icaclient/ || die
	dosym ../../../../etc/icaclient/module.ini "${ICAROOT}"/config/module.ini
	for tmpl in {appsrv,wfclient}.template ; do
		newins nls/en/${tmpl} ${tmpl/template/ini}
	done
	touch "${ED}/${ICAROOT}"/config/.server || die

	insinto "${ICAROOT}"/gtk
	doins gtk/*

	insinto "${ICAROOT}"/gtk/glade
	doins gtk/glade/*

	insinto "${ICAROOT}"/site
	doins -r site/*

	dodir "${ICAROOT}"/help

	insinto "${ICAROOT}"/config/usertemplate
	doins config/usertemplate/*

	local lang LANGCODES=( en )
	use l10n_de && LANGCODES+=( de )
	use l10n_es && LANGCODES+=( es )
	use l10n_fr && LANGCODES+=( fr )
	use l10n_ja && LANGCODES+=( ja )
	use l10n_zh-CN && LANGCODES+=( zh_CN )

	for lang in ${LANGCODES[@]} ; do
		insinto "${ICAROOT}"/nls/${lang}
		doins nls/${lang}/*

		insinto "${ICAROOT}"/nls/$lang/UTF-8
		doins nls/${lang}.UTF-8/*

		insinto "${ICAROOT}"/nls/${lang}/LC_MESSAGES
		doins nls/${lang}/LC_MESSAGES/*

		insinto "${ICAROOT}"/nls/${lang}
		dosym UTF-8 "${ICAROOT}"/nls/${lang}/utf8

		for tmpl in {appsrv,wfclient}.template ; do
			cp "${ED}/${ICAROOT}"/nls/${lang}/${tmpl} \
				"${ED}/${ICAROOT}"/nls/${lang}/${tmpl/template/ini} \
				|| die
		done
	done

	insinto "${ICAROOT}"/nls
	dosym en /opt/Citrix/ICAClient/nls/C

	insinto "${ICAROOT}"/icons
	doins icons/*

	insinto "${ICAROOT}"/keyboard
	doins keyboard/*

	cp -a util "${ED}/${ICAROOT}" || die
	test -f util/HdxRtcEngine && fperms 0755 "${ICAROOT}"/util/HdxRtcEngine

	dosym ../../../../etc/ssl/certs "${ICAROOT}"/keystore/cacerts
	insinto "${ICAROOT}"/keystore/intcerts
	doins keystore/intcerts/*

	local other_files=(
		icasessionmgr
		NativeMessagingHost
		UtilDaemon
	)

	exeinto "${ICAROOT}"
	for bin in ${other_files[@]} ; do
		doexe ${bin}
	done

	# https://bugs.gentoo.org/655922
	dosym gst_play1.0 "${ICAROOT}"/util/gst_play
	dosym gst_read1.0 "${ICAROOT}"/util/gst_read
	dosym libgstflatstm1.0.so "${ICAROOT}"/util/libgstflatstm.so

	doenvd "${FILESDIR}"/10ICAClient

	for bin in configmgr conncenter new_store ; do
		make_wrapper ${bin} "${ICAROOT}"/util/${bin} . "${ICAROOT}"/util
	done

	for bin in selfservice wfica ; do
		make_wrapper ${bin} "${ICAROOT}"/${bin} . "${ICAROOT}"
	done

	dodir /etc/revdep-rebuild/
	echo "SEARCH_DIRS_MASK=\"${ICAROOT}\"" \
		> "${ED}"/etc/revdep-rebuild/70icaclient

	insinto "${ICAROOT}"/pkginf
	newins "${WORKDIR}"/PkgId Ver.core."${ICAARCH}"

	# 651926
	domenu "${FILESDIR}"/*.desktop

	insinto /usr/share/mime/packages
	doins desktop/Citrix-mime_types.xml
}

pkg_preinst() {
	# previous versions of the ebuild created that and left it around
	# we own it now and avoid conflict warnings with this
	rm -f "${ROOT}${ICAROOT}/config/module.ini"
}

pkg_postinst() {
	xdg_desktop_database_update
	xdg_mimeinfo_database_update

	if ! use hdx; then
		if [ -x "${ROOT}${ICAROOT}"/rtme/RTMEconfig ]; then
			ewarn "Starting from 22.12.0.12 you have to set USE=hdx if you want"
			ewarn "to use media-plugins/hdx-realtime-media-engine. Which does"
			ewarn "not need to be explicitly installed anymore."
		fi
	fi

	if use usb; then
		einfo
		einfo "Add users of ${CATEGORY}/${PN} to group 'usb' for redirect to work"
		einfo
	fi
}

pkg_postrm() {
	xdg_desktop_database_update
	xdg_mimeinfo_database_update
}