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

EAPI=8

inherit eapi9-ver desktop go-module systemd verify-sig xdg

DESCRIPTION="Open Source Continuous File Synchronization"
HOMEPAGE="https://syncthing.net https://github.com/syncthing/syncthing"
SRC_URI="
	https://github.com/${PN}/${PN}/releases/download/v${PV}/${PN}-source-v${PV}.tar.gz
	verify-sig? (
		https://github.com/${PN}/${PN}/releases/download/v${PV}/${PN}-source-v${PV}.tar.gz.asc
	)
"
S="${WORKDIR}"/${PN}

LICENSE="MPL-2.0 Apache-2.0 BSD BSD-2 CC0-1.0 ISC MIT Unlicense"
SLOT="0"
KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc64 ~riscv ~x86"
IUSE="selinux tools"

DEPEND="
	dev-db/sqlite:3
"
RDEPEND="
	${DEPEND}
	acct-group/syncthing
	acct-user/syncthing
	tools? (
		>=acct-user/stdiscosrv-1
		>=acct-user/strelaysrv-1
	)
	selinux? ( sec-policy/selinux-syncthing )
"
BDEPEND="
	verify-sig? ( sec-keys/openpgp-keys-syncthing )
"

VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/syncthing.asc

DOCS=( AUTHORS {GOALS,README}.md )

PATCHES=(
	"${FILESDIR}"/${PN}-1.3.4-TestIssue5063_timeout.patch
	"${FILESDIR}"/${PN}-1.18.4-tool_users.patch
	"${FILESDIR}"/${PN}-1.29.5-remove_race_in_tests.patch #955442
)

src_prepare() {
	# Bug #679280
	xdg_environment_reset

	default

	local srv
	for srv in st{disco,relay}srv; do
		sed -i \
			's|^ExecStart=.*|ExecStart=/usr/libexec/${PN}/${srv}|' \
			cmd/${srv}/etc/linux-systemd/${srv}.service || die
	done;
}

src_compile() {
	# https://github.com/mattn/go-sqlite3#linux
	# -tags libsqlite3: use system sqlite3 instead of bundled
	ego run build.go -version "v${PV}" -tags "libsqlite3" -no-upgrade -build-out=bin/ \
		build $(usev tools all)
}

src_test() {
	ego run build.go test
}

src_install() {
	dobin bin/${PN}

	doman man/*.[157]
	einstalldocs

	domenu etc/linux-desktop/${PN}-{start,ui}.desktop
	local -i icon_size
	for icon_size in 32 64 128 256 512; do
		newicon -s ${icon_size} assets/logo-${icon_size}.png ${PN}.png
	done
	newicon -s scalable assets/logo-only.svg ${PN}.svg

	systemd_dounit etc/linux-systemd/system/${PN}@.service
	systemd_douserunit etc/linux-systemd/user/${PN}.service
	newconfd "${FILESDIR}"/${PN}.confd-r1 ${PN}
	newinitd "${FILESDIR}"/${PN}.initd-r4 ${PN}
	exeinto /etc/user/init.d
	newexe "${FILESDIR}"/syncthing.initd-user syncthing

	keepdir /var/log/${PN}
	insinto /etc/logrotate.d
	newins "${FILESDIR}"/${PN}.logrotate ${PN}

	insinto /etc/ufw/applications.d
	doins etc/firewall-ufw/${PN}

	if use tools; then
		exeinto /usr/libexec/${PN}
		insinto /etc/logrotate.d

		local srv
		for srv in st{disco,relay}srv; do
			doexe bin/${srv}
			systemd_dounit cmd/${srv}/etc/linux-systemd/${srv}.service
			newconfd "${FILESDIR}"/${srv}.confd ${srv}
			newinitd "${FILESDIR}"/${srv}.initd-r1 ${srv}

			newins "${FILESDIR}"/${srv}.logrotate ${srv}
		done
	fi
}

pkg_postinst() {
	xdg_pkg_postinst

	if ver_replacing -lt 2.0 ; then
		elog "Major changes in 2.0:"
		elog "https://github.com/syncthing/syncthing/blob/v${PV}/relnotes/v2.0.md"
	fi
}