#!/bin/bash

# Slackware build script for zfs-dkms 

# Copyright 2026 Frank Honolka <info@snukware.com>
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
#
#  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
#  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
#  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
#  EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
#  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
#  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
#  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
#  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
#  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

cd $(dirname $0) ; CWD=$(pwd)

PRGNAM=zfs-dkms			
SRCNAM=zfs			
VERSION=${VERSION:-$(echo $SRCNAM-*.tar.?z | rev | cut -d "." -f 3- | cut -d "-" -f 1 | rev)}
BUILD=${BUILD:-2}
TAG=${TAG:-_snuk}		
PKGTYPE=${PKGTYPE:-txz}

ARCH=noarch

if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
  echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
  exit 0
fi

TMP=${TMP:-/var/cache/snukware/tmp}	
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/var/cache/snukware/a}	

set -e 

rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $SRCNAM-$VERSION
tar xvf $CWD/$SRCNAM-$VERSION.tar.gz --no-same-owner
cd $SRCNAM-$VERSION
cat $CWD/patches/1000-dont-symlink-zed-scripts.patch | patch -p1 --verbose || exit 1
cat $CWD/patches/1001-Prevent-manual-builds-in-the-DKMS-source.patch | patch -p1 --verbose || exit 1
cat $CWD/patches/1002-Check-for-META-and-DCH-consistency-in-autoconf.patch | patch -p1 --verbose || exit 1
cat $CWD/patches/1005-enable-zed.patch | patch -p1 --verbose || exit 1
cat $CWD/patches/1006-zed-service-bindir.patch | patch -p1 --verbose || exit 1
cat $CWD/patches/1007-dkms-pkgcfg.patch | patch -p1 --verbose || exit 1
cat $CWD/patches/1008-debian-periodic-scrub-trim-doc.patch | patch -p1 --verbose || exit 1
cat $CWD/patches/2100-zfs-load-module.patch | patch -p1 --verbose || exit 1
cat $CWD/patches/force-verbose-rules.patch | patch -p1 --verbose || exit 1
cat $CWD/patches/cross-compile.patch | patch -p1 --verbose || exit 1
cat $CWD/patches/vdev-id-use-gawk.patch | patch -p1 --verbose || exit 1
cat $CWD/patches/ubuntu/0001-Revert-Revert-systemd-Use-non-absolute-paths-in-Exec.patch | patch -p1 --verbose || exit 1
cat $CWD/patches/ubuntu/0002-Revert-etc-systemd-zfs-mount-generator-rewrite-in-C.patch | patch -p1 --verbose || exit 1
cat $CWD/patches/ubuntu/4000-zsys-support.patch | patch -p1 --verbose || exit 1
cat $CWD/patches/ubuntu/4001-dracut-Open-and-mount-luks-keystore.patch | patch -p1 --verbose || exit 1
cat $CWD/patches/ubuntu/4100-disable-bpool-upgrade.patch | patch -p1 --verbose || exit 1
cat $CWD/patches/ubuntu/zfs-mount-container-start.patch | patch -p1 --verbose || exit 1
cat $CWD/patches/ubuntu/4510-silently-ignore-modprobe-failure.patch | patch -p1 --verbose || exit 1
cat $CWD/patches/ubuntu/4751-suppress-types.patch | patch -p1 --verbose || exit 1
cat $CWD/patches/ubuntu/fixup-abi.patch | patch -p1 --verbose || exit 1
# ubuntu/0003-enable-linux-experimental.patch
cat $CWD/patches/fix-pyzfs-version.patch | patch -p1 --verbose || exit 1
cat $CWD/patches/BUILD_EXCLUSIVE_KERNEL_MIN.patch | patch -p1 --verbose || exit 1
#bump-Linux-Minimum.patch
#bump-Linux-Maximum.patch
cat $CWD/patches/ubuntu/0004-rename-sms-service.patch | patch -p1 --verbose || exit 1
cat $CWD/patches/linux-7.3-iops-create-no-flag.patch | patch -p1 --verbose || exit 1
cat $CWD/patches/linux-7.3-bvec-iter-bi-offset.patch | patch -p1 --verbose || exit 1
cat $CWD/patches/linux-cpu-feature-enabled.patch | patch -p1 --verbose || exit 1
cat $CWD/patches/linux-7.3-kthread-init-fs.patch | patch -p1 --verbose || exit 1
cat $CWD/patches/bump-Linux-Maximum-7.3.patch | patch -p1 --verbose || exit 1

cat $CWD/patches/0001-only-build-the-module-in-dkms.conf.patch | patch -p1 --verbose || exit 1
find . ! -type l    -a \( \
  \(     -perm /111 -a ! -perm 755 -a -exec chmod -f 755 {} + \) -o \
  \(   ! -perm /111 -a ! -perm 644 -a -exec chmod -f 644 {} + \) \)

prepare() {
    # remove unneeded sections from module build
    sed -ri "/^AC_CONFIG_FILES\(\[$/,/^\]\)$/{
/^AC_CONFIG_FILES\(\[$/p
/^\]\)$/p
/^\s*(module\/.+|${pkgname%-dkms}.release|Makefile)$/!d
}
/^AC_CONFIG_FILES\(\[.*\]\)$/d
" configure.ac

    autoreconf -fi
}

prepare

./scripts/dkms.mkconf -n ${PRGNAM%-dkms} -v ${VERSION} -f dkms.conf
./scripts/make_gitrev.sh include/zfs_gitrev.h

dkmsdir="${PKG}/usr/src/${PRGNAM%-dkms}-${VERSION}"
install -d "${dkmsdir}"/{config,scripts}
cp -a configure dkms.conf Makefile.in META ${PRGNAM%-dkms}_config.h.in ${PRGNAM%-dkms}.release.in include/ module/ "${dkmsdir}"/
cp config/compile config/config.* config/missing config/*sh "${dkmsdir}"/config/
cp scripts/dkms.postbuild "${dkmsdir}"/scripts/

PKGDOC=$PKG/usr/doc/$PRGNAM-$VERSION
mkdir -p $PKGDOC
DOCS="ABOUT-NLS AUTHORS CODE_OF_CONDUCT.md COPYRIGHT LICENSE META NEWS NOTICE README.md RELEASES.md"
cp -a $DOCS $PKGDOC
cat $CWD/$PRGNAM.SlackBuild > $PKGDOC/$PRGNAM.SlackBuild

mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc

cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE
