# POWER Maintainer: Alexander Baldeck <alex.bldck@gmail.com>
# Maintainer: 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
pkgname=(vlc libvlc)
_vlcver=3.0.21
# optional fixup version including hyphen
_vlcfixupver=
pkgver=$_vlcver${_vlcfixupver//-/.r}
pkgrel=7
pkgdesc='Multi-platform MPEG, VCD/DVD, and DivX player'
url=https://www.videolan.org/vlc/
arch=(x86_64 powerpc64le powerpc64 powerpc riscv64)
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
  ffmpeg4.4  # NOTE: switch to ffmpeg4.4, as ffmpeg >= 5 requires extensive changes disabling VAAPI (only supported with vlc >= 4)
  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
  libjpeg-turbo
  libkate
  libmad
  libmatroska
  libmicrodns
  libmodplug
  libmpcdec
  libmpeg2
  libmtp
  libnotify
  libnfs
  libogg
  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_powerpc64=(taglib)
makedepends_powerpc64le=(libgoom2 taglib)
makedepends_riscv64=(taglib)
makedepends_x86_64=(libgoom2 taglib)
options=(!emptydirs)
source=(
  https://download.videolan.org/$pkgname/$_vlcver/$pkgname-$_vlcver$_vlcfixupver.tar.xz{,.asc}
  update-vlc-plugin-cache.hook
  taglib-2.patch
)
sha512sums=('cb1af76c8056648c331d7e6e0680d161ed1849eb635987504f45eae02531e9b432651034317fa7e02b0722905dfb9f0f5dad67b5924cc62edcaf0d173ac36aee'
            'SKIP'
            'b247510ffeadfd439a5dadd170c91900b6cdb05b5ca00d38b1a17c720ffe5a9f75a32e0cb1af5ebefdf1c23c5acc53513ed983a736e8fa30dd8fad237ef49dd3'
            'ea0d1e1dfed16dac8f9027eb55d987dee59630568b9744ceb42bfa134ea9295252d83574f3d793a76a5be3b02661c1731ed366003b6b55b2d7f02fde70586ff3')
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=(
    --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-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-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/
  )

  case "${CARCH}" in
    powerpc)
      #FIXME: doesn't build w/o Altivec enabled
      export CFLAGS+=" -maltivec"
      export CXXFLAGS+=" -maltivec"
      _configure_options+=(
         --enable-altivec
         --disable-chromecast
         --disable-taglib #FIXME: broken only on powerpc
      )
    ;;
    riscv64)
      export CFLAGS+=" -latomic"
      export CXXFLAGS+=" -latomic"
      _configure_options+=(
        --enable-chromecast
        --enable-taglib
      )
    ;;
    *)
      _configure_options+=(
        --enable-chromecast
        --enable-goom
        --enable-taglib
      )
    ;;
  esac

  cd $pkgname-$_vlcver

  export CFLAGS+=" -I/usr/include/samba-4.0 -ffat-lto-objects -Wno-incompatible-pointer-types"
  export CPPFLAGS+=" -I/usr/include/samba-4.0"
  export CXXFLAGS+=" -std=c++17"
  export PKG_CONFIG_PATH="/usr/lib/ffmpeg4.4/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/ffmpeg4.4/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() {
  depends=(
    a52dec
    abseil-cpp
    aribb24
    bash
    cairo
    dbus
    faad2
    ffmpeg4.4  # NOTE: switch to ffmpeg4.4, as ffmpeg >= 5 requires extensive changes disabling VAAPI (only supported with vlc >= 4)
    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
    libx11
    libxcb
    libxinerama
    libxml2
    libxpm
    lua
    qt5-base
    qt5-svg
    qt5-x11extras
    wayland
    xcb-util-keysyms
    zlib
  )
  depends_powerpc64=(taglib)
  depends_powerpc64le=(taglib)
  depends_riscv64=(taglib)
  depends_x86_64=(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'
    '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'
  )
  optdepends_powerpc64le=(
    'libgoom2: Goom visualization'
  )
  optdepends_x86_64=(
    'libgoom2: Goom visualization'
  )
  conflicts=(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/"
}

package_libvlc() {
  pkgdesc+=" - library"
  depends=(
    dbus
    gcc-libs
    glibc
  )

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

# vim: ts=2 sw=2 et:
