mirror of
https://github.com/Ponce/slackbuilds
synced 2024-11-29 13:00:32 +01:00
89c4e960be
Signed-off-by: bedlam <dave@slackbuilds.org> Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
172 lines
5.3 KiB
Bash
172 lines
5.3 KiB
Bash
#!/bin/bash
|
|
|
|
# Slackware build script for open-invaders
|
|
|
|
# Written by B. Watson (yalhcru@gmail.com)
|
|
|
|
# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details.
|
|
|
|
# This isn't really that great a game. The developer spent a lot
|
|
# of time on bling-ey graphics and sound, but it's missing some of
|
|
# the basic gameplay elements that made Space Invaders a classic:
|
|
# the enemies don't speed up during the level as you kill them,
|
|
# and there are no UFOs (at least, not on the first 7 levels; maybe
|
|
# later?). To be fair, the README says it's "still in development"
|
|
# and not finished (maybe the author planned to add that stuff later,
|
|
# but development stopped in 2007 or so).
|
|
|
|
# I patched the game a bit to make it less annoying to play (made the
|
|
# intro screens skippable).
|
|
|
|
# The part of VERSION after the _ is the Debian patchlevel. They've
|
|
# done a good bit of patching and bugfixing to keep this usable on a
|
|
# modern system.
|
|
|
|
cd $(dirname $0) ; CWD=$(pwd)
|
|
|
|
PRGNAM=open-invaders
|
|
VERSION=${VERSION:-0.3_8}
|
|
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
|
|
|
|
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
|
|
|
|
SRCVER="$( echo $VERSION | cut -d_ -f1 )"
|
|
DEBVER="$( echo $VERSION | cut -d_ -f2 )"
|
|
|
|
rm -rf $PKG
|
|
mkdir -p $TMP $PKG $OUTPUT
|
|
cd $TMP
|
|
rm -rf $PRGNAM-$SRCVER
|
|
tar xvf $CWD/$PRGNAM-$SRCVER.tar.gz
|
|
cd $PRGNAM-$SRCVER
|
|
tar xvf $CWD/${PRGNAM}_$SRCVER-$DEBVER.debian.tar.xz
|
|
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 {} \+
|
|
|
|
# Make the intro skippable by keypress or joystick button. The damn
|
|
# thing is like 10 seconds long. Also speed up the fadeout when
|
|
# you exit the game via the menu, so it ends when the "goodbye"
|
|
# sample is done playing.
|
|
patch -p1 < $CWD/skippable_intro.diff
|
|
|
|
# Exit with a meaningful error message, if HOME isn't set in the
|
|
# environment (instead of crashing with a C++ exception).
|
|
patch -p1 < $CWD/check_env_home.diff
|
|
|
|
# Apply all of debian's patches. Some fix build failures, some
|
|
# fix bugs in the game.
|
|
for i in $( cat debian/patches/series ); do
|
|
patch -p1 < debian/patches/$i
|
|
done
|
|
|
|
# From debian/rules:
|
|
sed -i 's/ALLEGRO_LINUX/ALLEGRO_UNIX/g' src/*.cc headers/*.h
|
|
sed -i -e 's/laldmd/laldmb/g' -e 's/ldumbd/ldumb/g' src/Makefile.*
|
|
|
|
# Fix for dumb-2.x API:
|
|
sed -i '/dumb_load_mod_quick/s|)|,0)|' src/{intro,init,ending}.cc
|
|
|
|
DOCDIR=/usr/doc/$PRGNAM-$VERSION
|
|
PKGDOC=$PKG/$DOCDIR
|
|
|
|
# The -Dnullptr=0 is a bit of a dirty hack. We use debian's
|
|
# gcc6.patch, which fixes "return false" in a function returning
|
|
# a pointer... but replaces 'false' with 'nullptr'. In our gcc 11,
|
|
# we need std=gnu++98 to get it to build, which means nullptr isn't
|
|
# defined. So define it. Not sure why C++11 needs yet another keyword
|
|
# that's just an alias for 0 (it already had NULL). This kind of
|
|
# stuff is why I never code in C++: it's a moving target, it has been
|
|
# since day 1, and the C++ standards gurus make sure it keeps moving
|
|
# perpetually.
|
|
|
|
# Need this for dumb.h on 32-bit, it does no harm on 64-bit. See
|
|
# /usr/include/dumb.h, lines 124-142.
|
|
SLKCFLAGS+=" -D_FILE_OFFSET_BITS=64"
|
|
|
|
CFLAGS="$SLKCFLAGS" \
|
|
CXXFLAGS="$SLKCFLAGS -std=gnu++98 -Dnullptr=0" \
|
|
./configure \
|
|
--bindir=/usr/games \
|
|
--datadir=/usr/share/games \
|
|
--prefix=/usr \
|
|
--libdir=/usr/lib${LIBDIRSUFFIX} \
|
|
--sysconfdir=/etc \
|
|
--localstatedir=/var \
|
|
--mandir=/usr/man \
|
|
--build=$ARCH-slackware-linux
|
|
|
|
make open_invadersdatadir=$PKG/usr/share/games/$PRGNAM
|
|
make install-strip \
|
|
open_invadersdatadir=/usr/share/games/$PRGNAM \
|
|
open_invadersdocdir=$DOCDIR \
|
|
DESTDIR=$PKG
|
|
|
|
# Debian ships a man page, but I like mine better.
|
|
mkdir -p $PKG/usr/man/man6
|
|
gzip -9c < $CWD/$PRGNAM.6 > $PKG/usr/man/man6/$PRGNAM.6.gz
|
|
|
|
# Icons made from ship.pcx (debian's icon is fugly, sorry).
|
|
for px in 48 64; do
|
|
size=${px}x${px}
|
|
dir=$PKG/usr/share/icons/hicolor/$size/apps
|
|
mkdir -p $dir
|
|
cat $CWD/$px.png > $dir/$PRGNAM.png
|
|
done
|
|
|
|
mkdir -p $PKG/usr/share/pixmaps
|
|
ln -s ../icons/hicolor/48x48/apps/$PRGNAM.png $PKG/usr/share/pixmaps/$PRGNAM.png
|
|
|
|
# Use debian's .desktop, but with full path to binary, and get
|
|
# rid of the -w argument (so the user can set fullscreen mode in
|
|
# the config, and it'll actually work).
|
|
mkdir -p $PKG/usr/share/applications
|
|
sed '/^Exec/s,=.*,=/usr/games/open-invaders,' debian/$PRGNAM.desktop > \
|
|
$PKG/usr/share/applications/$PRGNAM.desktop
|
|
|
|
# Docs already installed, get rid of useless ones and fix CRLFs.
|
|
# ChangeLog is 0 bytes, INSTALL is generic autotools cruft.
|
|
rm -f $PKGDOC/{ChangeLog,INSTALL}
|
|
sed -i 's,\r,,' $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
|