# 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>

pkgname=vlc-rpi
_pkgname=vlc
_vlcver=3.0.21
# optional fixup version including hyphen
_vlcfixupver=
pkgver=${_vlcver}${_vlcfixupver//-/.r}
pkgrel=3
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'
)
# NOTE: switch to ffmpeg-rpi which is basically debian's stuff patched with hw accel
depends=(
  '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'
  'libomxil-bellagio'
  'libmatroska'
  'libmpcdec'
  'libmpeg2'
  'libproxy'
  'libsecret'
  'libtar'
  'libupnp' 'libixml.so' 'libupnp.so'
  'libva'
  'libx11'
  'libxcb'
  'libxinerama'
  'libxml2'
  'libxpm'
  'lua'
  'qt5-base'
  'qt5-svg'
  'qt5-x11extras'
  'wayland'
  'xcb-util-keysyms'
  'zlib'
)
makedepends=(
  'aalib'
  'alsa-lib'
  'aom'
  'aribb25'
  'avahi'
  'dav1d'
  'flac'
  'fluidsynth'
  'gst-plugins-base-libs'
  'gtk3'
  'jack'
  'libass'
  'libavc1394'
  'libbluray'
  'libcaca'
  'libdc1394'
  'libdvdcss'
  'libdvdnav'
  'libdvdread'
  'libgme'
  'libgoom2'
  'libjpeg-turbo'
  'libkate'
  'libmicrodns'
  'libmodplug'
  'libmtp'
  'libnotify'
  'libnfs'
  'libogg'
  'libomxil-bellagio'
  'libpng'
  'libpulse'
  'librsvg'
  'libsamplerate'
  'libshout'
  'libsoxr'
  'libssh2'
  'libtheora'
  'libtiger'
  'libvorbis'
  'libvpx'
  'lirc'
  'live-media'
  'mesa'
  'mpg123'
  'opus'
  'pcsclite'
  'projectm'
  'protobuf'
  'sdl_image'
  'smbclient'
  'speex'
  'srt'
  'systemd-libs'
  'twolame'
  'vcdimager'
  'wayland-protocols'
  'x264' 'libx264.so'
  'x265' 'libx265.so'
  'xosd'
  'zvbi'
)
makedepends_aarch64=('taglib')
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'
)
conflicts=('vlc-plugin' 'vlc')
provides=('vlc')
replaces=('vlc-plugin')
options=('!emptydirs')
install='vlc.install'
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() {
  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"

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

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

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

package() {
  cd ${_pkgname}-${_vlcver}

  make DESTDIR="${pkgdir}" install

  for res in 16 32 48 128 256; do
    install -Dm 644 "${srcdir}/vlc-${_vlcver}/share/icons/${res}x${res}/vlc.png" \
                     "${pkgdir}/usr/share/icons/hicolor/${res}x${res}/apps/vlc.png"
  done
  install -Dm 644 "${srcdir}/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"
}

# vim: ts=2 sw=2 et: