1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
|
#!/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}
|