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

EAPI=8

PYTHON_COMPAT=( python3_{11..14} )
inherit flag-o-matic python-single-r1 shell-completion toolchain-funcs

DESCRIPTION="Ncurses based music player with plugin support for many formats"
HOMEPAGE="https://cmus.github.io/ https://github.com/cmus/cmus"
if [[ ${PV} == "9999" ]] ; then
	EGIT_REPO_URI="https://github.com/cmus/cmus.git"
	inherit git-r3
else
	SRC_URI="https://github.com/cmus/cmus/archive/v${PV}.tar.gz -> ${P}.tar.gz"
	KEYWORDS="~amd64 ~arm64 ~ppc ~ppc64 ~riscv ~sparc ~x86"
fi

LICENSE="GPL-2"
SLOT="0"
IUSE="aac alsa ao cddb cdio debug discid elogind ffmpeg +flac jack libsamplerate
	+mad mikmod modplug mp4 musepack opus oss pidgin pulseaudio sndio systemd
	tremor +unicode +vorbis wavpack"
REQUIRED_USE="
	?? ( elogind systemd )
	?? ( tremor vorbis )
	pidgin? ( ${PYTHON_REQUIRED_USE} )
"

BDEPEND="
	virtual/pkgconfig
"
DEPEND="
	sys-libs/ncurses:=[unicode(+)?]
	aac? ( media-libs/faad2 )
	alsa? ( media-libs/alsa-lib )
	ao? ( media-libs/libao )
	cdio? (
		dev-libs/libcdio:=
		dev-libs/libcdio-paranoia:=
		cddb? ( media-libs/libcddb )
	)
	discid? ( media-libs/libdiscid )
	elogind? ( sys-auth/elogind )
	ffmpeg? ( media-video/ffmpeg:= )
	flac? ( media-libs/flac:= )
	jack? (
		virtual/jack
		libsamplerate? ( media-libs/libsamplerate )
	)
	mad? ( media-libs/libmad )
	mikmod? ( media-libs/libmikmod:0 )
	modplug? ( media-libs/libmodplug )
	mp4? (
		media-libs/faad2
		media-libs/libmp4v2:0
	)
	musepack? ( media-sound/musepack-tools )
	opus? ( media-libs/opusfile )
	pulseaudio? ( media-libs/libpulse )
	sndio? ( media-sound/sndio:= )
	systemd? ( sys-apps/systemd )
	tremor? ( media-libs/tremor )
	vorbis? ( media-libs/libvorbis )
	wavpack? ( media-sound/wavpack )
"
RDEPEND="${DEPEND}
	pidgin? (
		${PYTHON_DEPS}
		$(python_gen_cond_dep 'dev-python/dbus-python[${PYTHON_USEDEP}]')
		net-im/pidgin
	)
"

pkg_setup() {
	use pidgin && python-single-r1_pkg_setup
}

src_configure() {
	append-atomic-flags #639678
	tc-export_build_env BUILD_CC
	tc-export CC PKG_CONFIG
	local myconf=(
		HOSTCC="${BUILD_CC}"
		HOSTLD="${BUILD_CC}"
		HOST_CFLAGS="${BUILD_CFLAGS}"
		HOST_LDFLAGS="${BUILD_LDFLAGS}"
		LD="${CC}"

		prefix="${EPREFIX}"/usr
		exampledir="${EPREFIX}"/usr/share/doc/${PF}/examples
		libdir="${EPREFIX}"/usr/$(get_libdir)
		DEBUG=$(usex debug 2 1)
	)

	myconf+=(
		CONFIG_CUE=y
		CONFIG_ARTS=n
		CONFIG_SUN=n
		CONFIG_WAVEOUT=n
		CONFIG_VTX=n
		CONFIG_ROAR=n
	)

	my_config() {
		local value
		use ${1} && value=y || value=n
		myconf+=( ${2}=${value} )
	}

	my_config cddb CONFIG_CDDB
	my_config cdio CONFIG_CDIO
	my_config discid CONFIG_DISCID
	my_config flac CONFIG_FLAC
	my_config mad CONFIG_MAD
	my_config modplug CONFIG_MODPLUG
	my_config mikmod CONFIG_MIKMOD
	my_config musepack CONFIG_MPC
	my_config tremor CONFIG_TREMOR
	my_config opus CONFIG_OPUS
	my_config wavpack CONFIG_WAVPACK
	my_config mp4 CONFIG_MP4
	my_config aac CONFIG_AAC
	my_config ffmpeg CONFIG_FFMPEG
	my_config pulseaudio CONFIG_PULSE
	my_config alsa CONFIG_ALSA
	my_config jack CONFIG_JACK
	my_config sndio CONFIG_SNDIO
	my_config libsamplerate CONFIG_SAMPLERATE
	my_config ao CONFIG_AO
	my_config oss CONFIG_OSS

	if use elogind || use systemd; then
		myconf+=( CONFIG_MPRIS=y )
	else
		myconf+=( CONFIG_MPRIS=n )
	fi

	# Both CONFIG_TREMOR=y and CONFIG_VORBIS=y for tremor
	if use vorbis || use tremor; then
		myconf+=( CONFIG_VORBIS=y )
	else
		myconf+=( CONFIG_VORBIS=n )
	fi

	./configure "${myconf[@]}" || die
}

src_compile() {
	emake V=2
}

src_install() {
	default

	dozshcomp contrib/_cmus
	newbashcomp contrib/${PN}.bash-completion ${PN}

	if use pidgin; then
		python_newscript contrib/cmus-updatepidgin.py cmus-updatepidgin
	fi
}