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

EAPI="8"

inherit desktop pax-utils prefix rpm xdg

BUILDID="9813"
BVER="${PV/_rc*/}-${BUILDID}"
BVER2=${PV}-${BUILDID}
BASIS="ooobasis4.1"
BASIS2="basis4.1"
NM="openoffice"
NM1="${NM}-brand"
NM2="${NM}4"
NM3="${NM2}.$(ver_cut 2-3)"
FILEPATH="https://downloads.sourceforge.net/openofficeorg.mirror"
if [ "${ARCH}" = "amd64" ] ; then
	XARCH="x86_64"
else
	XARCH="i586"
fi
UP="en-US/RPMS"

DESCRIPTION="Apache OpenOffice productivity suite"
HOMEPAGE="https://www.openoffice.org/"
SRC_URI="
	amd64? ( "${FILEPATH}"/Apache_OpenOffice_${PV}_Linux_x86-64_install-rpm_en-US.tar.gz )
	x86? ( "${FILEPATH}"/Apache_OpenOffice_${PV}_Linux_x86_install-rpm_en-US.tar.gz )
"

S="${WORKDIR}"

LICENSE="Apache-2.0"
SLOT="0"
KEYWORDS="~amd64 ~x86"

IUSE="gnome java"

# TODO: supports ca_XR (Valencian RACV) locale too
LANGS="ast eu bg ca ca-valencia zh-CN zh-TW cs da nl en-GB fi fr gd gl de el he hi hu it ja km ko lt nb pl pt-BR pt ru sr sk sl es sv ta th tr vi"

for X in ${LANGS} ; do
	IUSE="${IUSE} l10n_${X}"
	SRC_URI+=" l10n_${X}? (
		amd64? ( "${FILEPATH}"/Apache_OpenOffice_${PV}_Linux_x86-64_langpack-rpm_${X/ca-valencia/ca-XV}.tar.gz )
		x86? ( "${FILEPATH}"/Apache_OpenOffice_${PV}_Linux_x86_langpack-rpm_${X/ca-valencia/ca-XV}.tar.gz ) )"
done

RDEPEND="
	!prefix? ( sys-libs/glibc )
	>=app-accessibility/at-spi2-core-2.46.0
	app-arch/unzip
	app-arch/zip
	>=dev-lang/perl-5.0
	dev-libs/dbus-glib
	media-libs/glu
	>=media-libs/freetype-2.1.10-r2
	media-libs/libglvnd
	sys-libs/ncurses-compat:5
	x11-libs/cairo
	x11-libs/gdk-pixbuf
	x11-libs/gdk-pixbuf-xlib
	x11-libs/gtk+:2
	x11-libs/libXaw
	x11-libs/libXinerama
	x11-libs/pango
	x11-libs/libXrandr
"
DEPEND="
	${RDEPEND}
	sys-apps/findutils
"
PDEPEND="java? ( || ( >=virtual/jre-1.8.0 dev-java/openjdk-jre-bin:11 dev-java/openjdk-bin dev-java/openjdk:11 ) )"

RESTRICT="mirror strip"

pkg_setup() {
	QA_PREBUILT="usr/$(get_libdir)/${NM}/program/*"
	QA_TEXTRELS="usr/$(get_libdir)/${NM}/program/libvclplug_genli.so"
}

src_unpack() {
	unpack ${A}

	cp "${FILESDIR}"/{50-${PN},wrapper.in} "${T}" || die
	eprefixify "${T}"/{50-${PN},wrapper.in}

	# 'pyuno' is excluded from unpack list to switch off Python2 scripts support
	for i in base calc core01 core02 core03 core04 core05 core06 core07 draw graphicfilter images impress math ogltrans ooofonts ooolinguistic ure writer xsltfilter ; do
		rpm_unpack "./${UP}/${NM}-${i}-${BVER}.${XARCH}.rpm"
	done

	rpm_unpack "./${UP}/${NM}-${BVER}.${XARCH}.rpm"

	for j in base calc draw impress math writer; do
		rpm_unpack "./${UP}/${NM1}-${j}-${BVER}.${XARCH}.rpm"
	done

	rpm_unpack "./${UP}/desktop-integration/${NM3}-freedesktop-menus-${BVER2}.noarch.rpm"

	use gnome && rpm_unpack "./${UP}/${NM}-gnome-integration-${BVER}.${XARCH}.rpm"
	use java && rpm_unpack "./${UP}/${NM}-javafilter-${BVER}.${XARCH}.rpm"

	# English support installed by default
	rpm_unpack "./${UP}/${NM}-en-US-${BVER}.${XARCH}.rpm"
	rpm_unpack "./${UP}/${NM1}-en-US-${BVER}.${XARCH}.rpm"
	for s in base calc draw help impress math res writer ; do
		rpm_unpack "./${UP}/${NM}-en-US-${s}-${BVER}.${XARCH}.rpm"
	done

	# Localization
	for l in ${LANGS}; do
		if use l10n_${l}; then
			# Map ca-valencia to ca-XV used by upstream
			case ${l} in
				ca-valencia) m=ca-XV ;;
				*) m=${l} ;;
			esac
			LANGDIR="${m}/RPMS"
			rpm_unpack "./${LANGDIR}/${NM}-${m}-${BVER}.${XARCH}.rpm"
			rpm_unpack "./${LANGDIR}/${NM1}-${m}-${BVER}.${XARCH}.rpm"
			for n in base calc draw help impress math res writer; do
				rpm_unpack "./${LANGDIR}/${NM}-${m}-${n}-${BVER}.${XARCH}.rpm"
			done

		fi
	done
}

