summaryrefslogtreecommitdiff
path: root/games/snes9x/snes9x.SlackBuild
blob: c00c1ce2b38b7e0957a19672a9162022de0b834c (plain)
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
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
#!/bin/sh

# Slackware build script for snes9x

# Written by B. Watson (yalhcru@gmail.com)

# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details.

# 20181201 bkw:
# - update for 1.57.
# - disable OSS audio by default, add OSS=yes option.
# - autodetect RetroArch, add RETROARCH=yes|no option.
# - document the above in the README.
# - document PULSE=no io README.
# - stop including snes9x.conf.default in the docdir, since it's
#   outdated and will cause snes9x to segfault if you try to use it!
# - since we now have 3 build options, make slack-desc show them.
# - add patch from upstream to speed up linking the libretro core if
#   -jX is in MAKEFLAGS.
# - add patch fro upstream to stop segfaulting if the config file is
#   missing the ScanlineIntensity variable. Means I can finaly remove
#   the "you should delete your old config file" from the README.

# 20180730 bkw:
# - BUILD=2.
# - add libretro/RetroArch, thanks to orbea.
# - add --without-portaudio to configure args. snes9x runs about
#   1 frame/sec if I start it up with the sound driver set to portaudio,
#   and I've gotten a report of it blasting high-volume white noise
#   thru the speakers if you switch to portaudio while a ROM is already
#   running. I can't see any reason to use it in favor of pulse, alsa,
#   oss, or sdl audio.
# - don't extract windows, mac, old-school unix stuff from tarball.
#   uses 50% less $TMP space.

# 20180623 bkw: update for 1.56.2.
# 20180611 bkw:
# - update for 1.56.1.
# - switch the UI from gtk3 to gtk2, as 14.2's gtk3 is too old.
# - add undocumented PULSE=no build option (in anticipation of 15.0's
#   pure-alsa-system).
# - add SDL2 to REQUIRES. technically, it's not truly required: snes9x
#   only uses SDL2 to support joysticks. playing with the keyboard/mouse
#   would still work without it. 15.0 is coming soon, and will have SDL2
#   in the core OS, so don't bother me about this decision.
# - update README, the snes9x_gtk build went away in 2010, no need to
#   mention it now. also add notes about upgrading from 1.55.
# 20171221 bkw: use --without-system-zip to build bundled unzip, instead
#               of adding minizip as a dependency.
# 20171213 bkw: update for 1.55.
# 20170302 bkw: use long-format github URL
# 20161015 bkw: update for 1.54.1. script has changed enough that it
# can't build 1.53 any more.

PRGNAM=snes9x
VERSION=${VERSION:-1.57}
BUILD=${BUILD:-1}
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

rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
# Don't extract the stuff we don't need, this saves 7.9MB in $TMP.
tar xvf $CWD/$PRGNAM-$VERSION.tar.gz \
        --wildcards --exclude '*/win32/*' \
        --exclude '*/macosx/*' --exclude '*/unix/*'
cd $PRGNAM-$VERSION
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 {} \+

# Various patches, depending on the version we're building. Currently
# this script should work with 1.56.2 and 1.57. Anything older and you're
# on your own.

# For 1.56.2, libretro.diff fixes the libretro build, it's upstream's
# commits abb4b4c39 and a77b3b379b. Already included in 1.57.

# For 1.57 (and 1.56.2 I hope), fix_config_file_segfaults.diff is
# upstream's commit 5e9f068. libretro_lto_variable is 21d6275 (thanks
# to orbea for coding this one & sending it upstream, based on my vague
# idea). Future 1.57.x or 1.58 will include these already.

# At some point, this set of cases will be too complex for me to want to
# maintain & test it, and it'll go away (this script will only support
# the latest version, whatever that happens to be).

case "$VERSION" in
  1.5[0-5]*|1.[0-4]*) ;; # doubt these build anyway
  1.56.2) PATCHES="libretro" ;;
  1.57)   PATCHES="fix_config_file_segfaults libretro_lto_variable";;
  *)      ;;
esac

[ -n "$PATCHES" ] && for p in $PATCHES; do
  [ -e "$CWD/$p.diff" ] && patch -p1 < "$CWD/$p.diff"
