summaryrefslogtreecommitdiffstats
path: root/games/zsnes/zsnes.SlackBuild
diff options
context:
space:
mode:
Diffstat (limited to 'games/zsnes/zsnes.SlackBuild')
-rw-r--r--games/zsnes/zsnes.SlackBuild202
1 files changed, 89 insertions, 113 deletions
diff --git a/games/zsnes/zsnes.SlackBuild b/games/zsnes/zsnes.SlackBuild
index 17bd115979..40508e9927 100644
--- a/games/zsnes/zsnes.SlackBuild
+++ b/games/zsnes/zsnes.SlackBuild
@@ -1,38 +1,27 @@
-#!/bin/sh
+#!/bin/bash
# Slackware build script for zsnes
-# Copyright (c) 2008, Antonio Hernández Blas <email removed>
-# Copyright (c) 2010, 2012, Carlos Corbacho <email removed>
-# Copyright (c) 2018, B. Watson <yalhcru@gmail.com>
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are met:
-# 1.- Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# 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.
-
-# 20180123 bkw: Finally, 64-bit support! Sort-of. Using a dirty hack.
-# Also, move binary to /usr/games and man page to section 6.
+# 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:-1.51b}
-BUILD=${BUILD:-4}
+VERSION=${VERSION:-2.0.12}
+BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
-
-ZSNESSRC="$(echo $VERSION | tr -d .)src"
-ZSNESDIR="_$(echo $VERSION | tr . _)"
+PKGTYPE=${PKGTYPE:-tgz}
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
@@ -42,103 +31,90 @@ if [ -z "$ARCH" ]; then
esac
fi
-CWD=$(pwd)
+# 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}
-if [ "$ARCH" = "i586" ]; then
- SLKCFLAGS="-O2 -march=i586 -mtune=i686"
-elif [ "$ARCH" = "i686" ]; then
- SLKCFLAGS="-O2 -march=i686 -mtune=i686"
-elif [ "$ARCH" = "x86_64" ]; then
- echo "=== $ARCH detected, using statified binary"
-else
- printf "\n Error: $PRGNAM won't compile on $ARCH\n\n"
- exit 1
-fi
-
set -e
rm -rf $PKG
-mkdir -p $TMP $PKG/usr $OUTPUT
+mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
-tar xvf $CWD/$PRGNAM$ZSNESSRC.tar.bz2
-# Fix the directory tree in zsnes:
-mv $PRGNAM$ZSNESDIR $PRGNAM-$VERSION
-mv $PRGNAM-$VERSION/src/* $PRGNAM-$VERSION
+tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
cd $PRGNAM-$VERSION
-
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 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
- -exec chmod 644 {} \;
-
-if [ "$ARCH" = "x86_64" ]; then
- # Can't compile, so use a statified binary. This was prepared
- # by compiling zsnes with the same configure flags as below,
- # plus --disable-opengl, then converting with:
- # $ statifier \
- # --set=LD_PRELOAD=/usr/lib/libudev.so:/usr/lib/libaoss.so:/usr/lib/libasound.so \
- # zsnes zsnes.static
- # Unfortunately this won't work with OpenGL because the shared libs
- # are driver-specific: I could preload the nvidia driver, but the
- # result would only work on systems that use nvidia (not AMD or intel,
- # or even nouveau).
- mkdir -p $PKG/usr/games $PKG/usr/doc/$PRGNAM-$VERSION $PKG/usr/man/man1
- xz -d < $CWD/$PRGNAM.static.xz > $PKG/usr/games/$PRGNAM
- chmod 755 $PKG/usr/games/$PRGNAM
-
- # Docs and man page still come from the source.
- cp -a docs/* $PKG/usr/doc/$PRGNAM-$VERSION
- cp -a linux/$PRGNAM.1 $PKG/usr/man/man1
-else
- # GCC 4.7 fixes from Debian
- cat $CWD/0012-Fix-build-with-gcc-4.7.patch | patch -p2 --verbose
-
- # Fix for libpng16 (thanks to Arch Linux)
- # https://projects.archlinux.org/svntogit/community.git/plain/trunk/zsnes-1.51-libpng15.patch?h=packages/zsnes
- patch -p1 < $CWD/zsnes-1.51-libpng15.patch
-
- CFLAGS="$SLKCFLAGS" \
- CXXFLAGS="$SLKCFLAGS" \
- force_arch="$ARCH" \
- ./configure \
- --prefix=/usr \
- --enable-release \
- --disable-cpucheck \
- --disable-debugger
-
- CFLAGS="$SLKCFLAGS" \
- CXXFLAGS="$SLKCFLAGS" \
- force_arch="$ARCH" \
- make
- make install DESTDIR=$PKG
- mv $PKG/usr/bin $PKG/usr/games # configure ignores --bindir, grr!
- strip $PKG/usr/games/$PRGNAM
-fi
-
-# Man page belongs in section 6, since this is a game.
-mkdir -p $PKG/usr/man/man6
-sed '/^\.TH/s,1$,6,' $PKG/usr/man/man1/$PRGNAM.1 | \
- gzip -9c > $PKG/usr/man/man6/$PRGNAM.6.gz
-rm -rf $PKG/usr/man/man1
-
-# Add a .desktop file and icon for good menu integration
-mkdir -p $PKG/usr/share/applications $PKG/usr/share/pixmaps
-install -m 0644 $CWD/zsnes.desktop $PKG/usr/share/applications/zsnes.desktop
-install -m 0644 $CWD/zsnes.png $PKG/usr/share/pixmaps/zsnes.png
-
-mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
-cp -a docs/* $PKG/usr/doc/$PRGNAM-$VERSION
-cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
+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
-cat $CWD/slack-desc > $PKG/install/slack-desc
+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:-tgz}
+/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE