summaryrefslogtreecommitdiffstats
path: root/games/vbam/vbam.SlackBuild
blob: 975d4f5837a2e170e6b45cf5fe8400a654010965 (about) (plain) (blame)
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
232
233
234
235
236
237
238
239
240
241
#!/bin/bash

# Slackbuild for vbam

# Currently maintained by B. Watson <urchlay@slackware.uk>.
# Previously maintained by Dugan Chen <email removed>.
# Modified by the SlackBuilds.org project.
# Written by JK Wood <email removed>.

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

# 20240215 bkw: update for v2.1.9.
# 20231219 bkw: *finally* update, for v2.1.8.

# 20230714 bkw: no changes, just a note to myself: v2.1.6 won't build,
# and nothing in post-2.1.6 git helps. Visit again later.

# 20230107 bkw: update for v2.1.5.

# 20211117 bkw: note to self: there's been recent activity in
# upstream's git. If another 6-12 months goes by without a release,
# consider updating this for the latest git.

# 20211117 bkw: BUILD=2
# - fix build for -current and recent wxGTK3 update.
# - relicense as WTFPL with permission from JK Wood.
# - old-style icon symlink.
# - call executable with full path in .desktop.
# - add missing changelog/readme/todo to docdir.
# - get rid of FFMPEG option (it's always enabled now).
# - disable checking for updates (there haven't been any in
#   5 years anyway, and this is a bit of a privacy concern for
#   some users).
# - make wxGTK3 optional.
# - only include .desktop and doinst in package if wxGTK3 enabled.
# - make SFML optional. it's actually autodetected in v2.1.4,
#   so all this means is removing it from REQUIRES and adding
#   a note to README.
# - always build the SDL UI executable (/usr/games/vbam).
# - include vbam.ini.sample in docdir.

# 20191129 bkw: updated for 2.1.4.
# 20180702 bkw: updated for 2.1.0.
# 20180612 bkw: updated for 2.0.2.
# 20171219 bkw: updated for 2.0.1.
# 20170302 bkw: use long-format github URL

# 20170126 bkw:
# - New maintainer, remove old maintainers' email addresses.
# - Update for 2.0.0beta3. This adds SDL2 and SFML as deps.
#   Actually I could make SFML optional, it's only used for emulating
#   the GBA link cable. If anyone *really* wants to do this, add
#   -DENABLE_LINK=OFF to the cmake command. Not going to add it as
#   an option unless someone requests it.
# - Install binary in /usr/games, not /usr/bin.
# - Use correct wx-config, even if /usr/bin/wx-config symlink points
#   to 2.8 instead of 3.0.
# - Get rid of Windows-only doc.
# - Binary & source name has changed to visualboyadvance-m, keep the
#   old vbam name as symlinks.
# - Correct README, plus cosmetic reformatting.

cd $(dirname $0) ; CWD=$(pwd)

PRGNAM=vbam
VERSION=${VERSION:-2.1.9}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}

SRCVER="$VERSION"
SRCNAM="visualboyadvance-m"

if [ -z "$ARCH" ]; then
  case "$( uname -m )" in
    i?86) ARCH=i586 ;;
    arm*) ARCH=arm ;;
       *) ARCH=$( uname -m ) ;;
  esac
fi

if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
  echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
  exit 0
fi

TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}

if [ "$ARCH" = "i586" ]; then
  SLKCFLAGS="-O2 -march=i586 -mtune=i686"
  LIBDIRSUFFIX=""
  ASM=ON # x86 ASM optimizations are available.
elif [ "$ARCH" = "i686" ]; then
  SLKCFLAGS="-O2 -march=i686 -mtune=i686"
  LIBDIRSUFFIX=""
  ASM=ON
elif [ "$ARCH" = "x86_64" ]; then
  SLKCFLAGS="-O2 -fPIC"
  LIBDIRSUFFIX="64"
  ASM=OFF
else
  SLKCFLAGS="-O2"
  LIBDIRSUFFIX=""
  ASM=OFF
fi

set -e

rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $SRCNAM-$SRCVER
tar xvf $CWD/$SRCNAM-$SRCVER.tar.gz
cd $SRCNAM-$SRCVER
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 {} \+

# 20230107 bkw: doubleplusungood:
# sbrun: WARNING: files altered outside the sandbox:
# u /root/.gnupg/trustdb.gpg
# I don't know why it's doing this, but this will prevent it.
export CCACHE_DIR=${CCACHE_DIR:-$HOME/.ccache}
mkdir -p fakehome
export HOME=$( pwd )/fakehome

# if both wx(Python|GTK) 2 and 3 are installed, /usr/bin/wx-config
# is a symlink to the config for whichever was installed last. Avoid
# confusion, force the correct version.
# 20211117 bkw: willysr's wxGTK3 has switched from gtk2 to gtk3, so
# this line had to be adjusted slightly. With gtk2 this was failing
# to build on -current anyway...
WXCONF=${WXCONF:-/usr/lib$LIBDIRSUFFIX/wx/config/gtk3-unicode-3.0}

