summaryrefslogtreecommitdiffstats
path: root/system/vice/vice.SlackBuild
blob: 38aa08d8c5a8a7e4020b0f8932e486c741593842 (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
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
#!/bin/bash

# Slackware build script for vice

# Copyright 2008 Mauro Giachero (email removed)
# Copyright 2020, 2021, 2022, 2023 B. Watson (urchlay@slackware.uk)

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

# 20240213 bkw: update for v3.8.
# - had to add --disable-parsid to the configure command. it was breaking
#   the build. also, do you really have a SID chip connected to your
#   parallel port? (do you even *have* a parallel port?)... if so, either
#   send me a patch, or wait until upstream does another release.
# - LAME is no longer supported, remove --enable-lame.
# - add --enable-catweasel.

# 20230504 bkw: BUILD=2.
# - fix vice.texi so the GNU info file gets generated.
# - remove old ./configure arguments and fix a couple of wrong ones.
#   thanks to Franzen for sending a patch to fix this.
# - changed -Wl,--allow-multiple-definition to -fcommon, which does
#   basically the same thing but matches how other builds do it.
# - fix doinst.sh silliness.
# - add douninst.sh, to clean up /usr/info/dir after the package is removed.

# 20221228 bkw: update for v3.7.1.

# 20221129 bkw: update for v3.6.1.
# - can't build our own HTML or plaintext docs from vice.texi.
# - include upstream's HTML docs in package.

# 20210809 bkw: update for v3.5, many changes, can't build old versions.
# - Relicense as WTFPL, with permission from the original author.
# - Build & install the actual HTML docs (not the bundled copy of
#   the upstream website).
# - Don't install fonts. They were part of the above.
# - Use upstream's .desktop files instead of our own.
# - Upstream removed the man pages; restore them (for now).
# - Build the gtk+3 UI. Also build the SDL2 UI, unless the user's
#   requested the SDL1 one (or disabled SDL).
# - Really fix the paths in the documentation.
# - ffmpeg now included in Slackware (pre-15.0 -current). Still
#   autodetected, but the docs no longer mention it.
# - Get rid of README_SBo.txt as the build options are simpler
#   and "fit" in the regular README now.

# 20200801 bkw:
# - Take over maintenance
# - Autodetect ffmpeg
# - Allow building with SDL 1.x
# - Allow building without pulseaudio
# - Get rid of xa dep
# - Install TTF fonts in correct place, get rid of other formats
# - install-info in doinst.sh so vice.info shows up in the info dir
# - Have slack-desc show build options
# - Re-enable the old x64 emulator
# - BUILD=3

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

PRGNAM=vice
VERSION=${VERSION:-3.8}
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 [ ! -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=""
elif [ "$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 -pipe"
  LIBDIRSUFFIX="64"
else
  SLKCFLAGS="-O2"
  LIBDIRSUFFIX=""
fi

set -e

# ffmpeg is included in the base OS on post-14.2 -current, but leave
# this here in case someone's doing something clever.
[ -x /usr/bin/ffmpeg ] && ffmpeg="--enable-ffmpeg"

# Anticipating 15.0's pure-alsa-system
# 20240214 bkw: which sadly never materialized. I keep this here for
# my own use, anyway.
if [ "${PULSE:-yes}" != "yes" ]; then
  pulseopt="--without-pulse"
fi

echo "=== pulseopt='$pulseopt'"

rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION

tar xvf $CWD/$PRGNAM-$VERSION.tar.gz

cd $PRGNAM-$VERSION
chown -R root:root .
chmod 644 doc/html/fonts/OFL.txt # this file shouldn't be +x
find -L .  -perm /111 -a \! -perm 755 -a -exec chmod 755 {} \+ -o \
        \! -perm /111 -a \! -perm 644 -a -exec chmod 644 {} \+

# Fix some mildly broken constructs in vice.texi, so we can generate
# the vice.info doc.
patch -p1 < $CWD/fix_texi.diff

DOCDIR=/usr/doc/$PRGNAM-$VERSION
PKGDOC=$PKG/$DOCDIR

# setting TEXMFVAR prevents writing to /root, which SlackBuilds
# really shouldn't do.
export TEXMFVAR=$( pwd )/.texmf-var

# Set proper paths in documentation.
rm -rf doc/vice.pdf # will be rebuilt, along with the HTML doc.
sed -i -e "s/\/usr\/local/\/usr/g" \
       -e "s,/lib/vice/,/share/vice/,Ig" \
     doc/vice.texi
autoreconf -vif

# We build up to 3 times with slightly different ./configure args,
# so make it a function.
config() {
  local configarg="$1"

  # Avoid the need for xa. It's only used to generate a small C header
  # file, which we include a prebuilt version of here. There's nothing
  # dynamic about this header, it's just a small chunk of 6502 object
  # code as a C array, and for a given version of vice it'll always be
  # the same code. It didn't change between vice 3.4 and 3.5, either.
  cat $CWD/psiddrv.h.prebuilt.3.4 > src/c64/psiddrv.h

  # 20210809 bkw: in 3.5, upstream added dos2unix as a required dep,
  # but it's *only used* if you run "make dist" or "make dist-gzip",
  # which we don't do. DOS2UNIX=/bin/true bypasses the autodetection.
  # XDG_DESKTOP_MENU=/bin/true prevents installing .desktop files,
  # because those don't respect $DESTDIR. We can't just disable them
  # with a configure argument, because that stops them being built
  # at all.

  # 20230504 bkw: note to self: -w means disable all warnings.
  CFLAGS="$SLKCFLAGS -w -fcommon" \
  CXXFLAGS="$SLKCFLAGS" \
  DOS2UNIX=/bin/true \
  XA=/bin/true \
  XDG_DESKTOP_MENU=/bin/true \
  ./configure \
    $configarg \
    $ffmpeg \
    $pulseopt \
    --enable-html-docs \
    --enable-platformdox \
    --enable-x64 \
    --enable-x64-image \
    --prefix=/usr \
    --libdir=/usr/lib${LIBDIRSUFFIX} \
    --sysconfdir=/etc \
    --localstatedir=/var \
    --mandir=/usr/man \
    --infodir=/usr/info \
    --docdir=$DOCDIR \
    --enable-ethernet \
    --disable-parsid \
    --enable-cpuhistory \
    --with-mpg123 \
    --with-flac \
    --with-vorbis \
    --with-gif \
    --with-png \
    --enable-midi \
    --enable-catweasel \
    --build=$ARCH-slackware-linux

  make
}

# SDL UI: *Only* build/install the binaries (not the docs or ROMs),
# rename them to <whatever>-sdl2 (or -sdl1).
buildsdl() {
  local exesuf="-sdl$1"
  local configarg="--disable-pdf-docs --enable-sdl${1}ui"

  config "$configarg"
  make -C src install-binPROGRAMS \
              DESTDIR="$PKG" \
              EXEEXT="$exesuf" \
              INSTALL_PROGRAM="install -s -m0755"

  # get rid of the non-graphical tools (the gtk3 build will
  # install them again without -$exesuf).
  rm -f $PKG/usr/bin/[cp]*$exesuf

  make distclean
}

# Build the SDL binaries, unless disabled.
# Be generous in what we accept for SDL in the env. "both" isn't
# mentioned in README, it's probably only useful to me.
case "${SDL:-2}" in
  ""|2*|y*|Y*|t*|T*) buildsdl 2 ;;
  1*)                buildsdl 1 ;;
  both)              buildsdl 1 ; buildsdl 2 ;;
  n*|N*|f*|F*|0*)    ;; # NOP
  *) cat <<EOF

