#!/bin/bash

# Slackware build script for game-devices-udev

# Copyright 2024-2026 Jeremy Hansen <jebrhansen+SBo@gmail.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=game-devices-udev
VERSION=${VERSION:-1.0}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}

ARCH=noarch

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}

set -e

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

# Allow disabling individual rules, but default to enabled
if [ "${_8BITDO:-YES}" == "NO" ]; then _8BITDO='-D8bitdo=false'; else _8BITDO=""; fi
if [ "${ALPHA:-YES}" == "NO" ]; then ALPHA='-Dalpha_imaging_technology=false'; else ALPHA=""; fi
if [ "${ASTRO:-YES}" == "NO" ]; then ASTRO='-Dastro_gaming=false'; else ASTRO=""; fi
if [ "${BETOP:-YES}" == "NO" ]; then BETOP='-Dbetop=false'; else BETOP=""; fi
if [ "${BIGSCREEN:-YES}" == "NO" ]; then BIGSCREEN='-Dbigscreen=false'; else BIGSCREEN=""; fi
if [ "${CYPRESS:-YES}" == "NO" ]; then CYPRESS='-Dcypress_semiconductor_corp=false'; else CYPRESS=""; fi
if [ "${GOOGLE:-YES}" == "NO" ]; then GOOGLE='-Dgoogle=false'; else GOOGLE=""; fi
if [ "${HORI:-YES}" == "NO" ]; then HORI='-Dhori=false'; else HORI=""; fi
if [ "${HTC:-YES}" == "NO" ]; then HTC='-Dhtc=false'; else HTC=""; fi
if [ "${LOGITECH:-YES}" == "NO" ]; then LOGITECH='-Dlogitech=false'; else LOGITECH=""; fi
if [ "${MADCATZ:-YES}" == "NO" ]; then MADCATZ='-Dmad_catz=false'; else MADCATZ=""; fi
if [ "${MICROSOFT:-YES}" == "NO" ]; then MICROSOFT='-Dmicrosoft=false'; else MICROSOFT=""; fi
if [ "${NACON:-YES}" == "NO" ]; then NACON='-Dnacon=false'; else NACON=""; fi
if [ "${NINTENDO:-YES}" == "NO" ]; then NINTENDO='-Dnintendo=false'; else NINTENDO=""; fi
if [ "${NVIDIA:-YES}" == "NO" ]; then NVIDIA='-Dnvidia=false'; else NVIDIA=""; fi
if [ "${PDP:-YES}" == "NO" ]; then PDP='-Dpdp=false'; else PDP=""; fi
if [ "${PERSONALCOMM:-YES}" == "NO" ]; then PERSONALCOMM='-Dpersonal_communication_systems_inc=false'; else PERSONALCOMM=""; fi
if [ "${PIDCODES:-YES}" == "NO" ]; then PIDCODES='-Dpid_codes=false'; else PIDCODES=""; fi
if [ "${POWERA:-YES}" == "NO" ]; then POWERA='-Dpowera=false'; else POWERA=""; fi
if [ "${RASPBERRYPI:-YES}" == "NO" ]; then RASPBERRYPI='-Draspberry_pi_ltd=false'; else RASPBERRYPI=""; fi
if [ "${RAZER:-YES}" == "NO" ]; then RAZER='-Drazer=false'; else RAZER=""; fi
if [ "${SONY:-YES}" == "NO" ]; then SONY='-Dsony=false'; else SONY=""; fi
if [ "${THRUSTMASTER:-YES}" == "NO" ]; then THRUSTMASTER='-Dthrustmaster=false'; else THRUSTMASTER=""; fi
if [ "${UINPUT:-YES}" == "NO" ]; then UINPUT='-Duinput_dev_early_creation=false'; else UINPUT=""; fi
if [ "${VALVE:-YES}" == "NO" ]; then VALVE='-Dvalve=false'; else VALVE=""; fi
if [ "${VKBSIM:-YES}" == "NO" ]; then VKBSIM='-Dvkb_sim=false'; else VKBSIM=""; fi
if [ "${ZEROPLUS:-YES}" == "NO" ]; then ZEROPLUS='-Dzeroplus_technology_corporation=false'; else ZEROPLUS=""; fi

mkdir build
cd build
  CFLAGS="$SLKCFLAGS" \
  CXXFLAGS="$SLKCFLAGS" \
  meson setup .. \
    --buildtype=release \
    --infodir=/usr/info \
    --libdir=/usr/lib${LIBDIRSUFFIX} \
    --localstatedir=/var \
    --mandir=/usr/man \
    --prefix=/usr \
    --sysconfdir=/etc \
    -Dstrip=true \
    $_8BITDO \
    $ALPHA \
    $ASTRO \
    $BETOP \
    $BIGSCREEN \
    $CYPRESS \
    $GOOGLE \
    $HORI \
    $HTC \
    $LOGITECH \
    $MADCATZ \
    $MICROSOFT \
    $NACON \
    $NINTENDO \
    $NVIDIA \
    $PDP \
    $PERSONALCOMM \
    $PIDCODES \
    $POWERA \
    $RASPBERRYPI \
    $RAZER \
    $SONY \
    $THRUSTMASTER \
    $UINPUT \
    $VALVE \
    $VKBSIM \
    $ZEROPLUS
  "${NINJA:=ninja}"
  DESTDIR=$PKG $NINJA install
cd ..

mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a \
  LICENSE README.md \
  $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
cat $CWD/README.devices > $PKG/usr/doc/$PRGNAM-$VERSION/README.devices

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