# 20211117 bkw: upstream doesn't autodetect wx, we have to explicitly
# set it to ON or OFF.
# 20220221 bkw: this had to be fixed again, it started failing when
# /usr/bin/wx-config was the wxPython one.
WXDEF="-DENABLE_WX=OFF"
if [ "${WX:-yes}" = "yes" -a -x "$WXCONF" ]; then
  WXDEF="-DENABLE_WX=ON"
  mkdir wxtmp
  ln -s $WXCONF wxtmp/wx-config
  export PATH=$(pwd)/wxtmp:$PATH
fi

# 20211117 bkw: lirc doesn't autodetect.
LIRCOPT=OFF
[ "${LIRC:-yes}" = "yes" ] && pkg-config --exists lirc && LIRCOPT=ON

# 20211117 bkw: no handy -Dwhatever to disable this, surgery required.
# At first glance it looks like -DENABLE_LINK=OFF would work, but it
# doesn't: it disables the GBA Link emulation, but the vbam binaries
# still get linked with the SFML shared libs. Derp.
[ "${SFML:-yes}" = "no" ] && sed -i '/^find_package(SFML/d' CMakeLists.txt

# upstream cleverly parses their own ChangeLog to get the version number
# that gets compiled into the binary. They un-cleverly failed to follow
# their own formatting rules for v2.0.2, meaning the 2.0.2 executable
# says 2.0.1 in its window title. So:
sed -i '/\[2\.0\.2\]/s,Bug fix release,-,' CHANGELOG.md

# 20211117 bkw: fix the SDL UI build.
sed -i 's,KMOD_META,KMOD_ALT,g' src/sdl/SDL.cpp

# 20211117 bkw: -fuse-ld=gold works, but doesn't speed things up much.

mkdir -p build
cd build
  cmake \
    -DENABLE_SDL=ON \
    "$WXDEF" \
    -DENABLE_LINK=$LINKOPT \
    -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
    -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
    -DCMAKE_INSTALL_PREFIX=/usr \
    -DENABLE_ASM_CORE=${ASM} \
    -DENABLE_ASM_SCALERS=${ASM} \
    -DENABLE_FFMPEG=ON \
    -DENABLE_ONLINEUPDATES=OFF \
    -DENABLE_LIRC=$LIRCOPT \
    -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=gold" \
    -DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=gold" \
    -DCMAKE_BUILD_TYPE=Release ..
  make VERBOSE=1
  sed -i \
      -e 's,/usr/share/man,/usr/man,g' \
      -e 's,/usr/bin,/usr/games,g' \
      cmake_install.cmake
  make install DESTDIR=$PKG
cd ..

# 20230107 bkw: this gets installed in the wrong place in 2.1.5.
[ -e $PKG/usr/bin/$SRCNAM ] && \
  mv $PKG/usr/bin/$SRCNAM $PKG/usr/games && \
  rmdir $PKG/usr/bin

strip $PKG/usr/games/*
gzip $PKG/usr/man/man6/*.6

mkdir -p $PKG/install

if [ -x $PKG/usr/games/$SRCNAM ]; then
  # in case someone's missing /usr/games from $PATH:
  sed -i 's,^Exec=,&/usr/games/,' $PKG/usr/share/applications/*desktop

  # old-style windowmanagers might need this:
  mkdir -p $PKG/usr/share/pixmaps

  ln -s ../icons/hicolor/48x48/apps/$SRCNAM.png $PKG/usr/share/pixmaps/$SRCNAM.png

  # only need the doinst.sh if the WX GUI was built.
  cat $CWD/doinst.sh > $PKG/install/doinst.sh
fi

PKGDOC=$PKG/usr/doc/$PRGNAM-$VERSION
mkdir -p $PKGDOC
# This config file gets installed, but never actually used by vbam...
mv $PKG/etc/$PRGNAM.cfg $PKGDOC/$PRGNAM.cfg.sample
rmdir $PKG/etc
rm -f doc/ReadMe.MFC.txt # this is for Windows only
cp -a *.md doc/* $PKGDOC
cat $CWD/$PRGNAM.SlackBuild > $PKGDOC/$PRGNAM.SlackBuild

# 20211117 bkw: actually look at what we just built, to see what's
# enabled (instead of trusting that everything got included correctly).
# It's better to use objdump than ldd here IMO.
SFYN=no; LIRCYN=no; WXYN=no
objdump -p $PKG/usr/games/$PRGNAM | grep -q 'NEEDED *libsfml' && SFYN=yes
strings $PKG/usr/games/$PRGNAM | grep -q lircrc && LIRCYN=yes
[ -x $PKG/usr/games/$SRCNAM ] && WXYN=yes

sed -e "s,@SFYN@,$SFYN," \
    -e "s,@LIRCYN@,$LIRCYN," \
    -e "s,@WXYN@,$WXYN," \
    $CWD/slack-desc > $PKG/install/slack-desc

cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE