# shellcheck shell=bash
shopt -s extglob

pkgbase="zfs-linux-lts-rc-poscat"
pkgname=("zfs-utils-rc-poscat" "zfs-linux-lts-rc-poscat" "zfs-linux-lts-rc-poscat-headers")
_kernelver=6.18.43-1
_extramodules="${_kernelver}-lts"
_sd_zfs_commit="dece62d"

pkgver=2.4.3
_fullver=2.4.3
pkgrel=2
makedepends=(
  "linux-lts-headers=${_kernelver}"
  "libunwind"
)
arch=("x86_64")
url="https://openzfs.org/"
source=(
  # source
  "https://github.com/openzfs/zfs/releases/download/zfs-${_fullver}/zfs-${_fullver}.tar.gz"
  # mkinitcpio-sd-zfs
  "mkinitcpio-sd-zfs.tar.gz::https://github.com/poscat0x04/mkinitcpio-sd-zfs/archive/${_sd_zfs_commit}.tar.gz"
  # legacy mkinitcpio hooks
  'zfs.initcpio.install'
  'zfs.initcpio.hook'
  'zfs.initcpio.zfsencryptssh.install'
)
sha256sums=('1f08f2d154f5189b5f1382848a32667b3d34066145b474c49cd3d41a5fba59a7'
            '3dcc79915e41c5326135f2c3a8787fd2abfc2fc50c349327ef41222440ba2c4a'
            '2f09c742287f4738c7c09a9669f8055cd63d3b9474cd1f6d9447152d11a1b913'
            '15b5acea44225b4364ec6472a08d3d48666d241fe84c142e1171cd3b78a5584f'
            'ac9ed396465e26fa6896762c52a93eb7aaf8af6d7b2c69bd826d219ff821b2c9')
license=("CDDL-1.0")
depends=("kmod" "linux-lts=${_kernelver}")

prepare() {
  cd "$srcdir"
  mv mkinitcpio-sd-zfs-* sd-zfs
}

build() {
  cd "${srcdir}/zfs-${_fullver}"
  ./autogen.sh
  ./configure \
    --prefix=/usr \
    --sysconfdir=/etc \
    --sbindir=/usr/bin \
    --libdir=/usr/lib \
    --datadir=/usr/share \
    --localstatedir=/var \
    --includedir=/usr/include \
    --with-udevdir=/usr/lib/udev \
    --with-mounthelperdir=/usr/bin \
    --libexecdir=/usr/lib \
    --with-config=all \
    --with-linux=/usr/lib/modules/${_extramodules}/build \
    --with-linux-obj=/usr/lib/modules/${_extramodules}/build \
    --with-libunwind \
    --with-python=3 \
    --enable-pyzfs=no \
    --enable-systemd \
    --enable-sysvinit=no
  make
}

package_zfs-utils-rc-poscat() {
  pkgdesc='ZFS userspace tools'
  provides=('zfs-utils' "zfs-utils=${pkgver}" 'zfs-utils-poscat')
  conflicts=('zfs-utils' 'zfs-utils-poscat' 'mkinitcpio-sd-zfs')
  depends+=('libunwind')
  optdepends=('python: for arcstat/arc_summary/dbufstat')
  backup=('etc/zfs/zed.d/zed.rc')

  cd "${srcdir}/zfs-${_fullver}"
  make DESTDIR="$pkgdir" install
  rm -rv "$pkgdir"/lib
  rm -rv "$pkgdir"/usr/src

  install -Dvm644 \
    "$srcdir"/zfs.initcpio.hook "$pkgdir"/usr/lib/initcpio/hooks/zfs
  install -Dvm644 \
    "$srcdir"/zfs.initcpio.install "$pkgdir"/usr/lib/initcpio/install/zfs
  install -Dvm644 \
    "$srcdir"/zfs.initcpio.zfsencryptssh.install "$pkgdir"/usr/lib/initcpio/install/zfsencryptssh

  install -Dvm644 \
    "$srcdir"/sd-zfs/sd-zfs.initcpio.install "$pkgdir"/usr/lib/initcpio/install/sd-zfs
  install -Dvm644 \
    "$srcdir"/sd-zfs/zfs-shutdown.initcpio.install "$pkgdir"/usr/lib/initcpio/install/zfs-shutdown

  install -Dvm755 \
    -t "$pkgdir"/usr/lib/zfs/initcpio/ \
    "$srcdir"/sd-zfs/{parse-cmdline,zfs-set-env,zfs-root-generator}
  install -Dvm755 \
    -t "$pkgdir"/usr/lib/systemd/system-shutdown/ \
    "$srcdir"/sd-zfs/zfs.shutdown

  install -Dvm644 \
    -t "$pkgdir"/usr/lib/systemd/system/mkinitcpio-generate-shutdown-ramfs.service.d/ \
    "$srcdir"/sd-zfs/zfs-shutdown.conf

  # cleanup
  ## empty files
  rm -rv "$pkgdir"/usr/lib/modules-load.d
  ## debian/ubuntu specific
  rm -rv "$pkgdir"/usr/share/initramfs-tools
  rm -rv "$pkgdir"/etc/default
  ## fedora specific
  rm -rv "$pkgdir"/usr/lib/dracut
  rm -rv "$pkgdir"/usr/share/man/man7/dracut.zfs.7
  ## test scripts
  rm -rv "$pkgdir"/usr/share/zfs/{*.sh,runfiles,test-runner,zfs-tests}
}

package_zfs-linux-lts-rc-poscat() {
  pkgdesc="ZFS kernel modules"
  install=zfs.install
  provides=("zfs" "spl")
  conflicts=("zfs-dkms" "zfs-dkms-git" "zfs-dkms-rc" "spl-dkms" "spl-dkms-git" 'zfs-linux-lts-git' 'zfs-linux-lts-poscat' 'zfs-linux-lts' 'spl-linux-lts')
  replaces=("spl-linux-lts")
  depends+=("zfs-utils=${pkgver}")

  cd "${srcdir}/zfs-${_fullver}/module"
  make DESTDIR="$pkgdir" INSTALL_MOD_PATH="$pkgdir"/usr INSTALL_MOD_STRIP=1 modules_install
}

package_zfs-linux-lts-rc-poscat-headers() {
  pkgdesc="ZFS kernel headers"
  provides=("zfs-headers" "spl-headers")
  conflicts=("zfs-headers" "zfs-dkms" "zfs-dkms-git" "zfs-dkms-rc" "spl-dkms" "spl-dkms-git" "spl-headers")
  depends+=("libaio")

  cd "${srcdir}/zfs-${_fullver}"
  make DESTDIR="$pkgdir" install
  rm -rv "${pkgdir}/lib"
  rm -rv "${pkgdir}/etc"
  rm -rv "$pkgdir"/usr/!(src)
  # Remove reference to ${srcdir}
  sed -i "s+${srcdir}++" "$pkgdir"/usr/src/zfs-*/${_extramodules}/Module.symvers
}
