# Maintainer: David Runge <dvzrv@archlinux.org>
# Contributor: Alexander Epaneshnikov <aarnaarn2@gmail.com>
# Contributor: Tom Gundersen <teg@jklm.no>
# Contributor: Jan de Groot <jgc@archlinux.org>
# Contributor: Giovanni Scafora <giovanni@archlinux.org>

pkgbase=brltty
pkgname=(brltty brltty-udev-generic)
pkgver=6.6
pkgrel=11
pkgdesc="Braille display driver for Linux/Unix"
arch=(x86_64 aarch64)
url="https://brltty.app"
license=(LGPL-2.1-or-later)
makedepends=(
  alsa-lib
  at-spi2-atk
  at-spi2-core
  atk
  bluez-libs
  cython
  dbus
  dracut
  espeak-ng
  expat
  festival
  gcc-libs
  glibc
  glib2
  gpm
  icu
  java-environment
  libcap
  liblouis
  libspeechd
  libxaw
  ncurses
  ocaml-ctypes
  ocaml-findlib
  pcre2
  polkit
  python-setuptools
  speech-dispatcher
  strip-nondeterminism
  systemd-libs
  tcl
)
options=(!emptydirs)
source=(
  https://github.com/brltty/brltty/archive/refs/tags/${pkgbase^^}-$pkgver.tar.gz
  $pkgname-6.2-systemd_sysusers_groups.patch
  $pkgname-6.4-x11_autostart.patch
  https://github.com/brltty/brltty/commit/e6707d5e.patch
)
sha512sums=('a2cdcebd1f527aefa6dbfebcb6ec86e74bc42faa3b50130efd151a37b4e508b0da5dd1283800bead06b4f5f1f1f5a606cb1a7385fad812e02c6431e0e2943c69'
            '32ba91271e2247b4a330cd213ed75b591268cb99a79c2efd9ae675804faee027c6b2f782768cb2329a65fc914ca2400b2901f35ce1fc2522c6691b343799eb02'
            '4871512affefbc178f4204a1b285fc2b5a05ea2d181163195d695b760e9729b3d2d00b5f052abd71379df609c3859d7cbd64128bdefd16e898bbc4368500a9a0'
            'a7419af607daf70dac2192cae5a3efa3af275024ec6b371f2d108c2c7a29b1df6864e9668b86e69e2a172eeb0e27acb3f4c3c0d56574d54f990694cadfe89252')
b2sums=('04db7239ee9b2e6318eb235bc7c6a6407fc9519042d37a95dbb9661bd4cb4c4c6e6261230d963402ffcb22189ee00777a62067fe5b2677b0724a7f06cd3a774d'
        '036e36d558594bb06af1eb41ff5fc9ae52ccf4bad54556c3f4f81a5e2f31f574039835e5e756455527c327a73d563a3db54a9f32e3478545a2a22c2725aaeee2'
        '4ebc07a725ef8362233a83118e93901e78943e8dae08f9358b668ff13ab88a65eb9e87c49d106a8c3d87eb62007b230e199107eacb01f92dc683335076c01309'
        'ad794586a149587511a3e1fb47ecbb2b881a3c078ed10a37cf25007459773a2bafc4c3bb500d4db8ee62e9c5c908e82f5bce593b8cfd2563fcc553e0defb6980')

prepare() {
  cd $pkgbase-${pkgbase^^}-$pkgver
  patch -Np1 -i ../$pkgbase-6.2-systemd_sysusers_groups.patch
  patch -Np1 -i ../$pkgbase-6.4-x11_autostart.patch
  patch -p1 -i ../e6707d5e.patch # Fix crash when compiled with cython 3
  ./autogen
}

build() {
  local configure_options=(
    --prefix=/usr
    --sysconfdir=/etc
    --libexecdir=/usr/lib
    --localstatedir=/var
    --mandir=/usr/share/man
    --with-scripts-directory=/usr/lib/brltty
    --with-tables-directory=/usr/share/brltty
    --with-writable-directory=/run/brltty
    --enable-gpm
    --disable-stripping
  )
  # fat-lto-objects is required for non-mangled static libs
  CFLAGS+=" -ffat-lto-objects"

  cd $pkgbase-${pkgbase^^}-$pkgver
  ./configure "${configure_options[@]}"
  make -j1
  # make brlapi.jar deterministic
  find . -type f -iname "*.jar" -exec strip-nondeterminism {} \;
}

package_brltty() {
  depends=(
    alsa-lib libasound.so
    bluez-libs
    dbus libdbus-1.so
    expat libexpat.so
    glib2 libgio-2.0.so libglib-2.0.so libgobject-2.0.so
    glibc
    gpm libgpm.so
    icu libicuuc.so
    libcap
    liblouis
    libspeechd
    ncurses libncursesw.so
    pcre2
    polkit
    systemd-libs libsystemd.so
  )
  optdepends=(
    'at-spi2-core: X11/GNOME Apps accessibility'
    'atk: ATK bridge for X11/GNOME accessibility'
    'brltty-udev-generic: for initializing brltty with generic USB devices'
    'espeak-ng: espeak-ng driver'
    'java-runtime: Java support'
    'libxaw: X11 support'
    'libxt: X11 support'
    'libx11: for xbrlapi'
    'libxfixes: for xbrlapi'
    'libxtst: for xbrlapi'
    'ocaml: OCaml support'
    'python: Python support'
    'speech-dispatcher: speech-dispatcher driver'
    'tcl: tcl support'
  )
  provides=(libbrlapi.so)
  backup=(
    etc/brltty.conf
    etc/X11/xinit/xinitrc.d/90xbrlapi
  )
  install=brltty.install

  cd $pkgbase-${pkgbase^^}-$pkgver
  # installation does not work reliably with many cores, so set jobs to 1
  make -j1 INSTALL_ROOT="$pkgdir" install
  make -j1 INSTALL_ROOT="$pkgdir" install-systemd
  make -j1 INSTALL_ROOT="$pkgdir" install-udev
  make -j1 INSTALL_ROOT="$pkgdir" install-dracut
  make -j1 INSTALL_ROOT="$pkgdir" install-polkit
  install -vDm 644 Documents/$pkgbase.conf -t "$pkgdir/etc/"

  # move generic udev rule, as it applies too broadly
  mv -v "$pkgdir/usr/lib/udev/rules.d/90-brltty-usb-generic.rules" ../
}

package_brltty-udev-generic() {
  pkgdesc="Generic udev rules for brltty"
  depends=(brltty)

  install -vDm 644 90-brltty-usb-generic.rules -t "$pkgdir/usr/lib/udev/rules.d/"
}
