# Maintainer: Kyle Keen <keenerd@gmail.com>
# Contributor: Dominik Heidler <dheidler@gmail.com>

# it looks like the release model has gotten better
# keeping it more modular for now though

pkgname=bladerf
_libver=2.2.1
_CLIver=1.8.0
_FPGAver=0.11.0
_firmver=2.3.2
_noOScommit=0bba46e  # upstream has pinned a submodule to this
pkgver=$_libver
pkgrel=3
pkgdesc="Driver, userspace, fpga & firmware for the bladeRF SDR."
url="https://github.com/Nuand/bladeRF"
# https://github.com/Nuand/bladeRF/tags
arch=('x86_64')
license=('GPL2')
depends=('libusb')
makedepends=('cmake' 'help2man' 'doxygen')
#backup=("etc/bladerf.cfg")

source=(
    "https://github.com/Nuand/bladeRF/archive/libbladeRF_v$_libver.tar.gz"
    "https://github.com/Nuand/bladeRF/archive/bladeRF-cli_v$_CLIver.tar.gz"
    "noOS-$_noOScommit.tgz::https://github.com/analogdevicesinc/no-OS/archive/$_noOScommit.tar.gz"
    "https://nuand.com/fpga/v$_FPGAver/hostedx"{40,A4}".rbf"
    "https://nuand.com/fpga/v$_FPGAver/hostedx"{115,A9}".rbf"
    "https://www.nuand.com/fx3/bladeRF_fw_v$_firmver.img")

md5sums=('b579da8650a8ea549fbffd928e28585d'
         '0a7207f233a09c6322e03eb6ce3af2f6'
         '2c06ff9297d8beb0482a1b0b5e4d3128'
         '7a9b8e7f0f81af6d393132d7eb3e6e18'
         'b23bf6088aff5cff90bdea9488a35d89'
         'bee4542c4b020077c71ae630ef0d0fc8'
         'a17a2859e4f28fdc3952de78aca1dabe'
         'c823ea5aa2c25c26bbaf4ab395ac559d')

# bladeRF-cli is bundled with libbladeRF
# bladeRF-cli can use libtecla (aur)?

prepare() {
  cd "$srcdir/bladeRF-libbladeRF_v$_libver"
  # FS#47168
  sed -i 's|MODE.*$|TAG+="uaccess"|' host/misc/udev/*.rules.in

  # todo, report warning
  sed -i '94i add_definitions(-Wno-error=format-truncation)' host/CMakeLists.txt

  # FS#55326
  sed -i '44s/^else/#&/' host/misc/udev/CMakeLists.txt

  # replace cli
  rm -rf host/utilities/bladeRF-cli
  ln -s "$srcdir/bladeRF-bladeRF-cli_v$_CLIver"/host/utilities/bladeRF-cli host/utilities/bladeRF-cli

  # manually replace the submodules
  # because "git submodule init/update" doesn't work with a release tarball
  rmdir --ignore-fail-on-non-empty thirdparty/analogdevicesinc/no-OS
  ln -s "$srcdir/no-OS-$_noOSver"* thirdparty/analogdevicesinc/no-OS
}

build() {
  cd "$srcdir/bladeRF-libbladeRF_v$_libver"
  mkdir -p build
  cd build
  CFLAGS+=" -Wno-error=stringop-truncation" cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DINSTALL_UDEV_RULES=ON \
    -DBUILD_DOCUMENTATION=ON \
    -DCMAKE_INSTALL_LIBDIR:PATH=lib \
    -Dusb_LIBRARY:FILEPATH=/usr/lib/libusb-1.0.so \
    -DCMAKE_INSTALL_PREFIX=/usr ../
  make
  # ENABLE_FX3_BUILD needs cypress toolchain
  # really really wants to put files in /usr/lib64
}

package() {
  cd "$srcdir/bladeRF-libbladeRF_v$_libver/build"
  make DESTDIR="${pkgdir}" install
  cd "$srcdir"
  install -Dm644 "bladeRF_fw_v$_firmver.img" "$pkgdir/usr/share/bladerf/firmware/bladeRF_fw_v$_firmver.img"
  install -Dm644 hostedx40.rbf "$pkgdir/usr/share/bladerf/fpga/hostedx40.rbf"
  install -Dm644 hostedx115.rbf "$pkgdir/usr/share/bladerf/fpga/hostedx115.rbf"
  install -Dm644 hostedxA4.rbf "$pkgdir/usr/share/bladerf/fpga/hostedxA4.rbf"
  install -Dm644 hostedxA9.rbf "$pkgdir/usr/share/bladerf/fpga/hostedxA9.rbf"

  # FS#54105
  cd "$pkgdir/etc/udev/rules.d/"
  mv 88-nuand-bladerf1.rules   70-nuand-bladerf1.rules
  mv 88-nuand-bladerf2.rules   70-nuand-bladerf2.rules
  mv 88-nuand-bootloader.rules 70-nuand-bootloader.rules
}
