# Packager = Developer <dev@tuxcore.org> 
pkgbase=gstreamer
pkgname=(
  gstreamer
  gst-plugins-bad-libs   # Split badaudio first
  gst-plugins-base-libs
  gst-plugins-base
  gst-plugins-good
  gst-plugins-bad
  gst-plugin-gtk
  gst-plugin-msdk
  gst-plugin-opencv
  gst-plugin-qml6
  gst-plugin-qmlgl
  gst-plugin-qsv
  gst-plugin-va
  gst-plugin-wpe
  gst-plugins-ugly
  gst-libav
  gst-devtools-libs
  gst-devtools
  gst-rtsp-server
  gst-editing-services
  gstreamer-vaapi
  gst-python
  gstreamer-docs
)
pkgver=1.24.4
pkgrel=1
pkgdesc="Multimedia graph framework"
url="https://gstreamer.freedesktop.org/"
arch=(x86_64)
license=(LGPL-2.1-or-later)
makedepends=(
  # superproject
  git meson

  # gstreamer
  bash-completion gobject-introspection gtk3 libcap libelf libunwind python
  python-packaging rust valgrind

  # gst-plugins-base
  alsa-lib cdparanoia graphene libdrm libglvnd libgudev libjpeg libpng libtheora
  libx11 libxi libxv mesa opus orc pango qt5-base qt5-tools sdl2 wayland
  wayland-protocols zlib

  # gst-plugins-good
  aalib cairo flac gdk-pixbuf2 jack2 lame libavc1394 libcaca libdv libiec61883
  libpulse libraw1394 libshout libsoup3 libvpx libxdamage libxtst mpg123 nasm
  nettle opencore-amr qt5-declarative qt5-wayland qt5-x11extras qt6-declarative
  qt6-shadertools qt6-tools qt6-wayland speex taglib twolame v4l-utils wavpack

  # gst-plugins-bad
  bluez-libs bzip2 chromaprint faac faad2 fluidsynth gsm json-glib ladspa
  libavtp libbs2b libdca libde265 libdvdnav libfdk-aac libfreeaptx libgme
  liblc3 libldac liblrdf libltc libmicrodns libmodplug libmpcdec libnice
  libopenmpt libsrtp libva libvpl libxkbcommon-x11 libxml2 lilv lv2 mjpegtools
  neon openal opencv qrencode rtmpdump sbc shaderc soundtouch spandsp svt-av1
  svt-hevc vulkan-headers vulkan-icd-loader vulkan-validation-layers
  webrtc-audio-processing-1 wildmidi wpewebkit zbar zvbi zxing-cpp

  # gst-plugins-ugly
  a52dec libcdio libdvdread libmpeg2 x264

  # gst-libav
  ffmpeg

  # gst-editing-services
  opentimelineio

  # gstreamer-vaapi
  libxrandr

  # gst-python
  python-gobject python-setuptools
)
checkdepends=(xorg-server-xvfb)
source=(
  "git+https://gitlab.freedesktop.org/gstreamer/gstreamer.git?signed#tag=$pkgver"
  "https://gstreamer.freedesktop.org/src/gstreamer-docs/gstreamer-docs-$pkgver.tar.xz"{,.asc}
  0001-HACK-meson-Disable-broken-tests.patch
  0002-libav-Fix-compatibility-with-ffmpeg-7.patch
)
b2sums=('37d5e65358a9b7491c6076a814595c1da1b6d5478fc6b777e53e2966ad0eaf57802477315cbc8c4518abcdc7c908687e4397bcbd535ebff655cb96793a68d8fb'
        'e8163c2fb5206f4d100c640504d373bf0118ff90dc886168c2976429b230f4f3a154e77f46275c080f936fe3c78bc3c5018c47f21e816188dfab1df7b4c9ddce'
        'SKIP'
        '11e4af4a3697ddfa1c671d2d965b3765e4dce7ea544b634e1062c8257d1e4777908ede233c0b021460f5e54931c48fe3666dde92c1a350cab194b414566a2239'
        '4692623d2c7b0c6b2c81772abc11a385fad53b00476600e859b980f1c2925f43ffd71b4b8f55b0d61f3a6313530690c512f92eaa59a97b6a0aef735e1da8c8e6')
        
prepare() {
  cd gstreamer

  # Disable broken tests
  git apply -3 ../0001-HACK-meson-Disable-broken-tests.patch

  # Fixes for FFmpeg 7
  # https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6505
  git apply -3 ../0002-libav-Fix-compatibility-with-ffmpeg-7.patch
}

