# Maintainer (Arch): Jan Alexander Steffens (heftig) <heftig@archlinux.org>
# Contributor (Arch): Jan de Groot <jgc@archlinux.org>
# Maintainer: Omar Vega Ramos <ovruni@gnu.org.pe>
# Contributor: Isaac David <isacdaavid@at@isacdaavid@dot@info>
# Contributor: Márcio Silva <coadde@hyperbola.info>
# Contributor: bill-auger <bill-auger@programmer.net>
# Contributor: David P. <megver83@parabola.nu>

# parabola changes and rationale
# * removed support for non-free faac codec
# * removed nvidia-utils from optdepends
# * adapt pkgdesc variable substitutions in package() functions
# * remove makedepend and package depend on svt-hevc (i686 and armv7h)
# * meson with -D svthevcenc=disabled (i686 and armv7h)

pkgbase=gst-plugins-bad
pkgname=(gst-plugins-bad-libs gst-plugins-bad gst-plugin-opencv gst-plugin-wpe)
pkgver=1.18.3
pkgrel=2
pkgrel+=.parabola1
pkgdesc="Multimedia graph framework - bad plugins"
pkgdesc+=", without nonfree faac support"
url="https://gstreamer.freedesktop.org/"
arch=(x86_64)
arch+=(i686 armv7h)
license=(LGPL)
depends=(gst-plugins-base-libs orc libdrm libx11 libgudev libusb libvdpau
         libxkbcommon-x11)
makedepends=(mjpegtools curl chromaprint libmms faad2 libdca libdvdnav
             libmodplug libgme nettle libkate wayland libofa openjpeg2 libwebp
             libsrtp sbc rtmpdump libexif libdvdread wildmidi ladspa openal
             vulkan-icd-loader libfdk-aac soundtouch spandsp neon
             webrtc-audio-processing libdc1394 libmpcdec zvbi openexr libbs2b
             libnice lcms2 bluez-libs glu srt aom x265 liblrdf libde265 zbar
             librsvg fluidsynth lilv lv2 gst-plugins-good python git
             gobject-introspection vulkan-headers vulkan-validation-layers
             wayland-protocols gtk3 meson shaderc libavtp libmicrodns
             zxing-cpp opencv libva wpewebkit)
makedepends_x86_64=(svt-hevc)
checkdepends=(xorg-server-xvfb)
options=(!emptydirs)
_commit=382e373d9be363f1e21b12990a4d12f1ecb6df41  # tags/1.18.3^0
source=("git+https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad.git#commit=$_commit")
sha256sums=('SKIP')

pkgver() {
  cd $pkgbase
  git describe --tags | sed 's/-/+/g'
}

prepare() {
  cd $pkgbase

  if [ "$CARCH" = armv7h ]; then
    git cherry-pick -n 3ea6387f969c0b08027fc959b8b8cd102708bceb  # Fix svthevcenc test
    git cherry-pick -n 77f28ee3e71d1c5bd8278967963b08b226515dd1  # opencv 4.5
  fi
}

build() {
  if ! [ "$CARCH" = x86_64 ]; then
    disable_svthevc='-D svthevcenc=disabled'
  fi

  arch-meson $pkgbase build $disable_svthevc \
    -D directfb=disabled \
    -D faac=disabled \
    -D doc=disabled \
    -D flite=disabled \
    -D gsm=disabled \
    -D iqa=disabled \
    -D magicleap=disabled \
    -D msdk=disabled \
    -D openh264=disabled \
    -D openmpt=disabled \
    -D openni2=disabled \
    -D opensles=disabled \
    -D tinyalsa=disabled \
    -D voaacenc=disabled \
    -D voamrwbenc=disabled \
    -D wasapi2=disabled \
    -D wasapi=disabled \
    -D gobject-cast-checks=disabled \
    -D package-name="GStreamer Bad Plugins (Parabola GNU/Linux-libre)" \
    -D package-origin="https://www.parabola.nu/"
  meson compile -C build
}

check() (
  mkdir -p -m 700 "${XDG_RUNTIME_DIR:=$PWD/runtime-dir}"
  export XDG_RUNTIME_DIR

  # elements_dtls test hangs sometimes
  xvfb-run -s '-screen 0 1920x1080x24 -nolisten local +iglx -noreset' \
    meson test -C build --print-errorlogs || :
)

package_gst-plugins-bad-libs() {
  pkgdesc="${pkgdesc/ plugins}"
  provides=("gst-transcoder=$pkgver")
  conflicts=("gst-transcoder<1.18.0")
  replaces=("gst-transcoder<1.18.0")

  if [ "$CARCH" = x86_64 ]; then
    enable_svthevc=svthevcenc
  fi

  DESTDIR="$pkgdir" meson install -C build

  mkdir -p ext/lib/gstreamer-1.0
  for _x in aom assrender bs2b bz2 chromaprint closedcaption colormanagement \
            curl dc1394 de265 dtls dtsdec faad fdkaac fluidsynthmidi gme \
            hls kate ladspa lv2 mms modplug mpeg2enc mplex musepack \
            neonhttpsrc ofa openal openexr openjpeg opusparse resindvd rsvg \
            rtmp sbc sctp smoothstreaming sndfile soundtouch spandsp srt srtp \
            teletext ttmlsubs vulkan waylandsink webp webrtc webrtcdsp \
            wildmidi x265 zbar va "$enable_svthevc" avtp zxing microdns; do
    _x="lib/gstreamer-1.0/libgst${_x}.so"
    mv "$pkgdir/usr/$_x" "ext/$_x"
  done

  mkdir -p opencv/{lib,include/gstreamer-1.0/gst}
  mv -t opencv/lib "$pkgdir"/usr/lib/*opencv*
  mv -t opencv/include/gstreamer-1.0/gst \
    "$pkgdir"/usr/include/gstreamer-1.0/gst/opencv

  for _x in opencv wpe; do
    mkdir -p "$_x/lib/gstreamer-1.0"
    _f="lib/gstreamer-1.0/libgst${_x}.so"
    mv "$pkgdir/usr/$_f" "$_x/$_f"
  done
}

package_gst-plugins-bad() {
  depends=("gst-plugins-bad-libs=$pkgver" gst-plugins-good
           aom libass libbs2b bzip2 chromaprint pango lcms2 curl libxml2
           libdc1394 libde265 openssl libdca faad2 libfdk-aac fluidsynth
           libgme nettle libkate liblrdf lilv libmms libmodplug mjpegtools
           libmpcdec neon libofa openal openexr openjpeg2 opus libdvdnav
           libdvdread librsvg rtmpdump sbc libsndfile soundtouch spandsp srt
           libsrtp zvbi vulkan-icd-loader libxcb wayland libwebp libnice
           webrtc-audio-processing wildmidi x265 zbar libavtp
           libmicrodns zxing-cpp libva)
  depends_x86_64=(svt-hevc)

  mv ext "$pkgdir/usr"
}

package_gst-plugin-opencv() {
  pkgdesc="${pkgdesc/bad plugins/opencv plugin}"
  depends=(gst-plugins-base-libs opencv)

  mv opencv "$pkgdir/usr"
}

package_gst-plugin-wpe() {
  pkgdesc="${pkgdesc/bad plugins/wpe plugin}"
  depends=(gst-plugins-base-libs wpewebkit)

  mv wpe "$pkgdir/usr"
}
