#!/bin/bash

# Slackware build script for ventoy

# Copyright 2026 Antonio Leal, Porto Salvo, Oeiras, Portugal
# 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=ventoy
VERSION=${VERSION:-1.1.11}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}
TARBALL=ventoy-${VERSION}-linux.tar.gz


if [ -z "$ARCH" ]; then
  case "$( uname -m )" in
    i?86) ARCH=i586 ;;
    arm*) ARCH=arm ;;
       *) ARCH=$( uname -m ) ;;
  esac
fi

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

TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}

# if [ "$ARCH" = "i586" ]; then
#   SLKCFLAGS="-O2 -march=i586 -mtune=i686"
# elif [ "$ARCH" = "i686" ]; then
#   SLKCFLAGS="-O2 -march=i686 -mtune=i686"
# elif [ "$ARCH" = "x86_64" ]; then
#   SLKCFLAGS="-O2 -fPIC"
# else
#   SLKCFLAGS="-O2"
# fi

set -e

rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION

tar xvf $CWD/$TARBALL
cd $PRGNAM-$VERSION

# Decompress tools
if [ "$ARCH" == "x86_64" ]; then
    pushd tool/x86_64
else
    pushd tool/i386
fi
for file in *.xz; do
    xzcat $file > ${file%.xz}
    chmod +x ${file%.xz}
done
# Then cleanup .xz files
rm -rf *.xz
popd

chown -R root:root .
find -L . \
 \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
  -o -perm 511 \) -exec chmod 755 {} \; -o \
 \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
  -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;

# Apply sanitize patch
patch --verbose -Np1 -i "$CWD/sanitize.patch"

# Log location
sed -i 's|log\.txt|/var/log/ventoy.log|g' WebUI/static/js/languages.js tool/languages.json
sed -i 's|\./log\.txt|/var/log/ventoy.log|g' Ventoy2Disk.sh tool/{ventoy_lib,VentoyWorker}.sh

# Non-POSIX compliant scripts
sed -i 's|bin/sh|usr/bin/env bash|g' {Ventoy2Disk,VentoyVlnk,tool/{create_ventoy_iso_part_dm,ventoy_lib,VentoyWorker}}.sh

# Clean up unused binaries
# Preserving mkexfatfs and mount.exfat-fuse because exfatprogs is incompatible
for binary in xzcat hexdump; do
    if [ "$ARCH" == "x86_64" ]; then
        rm -rf tool/x86_64/${binary}
    else
        rm -rf tool/i386/${binary}
    fi
done

mkdir -p $PKG/opt/${PRGNAM}
rm -rf tool/aarch64
rm -rf tool/mips64el
if [ "$ARCH" = "x86_64" ]; then
    rm -rf tool/i386
    cp -avxu VentoyGUI.x86_64 $PKG/opt/${PRGNAM}/
else
    rm -rf tool/x86_64
    cp -avxu VentoyGUI.i386 $PKG/opt/${PRGNAM}/
fi
cp -avxu tool $PKG/opt/${PRGNAM}

cp -avxu ${PRGNAM} $PKG/opt/${PRGNAM}/
cp -avxu boot $PKG/opt/${PRGNAM}/
cp -avxu plugin $PKG/opt/${PRGNAM}/
cp -avxu WebUI $PKG/opt/${PRGNAM}/
cp -avxu *.sh $PKG/opt/${PRGNAM}/

mkdir -p $PKG/usr/share/pixmaps
cp WebUI/static/img/VentoyLogo.png $PKG/usr/share/pixmaps/${PRGNAM}.png
mkdir -p $PKG/usr/share/applications
install -Dm644 $CWD/${PRGNAM}.desktop $PKG/usr/share/applications

mkdir -p $PKG/usr/bin
install -Dm755 "$CWD/${PRGNAM}"{,gui,web,plugson,-{,extend-}persistent} -vt "$PKG"/usr/bin/

# Remove Gtk 2 files
if [ "$ARCH" == "x86_64" ]; then
    rm "$PKG/opt/${PRGNAM}/tool/x86_64/Ventoy2Disk.gtk2"
fi

# Link system binaries...
if [ "$ARCH" == "x86_64" ]; then
    for binary in $(ls -1 $PKG/opt/${PRGNAM}/tool/x86_64); do
        ( cd $PKG/usr/bin ; rm -rf $binary )
        ( cd $PKG/usr/bin ; ln -sf ../../opt/ventoy/tool/x86_64/$binary $binary )
    done
else
    for binary in $(ls -1 $PKG/opt/${PRGNAM}/tool/i386); do
        ( cd $PKG/usr/bin ; rm -rf $binary )
        ( cd $PKG/usr/bin ; ln -sf ../../opt/ventoy/tool/i386/$binary $binary )
    done
fi

find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
  | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true

mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
cat README > $PKG/usr/doc/$PRGNAM-$VERSION/README

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

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