build() {
  local meson_options=(
    # Superproject options
    -D examples=disabled
    -D gobject-cast-checks=disabled
    -D gpl=enabled
    -D gst-examples=disabled
    -D libnice=disabled
    -D orc-source=system
    -D package-name="Arch Linux GStreamer ${epoch:+$epoch:}$pkgver-$pkgrel"
    -D package-origin="https://www.archlinux.org/"
    -D vaapi=enabled

    # Subproject options
    -D gstreamer:dbghelp=disabled
    -D gstreamer:ptp-helper-permissions=capabilities
    -D gst-plugins-base:libvisual=disabled
    -D gst-plugins-base:tremor=disabled
    -D gst-plugins-good:rpicamsrc=disabled
    -D gst-plugins-bad:aja=disabled
    -D gst-plugins-bad:amfcodec=disabled
    -D gst-plugins-bad:directfb=disabled
    -D gst-plugins-bad:directshow=disabled
    -D gst-plugins-bad:directsound=disabled
    -D gst-plugins-bad:flite=disabled
    -D gst-plugins-bad:gs=disabled
    -D gst-plugins-bad:iqa=disabled
    -D gst-plugins-bad:isac=disabled
    -D gst-plugins-bad:magicleap=disabled
    -D gst-plugins-bad:mfx_api=oneVPL
    -D gst-plugins-bad:onnx=disabled
    -D gst-plugins-bad:openh264=disabled
    -D gst-plugins-bad:openni2=disabled
    -D gst-plugins-bad:opensles=disabled
    -D gst-plugins-bad:qt6d3d11=disabled
    -D gst-plugins-bad:tinyalsa=disabled
    -D gst-plugins-bad:voaacenc=disabled
    -D gst-plugins-bad:voamrwbenc=disabled
    -D gst-plugins-bad:wasapi2=disabled
    -D gst-plugins-bad:wasapi=disabled
    -D gst-plugins-bad:wic=disabled
    -D gst-plugins-bad:win32ipc=disabled
    -D gst-plugins-ugly:sidplay=disabled
    -D gst-devtools:debug_viewer=enabled
  )

  # https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3197
  export GI_SCANNER_DISABLE_CACHE=1

  arch-meson gstreamer build "${meson_options[@]}"
  meson configure build --no-pager # Print config
  meson compile -C build
}

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

  export NO_AT_BRIDGE=1 GTK_A11Y=none

  # Flaky due to timeouts
  xvfb-run -s '-nolisten local' \
    meson test -C build --print-errorlogs -t 5
)

_install() {
  local src dir
  for src in "${files[@]}"; do
    dir="$pkgdir/$(dirname "$src")"
    mkdir -p "$dir"
    mv -v "$src" "$dir"
  done
}

