# Maintainer: Antonio Rojas <arojas@archlinux.org>
# Maintainer: Felix Yan <felixonmars@archlinux.org>

pkgbase=qt6-multimedia
pkgname=(qt6-multimedia
         qt6-multimedia-ffmpeg
         qt6-multimedia-gstreamer)
_pkgver=6.10.0
pkgver=${_pkgver/-/}
pkgrel=3
arch=(x86_64 aarch64)
url='https://www.qt.io'
license=(GPL-3.0-only
         LGPL-3.0-only
         LicenseRef-Qt-Commercial
         Qt-GPL-exception-1.0)
pkgdesc='Classes for audio, video, radio and camera functionality'
depends=(gcc-libs
         glibc
         libpulse
         pipewire
         qt6-base)
makedepends=(cmake
             ffmpeg
             git
             gst-plugins-bad-libs
             gst-plugins-base
             libxrandr
             ninja
             pipewire
             qt6-declarative
             qt6-quick3d
             qt6-shadertools
             vulkan-headers)
groups=(qt6)
_pkgfn=${pkgname/6-/}
source=(git+https://github.com/qt/$_pkgfn#tag=v$_pkgver)
sha256sums=('a48376d0219435d27a0bbe22d3e8451b12f89bed2c88a404282f9293fa85cd2a')

prepare() {
  cd $_pkgfn
  git cherry-pick -n 71fc186fb3638d98a7067eb4053655e27573a0da 3b4c357cb218d7edb835e07f9a78ecc82da78c46 # Fix sound when using pulseaudio
}

build() {
  cmake -B build -S $_pkgfn -G Ninja \
    -DCMAKE_MESSAGE_LOG_LEVEL=STATUS \
    -DCMAKE_CXX_FLAGS="$CXXFLAGS -ffat-lto-objects"
  cmake --build build
}

package_qt6-multimedia() {
  depends+=(qt6-multimedia-backend)
  optdepends=('qt6-declarative: QML bindings'
              'qt6-quick3d: for QtQuick3DAudio')

  DESTDIR="$pkgdir" cmake --install build
# Split plugins
  rm -r "$pkgdir"/usr/lib/qt6/plugins/
  rm "$pkgdir"/usr/lib/cmake/Qt6Multimedia/Qt6Q{FFmpeg,Gstreamer}*
  rm -r "$pkgdir"/usr/include/qt6/Qt{FFmpeg,Gstreamer}MediaPluginImpl \
        "$pkgdir"/usr/lib/cmake/Qt6{FFmpeg,Gstreamer}MediaPluginImplPrivate \
        "$pkgdir"/usr/lib/libQt6{FFmpeg,Gstreamer}MediaPluginImpl.a \
        "$pkgdir"/usr/lib/qt6/metatypes/qt6{ffmpeg,gstreamer}mediapluginimplprivate_metatypes.json \
        "$pkgdir"/usr/lib/qt6/mkspecs/modules/qt_lib_{ffmpeg,gstreamer}mediapluginimpl_private.pri \
        "$pkgdir"/usr/lib/qt6/modules/{FFmpeg,Gstreamer}MediaPluginImplPrivate.json

  install -d "$pkgdir"/usr/share/licenses
  ln -s /usr/share/licenses/qt6-base "$pkgdir"/usr/share/licenses/$pkgname
}

package_qt6-multimedia-gstreamer() {
  pkgdesc='Gstreamer backend for qt6-multimedia'
  depends=(gcc-libs
           glib2
           glibc
           gst-libav
           gst-plugins-bad-libs
           gst-plugins-base
           gst-plugins-good
           gstreamer
           libglvnd
           libpulse
           qt6-base
           qt6-multimedia)
  provides=(qt6-multimedia-backend)
  groups=()
  optdepends=('gst-plugins-bad: camera support, additional plugins'
              'gst-plugins-ugly: additional plugins')
  
  DESTDIR="$pkgdir" cmake --install build/src/plugins/multimedia/gstreamer    
}

package_qt6-multimedia-ffmpeg() {
  pkgdesc='FFMpeg backend for qt6-multimedia'
  depends=(ffmpeg
           gcc-libs
           glibc
           libglvnd
           libx11
           libxext
           libxrandr
           qt6-base
           qt6-declarative
           qt6-multimedia)
  provides=(qt6-multimedia-backend)
  groups=()

  DESTDIR="$pkgdir" cmake --install build/src/plugins/multimedia/ffmpeg
}
