#!/bin/sh # Slackware build script for jfsw # Written by B. Watson (yalhcru@gmail.com) # Updated for Slackware 14.2 with the help of orbea # Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details. # 20180710 bkw: BUILD=2 # - updated for 20180424_8fc2d54 (latest git). # - finally fix long-standing segfault bug. # - document new optional deps in README. # - make slack-desc show runtime library deps. # - remove freepats from REQUIRES. I've never been able to get # jfsw to play music using them anyway. # - expand the section on the full-version sw.grp, move to # separate README_game_data.txt. Found out about Wanton Destruction, # it's now documented there too. # - add README_music.txt, explaining how to get the music working. # turned out to be quite a lengthy project... # - expand README a bit, mention gog.com free download. # - allow fluidsynth builds to work even if fluidsynth built with JACK. # - add SDL2=no and FLUID=no build options. # When updating to the latest commit of jfsw, we gotta make sure we # get the correct commits of the other 3 sources (jfaudiolib, jfbuild, # jfmact). To do this: # git clone https://github.com/jonof/jfsw.git jfsw.tmp # cd jfsw.tmp # git submodule init # git submodule update # Fortunately only the .info file needs to be updated. This script # parses it instead of having the commit hashes hardcoded here too. # VERSION is duplicated as usual, but here it only serves to name the # package (you could build just fine with any VERSION so long as the # .info file is correct). PRGNAM=jfsw VERSION=${VERSION:-20180424_8fc2d54} 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} 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 # We got 4 source tarballs to extract, so create an enclosing $PRGNAM # dir to put them all in (for ease of cleanup, if nothing else). When # we're ready to build, the source will all be in $TMP/$PRGNAM/$PRGNAM. rm -rf $PKG rm -rf $TMP/$PRGNAM mkdir -p $TMP/$PRGNAM $PKG $OUTPUT cd $TMP/$PRGNAM # 20180710 bkw: this is an unusual thing for a SlackBuild to do: # parse its own .info file. Done this way to avoid duplicating # all those full-length git hashes in both files. if [ ! -e "$CWD/$PRGNAM.info" ]; then echo "$PRGNAM.info not found, where did it go?" 1>&2 exit 1 fi # For paranoia's sake, don't actually source the entire .info file, just # grab the DOWNLOAD= assignment. This rather cryptic sed command means # "start printing lines when you hit one that starts with DOWNLOAD, # and exit when you hit one that ends with gz and a double-quote # (plus possible trailing whitespace)". Result is the multi-line DOWNLOAD # assigment only. DLFRAG="$( mktemp ./tmp.info.XXXXXX )" sed -n '/^DOWNLOAD/,$p;/gz" *$/q' < "$CWD/$PRGNAM.info" > $DLFRAG source $DLFRAG for URL in $DOWNLOAD; do SRCNAM="$( basename "$URL" .tar.gz )" PNAM=$(echo $SRCNAM | sed -e 's/-.*//') [ "$PNAM" = "$PRGNAM" ] || DIRS="$TMP/$PRGNAM/$PNAM $DIRS" rm -rf $SRCNAM $PNAM tar xvf $CWD/$SRCNAM.tar.gz mv $SRCNAM $PNAM done cd $PRGNAM mv $DIRS . chown -R root:root . find -L . \ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ -o -perm 511 \) -exec chmod 755 {} \+ -o \ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ # 20180711 bkw: how to trigger a known segfault: # make a save game, load that save game, die while holding the # fire button # I came up with a band-aid to work around the segfault. Stops the # fire button from working the same as a Y keypress (or at all), in Y/N # prompts. Patch was sent upstream: https://github.com/jonof/jfsw/issues/14 patch -p1 < $CWD/patches/fixsegfault.diff # 20180712 bkw: one liner attempt to get SDL (1.2 only) CD-audio support # working. It turns out there's something worse wrong, I can't even get # the example code from libsdl.org to play a CD (it'll list the tracks, # but SDL_CDPlayTracks() doesn't work, the drive won't even spin up). # Since this is SDL 1.2, not 2.x, any attempt to ask for help from an # SDL developer or expert is going to be answered with "port your code to # SDL 2.x!", so I'm just documenting CD support in jfsw as being broken. #patch -p1 < $CWD/patches/sdl_cdrom_fix.diff # 20180712 bkw: if fluidsynth happens to have been built with optional # JACK support, it'll be the default driver and jfsw will try to use it. # This doesn't actually work, so: patch -p1 < $CWD/patches/dont_use_jack.diff # 20180712 bkw: we have sdl.pc (not sdl1.pc) for SDL 1.2.x: patch -p1 < $CWD/patches/sdl1_fix.diff # 20180712 bkw: upstream doesn't provide a way to override autodetection # of SDL2 and fluidsynth, so I do it with a couple of patches: [ "${SDL2:-yes}" = "no" ] && patch -p1 < $CWD/patches/disable_sdl2.diff [ "${FLUID:-yes}" = "no" ] && patch -p1 < $CWD/patches/disable_fluid.diff # 20180711 bkw: The -Wno-return-type isn't needed for gcc but does no # harm. Left in place in case someone wants to build this with clang # (add a CC=clang arg to the make command, or 'export CC=clang'). # 20180711 bkw: JFAUDIOLIB_USE_SDLMIXER=1 doesn't work (build fail due # to missing driver_sdlmixer.c). Maybe someday it'll work and then we # hear the demo music without having to install fluidsynth? # 20200416 bkw: fluidsynth 2.x works OK, but the version check in the # source doesn't like its version number. sed -i '/^#error.*Fluid/d' jfaudiolib/src/driver_fluidsynth.c # 20200428 bkw: add Twin Dragon td.grp to the list of supported GRP # files. Need this for the jfsw_twin_dragon build. patch -p1 < $CWD/twin_dragon_grp.diff make \ RELEASE=1 \ PREFIX=/usr/share/games/$PRGNAM \ CFLAGS="$SLKCFLAGS -Wno-return-type" \ CXXFLAGS="$SLKCFLAGS" # Document what the binary package needs in its slack-desc. BIN_NAME=sw SDLVER=1.2 WITHFLUID=without ldd $BIN_NAME | grep -q libSDL2 && SDLVER=2.0 ldd $BIN_NAME | grep -q libfluidsynth && WITHFLUID=with # no 'make install' target mkdir -p $PKG/usr/games install -s -m0755 -oroot -groot $BIN_NAME $PKG/usr/games ln -s $BIN_NAME $PKG/usr/games/$PRGNAM # Data directory included in package, even though we don't include data file. # Why? Because the user might be grabbing sw.grp from a retail CD-ROM, and # if this dir doesn't exist, he might get confused... mkdir -p $PKG/usr/share/games/$PRGNAM # Icon taken from the highres pack, highres/screen/menu/2870.png mkdir -p $PKG/usr/share/pixmaps cat $CWD/$PRGNAM.png > $PKG/usr/share/pixmaps/$PRGNAM.png mkdir -p $PKG/usr/share/applications cat $CWD/$PRGNAM.desktop > $PKG/usr/share/applications/$PRGNAM.desktop mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION cp -a GNU.TXT readme.txt releasenotes.html $PKG/usr/doc/$PRGNAM-$VERSION cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild cat $CWD/README > $PKG/usr/doc/$PRGNAM-$VERSION/README_SBo.txt mkdir -p $PKG/install sed -e "s,@WITHFLUID@,$WITHFLUID," \ -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:-tgz}