package_gstreamer() {
  pkgdesc+=" - core"
  depends=(
    glib2 libcap libelf libunwind libxml2
  )
  optdepends=('python: gst-plugins-doc-cache-generator')
  install=gstreamer.install

  meson install -C build --destdir "$srcdir/root"

  cd root; local files=(
    usr/include/gstreamer-1.0/gst/{base,check,controller,net,*.h}
    usr/lib/libgst{reamer,base,check,controller,net}-1.0.so*
    usr/lib/pkgconfig/gstreamer{,-base,-check,-controller,-net}-1.0.pc
    usr/lib/girepository-1.0/Gst{,Base,Check,Controller,Net}-1.0.typelib
    usr/share/gir-1.0/Gst{,Base,Check,Controller,Net}-1.0.gir

    usr/lib/gstreamer-1.0/gst-{completion,ptp}-helper
    usr/lib/gstreamer-1.0/gst-{hotdoc-plugins,plugin}-scanner
    usr/lib/gstreamer-1.0/gst-plugins-doc-cache-generator
    usr/lib/gstreamer-1.0/libgstcoreelements.so
    usr/lib/gstreamer-1.0/libgstcoretracers.so

    usr/share/locale/*/LC_MESSAGES/gstreamer-1.0.mo

    usr/bin/gst-{inspect,launch,stats,tester,typefind}-1.0
    usr/share/man/man1/gst-{inspect,launch,stats,typefind}-1.0.1

    usr/share/bash-completion/completions/gst-{inspect,launch}-1.0
    usr/share/bash-completion/helpers/gst

    usr/share/gdb/auto-load/usr/lib/libgstreamer-1.0.so*.py
    usr/share/gstreamer-1.0/gdb/glib_gobject_helper.py
    usr/share/gstreamer-1.0/gdb/gst_gdb.py

    usr/share/aclocal/gst-element-check-1.0.m4
  ); _install
}

package_gst-plugins-bad-libs() {
  pkgdesc+=" - bad"
  depends=(
    "gst-plugins-base-libs=$pkgver"
    libdrm libgudev libnice libusb libva libx11 libxkbcommon-x11 orc
    vulkan-icd-loader wayland
  )

  cd root; local files=(
    usr/include/gstreamer-1.0/gst/audio/{audio-bad-prelude,gstnonstreamaudiodecoder,gstplanaraudioadapter}.h
    usr/include/gstreamer-1.0/gst/{analytics,basecamerabinsrc,codecparsers,cuda,insertbin,interfaces,isoff,mpegts,mse,play,player,sctp,transcoder,uridownloader,va,vulkan,wayland,webrtc}
    usr/lib/libgst{adaptivedemux,analytics,badaudio,basecamerabinsrc,codecparsers,codecs,cuda,dxva,insertbin,isoff,mpegts,mse}-1.0.so*
    usr/lib/libgst{photography,play,player,sctp,transcoder,uridownloader,va,vulkan,wayland,webrtc,webrtcnice}-1.0.so*
    usr/lib/pkgconfig/gstreamer-{analytics,bad-audio,codecparsers,cuda,insertbin,mpegts,mse,photography,play,player,sctp,transcoder,vulkan{,-wayland,-xcb},va,wayland,webrtc{,-nice}}-1.0.pc
    usr/lib/girepository-1.0/{CudaGst,Gst{Analytics,BadAudio,Codecs,Cuda,Dxva,InsertBin,Mpegts,Mse,Play,Player,Transcoder,Va,Vulkan{,Wayland,XCB},WebRTC}}-1.0.typelib
    usr/share/gir-1.0/{CudaGst,Gst{Analytics,BadAudio,Codecs,Cuda,Dxva,InsertBin,Mpegts,Mse,Play,Player,Transcoder,Va,Vulkan{,Wayland,XCB},WebRTC}}-1.0.gir

    usr/lib/pkgconfig/gstreamer-plugins-bad-1.0.pc
    usr/lib/gstreamer-1.0/libgstaccurip.so
    usr/lib/gstreamer-1.0/libgstadpcmdec.so
    usr/lib/gstreamer-1.0/libgstadpcmenc.so
    usr/lib/gstreamer-1.0/libgstaiff.so
    usr/lib/gstreamer-1.0/libgstasfmux.so
    usr/lib/gstreamer-1.0/libgstaudiobuffersplit.so
    usr/lib/gstreamer-1.0/libgstaudiofxbad.so
    usr/lib/gstreamer-1.0/libgstaudiolatency.so
    usr/lib/gstreamer-1.0/libgstaudiomixmatrix.so
    usr/lib/gstreamer-1.0/libgstaudiovisualizers.so
    usr/lib/gstreamer-1.0/libgstautoconvert.so
    usr/lib/gstreamer-1.0/libgstbayer.so
    usr/lib/gstreamer-1.0/libgstbluez.so
    usr/lib/gstreamer-1.0/libgstcamerabin.so
    usr/lib/gstreamer-1.0/libgstcodecalpha.so
    usr/lib/gstreamer-1.0/libgstcodectimestamper.so
    usr/lib/gstreamer-1.0/libgstcoloreffects.so
    usr/lib/gstreamer-1.0/libgstdebugutilsbad.so
    usr/lib/gstreamer-1.0/libgstdecklink.so
    usr/lib/gstreamer-1.0/libgstdvb.so
    usr/lib/gstreamer-1.0/libgstdvbsubenc.so
    usr/lib/gstreamer-1.0/libgstdvbsuboverlay.so
    usr/lib/gstreamer-1.0/libgstdvdspu.so
    usr/lib/gstreamer-1.0/libgstfaceoverlay.so
    usr/lib/gstreamer-1.0/libgstfbdevsink.so
    usr/lib/gstreamer-1.0/libgstfestival.so
    usr/lib/gstreamer-1.0/libgstfieldanalysis.so
    usr/lib/gstreamer-1.0/libgstfreeverb.so
    usr/lib/gstreamer-1.0/libgstfrei0r.so
    usr/lib/gstreamer-1.0/libgstgaudieffects.so
    usr/lib/gstreamer-1.0/libgstgdp.so
    usr/lib/gstreamer-1.0/libgstgeometrictransform.so
    usr/lib/gstreamer-1.0/libgstid3tag.so
    usr/lib/gstreamer-1.0/libgstinsertbin.so
    usr/lib/gstreamer-1.0/libgstinter.so
    usr/lib/gstreamer-1.0/libgstinterlace.so
    usr/lib/gstreamer-1.0/libgstipcpipeline.so
    usr/lib/gstreamer-1.0/libgstivfparse.so
    usr/lib/gstreamer-1.0/libgstivtc.so
    usr/lib/gstreamer-1.0/libgstjp2kdecimator.so
    usr/lib/gstreamer-1.0/libgstjpegformat.so
    usr/lib/gstreamer-1.0/libgstkms.so
    usr/lib/gstreamer-1.0/libgstlegacyrawparse.so
    usr/lib/gstreamer-1.0/libgstmidi.so
    usr/lib/gstreamer-1.0/libgstmpegpsdemux.so
    usr/lib/gstreamer-1.0/libgstmpegpsmux.so
    usr/lib/gstreamer-1.0/libgstmpegtsdemux.so
    usr/lib/gstreamer-1.0/libgstmpegtsmux.so
    usr/lib/gstreamer-1.0/libgstmse.so
    usr/lib/gstreamer-1.0/libgstmxf.so
    usr/lib/gstreamer-1.0/libgstnetsim.so
    usr/lib/gstreamer-1.0/libgstnvcodec.so
    usr/lib/gstreamer-1.0/libgstpcapparse.so
    usr/lib/gstreamer-1.0/libgstpnm.so
    usr/lib/gstreamer-1.0/libgstproxy.so
    usr/lib/gstreamer-1.0/libgstremovesilence.so
    usr/lib/gstreamer-1.0/libgstrfbsrc.so
    usr/lib/gstreamer-1.0/libgstrist.so
    usr/lib/gstreamer-1.0/libgstrtmp2.so
    usr/lib/gstreamer-1.0/libgstrtpmanagerbad.so
    usr/lib/gstreamer-1.0/libgstrtponvif.so
    usr/lib/gstreamer-1.0/libgstsdpelem.so
    usr/lib/gstreamer-1.0/libgstsegmentclip.so
    usr/lib/gstreamer-1.0/libgstshm.so
    usr/lib/gstreamer-1.0/libgstsiren.so
    usr/lib/gstreamer-1.0/libgstsmooth.so
    usr/lib/gstreamer-1.0/libgstspeed.so
    usr/lib/gstreamer-1.0/libgstsubenc.so
    usr/lib/gstreamer-1.0/libgstswitchbin.so
    usr/lib/gstreamer-1.0/libgsttranscode.so
    usr/lib/gstreamer-1.0/libgstunixfd.so
    usr/lib/gstreamer-1.0/libgstuvcgadget.so
    usr/lib/gstreamer-1.0/libgstuvch264.so
    usr/lib/gstreamer-1.0/libgstv4l2codecs.so
    usr/lib/gstreamer-1.0/libgstvideofiltersbad.so
    usr/lib/gstreamer-1.0/libgstvideoframe_audiolevel.so
    usr/lib/gstreamer-1.0/libgstvideoparsersbad.so
    usr/lib/gstreamer-1.0/libgstvideosignal.so
    usr/lib/gstreamer-1.0/libgstvmnc.so
    usr/lib/gstreamer-1.0/libgstvulkan.so
    usr/lib/gstreamer-1.0/libgstwaylandsink.so
    usr/lib/gstreamer-1.0/libgsty4mdec.so

    usr/share/gstreamer-1.0/encoding-profiles
    usr/share/gstreamer-1.0/presets/GstFreeverb.prs

    usr/share/locale/*/LC_MESSAGES/gst-plugins-bad-1.0.mo

    usr/bin/gst-transcoder-1.0
  ); _install
}