src_install() {
	INSTDIR="/usr/$(get_libdir)/${NM}"
	dodir ${INSTDIR}
	mv "${WORKDIR}"/opt/${NM2}/* "${ED}${INSTDIR}" || die

	#Menu entries, icons and mime-types
	cd "${ED}${INSTDIR}/share/xdg/" || die
	for desk in base calc draw impress javafilter math printeradmin qstart startcenter writer; do
		if [ "${desk}" = "javafilter" ] ; then
			use java || { rm javafilter.desktop; continue; }
		fi
		mv ${desk}.desktop ${NM}-${desk}.desktop || die
		sed -i -e "s/${NM2} /ooffice /g" ${NM}-${desk}.desktop || die
		domenu ${NM}-${desk}.desktop
	done
	insinto /usr/share
	doins -r "${WORKDIR}"/usr/share/icons
	doins -r "${WORKDIR}"/usr/share/mime

	# Make sure the permissions are right
	use prefix || fowners -R root:0 /

	# Install wrapper script
	newbin "${T}/wrapper.in" ooffice
	sed -i -e s/LIBDIR/$(get_libdir)/g "${ED}/usr/bin/ooffice" || die

	# Component symlinks
	for app in base calc draw impress math writer; do
		cp "${ED}/usr/bin/ooffice" "${ED}/usr/bin/oo${app}" || die
		sed -i -e s/soffice/s${app}/ "${ED}/usr/bin/oo${app}" || die
	done

	dosym ${INSTDIR}/program/spadmin /usr/bin/ooffice-printeradmin
	dosym ${INSTDIR}/program/soffice /usr/bin/soffice

	# Non-java weirdness see bug #99366
	use !java && rm -f "${ED}${INSTDIR}/program/javaldx" "${ED}${INSTDIR}/program/libofficebean.so"

	# prevent revdep-rebuild from attempting to rebuild all the time
	insinto /etc/revdep-rebuild && doins "${T}/50-${PN}"

	# remove soffice bin to avoid collision with libreoffice
	rm -rf "${ED}/usr/bin/soffice" || die

	# Vulnerable pythonscript.py, bug #677248
	# Disable python2 script support bug #715400
	rm "${ED}${INSTDIR}/program/python" || die

	# remove obsolete gstreamer-0.10 plugin
	rm "${ED}${INSTDIR}/program/libavmediagst.so" || die
}

pkg_preinst() {
	xdg_pkg_preinst
	use gnome && gnome2_icon_savelist
}

pkg_postinst() {
	xdg_pkg_postinst

	pax-mark -m "${EPREFIX}"/usr/$(get_libdir)/${NM}/program/soffice.bin

	# Inform users about python scripting security problems, bug #677248
	# and removing it due to the end of python2 support, bug #715400
	elog "Python2 scripts support via 'pyuno' module was skipped to unpack"
	elog "due to a security vulnerability (CVE-2018-16858)"
	elog "and the end of python2 support in Gentoo."

	# Inform users about changes of encoding of stored passwords in Apache OpenOffice 4.1.14.
	# Notification is from https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.14+Release+Notes
	ewarn "Important Note:"
	ewarn "It is recommended to make a backup of the Apache OpenOffice users profile"
	ewarn "before installing ${PV}. It is especially essential for users who use"
	ewarn "the Master Password functionality and may decide to use an older version later."
	ewarn "There is a change in the encoding of stored passwords in this ${PV} release"
	ewarn "that may make your user profile unusable for previous versions."
}

pkg_postrm() {
	xdg_pkg_postrm
}