# Forked from Alpine for temporary downstream patches
maintainer="Robert Mader <robert.mader@collabora.com>"
pkgname=libcamera
_pkgver=0.7.1
pkgver=9999$_pkgver
pkgrel=1
pkgdesc="Linux camera framework"
url="https://libcamera.org/"
arch="all"
license="LGPL-2.1-or-later AND GPL-2.0-or-later"
# upstream calls 'date' with a non-POSIX option so we pull in coreutils
makedepends="
	coreutils
	doxygen
	eudev-dev
	glib-dev
	gnutls-dev
	graphviz
	gst-plugins-base-dev
	gtest-dev
	libevent-dev
	libpisp-dev
	libunwind-dev
	libyuv-dev
	linux-headers
	meson
	py3-jinja2
	py3-ply
	py3-pybind11-dev
	py3-sphinx
	py3-sphinxcontrib-doxylink
	py3-yaml
	python3-dev
	qt6-qtbase-dev
	qt6-qttools-dev
	yaml-dev
	"
subpackages="
	$pkgname-dbg
	$pkgname-dev
	qcam
	$pkgname-gstreamer
	$pkgname-v4l2
	$pkgname-tools
	py3-$pkgname-pyc:pyc
	py3-$pkgname:py3
	"
_tuning_files="
	hi846.yaml
	imx355.yaml
	imx363.yaml
	imx371.yaml
	imx376.yaml
	imx519.yaml
	imx858.yaml
	s5k3l6xx.yaml
	s5kjn1.yaml
	"
source="https://gitlab.freedesktop.org/camera/libcamera/-/archive/v$_pkgver/libcamera-v$_pkgver.tar.gz
	0001-debayer_egl-Include-stats-computation-into-benchmark.patch
	0002-debayer_egl-Sync-output-buffers-after-processing-sta.patch
	0003-egl-Add-GL-format-parameter-to-eGLImage-constructor.patch
	0004-egl-Remove-some-parameters-from-createTexture2D.patch
	0005-egl-eGLImage-Add-flag-to-remember-dmabuf-import-fail.patch
	0006-libcamera-swstats_cpu-Take-MappedFrameBuffer-in-proc.patch
	0007-debayer_egl-Implement-dmabuf-import-for-input-buffer.patch
	0008-libcamera-software_isp-debayer_egl-Demote-unsupporte.patch
	0009-software_isp-debayer_egl-Request-input-buffer-alignm.patch
	0010-egl-Log-the-GL-driver.patch
	0011-software_isp-debayer_egl-Consider-border-for-scaling.patch
	0012-libcamera-simple-Enable-softISP-for-the-Pinephone.patch
	0013-libcamera-simple-Skip-hwISP-formats-if-swISP-is-acti.patch
	qcam.desktop
	$_tuning_files
	"
builddir="$srcdir/$pkgname-v$_pkgver"
# gstreamer tests fail
# manual strip because ipa .sign files depend on the file contents- have to re-sign after strip
options="!strip !check"

case "$CARCH" in
arm*|aarch64)
	subpackages="$subpackages $pkgname-raspberrypi"
	;;
esac

case "$CARCH" in
ppc64le|s390x|riscv64|loongarch64)
	# doesn't install any ipa
	;;
*)
	depends="$pkgname-ipa=$pkgver-r$pkgrel"
	subpackages="$subpackages $pkgname-ipa"
	;;
esac

build() {
	abuild-meson \
		-Dpipelines=auto,virtual \
		-Dv4l2=true \
		-Dwerror=false \
		-Ddocumentation=disabled \
		. output
	meson compile -C output
}

check() {
	meson test -C output --print-errorlogs
}

package() {
	DESTDIR="$pkgdir" meson install --no-rebuild -C output
	install -Dm644 -t "$pkgdir"/usr/share/applications "$srcdir"/qcam.desktop

	# manual strip first..
	scanelf --recursive \
		--nobanner \
		--etype "ET_DYN,ET_EXEC" \
		--format "%F" \
		"$pkgdir" \
		| while read -r file; do
			strip "$file"
	done
}