package_gst-plugins-base-libs() {
  pkgdesc+=" - base"
  depends=(
    "gstreamer=$pkgver"
    iso-codes libdrm libgl libgudev libxi libxv mesa orc wayland
  )

  cd root; local files=(
    usr/include/gstreamer-1.0/gst/{allocators,app,audio,fft,gl,pbutils,riff,rtp,rtsp,sdp,tag,video}
    usr/lib/libgst{allocators,app,audio,fft,gl,pbutils,riff,rtp,rtsp,sdp,tag,video}-1.0.so*
    usr/lib/pkgconfig/gstreamer-{allocators,app,audio,fft,gl{,-egl,-prototypes,-wayland,-x11},pbutils,riff,rtp,rtsp,sdp,tag,video}-1.0.pc
    usr/lib/girepository-1.0/Gst{Allocators,App,Audio,GL{,EGL,Wayland,X11},Pbutils,Rtp,Rtsp,Sdp,Tag,Video}-1.0.typelib
    usr/share/gir-1.0/Gst{Allocators,App,Audio,GL{,EGL,Wayland,X11},Pbutils,Rtp,Rtsp,Sdp,Tag,Video}-1.0.gir

    usr/lib/pkgconfig/gstreamer-plugins-base-1.0.pc
    usr/lib/gstreamer-1.0/include/gst/gl/gstglconfig.h
    usr/lib/gstreamer-1.0/libgstadder.so
    usr/lib/gstreamer-1.0/libgstapp.so
    usr/lib/gstreamer-1.0/libgstaudioconvert.so
    usr/lib/gstreamer-1.0/libgstaudiomixer.so
    usr/lib/gstreamer-1.0/libgstaudiorate.so
    usr/lib/gstreamer-1.0/libgstaudioresample.so
    usr/lib/gstreamer-1.0/libgstaudiotestsrc.so
    usr/lib/gstreamer-1.0/libgstbasedebug.so
    usr/lib/gstreamer-1.0/libgstcompositor.so
    usr/lib/gstreamer-1.0/libgstdsd.so
    usr/lib/gstreamer-1.0/libgstencoding.so
    usr/lib/gstreamer-1.0/libgstgio.so
    usr/lib/gstreamer-1.0/libgstoverlaycomposition.so
    usr/lib/gstreamer-1.0/libgstpbtypes.so
    usr/lib/gstreamer-1.0/libgstplayback.so
    usr/lib/gstreamer-1.0/libgstrawparse.so
    usr/lib/gstreamer-1.0/libgstsubparse.so
    usr/lib/gstreamer-1.0/libgsttcp.so
    usr/lib/gstreamer-1.0/libgsttypefindfunctions.so
    usr/lib/gstreamer-1.0/libgstvideoconvertscale.so
    usr/lib/gstreamer-1.0/libgstvideorate.so
    usr/lib/gstreamer-1.0/libgstvideotestsrc.so
    usr/lib/gstreamer-1.0/libgstvolume.so
    usr/lib/gstreamer-1.0/libgstximagesink.so
    usr/lib/gstreamer-1.0/libgstxvimagesink.so

    usr/share/locale/*/LC_MESSAGES/gst-plugins-base-1.0.mo

    usr/bin/gst-{device-monitor,discoverer,play}-1.0
    usr/share/man/man1/gst-{device-monitor,discoverer,play}-1.0.1

    usr/share/gst-plugins-base
  ); _install
}

package_gst-plugins-base() {
  pkgdesc+=" - base plugins"
  depends=(
    "gst-plugins-base-libs=$pkgver"
    alsa-lib cdparanoia graphene libjpeg libpng libtheora libvorbis opus pango
  )

  cd root; local files=(
    usr/lib/gstreamer-1.0/libgstalsa.so
    usr/lib/gstreamer-1.0/libgstcdparanoia.so
    usr/lib/gstreamer-1.0/libgstogg.so
    usr/lib/gstreamer-1.0/libgstopengl.so
    usr/lib/gstreamer-1.0/libgstopus.so
    usr/lib/gstreamer-1.0/libgstpango.so
    usr/lib/gstreamer-1.0/libgsttheora.so
    usr/lib/gstreamer-1.0/libgstvorbis.so
  ); _install
}

package_gst-plugins-good() {
  pkgdesc+=" - good plugins"
  depends=(
    "gst-plugins-base-libs=$pkgver"
    aalib cairo flac gdk-pixbuf2 lame libavc1394 libcaca libdv libgudev
    libiec61883 libpulse libraw1394 libshout libsoup3 libvpx libxdamage libxtst
    mpg123 nettle opencore-amr speex taglib twolame v4l-utils wavpack
  )
  optdepends=('jack: JACK backend')

  cd root; local files=(
    usr/lib/gstreamer-1.0/libgst1394.so
    usr/lib/gstreamer-1.0/libgstaasink.so
    usr/lib/gstreamer-1.0/libgstadaptivedemux2.so
    usr/lib/gstreamer-1.0/libgstalaw.so
    usr/lib/gstreamer-1.0/libgstalpha.so
    usr/lib/gstreamer-1.0/libgstalphacolor.so
    usr/lib/gstreamer-1.0/libgstamrnb.so
    usr/lib/gstreamer-1.0/libgstamrwbdec.so
    usr/lib/gstreamer-1.0/libgstapetag.so
    usr/lib/gstreamer-1.0/libgstaudiofx.so
    usr/lib/gstreamer-1.0/libgstaudioparsers.so
    usr/lib/gstreamer-1.0/libgstauparse.so
    usr/lib/gstreamer-1.0/libgstautodetect.so
    usr/lib/gstreamer-1.0/libgstavi.so
    usr/lib/gstreamer-1.0/libgstcacasink.so
    usr/lib/gstreamer-1.0/libgstcairo.so
    usr/lib/gstreamer-1.0/libgstcutter.so
    usr/lib/gstreamer-1.0/libgstdebug.so
    usr/lib/gstreamer-1.0/libgstdeinterlace.so
    usr/lib/gstreamer-1.0/libgstdtmf.so
    usr/lib/gstreamer-1.0/libgstdv.so
    usr/lib/gstreamer-1.0/libgsteffectv.so
    usr/lib/gstreamer-1.0/libgstequalizer.so
    usr/lib/gstreamer-1.0/libgstflac.so
    usr/lib/gstreamer-1.0/libgstflv.so
    usr/lib/gstreamer-1.0/libgstflxdec.so
    usr/lib/gstreamer-1.0/libgstgdkpixbuf.so
    usr/lib/gstreamer-1.0/libgstgoom.so
    usr/lib/gstreamer-1.0/libgstgoom2k1.so
    usr/lib/gstreamer-1.0/libgsticydemux.so
    usr/lib/gstreamer-1.0/libgstid3demux.so
    usr/lib/gstreamer-1.0/libgstimagefreeze.so
    usr/lib/gstreamer-1.0/libgstinterleave.so
    usr/lib/gstreamer-1.0/libgstisomp4.so
    usr/lib/gstreamer-1.0/libgstjack.so
    usr/lib/gstreamer-1.0/libgstjpeg.so
    usr/lib/gstreamer-1.0/libgstlame.so
    usr/lib/gstreamer-1.0/libgstlevel.so
    usr/lib/gstreamer-1.0/libgstmatroska.so
    usr/lib/gstreamer-1.0/libgstmonoscope.so
    usr/lib/gstreamer-1.0/libgstmpg123.so
    usr/lib/gstreamer-1.0/libgstmulaw.so
    usr/lib/gstreamer-1.0/libgstmultifile.so
    usr/lib/gstreamer-1.0/libgstmultipart.so
    usr/lib/gstreamer-1.0/libgstnavigationtest.so
    usr/lib/gstreamer-1.0/libgstoss4.so
    usr/lib/gstreamer-1.0/libgstossaudio.so
    usr/lib/gstreamer-1.0/libgstpng.so
    usr/lib/gstreamer-1.0/libgstpulseaudio.so
    usr/lib/gstreamer-1.0/libgstreplaygain.so
    usr/lib/gstreamer-1.0/libgstrtp.so
    usr/lib/gstreamer-1.0/libgstrtpmanager.so
    usr/lib/gstreamer-1.0/libgstrtsp.so
    usr/lib/gstreamer-1.0/libgstshapewipe.so
    usr/lib/gstreamer-1.0/libgstshout2.so
    usr/lib/gstreamer-1.0/libgstsmpte.so
    usr/lib/gstreamer-1.0/libgstsoup.so
    usr/lib/gstreamer-1.0/libgstspectrum.so
    usr/lib/gstreamer-1.0/libgstspeex.so
    usr/lib/gstreamer-1.0/libgsttaglib.so
    usr/lib/gstreamer-1.0/libgsttwolame.so
    usr/lib/gstreamer-1.0/libgstudp.so
    usr/lib/gstreamer-1.0/libgstvideo4linux2.so
    usr/lib/gstreamer-1.0/libgstvideobox.so
    usr/lib/gstreamer-1.0/libgstvideocrop.so
    usr/lib/gstreamer-1.0/libgstvideofilter.so
    usr/lib/gstreamer-1.0/libgstvideomixer.so
    usr/lib/gstreamer-1.0/libgstvpx.so
    usr/lib/gstreamer-1.0/libgstwavenc.so
    usr/lib/gstreamer-1.0/libgstwavpack.so
    usr/lib/gstreamer-1.0/libgstwavparse.so
    usr/lib/gstreamer-1.0/libgstximagesrc.so
    usr/lib/gstreamer-1.0/libgstxingmux.so
    usr/lib/gstreamer-1.0/libgsty4menc.so

    usr/share/gstreamer-1.0/presets/GstIirEqualizer{3,10}Bands.prs
    usr/share/gstreamer-1.0/presets/GstQTMux.prs
    usr/share/gstreamer-1.0/presets/Gst{Amrnb,VP8}Enc.prs

    usr/share/locale/*/LC_MESSAGES/gst-plugins-good-1.0.mo
  ); _install
}

