#!/bin/bash

# Slackware build script for virtualxt

# Copyright 2023 Sean Eubanks <seanmeu@protonmail.com>, Cheraw, SC, USA
# All rights reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy 
# of this software and associated documentation files (the "Software"), to 
# deal in the Software without restriction, including without limitation the 
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 
# sell copies of the Software, and to permit persons to whom the Software is 
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in 
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.

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

PRGNAM=virtualxt
VERSION=${VERSION:-0.11}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}

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

# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
# the name of the created package would be, and then exit. This information
# could be useful to other scripts.
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"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
  SLKCFLAGS="-O2 -march=i686 -mtune=i686"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
  SLKCFLAGS="-O2 -fPIC"
  LIBDIRSUFFIX="64"
else
  SLKCFLAGS="-O2"
  LIBDIRSUFFIX=""
fi

DOCS="LICENSE README.md"

set -e

rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf virtualxt-$VERSION
unzip $CWD/virtualxt-$VERSION.zip
cd virtualxt-$VERSION
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 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
 -exec chmod 644 {} \;

# Build virtualxt with SDL2 frontend
which premake5
if [ "$?" -ne 0 ]; then
  echo "ERROR: Cannot find required premake5 binary!"
  exit 1
fi 
if [ -z "$EXCLUDE_MODULES" ]; then
  # Build all modules
  premake5 --modules gmake
else
  # Build all modules except those specified in EXCLUDE_MODULES
  premake5 --modules=-$EXCLUDE_MODULES gmake
fi
make sdl2-frontend modules

install -D -m 0755 build/bin/virtualxt $PKG/usr/bin/virtualxt
mkdir -p $PKG/usr/lib$LIBDIRSUFFIX/virtualxt
install -D -m 0755 build/bin/libvxt.so $PKG/usr/lib$LIBDIRSUFFIX/virtualxt/libvxt.so

# Install BIOS, disk images, and modules
DSTDIR=$PKG/usr/share/$PRGNAM
mkdir -p $DSTDIR
mkdir $DSTDIR/bios && cp bios/*.bin bios/*.ROM $DSTDIR/bios/
mkdir $DSTDIR/boot && cp boot/*.img $DSTDIR/boot/
mkdir $DSTDIR/modules && cp modules/*.vxt $DSTDIR/modules/

# Allow all users read access
if [ "$(grep ^users /etc/group)" = "" ]; then
  echo "ERROR: The users group is missing!"
  exit 1
fi
chgrp -R users $DSTDIR

# All users need write access to boot images
# otherwise image fails to boot
chmod g+w $DSTDIR/boot/*.img

# Copy README, LICENSE, and this script
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a $DOCS $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$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