***
$0: invalid value for SDL environment variable.
Allowed values: "1", "2", "no", "both", or empty/unset (same as "2").
***
EOF
     exit 1 ;;
esac

# Now build & install the whole project with the gtk3 UI.
config "--enable-gtk3ui --enable-desktop-files"
make
make install-strip DESTDIR=$PKG

# 20240214 bkw: in 3.8, 'make install' no longer installs any of
# the docs. Do it manually. Leave out building/ (we don't need to
# care about building on fedora, windows, mac OS).
mkdir -p $PKGDOC
cp -a doc/*.txt $PKGDOC

# Install desktop files manually.
mkdir -p $PKG/usr/share/desktop-directories \
         $PKG/usr/share/applications
install -m0644 src/arch/gtk3/data/unix/vice*desktop \
        $PKG/usr/share/applications
install -m0644 src/arch/gtk3/data/unix/vice*directory \
        $PKG/usr/share/desktop-directories

# Documentation. vice.pdf has already been installed to the doc dir.
# Generate info, plaintext, and HTML versions here. The text doc is
# harder to navigate, but easier to grep, so it's worth having IMO.
# 20221130 bkw: vice.texi no longer works with makeinfo, as of
# vice-3.6.1. Not sure whether this is because we have an
# outdated texinfo package in Slackware 15.0, or because upstream
# broke some kind of rule... regardless, it's disabled for now.
# 20230504 bkw: Patched vice.texi, so this is now enabled by default.
if [ "${MAKEINFO:-yes}" = "yes" ]; then
	makeinfo doc/$PRGNAM.texi
	mkdir -p $PKG/usr/info
	mv $PRGNAM.info* $PKG/usr/info
	gzip -9 $PKG/usr/info/*

	makeinfo --plaintext doc/$PRGNAM.texi > $PKGDOC/$PRGNAM.txt
fi

# 20221130 bkw: HTML docs do get built, but never installed.
mkdir -p $PKGDOC/html
cp -a doc/html/{NEWS,COPYING,fonts/,images/,*.{html,css,ico}} $PKGDOC/html
ln -s html/NEWS $PKGDOC/NEWS
ln -s html/COPYING $PKGDOC/COPYING

# 20210810 bkw: as of 3.5, upstream dropped the man pages. I'm
# including the man pages from 3.4 in the 3.5 package. Edited them
# slightly to add correct paths to the HTML and PDF docs, also
# convert the iso-8859-1 characters into troff escapes. Also
# added (and expanded) vsid.1 from Debian.
mkdir -p $PKG/usr/man/man1
for i in $CWD/man/*.?; do
  sed -e "s,@HTMLDOC@,$DOCDIR/html/index.html," \
      -e "s,@PDFDOC@,$DOCDIR/$PRGNAM.pdf," \
      < $i > $PKG/usr/man/man1/$( basename $i )
done
gzip -9 $PKG/usr/man/man?/*.?
for i in x64 x64sc xscpu64 x64dtv x128 xvic xpet xplus4 xcbm2 xcbm5x0; do
  ln -s vice.1.gz $PKG/usr/man/man1/$i.1.gz
done

cp -a NEWS README $PKGDOC
cat $CWD/$PRGNAM.SlackBuild > $PKGDOC/$PRGNAM.SlackBuild

# Make the slack-desc reflect the build options.
PA=no
if [ "$SDL" = "both" ]; then
  SDL="1.2 and 2.0"
else
  SDL=no
  [ -x $PKG/usr/bin/x128-sdl1 ] && SDL=1.2
  [ -x $PKG/usr/bin/x128-sdl2 ] && SDL=2.0
fi
grep -q '^#define USE_PULSE\>' src/config.h && PA=yes

mkdir -p $PKG/install
sed -e "s,@PA@,$PA,"   \
    -e "s,@SDL@,$SDL," \
  $CWD/slack-desc > $PKG/install/slack-desc
cat $CWD/doinst.sh > $PKG/install/doinst.sh
cat $CWD/douninst.sh > $PKG/install/douninst.sh

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