summaryrefslogtreecommitdiffstats
path: root/games/zsnes/zsnes.SlackBuild
blob: 40508e9927d182bcca2429e16f8848b01e37be9e (plain)
#!/bin/bash

# Slackware build script for zsnes

# Written by B. Watson (urchlay@slackware.uk)

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

# Note: this is a completely new-from-template znes.SlackBuild,
# written from scratch, for the "LTS" 2.x fork from xyproto. It shares
# no code with the old zsnes.SlackBuild for the 1.51 release.

# TODO: build a static 32-bit binary for x86_64 users. Can't be done
# on Slackware (we don't have static X11, SDL, png16, nor GL libs),
# but maybe it could be done on some other distro (one that uses musl,
# maybe), then hosted as a DOWNLOAD_X86_64.

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

PRGNAM=zsnes
VERSION=${VERSION:-2.0.12}
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

# No SLKCFLAGS here. Upstream's got a set of flags they've tested with,
# and most of the code's in asm anyway.
case "$ARCH" in
  i?86)               ;;
  x86_64) MULTI=yes   ;;
  *)      BADARCH=yes ;;
esac

# Hang on to this for use in error message, below.
OLDARCH="$ARCH"

# Always uses MMX extensions so i686 is correct.
# PRINT_PACKAGE_NAME and the actual package name will always say i686.
ARCH="i686"

if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
  echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
  exit 0
fi

if [ "$MULTI" = "yes" ]; then
  echo "=== Attempting multilib build on $OLDARCH..."
  CTEST=$TMP/`mcookie`.c
  echo 'main(){}' > $CTEST
  if ! gcc -w -m32 -o /dev/null $CTEST 2>/dev/null; then
    echo "*** You don't have multilib installed, bailing."
    exit 1
  fi
  echo "=== Multilib gcc is installed..."
  rm -f $CTEST
fi

if [ "$BADARCH" = "yes" ]; then
  echo "*** Sorry, $PRGNAM can't be built on $OLDARCH." ; exit 1
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 /111 -a \! -perm 755 -a -exec chmod 755 {} + -o \
        \! -perm /111 -a \! -perm 644 -a -exec chmod 644 {} +

# Patch does these things:
# - Install binary to /usr/games
# - Fix install permissions for icon, .desktop, metainfo (no +x).
# - Install man page to /usr/man (not /usr/share/man)
# - Change the section in the man page to 6, install in man6.
# - Use the github URL in the man page, not zsnes.com.
# - Use full path to binary in .desktop file.
# I wanted to build a static binary, but Slackware doesn't ship a
# full set of static libs, plus glibc's getpwnam() and getpwuid()
# are used (which use dlopen() to load a shared lib at runtime).
patch -p1 < $CWD/sbo.diff

# Build options.
# Disabling WITH_AO doesn't seem particularly useful, but allow it.
# Disabling WITH_DEBUGGER might make sense for slow systems.
A=no ; D=no
[ "${AO:-yes}"       = "yes" ] && ARGS+="WITH_AO=yes "       && A=yes
[ "${DEBUGGER:-yes}" = "yes" ] && ARGS+="WITH_DEBUGGER=yes " && D=yes
echo "::: running: make $ARGS"

make $ARGS
make install DESTDIR=$PKG
gzip -9 $PKG/usr/man/man*/*

PKGDOC=$PKG/usr/doc/$PRGNAM-$VERSION
mkdir -p $PKGDOC
cp -a COPYING* README* TODO* $PKGDOC
cat $CWD/$PRGNAM.SlackBuild > $PKGDOC/$PRGNAM.SlackBuild

mkdir -p $PKG/install
sed -e "s,@A@,$A," -e "s,@D@,$D," < $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