aboutsummaryrefslogtreecommitdiff
path: root/games/hatari/hatari.SlackBuild
blob: ce871cc0d62a60262da8e174c2eaec7d3c9cce00 (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
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
#!/bin/bash

# Slackware build script for hatari

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

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

# 20210102 bkw: update for v2.3.1.
# 20201218 bkw:
# - update for v2.3.0. Can't build older versions, sorry.
# - add new dep, python3.
# - really fix the man pages.

# 20200426 bkw:
# - BUILD=2
# - Include support for IPF and CTR images (copy-protected images),
#   with new optional dep libcapsimage.
# - Switch to cmake instead of using fake autotools.
# - Add missing chown/find/chmod after tarball extraction.
# - Doubleplusungood refs unfiles in man pages.
# - Install a couple more doc files in doc dir.
# - Patch hatariui to have it create a default user config file if
#   if can't find one, rather than dying.
# - Install utf-8 French man page in correct dir, also convert & install
#   a 8859-1 one.
# - Nitpick README and slack-desc.
# - Make cmake find readline, for history/completion in the debugger.

# 20191130 bkw: updated for v2.2.1.

# 20180612 bkw: updated for v2.1.0.

# 20170307 bkw:
# - BUILD=2
# - add missing mkdir -p $TMP $PKG $OUTPUT (wtf did I do?!)
# - binaries in /usr/games, not /usr/bin.
# - man pages in section 6, not 1.
# - install missing doc/fr/clavier-exemple.txt.
# - previously SDL2 was optional and undocumented, add SDL2=no option
#   and document in README.
# - stop spamming icon symlinks to /usr (they belong in $PKG/usr of course)
# - update mime and desktop stuff. upstream started including a mime XML
#   package, but it's missing some of the stuff from my hatari.xml. The
#   new hatari.xml incorporates upstream's new stuff.

# 20170122 bkw: updated for v2.0.0.

# 20160730 bkw:
# - updated for v1.9.0.
# - install some missing docs, including the French man page.
# - get rid of empty & useless /etc/hatari/ in package. strace
#   shows that hatari never even looks there for a conf file,
#   it looks for /etc/hatari.cfg (which we don't ship).

# 20141029 bkw: add missing : in VERSION BUILD TAG assignments

# 20140825 bkw:
# - updated for v1.8.0
# - install docs/manpages to right places, instead of moving after the fact
# - get rid of the need for a symlink /usr/doc/hatari
# - only symlink emutos.img -> tos.img if no link already exists, so
#   reinstalling the package won't reset the default ROM.
# - add mime type and auto-associate ST disk images and executables.

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

PRGNAM=hatari
VERSION=${VERSION:-2.3.1}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}

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

# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
# the name of the created package would be, and then exit. This information
# could be useful to other scripts.
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}

# Note: the -O2 here gets overridden by a -O3 that comes later on the
# command line. Upstream tests with -O3 so it should be fine.
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 $TMP/$PRGNAM-$VERSION
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
tar xvf $CWD/$PRGNAM-$VERSION.tar.bz2
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 {} \+

# hatariui will fail to start if there's no ~/.config/hatari/hatari.cfg.
# hatari's got a --saveconfig option that creates a default hatari.cfg,
# so let's have hatariui use that instead of failing.
patch -p1 < $CWD/hatariui-create-cfg-if-missing.diff

# Man pages go in section 6, fix .TH and see-also refs. Also fix a few
# typos and formatting issues.
P="$CWD/manpage.$VERSION.diff"
[ -e "$P" ] || P="$CWD/manpage.diff"
patch -p1 < $P

# cmake doesn't support anything like --bindir, --mandir, --docdir. cheat
# a little.
sed -i \
  -e 's,BINDIR *bin,BINDIR games,' \
  -e 's,share/man/man1,man/man6,' \
  -e "s,share/doc/$PRGNAM,doc/$PRGNAM-$VERSION," \
  CMakeLists.txt

# Hard-code the doc path in the UI (we don't use /usr/share/doc/hatari)
sed -i \
  -e "/path *= *path *+/s,=.*,= \"/usr/doc/$PRGNAM-$VERSION/\"," \
  python-ui/uihelpers.py

# see if we're building with SDL2 or not.
if pkg-config --exists sdl2 && [ "${SDL2:-yes}" != "no" ]; then
  SDL2OPT=""
  WITHSDL=2.0
else
  SDL2OPT="-DENABLE_SDL2:BOOL=0"
  WITHSDL=1.2
