# 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=1
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)
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'
  #'taglib'
  #'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'
)

#            'chromaprint: Chromaprint audio fingerprinter'
optdepends=('avahi: service discovery using bonjour protocol'
            'aom: AOM AV1 codec'
            'gst-plugins-base-libs: for libgst plugins'
            'dav1d: dav1d AV1 decoder'
            'libdvdcss: decoding encrypted DVDs'
            'libavc1394: devices using the 1394ta AV/C'
            'libdc1394: IEEE 1394 access plugin'
            'kwallet: kwallet keystore'
            'libva-vdpau-driver: vdpau backend nvidia'
            'libva-intel-driver: video backend intel'
            'libbluray: Blu-Ray video input'
            'flac: Free Lossless Audio Codec plugin'
            'twolame: TwoLAME mpeg2 encoder plugin'
            'libgme: Game Music Emu plugin'
            'vcdimager: navigate VCD with libvcdinfo'
            'libmtp: MTP devices discovery'
            'systemd-libs: udev services discovery'
            'smbclient: SMB access plugin'
            'libcdio: audio CD playback'
            'gnu-free-fonts: subtitle font'
            'ttf-dejavu: subtitle font'
            'libssh2: sftp access'
            'libnfs: NFS access'
            'mpg123: mpg123 codec'
            'protobuf: chromecast streaming'
            'libmicrodns: mDNS services discovery (chromecast etc)'
            'lua-socket: http interface'
            'libdvdread: DVD input module'
            'libdvdnav: DVD with navigation input module'
            'libogg: Ogg and OggSpots codec'
            'libshout: shoutcast/icecast output plugin'
            'libmodplug: MOD output plugin'
            'libvpx: VP8 and VP9 codec'
            'libvorbis: Vorbis decoder/encoder'
            'speex: Speex codec'
            'opus: opus codec'
            'libtheora: theora codec'
            'libpng: PNG support'
            'libjpeg-turbo: JPEG support'
            'librsvg: SVG plugin'
            'x264: H264 encoding'
            'x265: HEVC/H.265 encoder'
            'zvbi: VBI/Teletext/webcam/v4l2 capture/decoding'
            'libass: Subtitle support'
            'libkate: Kate codec'
            'libtiger: Tiger rendering for Kate streams'
            'sdl_image: SDL image support'
            'srt: SRT input/output plugin'
            'aalib: ASCII art video output'
            'libcaca: colored ASCII art video output'
            'libpulse: PulseAudio audio output'
            'alsa-lib: ALSA audio output'
            'jack: jack audio server'
            'libsamplerate: audio Resampler'
            'libsoxr: SoX audio Resampler'
            'lirc: lirc control'
            'libgoom2: Goom visualization'
            'projectm: ProjectM visualisation'
            'ncurses: ncurses interface'
            'libnotify: notification plugin'
            'gtk3: notification plugin'
            'aribb25: aribcam support'
            'pcsclite: aribcam support'
            'live-media: streaming over RTSP')
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}
        99-vlc.rules
        vlc.config.txt
        0001-vlc-live-media-2021.patch
        # credit to jc and RPi-Distro maintainers for this work, see:
        # https://github.com/jc-kynesim/vlc.git
        # https://github.com/RPi-Distro/vlc/tree/bullseye-rpt/debian/patches
        0002-test-3.0.21-rpi_2.patch
        update-vlc-plugin-cache.hook)
sha256sums=('24dbbe1d7dfaeea0994d5def0bbde200177347136dbfe573f5b6a4cee25afbb0'
            'SKIP'
            '61125ab0da600d813f1aebd8445fcf03e176389cfb8aa28591f8225a13043089'
            'f7d129441b5f1f1ce03f7056ebe2707d8c431a69a11afe153a9990dd61ce75ec'
            '753517a8b88c5950d516f0fe57a3ef169e0665ba7817d4b8d9976c666829a291'
            '616833e99372317d9a1e1a73254ee48f71a803eb13e8dd04db158e7c3db0eb5c'
            'b98043683dd90d3f5a3f501212dfc629839b661100de5ac79fd30cb7b4a06f13')
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"

  ./configure \
    --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 \
    --disable-taglib \
    --enable-secret \
    --enable-kwallet \
    --disable-update-check \
    --enable-notify \
    --disable-libplacebo \
    --enable-vlc \
    --enable-aribsub \
    --enable-aribcam \
    --enable-aom \
    --enable-srt \
    --enable-dav1d

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