# Maintainer: graysky <therealgraysky AT proton DOT me>
# Contributor: Levente Polyak <anthraxx[at]archlinux[dot]org>
# Contributor: Giovanni Scafora <giovanni@archlinux.org>
# Contributor: Sarah Hay <sarahhay@mb.sympatico.ca>
# Contributor: Martin Sandsmark <martin.sandsmark@kde.org>

pkgbase=vlc-rpi
pkgname=(vlc-rpi libvlc-rpi)
_pkgname=vlc
_vlcver=3.0.21
# optional fixup version including hyphen
_vlcfixupver=
pkgver=$_vlcver${_vlcfixupver//-/.r}
pkgrel=4
pkgdesc='Multi-platform MPEG, VCD/DVD, and DivX player with hw accel for RPi 3 and above'
url=https://www.videolan.org/vlc/
arch=(aarch64 armv7h)
license=(
  GPL-2.0-or-later
  LGPL-2.1-or-later
)
makedepends=(
  a52dec
  aalib
  abseil-cpp
  alsa-lib
  aom
  aribb24
  aribb25
  avahi
  bash
  cairo
  dav1d
  dbus
  faad2
  ffmpeg-rpi
  flac
  fluidsynth
  fontconfig
  freetype2
  fribidi
  gcc-libs
  gdk-pixbuf2
  glib2
  glibc
  gnutls
  gst-plugins-base-libs
  gtk3
  harfbuzz
  hicolor-icon-theme
  jack
  libarchive
  libass
  libavc1394
  libbluray
  libcaca
  libdca
  libdc1394
  libdvbpsi
  libdvdcss
  libdvdnav
  libdvdread
  libglvnd
  libgme
  libgoom2
  libjpeg-turbo
  libkate
  libmad
  libmatroska
  libmicrodns
  libmodplug
  libmpcdec
  libmpeg2
  libmtp
  libnotify
  libnfs
  libogg
  libomxil-bellagio
  libpng
  libproxy
  libpulse
  librsvg
  libsamplerate
  libsecret
  libshout
  libsoxr
  libssh2
  libtar
  libtheora
  libtiger
  libupnp
  libva
  libvorbis
  libvpx
  libx11
  libxcb
  libxinerama
  libxml2
  libxpm
  lirc
  live-media
  lua
  mesa
  mpg123
  opus
  pcsclite
  projectm
  protobuf
  qt5-base
  qt5-svg
  qt5-x11extras
  sdl_image
  smbclient
  speex
  srt
  systemd-libs
  twolame
  vcdimager
  wayland
  wayland-protocols
  x264
  x265
  xcb-util-keysyms
  xosd
  zlib
  zvbi
)
makedepends_aarch64=(taglib)
options=(!emptydirs)
source=(
  https://download.videolan.org/$_pkgname/$_vlcver/$_pkgname-$_vlcver$_vlcfixupver.tar.xz{,.asc}
  update-vlc-plugin-cache.hook
  taglib-2.patch
  99-vlc.rules
  vlc.config.txt
  # credit to jc and RPi-Distro maintainers for this work, see:
  # https://github.com/jc-kynesim/vlc.git and https://github.com/RPi-Distro/vlc/tree/bookworm-rpt/debian/patches
  0001-vlc-live-media-2021.patch
  0002-test-3.0.21-rpi_2.patch
)
sha256sums=('24dbbe1d7dfaeea0994d5def0bbde200177347136dbfe573f5b6a4cee25afbb0'
            'SKIP'
            'b98043683dd90d3f5a3f501212dfc629839b661100de5ac79fd30cb7b4a06f13'
            'db41f3a11d4df28251f1baaf41bc0913227ff1e77680e43d7efa172e6ae1cc29'
            '61125ab0da600d813f1aebd8445fcf03e176389cfb8aa28591f8225a13043089'
            '48da04f8f649952b99320b955854498853141411050d6e5583b835a244644137'
            '753517a8b88c5950d516f0fe57a3ef169e0665ba7817d4b8d9976c666829a291'
            '616833e99372317d9a1e1a73254ee48f71a803eb13e8dd04db158e7c3db0eb5c')
validpgpkeys=('65F7C6B4206BD057A7EB73787180713BE58D1ADC') # VideoLAN Release Signing Key

prepare() {
  cd $_pkgname-$_vlcver
  sed -e 's:truetype/ttf-dejavu:TTF:g' -i modules/visualization/projectm.cpp
  sed -e 's|-Werror-implicit-function-declaration||g' -i configure
  sed 's|whoami|echo builduser|g' -i configure
  sed 's|hostname -f|echo arch|g' -i configure
  local src
  for src in "${source[@]}"; do
    src="${src%%::*}"
    src="${src##*/}"
    [[ $src = *.patch ]] || continue
    echo "Applying patch $src..."
    patch -Np1 < "../$src"
  done
  autoreconf -vf
}

build() {
  local configure_options=(
    --enable-omxil
    --enable-omxil-vout
    --enable-rpi-omxil
  )

  # Build errors on armv7h are centered around taglib even with
  # the Arch patch so build without taglib for armv7h.
  if [[ $CARCH == "aarch64" ]]; then
    configure_options+=( --enable-taglib )
  elif [[ $CARCH == "armv7h" ]]; then
    configure_options+=( --disable-taglib )
  fi

  configure_options+=(
    --disable-chromaprint
    --disable-fdkaac
    --disable-libgcrypt
    --disable-libplacebo
    --disable-opencv
    --disable-rpath
    --disable-schroedinger
    --disable-update-check
    --enable-a52
    --enable-aa
    --enable-alsa
    --enable-aom
    --enable-archive
    --enable-aribsub
    --enable-aribcam
    --enable-avahi
    --enable-avcodec
    --enable-avformat
    --enable-bluray
    --enable-caca
    --enable-chromecast
    --enable-dav1d
    --enable-dc1394
    --enable-dca
    --enable-dv1394
    --enable-dvbpsi
    --enable-dvdnav
    --enable-dvdread
    --enable-faad
    --enable-flac
    --enable-fluidsynth
    --enable-fontconfig
    --enable-freetype
    --enable-fribidi
    --enable-gnutls
    --enable-gme
    --enable-goom
    --enable-gst-decode
    --enable-harfbuzz
    --enable-jack
    --enable-jpeg
    --enable-kate
    --enable-kwallet
    --enable-libass
    --enable-libmpeg2
    --enable-libtar
    --enable-libva
    --enable-libxml2
    --enable-lirc
    --enable-live555
    --enable-mad
    --enable-matroska
    --enable-mod
    --enable-mpc
    --enable-mpg123
    --enable-microdns
    --enable-mtp
    --enable-ncurses
    --enable-nfs
    --enable-nls
    --enable-notify
    --enable-ogg
    --enable-oggspots
    --enable-opus
    --enable-png
    --enable-postproc
    --enable-projectm
    --enable-pulse
    --enable-qt
    --enable-realrtsp
    --enable-samplerate
    --enable-sdl-image
    --enable-secret
    --enable-sftp
    --enable-shout
    --enable-skins2
    --enable-smbclient
    --enable-soxr
    --enable-speex
    --enable-srt
    --enable-svg
    --enable-svgdec
    --enable-tiger
    --enable-twolame
    --enable-upnp
    --enable-vdpau
    --enable-vlc
    --enable-vorbis
    --enable-vpx
    --enable-wayland
    --enable-x264
    --enable-x265
    --enable-zvbi
    --prefix=/usr
    --sysconfdir=/etc
    --with-kde-solid=/usr/share/solid/actions/
  )

  cd $_pkgname-$_vlcver

  export CFLAGS+=" -I/usr/include/samba-4.0 -ffat-lto-objects -I/usr/include/ffmpeg-rpi -Wno-incompatible-pointer-types"
  export CPPFLAGS+=" -I/usr/include/samba-4.0"
  export CXXFLAGS+=" -std=c++17 -I/usr/include/ffmpeg-rpi"
  export PKG_CONFIG_PATH="/usr/lib/ffmpeg-rpi/pkgconfig"
  export LUAC=/usr/bin/luac
  export LUA_LIBS="$(pkg-config --libs lua)"
  export RCC=/usr/bin/rcc-qt5
  export PKG_CONFIG_PATH="/usr/lib/ffmpeg-rpi/pkgconfig/:$PKG_CONFIG_PATH"

  ./configure "${configure_options[@]}"

  # prevent excessive overlinking due to libtool
  sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
  make
}

_pick() {
  local p="$1" f d; shift
  for f; do
    d="$srcdir/$p/${f#$pkgdir/}"
    mkdir -p "$(dirname "$d")"
    mv "$f" "$d"
    rmdir -p --ignore-fail-on-non-empty "$(dirname "$f")"
  done
}

package_vlc-rpi() {
  depends=(
    libomxil-bellagio
    a52dec
    abseil-cpp
    aribb24
    bash
    cairo
    dbus
    faad2
    ffmpeg-rpi
    fontconfig
    freetype2
    fribidi
    gcc-libs
    gdk-pixbuf2
    glib2
    glibc
    gnutls
    harfbuzz
    hicolor-icon-theme
    libarchive
    libdca
    libdvbpsi
    libglvnd
    libidn
    libmad
    libmatroska
    libmpcdec
    libmpeg2
    libproxy
    libsecret
    libtar
    libupnp
    libva
    libvlc-rpi
    libx11
    libxcb
    libxinerama
    libxml2
    libxpm
    lua
    qt5-base
    qt5-svg
    qt5-x11extras
    taglib
    wayland
    xcb-util-keysyms
    zlib
  )
  optdepends=(
    'aalib: ASCII art video output'
    'alsa-lib: ALSA audio output'
    'aom: AOM AV1 codec'
    'aribb25: aribcam support'
    'avahi: service discovery using bonjour protocol'
    'dav1d: dav1d AV1 decoder'
    'flac: Free Lossless Audio Codec plugin'
    'fluidsynth: FluidSynth based MIDI playback plugin'
    'gnu-free-fonts: subtitle font'
    'gst-plugins-base-libs: for libgst plugins'
    'gstreamer: for libgst plugins'
    'gtk3: notification plugin'
    'jack: jack audio server'
    'kwallet: kwallet keystore'
    'libass: Subtitle support'
    'libavc1394: devices using the 1394ta AV/C'
    'libbluray: Blu-Ray video input'
    'libcaca: colored ASCII art video output'
    'libcdio: audio CD playback'
    'libdc1394: IEEE 1394 access plugin'
    'libdvdcss: decoding encrypted DVDs'
    'libdvdnav: DVD with navigation input module'
    'libdvdread: DVD input module'
    'libgme: Game Music Emu plugin'
    'libgoom2: Goom visualization'
    'libjpeg-turbo: JPEG support'
    'libkate: Kate codec'
    'libmodplug: MOD output plugin'
    'libmicrodns: mDNS services discovery (chromecast etc)'
    'libmtp: MTP devices discovery'
    'libnfs: NFS access'
    'libnotify: notification plugin'
    'libogg: Ogg and OggSpots codec'
    'libpng: PNG support'
    'libpulse: PulseAudio audio output'
    'libraw1394: IEEE 1394 access plugin'
    'librsvg: SVG plugin'
    'libsamplerate: audio Resampler'
    'libshout: shoutcast/icecast output plugin'
    'libsoxr: SoX audio Resampler'
    'libssh2: sftp access'
    'libtheora: theora codec'
    'libtiger: Tiger rendering for Kate streams'
    'libva-intel-driver: video backend intel'
    'libva-vdpau-driver: vdpau backend nvidia'
    'libvorbis: Vorbis decoder/encoder'
    'libvpx: VP8 and VP9 codec'
    'lirc: lirc control'
    'live-media: streaming over RTSP'
    'lua-socket: http interface'
    'mpg123: mpg123 codec'
    'ncurses: ncurses interface'
    'opus: opus codec'
    'pcsclite: aribcam support'
    'projectm: ProjectM visualisation'
    'protobuf: chromecast streaming'
    'sdl12-compat: SDL image support'
    'sdl_image: SDL image support'
    'smbclient: SMB access plugin'
    'speex: Speex codec'
    'speexdsp: Speex codec'
    'srt: SRT input/output plugin'
    'systemd-libs: udev services discovery'
    'ttf-dejavu: subtitle font'
    'twolame: TwoLAME mpeg2 encoder plugin'
    'vcdimager: navigate VCD with libvcdinfo'
    'x264: H264 encoding'
    'x265: HEVC/H.265 encoder'
    'zvbi: VBI/Teletext/webcam/v4l2 capture/decoding'
  )
  provides=(vlc)
  conflicts=(vlc vlc-plugin)
  replaces=(vlc-plugin)

  cd $_pkgname-$_vlcver

  make DESTDIR="$pkgdir" install

  (
    cd "$pkgdir"
    _pick lib$pkgname usr/include
    _pick lib$pkgname usr/lib/libvlc*
    _pick lib$pkgname usr/lib/pkgconfig/libvlc.pc
  )

  for res in 16 32 48 128 256; do
    install -Dm 644 share/icons/${res}x$res/vlc.png -t "$pkgdir/usr/share/icons/hicolor/${res}x$res/apps/"
  done
  install -Dm 644 ../update-vlc-plugin-cache.hook -t "$pkgdir/usr/share/libalpm/hooks/"

  # setup video drivers
  install -Dm0644 "$srcdir/vlc.config.txt" "$pkgdir/boot/vlc.config.txt"

  # set permissions necessary for accelerated video playback
  install -Dm0644 "$srcdir/99-vlc.rules" "$pkgdir/usr/lib/udev/rules.d/99-vlc.rules"
}

package_libvlc-rpi() {
  pkgdesc+=" - library"
  provides=(libvlc)
  conflicts=(libvlc)
  depends=(
    dbus
    gcc-libs
    glibc
  )

  mv -v $pkgname/* "$pkgdir"
}

# vim: ts=2 sw=2 et: