#!/bin/bash

# Slackware SlackBuild for ipscan-bin

# Copyright 2026 Pablo Romano, Seville, Spain
# 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=ipscan-bin
VERSION=${VERSION:-3.9.3}
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 [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
  echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
  exit 0
fi

if [ "$ARCH" != "x86_64" ]; then
  echo "ERROR: This precompiled package only supports x86_64 architectures."
  exit 1
fi

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

set -e

# --------------------------------------------------
# Java detection (Slackware + Zulu + OpenJDK safe)
# --------------------------------------------------

JAVA_HOME=""

for d in \
  /usr/lib64/zulu-openjdk17 \
  /usr/lib64/openjdk17 \
  /usr/lib64/java \
  /usr/lib/zulu-openjdk17 \
  /usr/lib/openjdk17 \
  /usr/lib/java
do
  if [ -x "$d/bin/java" ]; then
    JAVA_HOME="$d"
    break
  fi
done

if [ -z "$JAVA_HOME" ]; then
  if command -v java >/dev/null 2>&1; then
    JAVA_BIN="$(command -v java)"
    JAVA_BIN="$(readlink -f "$JAVA_BIN")"
    JAVA_HOME="$(dirname "$(dirname "$JAVA_BIN")")"
  fi
fi

if [ -z "$JAVA_HOME" ] || [ ! -x "$JAVA_HOME/bin/java" ]; then
  echo "ERROR: Java not found"
  echo "Install OpenJDK or Zulu OpenJDK 17+"
  exit 1
fi

export JAVA_HOME
export PATH="$JAVA_HOME/bin:$PATH"

rm -rf "$PKG"
mkdir -p "$TMP" "$PKG" "$OUTPUT"

cd "$TMP"
rm -rf "$PRGNAM-$VERSION"

mkdir -p "$PKG/opt/ipscan"

if [ -f "$CWD/ipscan-linux64-$VERSION.jar" ]; then
  install -m 644 "$CWD/ipscan-linux64-$VERSION.jar" "$PKG/opt/ipscan/ipscan.jar"
else
  echo "ERROR: ipscan-linux64-$VERSION.jar not found in $CWD"
  exit 1
fi

mkdir -p "$PKG/usr/bin"

cat > "$PKG/usr/bin/ipscan" << 'EOF'
#!/bin/sh

SWT_JAR=""
for path in \
  /usr/share/java/swt.jar \
  /usr/lib64/java/swt.jar \
  /usr/lib64/java/swt-*.jar; do
  if [ -f "$path" ]; then
    SWT_JAR="$path"
    break
  fi
done

if [ -z "$SWT_JAR" ]; then
  echo "ERROR: swt.jar not found. Please ensure Slackware's 'swt' package is installed." >&2
  exit 1
fi

CLASSPATH="/opt/ipscan/ipscan.jar:$SWT_JAR"

exec java \
  --add-opens java.base/java.net=ALL-UNNAMED \
  -cp "$CLASSPATH" \
  net.azib.ipscan.Main "$@"
EOF

chmod 755 "$PKG/usr/bin/ipscan"

mkdir -p "$PKG/usr/share/applications"
install -m 644 "$CWD/ipscan.desktop" "$PKG/usr/share/applications/"

mkdir -p "$PKG/usr/share/icons/hicolor/64x64/apps"
install -m 644 "$CWD/ipscan.png" "$PKG/usr/share/icons/hicolor/64x64/apps/"

mkdir -p "$PKG/usr/doc/$PRGNAM-$VERSION"
cp -a LICENSE* COPYING* README* "$PKG/usr/doc/$PRGNAM-$VERSION" 2>/dev/null || true
cat "$CWD/$PRGNAM.SlackBuild" > "$PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild"

# Configure the description file and post-install script
mkdir -p "$PKG/install"
install -m 644 "$CWD/slack-desc" "$PKG/install/"

if [ -f "$CWD/doinst.sh" ]; then
  cat "$CWD/doinst.sh" > "$PKG/install/doinst.sh"
fi

chown -R root:root "$PKG"

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