summaryrefslogtreecommitdiffstats
path: root/games/frotz/frotz.SlackBuild
blob: 52fc0d334aa2bac794c686810a4320aa44255944 (plain)
#!/bin/sh
#
# Slackware build script for frotz

# Originally written for Slackware 12.2 by Beej Jorgensen <email
# removed>, heavily modified by B. Watson <yalhcru@gmail.com> since
# then.

# Original had no license. This modified version is released under the
# WTFPL. See http://www.wtfpl.net/txt/copying/ for details.

# 20210215 bkw: fix building without libmodplug. BUILD=2.

# 20201212 bkw: too many changes, can't build older versions.
# - updated for v2.52.
# - new homepage.
# - include sfrotz if sdl2 and SDL2_mixer are installed.
# - fix man page typos.
# - patch to prevent sfrotz crashes with long pathnames.
# - add desktop stuff.

# 20150904 bkw: updated for frotz 2.44.

# 20121216 bkw:
# - updated for Slackware 14 and frotz 2.43d.
# - include dumb terminal frotz in build.

PRGNAM=frotz
VERSION=${VERSION:-2.52}
BUILD=${BUILD:-2}
TAG=${TAG:-_SBo}

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

CWD=$(pwd)
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}

# no need for LIBDIRSUFFIX, frotz doesn't use /usr/lib
if [ "$ARCH" = "i586" ]; then
  SLKCFLAGS="-O2 -march=i586 -mtune=i686"
elif [ "$ARCH" = "i686" ]; then
  SLKCFLAGS="-O2 -march=i686 -mtune=i686"
elif [ "$ARCH" = "x86_64" ]; then
  SLKCFLAGS="-O2 -fPIC"
else
  SLKCFLAGS="-O2"
fi

set -e

rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xvf $CWD/$PRGNAM-$VERSION.tar.?z*
cd $PRGNAM-$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 {} \+

# Fix typos:
sed -i "s/\\(Unlike it\\)'s/\1s/" doc/dfrotz.6
sed -i 's,forground,foreground,'  doc/frotz.6
sed -i -e 's,invocatio$,&n.,' \
       -e 's,intead,instead,' \
       -e 's,chunck,chunk,' \
          doc/sfrotz.6

# Document location of config file:
sed -i 's,frotz\.conf,/etc/&,' doc/$PRGNAM.6

# sfrotz aborts with a "malloc(): memory corruption" error when given
# a long pathname on the command line. Example:

# $ sfrotz "/export/home/urchlay/interactive_fiction/infocom_collection/The Hitchhikers Guide To The Galaxy (1985)/The Hitchhiker's Guide To The Galaxy R31-871119.z5"

# With a somewhat shorter pathname, the program might not abort, but
# it will end up with gibberish at the end of f_setup.script_name,
# which would prevent it from auto-loading scripts (if present).

# I don't fully understand why, but the new_basename() and
# new_dirname() fuctions in sf_util.c are the culprits. They look OK
# to me, but getting rid of the calls to free() causes the aborts to
# go away. Since each function gets called only once (at startup),
# this doesn't constitute a memory leak worth worrying about.

patch -p1 < $CWD/sfrotz.memcorrupt.diff

run_make() {
  make \
    PREFIX=/usr \
    SYSCONFDIR=/etc \
    MANDIR=/usr/man \
    MAN_PREFIX=/usr \
    BINDIR=/usr/games \
    DESTDIR=$PKG \
    $1
}

# No autodetection for libmodplug or SDL2_mixer, help it out.
maintarg="nosound"
pkg-config --exists libmodplug && maintarg="$PRGNAM"
pkg-config --exists sdl2 SDL2_mixer && extra="clean sdl install_sdl"

sed -i "s,-O3.*,$SLKCFLAGS," Makefile
for target in $maintarg install clean dumb install_dumb $extra; do
  run_make $target
done

strip $PKG/usr/games/*
gzip -9 $PKG/usr/man/man?/*.*

# desktop files by SlackBuild author. The icons came from WinFrotz. They're
# only available in 32x32 size, sorry.
mkdir -p $PKG/usr/share/applications \
         $PKG/usr/share/pixmaps \
         $PKG/usr/share/icons/hicolor/32x32/apps
install -m0644 -oroot -groot $CWD/*.desktop $PKG/usr/share/applications
cat $CWD/$PRGNAM.png > $PKG/usr/share/pixmaps/$PRGNAM.png
ln -s ../../../../pixmaps/$PRGNAM.png \
      $PKG/usr/share/icons/hicolor/32x32/apps/$PRGNAM.png
mkdir -p $PKG/usr/share/icons/hicolor/32x32/mimetypes
cat $CWD/frotz-infocom.png > \
    $PKG/usr/share/icons/hicolor/32x32/mimetypes/frotz-infocom.png

# MIME stuff for desktops. Causes KDE and XFCE to display story
# files with an Infocom icon, and they double-click open with either
# terminal or SDL frotz.
mkdir -p $PKG/usr/share/mime/packages
cat $CWD/$PRGNAM.xml > $PKG/usr/share/mime/packages/$PRGNAM.xml

mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
rm -f README.1st # don't need this in the package.
cp -a AUTHORS CO* ChangeLog DUMB HOW_TO_PLAY README* TODO *.lsm \
      doc/$PRGNAM.conf* doc/$PRGNAM.txt \
      $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
cat $CWD/doinst.sh > $PKG/install/doinst.sh

cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}