package_gst-plugins-bad() {
  pkgdesc+=" - bad plugins"
  depends=(
    "gst-plugins-bad-libs=$pkgver"
    aom bzip2 chromaprint curl faac faad2 fluidsynth gsm json-glib lcms2 libass
    libavtp libbs2b libdc1394 libdca libde265 libdvdnav libdvdread libfdk-aac
    libfreeaptx libgme liblc3 libldac liblrdf libltc libmicrodns libmodplug
    libmpcdec libopenmpt librsvg libsndfile libsrtp libwebp libxml2 lilv
    mjpegtools neon nettle openal openexr openjpeg2 openssl opus pango qrencode
    rtmpdump sbc soundtouch spandsp srt svt-av1 svt-hevc
    webrtc-audio-processing-1 wildmidi x265 zbar zvbi zxing-cpp
  )

  cd root; local files=(
    usr/lib/gstreamer-1.0/libgstaes.so
    usr/lib/gstreamer-1.0/libgstanalyticsoverlay.so
    usr/lib/gstreamer-1.0/libgstaom.so
    usr/lib/gstreamer-1.0/libgstassrender.so
    usr/lib/gstreamer-1.0/libgstavtp.so
    usr/lib/gstreamer-1.0/libgstbs2b.so
    usr/lib/gstreamer-1.0/libgstbz2.so
    usr/lib/gstreamer-1.0/libgstchromaprint.so
    usr/lib/gstreamer-1.0/libgstclosedcaption.so
    usr/lib/gstreamer-1.0/libgstcodec2json.so
    usr/lib/gstreamer-1.0/libgstcolormanagement.so
    usr/lib/gstreamer-1.0/libgstcurl.so
    usr/lib/gstreamer-1.0/libgstdash.so
    usr/lib/gstreamer-1.0/libgstdc1394.so
    usr/lib/gstreamer-1.0/libgstde265.so
    usr/lib/gstreamer-1.0/libgstdtls.so
    usr/lib/gstreamer-1.0/libgstdtsdec.so
    usr/lib/gstreamer-1.0/libgstfaac.so
    usr/lib/gstreamer-1.0/libgstfaad.so
    usr/lib/gstreamer-1.0/libgstfdkaac.so
    usr/lib/gstreamer-1.0/libgstfluidsynthmidi.so
    usr/lib/gstreamer-1.0/libgstgme.so
    usr/lib/gstreamer-1.0/libgstgsm.so
    usr/lib/gstreamer-1.0/libgsthls.so
    usr/lib/gstreamer-1.0/libgstladspa.so
    usr/lib/gstreamer-1.0/libgstlc3.so
    usr/lib/gstreamer-1.0/libgstldac.so
    usr/lib/gstreamer-1.0/libgstlv2.so
    usr/lib/gstreamer-1.0/libgstmicrodns.so
    usr/lib/gstreamer-1.0/libgstmodplug.so
    usr/lib/gstreamer-1.0/libgstmpeg2enc.so
    usr/lib/gstreamer-1.0/libgstmplex.so
    usr/lib/gstreamer-1.0/libgstmusepack.so
    usr/lib/gstreamer-1.0/libgstneonhttpsrc.so
    usr/lib/gstreamer-1.0/libgstopenal.so
    usr/lib/gstreamer-1.0/libgstopenaptx.so
    usr/lib/gstreamer-1.0/libgstopenexr.so
    usr/lib/gstreamer-1.0/libgstopenjpeg.so
    usr/lib/gstreamer-1.0/libgstopenmpt.so
    usr/lib/gstreamer-1.0/libgstopusparse.so
    usr/lib/gstreamer-1.0/libgstqroverlay.so
    usr/lib/gstreamer-1.0/libgstresindvd.so
    usr/lib/gstreamer-1.0/libgstrsvg.so
    usr/lib/gstreamer-1.0/libgstrtmp.so
    usr/lib/gstreamer-1.0/libgstsbc.so
    usr/lib/gstreamer-1.0/libgstsctp.so
    usr/lib/gstreamer-1.0/libgstsmoothstreaming.so
    usr/lib/gstreamer-1.0/libgstsndfile.so
    usr/lib/gstreamer-1.0/libgstsoundtouch.so
    usr/lib/gstreamer-1.0/libgstspandsp.so
    usr/lib/gstreamer-1.0/libgstsrt.so
    usr/lib/gstreamer-1.0/libgstsrtp.so
    usr/lib/gstreamer-1.0/libgstsvtav1.so
    usr/lib/gstreamer-1.0/libgstsvthevcenc.so
    usr/lib/gstreamer-1.0/libgstteletext.so
    usr/lib/gstreamer-1.0/libgsttimecode.so
    usr/lib/gstreamer-1.0/libgstttmlsubs.so
    usr/lib/gstreamer-1.0/libgstwebp.so
    usr/lib/gstreamer-1.0/libgstwebrtc.so
    usr/lib/gstreamer-1.0/libgstwebrtcdsp.so
    usr/lib/gstreamer-1.0/libgstwildmidi.so
    usr/lib/gstreamer-1.0/libgstx265.so
    usr/lib/gstreamer-1.0/libgstzbar.so
    usr/lib/gstreamer-1.0/libgstzxing.so
  ); _install
}

