slackbuilds_ponce/games/mame/mame.SlackBuild
2015-11-14 07:07:23 +07:00

175 lines
5.9 KiB
Bash

#!/bin/sh
# Slackware build script for mame
# Written by B. Watson (yalhcru@gmail.com)
# Adapted from Erik W. Hanson's mame.SlackBuild for older mame versions,
# which was originally adapted from sdlmame.SlackBuild by B. Watson.
# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details.
# 20151112 bkw:
# - Updated for v0.167, after missing several releases (sorry!)
# - Get rid of MESS and UME options, mame has basically turned
# into UME at this point (includes old mame + mess in one binary)
# - Use shipped man pages from the source, instead of our own
# - Add new tools: castool floptool imgtool nlwav
# - Use icon extracted from mame.ico in the source
# - Update .ini file slightly (sound=sdl, not sound=1)
PRGNAM=mame
VERSION=${VERSION:-0.167}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) ARCH=i486 ;;
arm*) ARCH=arm ;;
*) ARCH=$( uname -m ) ;;
esac
fi
CWD=$(pwd)
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-${PRGNAM}
OUTPUT=${OUTPUT:-/tmp}
# NB nonstandard flags here. Upstream defaults to -O3, so we'll leave
# that as-is. Only the arch-specific stuff goes here.
if [ "$ARCH" = "i486" ]; then
SLKCFLAGS="-march=i486 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS=""
LIBDIRSUFFIX=""
fi
SHORTNAME=${PRGNAM}${VERSION/./}
DIRNAME=$PRGNAM-$SHORTNAME
set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $DIRNAME
tar xvf $CWD/$DIRNAME.tar.gz || tar xvf $CWD/$SHORTNAME.tar.gz
cd $DIRNAME
chown -R root:root .
# This isn't standard template code, but it executes maybe a hundred
# times as fast, and does the same thing.
find -L . \
\( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
-o -perm 511 \) -print0 | \
xargs -0 chmod 755
find -L . \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -print0 | \
xargs -0 chmod 644
# OK, building modern mame is a bit of a PITA. It uses genie (written
# in lua, a fork of premake), but you don't get to run genie directly,
# you got a main makefile that builds lua, then builds genie, then runs
# genie with arguments based on the options in the main makefile. Also,
# it uses python to convert XML layout files to C++ code.
# Where possible, use system libraries instead of building the ones
# bundled with the mame source. However, SBo's lua and Slackware's
# sqlite3 are too old for mame.
#USE_SYSTEM_LIB_SQLITE3=1 USE_SYSTEM_LIB_LUA=1 \
# Not going to USE_SYSTEM_LIB_PORTAUDIO or USE_SYSTEM_LIB_PORTMIDI,
# the bundled versions are fine and I don't want a mile-long dependency
# tree. Using an external portmidi dep would make mame require Oracle's
# JDK! In case you're wondering, only the C code in the bundled portmidi
# is built (no Java needed).
# The OVERRIDE_CC and OVERRIDE_CXX are there because mame's build ignores
# $PATH when searching for gcc/g++, and won't find my ccache symlinks in
# /usr/local/bin. On a normal (non-ccache-using) system, these options
# do nothing (they use the compilers in /usr/bin, which is the default
# anyway) and you can forget about them. (Mini-rant: PATH has been a
# standard mechanism on both Unix and DOS/Windows systems for what,
# 30 or 40 years now? Come on people...)
# This is purely cosmetic, and can't be set on the make command line.
sed -i 's,ubuntu-intrepid,slackware,g' scripts/genie.lua
sed -i 's/DISTRO := generic/DISTRO := slackware/' makefile
# SDL_INI_PATH needs to contain a $ character. I haven't figured out
# how (or even if) I can pass this through multiple layers of make
# calling genie which calls make again, so screw it:
sed -i 's,\.;ini,/etc,' src/osd/sdl/sdlmain.c
# Tried several variants of this, none work, ended up using sed:
#SDL_INI_PATH='$$HOME/.mame;/etc' \
# Having ARCH set in the env will break the build, hence ARCH=""
make USE_SYSTEM_LIB_EXPAT=1 \
USE_SYSTEM_LIB_ZLIB=1 \
USE_SYSTEM_LIB_JPEG=1 \
USE_SYSTEM_LIB_FLAC=1 \
OPT_FLAGS="$SLKCFLAGS" \
OVERRIDE_CC="$( which gcc )" \
OVERRIDE_CXX="$( which g++ )" \
ARCH="" \
VERBOSE=1 \
NOWERROR=1 \
TOOLS=1 \
TARGET=$PRGNAM \
SUBTARGET=$PRGNAM
# No 'make install' target, do it manually.
mkdir -p $PKG/usr/games $PKG/etc $PKG/usr/man/man6 \
$PKG/usr/share/applications $PKG/usr/share/pixmaps
# Deal with upstream's executable-naming silliness.
[ -e ${PRGNAM}64 ] && mv ${PRGNAM}64 $PRGNAM
[ -e ${PRGNAM}32 ] && mv ${PRGNAM}32 $PRGNAM
install -s -m0755 -oroot -groot $PRGNAM $PKG/usr/games/$PRGNAM
# .desktop borrowed from Ludovic Lechapt's Debian package.
# Icon extracted from src/mame/osd/windows/mame/mame.ico with icotool.
gzip -9c < src/osd/sdl/man/$PRGNAM.6 > $PKG/usr/man/man6/$PRGNAM.6.gz
cat $CWD/desktop/$PRGNAM.desktop > $PKG/usr/share/applications/$PRGNAM.desktop
cat $CWD/desktop/$PRGNAM.png > $PKG/usr/share/pixmaps/$PRGNAM.png
cat $CWD/$PRGNAM.ini > $PKG/etc/$PRGNAM.ini.new
# Install the tools:
install -s -m0755 -oroot -groot \
castool floptool imgtool nlwav \
testkeys romcmp jedutil unidasm ldresample ldverify \
regrep srcclean src2html chdman nltool pngcmp split \
$PKG/usr/games/
# Upstream uses section 1 for their utilities' man pages, we want 6.
for i in src/osd/sdl/man/*.1; do
sed '/^\.TH/s,\<1\>,6,' $i | \
gzip -9c > $PKG/usr/man/man6/$( basename $i .1 ).6.gz
done
# Create empty dirs for the user to populate with ROMs and such.
for i in roms samples artwork ctrlr font cheat; do
mkdir -p $PKG/usr/share/games/mame/$i
done
mkdir -p $PKG/usr/doc/${PRGNAM}-$VERSION
cp docs/* $PKG/usr/doc/${PRGNAM}-$VERSION
cat $CWD/${PRGNAM}.SlackBuild > $PKG/usr/doc/${PRGNAM}-$VERSION/${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:-tgz}