done

cd gtk
./autogen.sh

WITHPULSE=yes
if [ "$PULSE" = "no" ] || ! pkg-config --exists libpulse; then
  PULSEOPT="--without-pulseaudio"
  WITHPULSE=no
fi

WITHOSS=yes
if [ "${OSS:-no}" = "no" ]; then
  OSSOPT="--without-oss"
  WITHOSS=no
fi

CFLAGS="-g $SLKCFLAGS" \
CXXFLAGS="-g $SLKCFLAGS" \
./configure \
  --prefix=/usr \
  --libdir=/usr/lib${LIBDIRSUFFIX} \
  --bindir=/usr/games \
  --sysconfdir=/etc \
  --localstatedir=/var \
  --with-netplay \
  --without-system-zip \
  --with-gtk2 \
  --without-gtk3 \
  --without-portaudio \
  $PULSEOPT \
  $OSSOPT \
  --build=$ARCH-slackware-linux

make
make install DESTDIR=$PKG

# RetroArch support, contributed by orbea (Hunter Sezen).
# Note that the source here is self-contained, there's no build-time
# dependency on RetroArch or libretro or such.
# snes9x_libretro-info originally came from:
# https://raw.githubusercontent.com/libretro/libretro-super/383f18fd7c36ffd5fe76ebac58e9e596dde67e66/dist/info/snes9x_libretro.info
# Renamed .info => -info to avoid confusing SBo tools that deal with
# SBo's .info files.
# 20181201 bkw: made this optional, auto-detected, and controllable
# via environment. It makes the build take 7x as long, no point wasting
# time building it if it's not wanted/needed.

case "$RETROARCH" in
  yes) build_ra=yes ;;
  no)  build_ra=no ;;
  *)   if [ -x /usr/share/games/retroarch ]; then
         build_ra=yes
       else
         build_ra=no
       fi ;;
esac

if [ "$build_ra" = "yes" ]; then
  echo "=== Building libretro core"
  ( LIBNAM=${PRGNAM}_libretro
    cd ../libretro
    make LTO="-flto=jobserver"
    install -sDm0755 $LIBNAM.so $PKG/usr/lib${LIBDIRSUFFIX}/libretro/$LIBNAM.so
    install -Dm0644 $CWD/$LIBNAM-info \
      $PKG/usr/lib${LIBDIRSUFFIX}/libretro/info/$LIBNAM.info
  )
else
  echo "=== NOT building libretro core"
fi

mkdir -p $PKG/usr/man/man6
gzip -9c $CWD/snes9x-gtk.6 > $PKG/usr/man/man6/snes9x-gtk.6.gz
ln -s $PRGNAM-gtk.6.gz $PKG/usr/man/man6/$PRGNAM.6.gz
ln -s $PRGNAM-gtk $PKG/usr/games/$PRGNAM

PKGDOC=$PKG/usr/doc/$PRGNAM-$VERSION
OLDDOC=$PKGDOC/${PRGNAM}_original_docs
mkdir -p $OLDDOC
rm -f ../docs/snes9x.conf.default # outdated, useless
cp -a doc/* $PKGDOC
cp -a ../docs/* $OLDDOC
cat $CWD/README_docs.txt > $PKGDOC/README_docs.txt
cat $CWD/$PRGNAM.SlackBuild > $PKGDOC/$PRGNAM.SlackBuild

# We don't need 3 copies of the LGPL v2.1 (we already have the GPL
# and proprietary snes9x licenses...)
cd $PKGDOC
  rm -f snes_ntsc_license.txt ${PRGNAM}_original_docs/lgpl-2.1.txt
  ln -s lgpl.txt snes_ntsc_license.txt
  ln -s ../lgpl.txt ${PRGNAM}_original_docs/lgpl-2.1.txt
cd -

cat data/$PRGNAM.desktop > $PKG/usr/share/applications/$PRGNAM.desktop

mkdir -p $PKG/install
sed -e "s,@WITHPULSE@,$WITHPULSE," \
    -e "s,@WITHOSS@,$WITHOSS," \
    -e "s,@build_ra@,$build_ra," \
    < $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}