ipa() {
	depends=""
	amove usr/lib/libcamera
	amove usr/share/libcamera/ipa

	for _tuning_file in $_tuning_files; do
		install -Dm644 -t "$subpkgdir"/usr/share/libcamera/ipa/simple \
			"$srcdir"/"$_tuning_file"
	done

	# then sign ipa's
	local ipa
	for ipa in "$subpkgdir"/usr/lib/libcamera/ipa/ipa*.so; do
		msg "signing $ipa"
		"$builddir"/src/ipa/ipa-sign.sh \
			"$(find "$builddir"/output -type f -iname "*ipa-priv-key.pem")" \
			"$ipa" \
			"$ipa".sign
	done
}

qcam() {
	depends=""
	amove usr/bin/qcam

	amove usr/share/applications/qcam.desktop
}

gstreamer() {
	depends=""
	amove usr/lib/gstreamer-1.0
}

v4l2() {
	depends=""
	amove usr/libexec/libcamera/v4l2-compat.so
}

raspberrypi() {
	depends=""
	amove usr/share/libcamera/ipa/rpi
	amove usr/libexec/libcamera/raspberrypi_ipa_proxy
	amove usr/share/libcamera/pipeline/rpi/vc4
}

tools() {
	depends=""
	amove usr/bin/cam
	amove usr/bin/lc-compliance
}

py3() {
	pkgdesc="$pkgname (python bindings)"
	depends="python3"

	amove usr/lib/python*
}

