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

EAPI=8

inherit shell-completion systemd toolchain-funcs

DESCRIPTION="Free Client for OneDrive on Linux"
HOMEPAGE="https://abraunegg.github.io/"
SRC_URI="https://codeload.github.com/abraunegg/onedrive/tar.gz/v${PV} -> ${P}.tar.gz"

LICENSE="GPL-3"
SLOT="0"
KEYWORDS="~amd64"
IUSE="libnotify"
# Barely any tests that require manually building.
# Manual testing seems to be the best approach
RESTRICT="test"

RDEPEND="
	>=dev-db/sqlite-3.7.15:3
	net-misc/curl
	libnotify? ( x11-libs/libnotify )
"
DEPEND="${RDEPEND}"
BDEPEND="
	virtual/pkgconfig
	|| (
	   sys-devel/gcc:15[d]
	   sys-devel/gcc:16[d]
	)
"
MIN_GCC_SLOT=15
MAX_GCC_SLOT=16

PATCHES=(
	"${FILESDIR}/${PN}-2.5.5-fix-gdc-build-pr-3213.patch"
	"${FILESDIR}/${PN}-2.5.5-fix-as-needed-pr-3272.patch"
	"${FILESDIR}/${PN}-2.5.5-fix-DC-basename-check-pr-3273.patch"
)

pkg_setup() {
	[[ ${MERGE_TYPE} != binary ]] && _setup_gdc
}

src_configure() {
	# GDCFLAGS are meant to be specified in make.conf. Avoid the DFLAGS
	# name to support ::dlang which needs separate variables for each
	# compiler's flags
	DCFLAGS="${GDCFLAGS}"
	# libphobos does not provide any backwards compatibility guarantees.
	# Until the gcc dependency in properly slotted and a USE-expand flag
	# is added, use static linking.
	DCFLAGS+=" -static-libphobos ${LDFLAGS}"
	export DCFLAGS

	myeconfargs=(
		$(use_enable libnotify notifications)
		--with-bash-completion-dir="$(get_bashcompdir)"
		--with-zsh-completion-dir="$(get_zshcompdir)"
		--with-fish-completion-dir="$(get_fishcompdir)"
		--with-systemdsystemunitdir="$(systemd_get_systemunitdir)"
		--with-systemduserunitdir="$(systemd_get_userunitdir)"
		--enable-completions
		--disable-version-check
		# Adds -g and -debug. There are only a few instructions guarded by debug
		--disable-debug
	)
	econf "${myeconfargs[@]}"
}

src_compile() {
	# Avoid overwriting user flags
	emake DCFLAGS="${DCFLAGS}"
}

src_install() {
	emake DESTDIR="${D}" docdir=/usr/share/doc/${PF} install
	# log directory
	keepdir /var/log/onedrive
	fperms 775 /var/log/onedrive
	fowners root:users /var/log/onedrive
	# init script
	dobin contrib/init.d/onedrive_service.sh
	newinitd contrib/init.d/onedrive.init onedrive
}

# Set DC to point to a compatible gcc[d], similar to python-any-r1
_setup_gdc() {
	local gcc_pkg gcc_bin_root
	if tc-is-cross-compiler; then
		gcc_pkg="cross-${CHOST}/gcc"
		gcc_bin_root="${BROOT}/usr/${CBUILD}/${CHOST}/gcc-bin"
	else
		gcc_pkg="sys-devel/gcc"
		gcc_bin_root="${BROOT}/usr/${CHOST}/gcc-bin"
	fi

	for ((i="${MAX_GCC_SLOT}"; i>="${MIN_GCC_SLOT}"; --i)); do
		local gcc_dep="${gcc_pkg}:${i}[d]"
		einfo "Checking whether GCC ${i} is suitable ..."
		ebegin "  ${gcc_dep}"
		has_version -b "${gcc_dep}"
		eend ${?} || continue

		# Is it better to to DC="${CHOST}-gdc-${i}"?
		export DC="${gcc_bin_root}/${i}/${CHOST}-gdc"
		return
	done

	eerror "No gcc[d] implementation found for the build"
	if tc-is-cross-compiler; then
		eerror "For cross-compilation make sure ${gcc_pkg}[d] is installed"
	fi
	die "No supported GDC implementation installed."
}