package_gst-plugin-gtk() {
  pkgdesc+=" - gtk plugin"
  depends=(
    "gst-plugins-bad-libs=$pkgver"
    gtk3
  )

  cd root; local files=(
    usr/lib/gstreamer-1.0/libgstgtk.so
    usr/lib/gstreamer-1.0/libgstgtkwayland.so
  ); _install
}

package_gst-plugin-msdk() {
  pkgdesc+=" - msdk plugin"
  depends=(
    "gst-plugins-bad-libs=$pkgver"
    libvpl
  )

  cd root; local files=(
    usr/lib/gstreamer-1.0/libgstmsdk.so
  ); _install
}

package_gst-plugin-opencv() {
  pkgdesc+=" - opencv plugin"
  depends=(
    "gst-plugins-base-libs=$pkgver"
    opencv
  )

  cd root; local files=(
    usr/include/gstreamer-1.0/gst/opencv
    usr/lib/libgstopencv-1.0.so*

    usr/lib/gstreamer-1.0/libgstopencv.so
  ); _install
}

package_gst-plugin-qml6() {
  pkgdesc+=" - qml6 plugin"
  depends=(
    "gst-plugins-base-libs=$pkgver"
    qt6-declarative qt6-wayland
  )

  cd root; local files=(
    usr/lib/gstreamer-1.0/libgstqml6.so
  ); _install
}