sha512sums="
0e886021a3bbd668184b581248b9d89a8e909360a7f138237a2c03b41b477cb255bd6daf4932fdebf86c3410b4deccc4c5db93264ed0c6c9969076cdbae8a77b  libcamera-v0.7.1.tar.gz
5e936a5041f30c35f120a437a1cec65ab1d2b3ac335500566c291c7891b9ba585e6b7e4d22c54870257d161d23ef8bc5d3a99a512193f47adf41d4ae1683247a  0001-debayer_egl-Include-stats-computation-into-benchmark.patch
a2b110357ca6b26b469e399fc49fb890efcd97ccc18c16bf715be2a2c9159c293e5f9a23d9bab97dc4a19777232340c008e5ef156699f4383fed67c6157e0e1d  0002-debayer_egl-Sync-output-buffers-after-processing-sta.patch
00792bac0ee7aba1c2abdb1152efa86a08a06a1729c2f7aec19e647b4799ad8cac3a61fb0fc92e87f2af7c776811265e4f391ac8466b8b8a327b10dd9fe8a4f1  0003-egl-Add-GL-format-parameter-to-eGLImage-constructor.patch
75c8adb06c23e791464cbdd8ad36607a5bc6d46fa25af7b395f628b933c2a5fbbe1c1896eb6f4cac521aef38a13b67b71659503d344fe728763d7012f78de4d4  0004-egl-Remove-some-parameters-from-createTexture2D.patch
2afb8080916e25be93b6313f7419364ef8d02616b2e3065733ef180ebadf8ae05412c3b9b03017db711ca4460cf1bbe8c240e6502ff3b8797d7c864b0852b7c2  0005-egl-eGLImage-Add-flag-to-remember-dmabuf-import-fail.patch
5eca6b23c73300948e743e56cb4632db774c860a580f242ba20f387353d00879f70067179eeedb1c1c2f240303af51dc63e40573fa2ef03ebca26bfce1e94c69  0006-libcamera-swstats_cpu-Take-MappedFrameBuffer-in-proc.patch
9fc710bc0e177dcd664b1c7773e8c96dcf8bdf64ababf3f357b95d6dda2e8127ff0ee76f3d11ad01942f5a70f85ed94b78c17ef30c5639bd1c1b2b17fcdf17a4  0007-debayer_egl-Implement-dmabuf-import-for-input-buffer.patch
df8bbbb4438821e8c61a812886f0266f54f10b4b4d490efb6564e30010b8b624671f4b257dbda34056e03b369041c1e39c75aac351ddad2c9a4b98113f3feb9b  0008-libcamera-software_isp-debayer_egl-Demote-unsupporte.patch
8b2b8323b44d9ad45fa73862b0d7287ad9eb5f36583fb1bcbbf01ca85e2117883fde034e3314cbcbc3a73504f08c6abbb00a7e54d97f5991b3570e4e3a20925c  0009-software_isp-debayer_egl-Request-input-buffer-alignm.patch
0cc8cb2da2a25f3c5daa4d644e05f3ba6d45717eaea9e3e19cf65ace4d0eba30df9f5c16b351a693c5db4d4c298f5c04e69aa70db1e4e11318b0bb914e90af06  0010-egl-Log-the-GL-driver.patch
ca6dacedbd76a629539d033c028018ab5b858fcc3194787ceeda6b560d4d20dbb9b684f859ac2e40d144a77bcb2cc211c47d639ac6053cfc80cffeff3c5392b8  0011-software_isp-debayer_egl-Consider-border-for-scaling.patch
709a610297f7d3191da404816841183094bf8deeca4f0abec63a59f0ae7b95d02b546bb6315932264f7a0a731f7e3b949eeb5d5078f7399f39b580d4ff11da66  0012-libcamera-simple-Enable-softISP-for-the-Pinephone.patch
4482204e7a5fea2b853b8030e45fac8716b9e3fc84a16f248b778b3f10a85d956698147f04a173956f3bbf4cfdc6c12879fd8f621bd0147ecb9b3b0d2ddc3d6b  0013-libcamera-simple-Skip-hwISP-formats-if-swISP-is-acti.patch
22167a4eceb6d1b40b0b7c45fdf116c71684f5340de7f767535cb8e160ad9d2ae0f00cb3d461f73a344520a48a4641cf46226841d78bee06bfbfd2a91337f754  qcam.desktop
2ee566653b17d565d2c0de67cbe6ebad25df5aac6051cad78e6bae52016fa2ca0247e964d735ac776b3e0bd447ead9c4fcb26cd7629228cdba3ceb91b46f378f  hi846.yaml
2ee566653b17d565d2c0de67cbe6ebad25df5aac6051cad78e6bae52016fa2ca0247e964d735ac776b3e0bd447ead9c4fcb26cd7629228cdba3ceb91b46f378f  imx355.yaml
2ee566653b17d565d2c0de67cbe6ebad25df5aac6051cad78e6bae52016fa2ca0247e964d735ac776b3e0bd447ead9c4fcb26cd7629228cdba3ceb91b46f378f  imx363.yaml
2ee566653b17d565d2c0de67cbe6ebad25df5aac6051cad78e6bae52016fa2ca0247e964d735ac776b3e0bd447ead9c4fcb26cd7629228cdba3ceb91b46f378f  imx371.yaml
2ee566653b17d565d2c0de67cbe6ebad25df5aac6051cad78e6bae52016fa2ca0247e964d735ac776b3e0bd447ead9c4fcb26cd7629228cdba3ceb91b46f378f  imx376.yaml
2ee566653b17d565d2c0de67cbe6ebad25df5aac6051cad78e6bae52016fa2ca0247e964d735ac776b3e0bd447ead9c4fcb26cd7629228cdba3ceb91b46f378f  imx519.yaml
2ee566653b17d565d2c0de67cbe6ebad25df5aac6051cad78e6bae52016fa2ca0247e964d735ac776b3e0bd447ead9c4fcb26cd7629228cdba3ceb91b46f378f  imx858.yaml
2ee566653b17d565d2c0de67cbe6ebad25df5aac6051cad78e6bae52016fa2ca0247e964d735ac776b3e0bd447ead9c4fcb26cd7629228cdba3ceb91b46f378f  s5k3l6xx.yaml
2ee566653b17d565d2c0de67cbe6ebad25df5aac6051cad78e6bae52016fa2ca0247e964d735ac776b3e0bd447ead9c4fcb26cd7629228cdba3ceb91b46f378f  s5kjn1.yaml
"
