#!/bin/bash

# Slackware build script for XnConvert

# 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=xnconvert-bin
VERSION=${VERSION:-1.106.0}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}

ARCH=x86_64

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

if [ "$ARCH" != "x86_64" ]; then
  echo "$PRGNAM is only available for x86_64."
  exit 1
fi

SRCNAM=XnConvert

rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf ${SRCNAM}
tar xvf $CWD/${SRCNAM}-${VERSION}-linux-x64.tgz
cd ${SRCNAM}
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 {} \;

# Install files
mkdir -p $PKG/opt/${SRCNAM}
cp -a * $PKG/opt/${SRCNAM}/

chmod 0755 $PKG/opt/${SRCNAM}/${SRCNAM}

find $PKG/opt/${SRCNAM} -name "*.so*" -exec chmod 0755 {} \;

# Create missing SONAME symlinks
for libdir in $PKG/opt/${SRCNAM}/lib $PKG/opt/${SRCNAM}/Plugins; do
  [ -d "$libdir" ] || continue
  (
    cd $libdir
    for lib in *.so; do
      [ -f "$lib" ] || continue
      soname=$(objdump -p "$lib" 2>/dev/null | awk '/SONAME/{print $2}')
      if [ -n "$soname" ] && [ "$soname" != "$lib" ] && [ ! -e "$soname" ]; then
        ln -sf "$lib" "$soname"
      fi
    done
  )
done

# Wrapper script (Qt XCB fix included)
mkdir -p $PKG/usr/bin
cat > $PKG/usr/bin/xnconvert << 'EOF'
#!/bin/sh

export LD_LIBRARY_PATH=/opt/XnConvert/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}

# Qt XCB platform plugin fix
export QT_QPA_PLATFORM=xcb
export QT_QPA_PLATFORM_PLUGIN_PATH=/opt/XnConvert/lib/platforms

exec /opt/XnConvert/XnConvert "$@"
EOF
chmod 0755 $PKG/usr/bin/xnconvert

# Desktop entry
mkdir -p $PKG/usr/share/applications
cat > $PKG/usr/share/applications/xnconvert.desktop << 'EOF'
[Desktop Entry]
Name=XnConvert
GenericName=Batch Image Converter
GenericName[es]=Convertidor de imágenes por lotes
Comment=Batch image converter and resizer
Comment[es]=Convertidor y redimensionador de imágenes por lotes
Exec=xnconvert %F
Icon=xnconvert
Terminal=false
Type=Application
Categories=Graphics;2DGraphics;RasterGraphics;
MimeType=image/bmp;image/gif;image/jpeg;image/png;image/tiff;image/webp;
StartupNotify=true
EOF

# Icon
mkdir -p $PKG/usr/share/pixmaps
cp $PKG/opt/${SRCNAM}/xnconvert.png $PKG/usr/share/pixmaps/xnconvert.png

# Docs
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
for doc in README LICENSE COPYING ChangeLog changelog; do
  [ -f "$doc" ] && cp -a "$doc" $PKG/usr/doc/$PRGNAM-$VERSION/
done
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild

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
