# Maintainer: Markus Fritsche <fritsche.markus@gmail.com>
#
# daedalus-v4l2 — userspace daemon + V4L2 m2m test tools.
#
# Pair to daedalus-v4l2-dkms (kernel module).  Together they expose
# /dev/videoNN + /dev/mediaNN as a V4L2 stateless decoder shim on Pi 5 /
# CM5, decoding VP9 / AV1 / H.264 via dlopen'd FFmpeg in a single-
# threaded daemon and shipping decoded NV12 / P010 back through dmabuf.
# Consumed end-to-end by libva-v4l2-request-fourier (>= 1.0.0.r376) so
# `ffmpeg -hwaccel vaapi` against vp9_small.ivf produces byte-exact NV12.
#
# Project: https://git.reauktion.de/reauktion/daedalus-v4l2
# Sibling kernel package: daedalus-v4l2-dkms
# Sibling consumer: libva-v4l2-request-fourier

pkgname=daedalus-v4l2
_upstreampkg=daedalus-v4l2

# Pin the daedalus-v4l2 tip.  f55b2cd = "Phase 8.13: byte-exact end-to-
# end via libva (consumer target hit)" — first commit where the full
# ffmpeg -hwaccel vaapi → libva → /dev/video0 → daemon path lands a
# pixel-correct decoded frame back in ffmpeg.  Promote to a later pin
# only after a future phase closes cleanly.
_commit=f55b2cdab8a8c0bc04e8c1bb1d0b6ca85e7d96d2

# 0.1.0 (pre-1.0) + commit count + short sha.  Bump the .Y on each
# Phase 8.x close.  pkgver() recomputes at build time.
pkgver=0.1.0.r16.f55b2cd
pkgrel=1
pkgdesc="Userspace daemon for the daedalus-v4l2 V4L2 stateless decoder shim (VP9/AV1/H.264 on Pi 5 / CM5)"
arch=('aarch64')
url="https://git.reauktion.de/reauktion/daedalus-v4l2"
license=('BSD-2-Clause' 'GPL-2.0-or-later')
# Daemon dlopens libavformat.so.61 / libavcodec.so.61 / libavutil.so.59
# at runtime (Option γ — see daemon/src/ffmpeg_loader.h).  ffmpeg
# provides those; we don't link them.
depends=('ffmpeg' 'libdrm')
# Headers from libav*-dev needed at compile time for type-safe function
# pointer signatures; pkg-config locates them.
makedepends=('cmake' 'ninja' 'pkgconf' 'git' 'ffmpeg')
optdepends=('daedalus-v4l2-dkms: kernel module providing /dev/video0 + /dev/daedalus-v4l2'
            'libva-v4l2-request-fourier: VA-API consumer routing through this daemon')

source=("git+https://git.reauktion.de/reauktion/daedalus-v4l2.git#commit=${_commit}")
sha256sums=('SKIP')

pkgver() {
    cd "${srcdir}/${_upstreampkg}"
    printf '0.1.0.r%s.%s' \
        "$(git rev-list --count HEAD)" \
        "$(git rev-parse --short=7 HEAD)"
}

build() {
    cd "${srcdir}/${_upstreampkg}/daemon"
    cmake -B build -G Ninja \
        -DCMAKE_BUILD_TYPE=Release \
        -DCMAKE_INSTALL_PREFIX=/usr
    cmake --build build

    cd "${srcdir}/${_upstreampkg}/tools"
    make
}

package() {
    cd "${srcdir}/${_upstreampkg}"

    # Daemon binary
    install -Dm755 daemon/build/daedalus_v4l2_daemon \
        "${pkgdir}/usr/bin/daedalus_v4l2_daemon"

    # Test tools (under /usr/libexec to keep them out of the default PATH
    # — they're for verification, not daily use).
    install -Dm755 tools/test_chardev_pingpong \
        "${pkgdir}/usr/libexec/daedalus-v4l2/test_chardev_pingpong"
    install -Dm755 tools/test_m2m_decode \
        "${pkgdir}/usr/libexec/daedalus-v4l2/test_m2m_decode"
    install -Dm755 tools/test_m2m_stream \
        "${pkgdir}/usr/libexec/daedalus-v4l2/test_m2m_stream"

    # Shared wire-protocol header (kernel ↔ daemon); useful for
    # third-party clients of the chardev.
    install -Dm644 include/daedalus_v4l2_proto.h \
        "${pkgdir}/usr/include/daedalus_v4l2_proto.h"

    # Documentation
    install -Dm644 README.md \
        "${pkgdir}/usr/share/doc/${pkgname}/README.md"
    for d in docs/*.md; do
        install -Dm644 "$d" "${pkgdir}/usr/share/doc/${pkgname}/$(basename "$d")"
    done

    # Licenses: BSD-2-Clause for daemon/tools, GPL for the kernel proto
    # header; the SPDX headers in src/ are the canonical declaration but
    # ship a short note here for package-manager-driven license queries.
    install -dm755 "${pkgdir}/usr/share/licenses/${pkgname}"
    cat > "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" <<'EOF'
daedalus-v4l2 userspace components are BSD-2-Clause licensed.
The shared kernel↔daemon wire protocol header
(/usr/include/daedalus_v4l2_proto.h) is GPL-2.0-or-later WITH
Linux-syscall-note for kernel-side compatibility.  See SPDX
headers on individual source files for the canonical
per-file declaration.
EOF
}