package_gst-plugin-qmlgl() {
  pkgdesc+=" - qmlgl plugin"
  depends=(
    "gst-plugins-base-libs=$pkgver"
    qt5-declarative qt5-wayland qt5-x11extras
  )

  cd root; local files=(
    usr/lib/gstreamer-1.0/libgstqmlgl.so
  ); _install
}

package_gst-plugin-qsv() {
  pkgdesc+=" - qsv plugin"
  depends=("gst-plugins-bad-libs=$pkgver")
  optdepends=(
    'intel-media-sdk: runtime for legacy Intel GPUs'
    'onevpl-intel-gpu: runtime for Tiger Lake and newer GPUs'
  )

  cd root; local files=(
    usr/lib/gstreamer-1.0/libgstqsv.so
  ); _install
}


package_gst-plugin-va() {
  pkgdesc+=" - va plugin"
  depends=("gst-plugins-bad-libs=$pkgver")

  cd root; local files=(
    usr/lib/gstreamer-1.0/libgstva.so
  ); _install
}

package_gst-plugin-wpe() {
  pkgdesc+=" - wpe plugin"
  depends=(
    "gst-plugins-base-libs=$pkgver"
    wpewebkit
  )

  cd root; local files=(
    usr/lib/gstreamer-1.0/libgstwpe.so
    usr/lib/gst-plugins-bad/wpe-extension/libgstwpeextension.so
  ); _install
}

