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

EAPI=8

inherit cmake flag-o-matic xdg

DESCRIPTION="Full featured webcam capture application"
HOMEPAGE="https://webcamoid.github.io"
if [[ ${PV} == *9999* ]]; then
	EGIT_REPO_URI="https://github.com/webcamoid/webcamoid.git"
	inherit git-r3
else
	SRC_URI="https://github.com/webcamoid/${PN}/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz"
	KEYWORDS="~amd64 ~arm64 ~x86"
fi

LICENSE="GPL-3"
SLOT="0"
IUSE="alsa aom debug faac fdk-aac ffmpeg gstreamer headers jack lame libusb libuvc mp4
opus portaudio pulseaudio qtmedia rav1e screencast sdl svt-av1 v4l vlc vorbis vpx X x264"

COMMON_DEPEND="
	media-libs/libmikmod
	dev-qt/qtbase:6[concurrent,dbus,gui,network,opengl,widgets]
	dev-qt/qtdeclarative:6
	dev-qt/qtsvg:6
	alsa? ( media-libs/alsa-lib )
	aom? ( media-libs/libaom:= )
	faac? ( media-libs/faac )
	fdk-aac? ( media-libs/fdk-aac:= )
	ffmpeg? ( media-video/ffmpeg:= )
	gstreamer? ( >=media-libs/gstreamer-1.6.0 )
	jack? ( virtual/jack )
	lame? ( media-sound/lame )
	libusb? ( dev-libs/libusb:1 )
	libuvc? ( >=media-libs/libuvc-0.0.7 )
	mp4? ( media-libs/libmp4v2 )
	opus? ( media-libs/opus )
	portaudio? ( media-libs/portaudio )
	pulseaudio? ( media-libs/libpulse )
	qtmedia? ( dev-qt/qtmultimedia:6 )
	rav1e? ( media-video/rav1e:= )
	screencast? ( media-video/pipewire:= )
	sdl? ( media-libs/libsdl2 )
	svt-av1? ( media-libs/svt-av1:= )
	v4l? ( media-libs/libv4l )
	vlc? ( media-video/vlc:= )
	vorbis? ( media-libs/libvorbis )
	vpx? ( media-libs/libvpx:= )
	X? (
		x11-libs/libX11
		x11-libs/libXext
		x11-libs/libXfixes
	)
	x264? ( media-libs/x264:= )
"
DEPEND="${COMMON_DEPEND}
	>=sys-kernel/linux-headers-3.6
"
RDEPEND="${COMMON_DEPEND}
	virtual/opengl
"

src_configure() {
	# -Werror=odr
	# https://bugs.gentoo.org/927104
	# https://github.com/webcamoid/webcamoid/issues/702
	filter-lto

	#Disable git in package source. If not disabled the cmake configure process will show
	#a lot of "fatal not a git repository" errors
	sed -i 's|find_program(GIT_BIN git)|#find_program(GIT_BIN git)|' libAvKys/cmake/ProjectCommons.cmake || die

	local mycmakeargs=(
		-DNOVIDEOEFFECTS=0 # no extra deps, no IUSE
		-DNOCHECKUPDATES=1
		-DNOMEDIAFOUNDATION=1
		-DNODSHOW=1
		-DNOWASAPI=1
		-DNOALSA=$(usex !alsa)
		-DNOAOMAV1=$(usex !aom)
		-DNOFAAC=$(usex !faac)
		-DNOFDKAAC=$(usex !fdk-aac)
		-DNOFFMPEG=$(usex !ffmpeg)
		-DNOGSTREAMER=$(usex !gstreamer)
		-DNOJACK=$(usex !jack)
		-DNOLAME=$(usex !lame)
		-DNOLIBUSB=$(usex !libusb)
		-DNOLIBUVC=$(usex !libuvc)
		-DNOLIBMP4V2=$(usex !mp4)
		-DNOLIBOPUS=$(usex !opus)
		-DNOPORTAUDIO=$(usex !portaudio)
		-DNOPULSEAUDIO=$(usex !pulseaudio)
		-DNOQTAUDIO=$(usex !qtmedia)
		-DNOQTCAMERA=$(usex !qtmedia)
		-DNOQTSCREENCAPTURE=$(usex !qtmedia)
		-DNORAVIE=$(usex !rav1e)
		-DNOPIPEWIRE=$(usex !screencast)
		-DNOSDL=$(usex !sdl)
		-DNOSVTAV1=$(usex !svt-av1)
		-DNOV4L2=$(usex !v4l)
		-DNOV4LUTILS=$(usex !v4l)
		-DNOVLC=$(usex !vlc)
		-DNOLIBVORBIS=$(usex !vorbis)
		-DNOLIBWEBM=$(usex !vpx)
		-DNOLIBVPX=$(usex !vpx)
		-DNOXLIBSCREENCAP=$(usex !X)
		-DNOX264=$(usex !x264)
	)
	cmake_src_configure
}

src_install() {
	docompress -x /usr/share/man/man1/${PN}.1.gz
	cmake_src_install
}