fi

# stoopid overcomplex SHOUTY cmake stuff...
sed -i 's/ncurses\.h/&;readline.h/' cmake/FindReadline.cmake

# and libcapsimage 5.1 doesn't support a couple of typedefs that
# existed in 4.2.
# 20201218 bkw: the source says '#include <caps/CapsLibAll.h>' but
# we need <caps5/CapsLibAll.h>.
sed -i \
    -e '1i#include <stdint.h>' \
    -e 's,CapsLong,int32_t,g' \
    -e 's,CapsULong,uint32_t,g' \
    -e '/#include/s,caps/,caps5/,' \
  src/floppy_ipf.c

# 20200427 bkw: upstream actually runs cmake directly in the source
# dir rather than the "mkdir build; cd build; cmake .." stuff from
# our template. I'm going to do it their way.
# 20201218 bkw: I really should not have to tell cmake to look in
# /usr/include for the libcapsimage headers, that is *the systemwide
# default location* for includes, and has been since the 1970s. Grr.
cmake \
  -DCAPSIMAGE_INCLUDE_DIR=/usr/include \
  -DCMAKE_VERBOSE_MAKEFILE=TRUE \
  $SDL2OPT \
  -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
  -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
  -DCMAKE_INSTALL_PREFIX=/usr \
  -DLIB_SUFFIX=${LIBDIRSUFFIX} \
  -DMAN_INSTALL_DIR=/usr/man \
  -DCMAKE_BUILD_TYPE=Release .

# Hard-coded paths for icon symlinks, they end up getting created in the
# real /usr, not $PKG/usr.
sed -i 's,\(^\t*\)\(/usr/share\),\1'$PKG'\2,' share/cmake_install.cmake

make
make install/strip DESTDIR=$PKG

# man pages are in the right dir, but with .1
rename .1. .6. $PKG/usr/man/man6/*.1.gz

DOCDIR=$PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $DOCDIR/$PRGNAM.SlackBuild

# These docs don't get installed for some reason:
cp tools/hmsa/readme-hmsa.txt readme.txt gpl.txt \
   doc/changelog.txt doc/coding.txt doc/toc.js \
   doc/video-recording.txt doc/fr/clavier-exemple.txt \
   doc/de/*.txt \
   $DOCDIR

# The UI has its own docs. These are actually used by the UI, so they
# must be available in /usr/share/hatari (hence the symlinks).
UIDOCDIR=$DOCDIR/${PRGNAM}ui
mkdir -p $UIDOCDIR
for i in README TODO release-notes.txt; do
  ln -s ../../../share/$PRGNAM/${PRGNAM}ui/$i $UIDOCDIR/$i
done

# Someone might find the French man page useful. It's in utf-8, so
# put it in the right dir.
mkdir -p $PKG/usr/man/fr.UTF-8/man6 $PKG/usr/man/fr/man6
gzip -9c < doc/fr/$PRGNAM.1 > $PKG/usr/man/fr.UTF-8/man6/$PRGNAM.6.gz
# For non-UTF-8 users:
iconv --to ISO-8859-1 doc/fr/$PRGNAM.1 | \
  gzip -9c > $PKG/usr/man/fr/man6/$PRGNAM.6.gz

# Replace .desktop with modified one, auto-associates ST disks/executables.
cat $CWD/${PRGNAM}ui.desktop > $PKG/usr/share/applications/${PRGNAM}ui.desktop

# Custom MIME types for ST disk images and executables. Based on hatari.xml
# from upstream, with x-st-executable type added by script author.
mkdir -p $PKG/usr/share/mime/packages
cat $CWD/$PRGNAM.xml > $PKG/usr/share/mime/packages/$PRGNAM.xml

for i in $PKG/usr/share/icons/hicolor/[0-9]*; do
  ln -s application-x-st-disk-image.png $i/mimetypes/x-st-executable.png
done

ln -s application-x-st-disk-image.svg \
      $PKG/usr/share/icons/hicolor/scalable/mimetypes/x-st-executable.png

# Don't symlink emutos to tos here, do it conditionally in doinst.sh.
( cd $PKG/usr/share/$PRGNAM && mv tos.img emutos.img )

WITHLCAPS=without
ldd $PKG/usr/games/$PRGNAM | grep -q libcapsimage && WITHLCAPS=with

mkdir -p $PKG/install
sed -e "s,@WITHSDL@,$WITHSDL," \
    -e "s,@WITHLCAPS@,$WITHLCAPS," \
	 $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