slackbuilds/games/uqm/uqm.SlackBuild

201 lines
5.8 KiB
Bash

#!/bin/bash
# Slackware build script for uqm
# Written by B. Watson (urchlay@slackware.uk)
# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details.
# 20230107 bkw: BUILD=2, fix doinst.sh.
# 20210304 bkw: update for v0.8.0. script changed a good bit, can't
# build older versions. Note to self: don't mix engine and content
# versions without testing thoroughly! 0.7.0 engine seemed to work
# with 0.8.0 content, but crashed when trying to enter the setup menu!
# 20201025 bkw: update build for new content pack 0.8.0. This mostly
# has fixes for typos in the in-game text strings. The game engine
# hasn't changed, so VERSION now has both versions. Also, moved
# the binary to /usr/games where it belongs.
cd $(dirname $0) ; CWD=$(pwd)
PRGNAM=uqm
VERSION=${VERSION:-0.8.0}
BUILD=${BUILD:-2}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}
# Extract the tarball and content versions. If there's no + in
# VERSION, both these will end up equal to VERSION. Otherwise use a +
# to separate source and content versions (e.g. 0.7.0+0.8.0).
SRCVER=$( echo $VERSION | sed 's,+.*,,' )
CONTVER=$( echo $VERSION | sed 's,.*+,,' )
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
# Starting with 0.8.0, we have options to use SDL2 and
# OpenAL. Upstream made SDL2 the default, so we'll use it if
# available (autodetect). However, OpenAL is labelled 'experimental'
# and disabled by default, so we'll require OPENAL=yes to enable it
# (if present).
if pkg-config --exists sdl2; then
SDL2DEF=yes
else
SDL2DEF=no
fi
SDL2=${SDL2:-$SDL2DEF}
OPENGL=${OPENGL:-yes}
case "$SDL2-$OPENGL" in
yes-*) GFX=sdl2 ;; # SDL2 builds always support OpenGL
no-no) GFX=pure ;;
no-yes) GFX=opengl ;;
*) echo "*** Invalid SDL2 and/or OPENGL values, use only 'yes' or 'no'" 1>&2
exit 1 ;;
esac
case "${OPENAL:-no}" in
yes) SND=openal ;;
no) SND=mixsdl ;;
*) echo "*** Invalid OPENAL value $OPENAL, use only 'yes' or 'no'" 1>&2
exit 1 ;;
esac
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$SRCVER
tar xvf $CWD/$PRGNAM-$SRCVER-src.tgz
cd $PRGNAM-$SRCVER
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 {} \+
# Previously this script ran the interactive config, piping responses to it.
# This is a cleaner way to do it.
# WARNING: If you're updating this SlackBuild for a new version of
# uqm, check and make sure the config.state options haven't changed!
sed -e "s,@GFX@,$GFX," \
-e "s,@SND@,$SND," \
$CWD/config.state.in \
> config.state
# reprocess_config creates build.vars based on choices in config.state
sh build.sh uqm reprocess_config
# For the other options in config.state, we take the defaults.
# It'd be more efficient to require a system-wide libmikmod instead of
# using the included (statically linked) one, but it's not that big
# a library, and this way we don't have any external dependencies.
# Use our flags.
sed -i "s/-O3/$SLKCFLAGS/" build.vars
# Actually compile the thing.
sh build.sh uqm
# "sh build.sh uqm install" would install it, but it doesn't look like
# DESTDIR works (?). Manual install does.
# Real game binary lives in libexec.
mkdir -p $PKG/usr/libexec/$PRGNAM
install -s -m0755 -oroot -groot $PRGNAM $PKG/usr/libexec/$PRGNAM
# Shell script wrapper tells the real binary where to find the content.
mkdir -p $PKG/usr/games
install -oroot -groot -m0755 $PRGNAM-wrapper $PKG/usr/games/$PRGNAM
# Include (mostly) empty content and addons dirs in the package.
mkdir -p $PKG/usr/share/$PRGNAM/content/{addons,packages}
cp content/version $PKG/usr/share/$PRGNAM/content
# Install the uqm content. Without this the binary is not useful.
cat $CWD/$PRGNAM-$CONTVER-content.uqm > \
$PKG/usr/share/$PRGNAM/content/packages/$PRGNAM-$CONTVER-content.uqm
# Use upstream's man page (used to ship our own).
mkdir -p $PKG/usr/man/man6
gzip -9c doc/users/$PRGNAM.6 > $PKG/usr/man/man6/$PRGNAM.6.gz
# .desktop borrowed from Debian
mkdir -p $PKG/usr/share/applications
cat $CWD/$PRGNAM.desktop > $PKG/usr/share/applications/$PRGNAM.desktop
# icons converted from "src/res/darwin/The Ur-Quan Masters.icns",
# with icns2png.
for i in $CWD/icons/*.png; do
size="$( basename $i .png )"
dir="$PKG/usr/share/icons/hicolor/${size}x${size}/apps"
mkdir -p "$dir"
cat $i > $dir/$PRGNAM.png
done
# old-style icon
mkdir -p $PKG/usr/share/pixmaps
ln -s ../icons/hicolor/48x48/apps/$PRGNAM.png $PKG/usr/share/pixmaps/$PRGNAM.png
# dynamic slack-desc (for my own sanity!)
ldd $PKG/usr/libexec/$PRGNAM/$PRGNAM > ldd.out
if grep -q libSDL2 ldd.out; then
RENDER="SDL-2.0"
elif grep -q libGL ldd.out; then
RENDER="SDL-1.2 (OpenGL)"
else
RENDER="SDL-1.2 (software rendering)"
fi
if grep -q "libopenal" ldd.out; then
AUDIO="OpenAL"
else
AUDIO="SDL"
fi
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp $PRGNAM.lsm AUTHORS BUGS COPYING ChangeLog Contributing README WhatsNew \
doc/users/manual.txt $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
mkdir -p $PKG/install
sed -e "s,@CONTVER@,$CONTVER," \
-e "s,@RENDER@,$RENDER," \
-e "s,@AUDIO@,$AUDIO," \
$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