package_gst-plugins-ugly() {
  pkgdesc+=" - ugly plugins"
  depends=(
    "gst-plugins-base-libs=$pkgver"
    a52dec libcdio libdvdread libmpeg2 x264
  )

  cd root; local files=(
    usr/lib/gstreamer-1.0/libgsta52dec.so
    usr/lib/gstreamer-1.0/libgstasf.so
    usr/lib/gstreamer-1.0/libgstcdio.so
    usr/lib/gstreamer-1.0/libgstdvdlpcmdec.so
    usr/lib/gstreamer-1.0/libgstdvdread.so
    usr/lib/gstreamer-1.0/libgstdvdsub.so
    usr/lib/gstreamer-1.0/libgstmpeg2dec.so
    usr/lib/gstreamer-1.0/libgstrealmedia.so
    usr/lib/gstreamer-1.0/libgstx264.so

    usr/share/gstreamer-1.0/presets/GstX264Enc.prs

    usr/share/locale/*/LC_MESSAGES/gst-plugins-ugly-1.0.mo
  ); _install
}

package_gst-libav() {
  pkgdesc+=" - libav plugin"
  depends=(
    "gst-plugins-base-libs=$pkgver"
    bzip2 ffmpeg
  )
  provides=("gst-ffmpeg=$pkgver")

  cd root; local files=(
    usr/lib/gstreamer-1.0/libgstlibav.so
  ); _install
}

package_gst-devtools-libs() {
  pkgdesc+=" - development and debugging libraries"
  depends=(
    "gst-plugins-base-libs=$pkgver"
    json-glib
  )

  cd root; local files=(
    usr/include/gstreamer-1.0/gst/validate
    usr/lib/libgstvalidate-*
    usr/lib/pkgconfig/gstreamer-validate-1.0.pc
    usr/lib/girepository-1.0/GstValidate-1.0.typelib
    usr/share/gir-1.0/GstValidate-1.0.gir
  ); _install
}

package_gst-devtools() {
  pkgdesc+=" - development and debugging tools"
  depends=(
    "gst-devtools-libs=$pkgver"
    "gst-plugins-bad-libs=$pkgver"
    "gst-rtsp-server=$pkgver"
    gtk3 python-gobject
  )

  cd root; local files=(
    usr/bin/gst-validate-*
    usr/lib/gst-validate-launcher
    usr/lib/gstreamer-1.0/libgstvalidatetracer.so
    usr/lib/gstreamer-1.0/validate
    usr/share/gstreamer-1.0/validate

    usr/bin/gst-debug-viewer
    usr/lib/python*/site-packages/GstDebugViewer
    usr/share/applications/org.freedesktop.GstDebugViewer.desktop
    usr/share/gst-debug-viewer
    usr/share/icons/hicolor/*/apps/gst-debug-viewer.*
    usr/share/metainfo/org.freedesktop.GstDebugViewer.appdata.xml
  ); _install
}

package_gst-rtsp-server() {
  pkgdesc+=" - rtsp server"
  depends=("gst-plugins-base-libs=$pkgver")

  cd root; local files=(
    usr/include/gstreamer-1.0/gst/rtsp-server
    usr/lib/libgstrtspserver-1.0.so*
    usr/lib/pkgconfig/gstreamer-rtsp-server-1.0.pc
    usr/lib/girepository-1.0/GstRtspServer-1.0.typelib
    usr/share/gir-1.0/GstRtspServer-1.0.gir

    usr/lib/gstreamer-1.0/libgstrtspclientsink.so
  ); _install
}

package_gst-editing-services() {
  pkgdesc+=" - editing services"
  depends=(
    "gst-devtools-libs=$pkgver"
    "gst-plugins-base-libs=$pkgver"
    "gst-python=$pkgver"
  )
  optdepends=(
    'opentimelineio: Support for the OpenTimelineIO format'
  )

  cd root; local files=(
    usr/include/gstreamer-1.0/ges
    usr/lib/libges-1.0.so*
    usr/lib/pkgconfig/gst-editing-services-1.0.pc
    usr/lib/girepository-1.0/GES-1.0.typelib
    usr/share/gir-1.0/GES-1.0.gir

    usr/lib/gstreamer-1.0/libgstges.so
    usr/lib/gstreamer-1.0/libgstnle.so

    usr/lib/python*/site-packages/gi/overrides/GES.py
    usr/lib/python*/site-packages/gi/overrides/__pycache__/GES.*.pyc

    usr/bin/ges-launch-1.0
    usr/share/man/man1/ges-launch-1.0.1

    usr/share/bash-completion/completions/ges-launch-1.0
  ); _install
}

package_gstreamer-vaapi() {
  pkgdesc+=" - vaapi plugin"
  depends=(
    "gst-plugins-bad-libs=$pkgver"
    libxrandr
  )

  cd root; local files=(
    usr/lib/gstreamer-1.0/libgstvaapi.so
  ); _install
}

package_gst-python() {
  pkgdesc+=" - python plugin"
  depends=(
    "gst-plugins-base-libs=$pkgver"
    python-gobject
  )

  cd root; local files=(
    usr/lib/gstreamer-1.0/libgstpython.so
    usr/lib/python*/site-packages/gi/overrides
  ); _install
}

package_gstreamer-docs() {
  pkgdesc+=" - documentation"
  license=(
    'BSD-2-Clause OR MIT OR LGPL-2.1-or-later'
    CC-BY-SA-4.0
    LGPL-2.1-or-later
    MIT
    OPUBL-1.0
  )
  options=(
    !debug
    !strip
  )

  # make sure there are no files left to install
  find root -depth ! -type d
  find root -depth -print0 | xargs -0 rmdir

  cd gstreamer-docs-${pkgver%%+*}

  mkdir -p "$pkgdir/usr/share/doc/$pkgbase"
  cp -t "$pkgdir/usr/share" -a devhelp
  cp -t "$pkgdir/usr/share/doc/$pkgbase" -a html README*

  install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 COPYING LICENSE*
}

# vim:set sw=2 sts=-1 et tw=80:
