#!/bin/bash

# Slackware build script for evince-gtk2

# Originally written by Petar Petrov.
# Modified and now maintained by B. Watson <urchlay@slackware.uk>

# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details.

# 20250924 bkw, BUILD=3:
# - add a patch from MadMaverick9 to stop evince segfaulting on
#   exit when viewing "optimized/linearized" PDFs.
# - fix NLS --disable/--enable args.
# - explain why NLS=no is the default in README.

# 20240819 bkw, BUILD=2:
# - new maintainer.
# - relicense as WTFPL.
# - disable NLS by default, mention NLS=yes in the README.
# - enable DVI backend, since Slackware 15.0 has texlive.
# - remove mention of XPS from README, since this older version
#   of evince doesn't actually support it.
# - make comic book support (CBZ/CBR/CB7/CBT) actually *work*.

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

PRGNAM=evince-gtk2
SRCNAM=evince
VERSION=${VERSION:-2.32.0}
BUILD=${BUILD:-3}
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

NLS=${NLS:-no}

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

set -e

rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $SRCNAM-$VERSION
tar xvf $CWD/$SRCNAM-$VERSION.tar.bz2
cd $SRCNAM-$VERSION
chown -R root:root .
find -L .  -perm /111 -a \! -perm 755 -a -exec chmod 755 {} + -o \
        \! -perm /111 -a \! -perm 644 -a -exec chmod 644 {} +

# 20250924 bkw: MadMaverick9 from IRC sent me this patch.
# The 'linearized' struct member is declared as a string and assigned
# a boolean value (0 or 1). Then on exit, gfree(linearized) was being
# called, which didn't hurt anything when linearized was false (aka
# 0) due to the real free() having a NULL check. But calling it when
# true results in free(1), which it doesn't check for. Result: *Boom*,
# segfault!
# Linearized (aka 'optimized') PDFs have always been fairly rare, and
# were really only (mildly) useful on slow dialup lines. You could see
# the first page of the PDF before the rest was downloaded. Of course
# that's usually useless since it's generally just a cover or title page.
# It might be worth mentioning that mupdf just recently dropped support
# for linearized PDFs, too.
patch -p1 < $CWD/003-linearized.is.a.boolean.patch

NLSOPT="--enable-nls"
if [ "$NLS" != "yes" ]; then
  # disable NLS - we're going for a small package here.
  # 20240819 bkw: --disable-nls by itself *should* be enough, but this
  # stuff really is necessary.
  rm po/*.po
  sed -i -e 's/USE_NLS=yes/USE_NLS=no/g' \
         -e 's/ENABLE_NLS 1/ENABLE_NLS 0/g' \
         configure
  NLSOPT="--disable-nls"
fi

# 20240819 bkw: add the correct MIME types for CBZ/CBR/CB7/CBT to actually
# work. This patch might not be needed when Slackware 15.1/16.0 comes out,
# if shared-mime-info and friends detect e.g. a .cbr file as application/x-cbr
# instead of application/vnd.rar as 15.0's does.
patch -p1 < $CWD/comicbookfix.diff

CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
./configure \
  --prefix=/usr \
  --libdir=/usr/lib${LIBDIRSUFFIX} \
  --mandir=/usr/man \
  --sysconfdir=/etc \
  --localstatedir=/var \
  --mandir=/usr/man \
  --docdir=/usr/doc/$PRGNAM-$VERSION \
  --without-keyring \
  --without-gconf \
  --disable-dbus \
  --enable-pdf \
  --enable-tiff \
  --enable-djvu \
  --enable-t1lib \
  --enable-pixbuf \
  --enable-comics \
  --enable-impress \
  --disable-static \
  --disable-schemas-install \
  --disable-scrollkeeper \
  --disable-nautilus \
  --disable-introspection \
  --disable-maintainer-mode \
  $NLSOPT \
  --build=$ARCH-slackware-linux

make LDFLAGS=-lICE
make install-strip DESTDIR=$PKG
gzip -9 $PKG/usr/man/man*/*

rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la

# Fix desktop entry
sed -i "/NoDisplay=true/d" $PKG/usr/share/applications/evince.desktop

# Remove these
rm -rf $PKG/*.schemas
rm -rf $PKG/{usr/share/gtk-doc,etc}

PKGDOC=$PKG/usr/doc/$PRGNAM-$VERSION
mkdir -p $PKGDOC
cp -a AUTHORS COPYING NEWS README $PKGDOC
cat $CWD/$PRGNAM.SlackBuild > $PKGDOC/$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
