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

EAPI=8

inherit gnustep-2

DESCRIPTION="Groupware server built around OpenGroupware.org and the SOPE application server"
HOMEPAGE="https://www.sogo.nu"
SRC_URI="https://github.com/Alinto/sogo/archive/SOGo-${PV}.tar.gz -> ${P}.tar.gz"
S="${WORKDIR}/sogo-SOGo-${PV}"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE="activesync gnutls +ssl sodium"

RESTRICT="test"
PROPERTIES="test_network"

RDEPEND="
	acct-user/sogo
	|| (
		dev-libs/libmemcached-awesome
		dev-libs/libmemcached
	)
	dev-libs/libzip:=
	>=gnustep-libs/sope-${PV}[ldap]
	net-mail/ytnef
	net-misc/curl
	net-misc/memcached
	virtual/libcrypt:=
	activesync? ( dev-libs/libwbxml )
	gnutls? ( net-libs/gnutls:= )
	!gnutls? ( dev-libs/openssl:0= )
	sodium? ( dev-libs/libsodium:= )
"
DEPEND="${RDEPEND}"
BDEPEND=">=gnustep-base/gnustep-make-2.6.3"

src_prepare() {
	gnustep-base_src_prepare
	sed -e "s/validateArgs$//" -i configure \
		|| die
	if use activesync; then
		sed -e 's/Tests\/Unit/ActiveSync &/g' \
			-i GNUmakefile || die
	fi

	default
}

src_configure() {
	egnustep_env

	local myconf=(
		--prefix="${EPREFIX}"
		--disable-strip
		--with-ssl="${ssl_provider}"
		$(use_enable debug)
		$(use_enable sodium)
	)

	if use ssl ; then
		if use gnutls ; then
			myconf+=( --with-ssl=gnutls )
		else
			myconf+=( --with-ssl=ssl )
		fi
	else
		myconf+=( --with-ssl=none )
	fi

	# saml2 requires liblasso, mfa requires liboath
	./configure "${myconf[@]}" || die "configure failed"
}

src_test() {
	# workaround test assumption that libraries are already installed
	local -x LD_LIBRARY_PATH="$(find "${S}" -name obj -printf '%p:')${S}/SoObjects/SOGo/SOGo.framework/Versions/$(ver_cut 1)/sogo:${LD_LIBRARY_PATH}"
	default
}

src_install() {
	gnustep-base_src_install

	newconfd "${FILESDIR}"/sogod.confd sogod
	newinitd "${FILESDIR}"/sogod.initd sogod

	insinto /etc/logrotate.d
	newins Scripts/logrotate sogo
	newdoc Apache/SOGo.conf SOGo-Apache.conf

	insinto /etc/sogo
	doins Scripts/sogo.conf

	insinto /etc/cron.d
	newins Scripts/sogo.cron sogo
	keepdir /var/log/sogo

	fowners sogo:sogo /var/log/sogo
	fowners -R root:sogo /etc/sogo
}

pkg_postinst() {
	gnustep-base_pkg_postinst
	elog "SOGo documentation is available online at:"
	elog "https://www.sogo.nu/support.html#/documentation"
	elog
	elog "Apache sample configuration file is available in:"
	elog "/usr/share/doc/${PF}"
	if use activesync; then
		ewarn "In order to use the SOGo ActiveSync support code in production environments,"
		ewarn "you need to get a proper usage license. Check the documentation for details."
	fi
}