slackbuilds_ponce/games/ufoai/ufoai.SlackBuild
B. Watson 5eb6ce46c5
games/ufoai: Fix -current build.
Signed-off-by: B. Watson <yalhcru@gmail.com>

Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
2021-10-29 17:07:15 +07:00

241 lines
7.3 KiB
Bash

#!/bin/bash
# Slackware build script for ufoai
# Written by Joze Zobec <email removed>
# Now maintained by B. Watson <yalhcru@gmail.com>
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# 20211017 bkw: BUILD=3
# - fix build on -current again:
# - disable building with BFD.
# - -std=c++11
# - new-style icons.
# - make .desktop files validate.
# - get rid of useless 'memory' binary.
# - document missing optional dep, gtkglext.
# - patches from Debian that (hopefully) prevent segfaults.
# - make the game default to running in a window, as there are
# issues with fullscreen on -current with (at least) intel video.
# - disable uforadiant by default, it segfaults on startup and
# I haven't figured out why yet.
# - slack-desc reflects builds options (sdl 1/2, uforadiant).
# 20170706 bkw: fix build on -current
# 20151126 bkw:
# - fix build on systems that have SDL2 but not SDL2_ttf
# - add SDL2 environment variable
# - move binaries to /usr/games
# 20140826 bkw:
# - took over maintenance
# - update for 2.5
# - get rid of --enable-profiling, all it seems to do is leave a
# gmon.out file in the dir where the game was run
# - allow disabling sse with environment variable
# - allow building the radiant editor. I have no idea if it's working
# correctly, since I have no idea how to use it.
cd $(dirname $0) ; CWD=$(pwd)
PRGNAM=ufoai
VERSION=${VERSION:-2.5}
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
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
# If gtksourceview and gtkglext are installed and RADIANT=yes, build
# the uforadiant editor.
radiant="--disable-uforadiant"
[ "${RADIANT:-no}" = "yes" ] && \
pkg-config --exists gtksourceview-2.0 && \
pkg-config --exists gtkglext-1.0 && \
radiant="--enable-uforadiant"
if [ "${SSE:-yes}" = "no" ]; then
sseopt="--disable-sse"
else
sseopt="--enable-sse"
fi
set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xvf $CWD/$PRGNAM-$VERSION-source.tar.bz2
mv $PRGNAM-$VERSION-source $PRGNAM-$VERSION
cd $PRGNAM-$VERSION
tar xvf $CWD/$PRGNAM-$VERSION-data.tar
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 {} \+
# 20170706 bkw: fix build with gcc7
echo 'CXXFLAGS += -Wno-narrowing' >> build/flags.mk
# 20211017 bkw: apply patches from Debian's build 6.
for i in $( cat $CWD/patches/series ); do
patch -p1 < $CWD/patches/$i
done
# 20211017 bkw: change the default from fullscreen to windowed. This
# is helpful because on my hardware, at least, the game crashes when
# it tries to to fullscreen... and takes the whole X server with it.
# This is just the default; users can switch to fullscreen from
# within the game if they want.
sed -i '/"vid_fullscreen"/s,"1","0",' src/client/cl_video.cpp
# 20211017 bkw: bfd gratuitous API changes. This disables bfd, which
# means the game can't print a backtrace if it crashes. Since we
# install the binaries stripped, the backtrace wouldn't have been
# all that useful anyway.
sed -i '/check_header.*bfd\.h/d' configure
# 20211017 bkw: it ignores environment CXXFLAGS, and we need this, so:
echo 'CXXFLAGS += -std=c++11' >> build/flags.mk
# 20211017 bkw: leave this here, but default to yes.
[ "${SDL2:-yes}" = "no" ] && EXTRAOPT="--disable-sdl2"
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
./configure \
--prefix=/usr \
--libdir=/usr/lib$LIBDIRSUFFIX \
--datadir=/usr/share/games/$PRGNAM \
--enable-release \
$sseopt \
--disable-memory \
--disable-testall \
--enable-ufo \
--enable-ufoded \
--enable-ufoslicer \
$EXTRAOPT \
$radiant
# Normally it's "make V=1" for verbose build, but here it's different.
make Q=''
make lang
# We get "make: nothing to be done for..." for these 2.
# make maps
# make pk3
# Manual install: first the data...
mkdir -p $PKG/usr/share/games/$PRGNAM $PKG/usr/games
cp -a base $PKG/usr/share/games/$PRGNAM/
# ...then the binaries
if [ -x radiant/uforadiant ]; then
cp -a radiant $PKG/usr/share/games/$PRGNAM/
rm -f $PKG/usr/share/games/$PRGNAM/radiant/uforadiant
BINARIES="radiant/uforadiant"
fi
BINARIES="$BINARIES ufo ufoded ufo2map ufomodel ufoslicer"
install -s -m0755 $BINARIES $PKG/usr/games/
# 20211017 bkw: make the .desktop files validate
sed -i -e 's,Application;,,' \
-e '/^Encoding/d' \
-e '/^Icon/s,\.xpm,,' \
debian/*.desktop
sed -i '/^StartupNotify=false/d' debian/uforadiant.desktop
# .desktop files, old-style icons
mkdir -p $PKG/usr/share/applications $PKG/usr/share/pixmaps $PKG/usr/man/man6
install -m 0644 debian/*.desktop $PKG/usr/share/applications/
install -m 0644 debian/*.xpm $PKG/usr/share/pixmaps/
# man pages taken from more recent debian (ufoai_2.5-6.debian.tar.xz) and
# modified for this SlackBuild. For one thing, I made them all section 6.
install -m 0644 $CWD/man/*.6 $PKG/usr/man/man6/
gzip $PKG/usr/man/man6/*.6
ln -s ufo.6.gz $PKG/usr/man/man6/$PRGNAM.6.gz
# new-style icons, created by mkicons.sh, q.v.
for i in $CWD/icons/*; do
app="$( basename $i )"
if [ -e $PKG/usr/games/$app ]; then
for png in $CWD/icons/$app/*.png; do
px="$( basename "$png" .png )"
size=${px}x${px}
dir=$PKG/usr/share/icons/hicolor/$size/apps
mkdir -p $dir
cat $png > $dir/$app.png
done
fi
done
# Get rid of uforadiant stuff if we don't have uforadiant
if [ -x radiant/uforadiant ]; then
INCLUDES="includes"
# This looks like it doesn't belong
rm -f $PKG/usr/share/games/$PRGNAM/radiant/prefabs/pipes.map
else
INCLUDES="does NOT include"
rm $PKG/usr/share/applications/uforadiant.desktop \
$PKG/usr/man/man6/uforadiant.6.gz \
$PKG/usr/share/pixmaps/uforadiant.xpm
fi
SDLVER="1.2"
ldd $PKG/usr/games/ufo | grep -q SDL2 && SDLVER="2.0"
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a LICENSES README COPYING $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
mkdir -p $PKG/install
sed -e "s,@INCLUDES@,$INCLUDES," \
-e "s,@SDLVER@,$SDLVER," \
$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