aboutsummaryrefslogtreecommitdiff
path: root/development/z88dk/z88dk.SlackBuild
blob: 2636a2c2675411f62ce5b4c4c186e292019bcbbb (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
#!/bin/bash

# Slackware build script for z88dk

# Written by B. Watson (urchlay@slackware.uk)

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

# TODO: someday include the zsdcc stuff. Probably sometime after z88dk's
# 2.0 release. If no 2.0 release exists by, say, the start of 2019, I'll
# probably change this build so it works with a git snapshot instead
# of a release. I'll admit, my motivation for that will be that I want
# to have a C compiler that targets Pac-Man arcade hardware (the 1.99B
# release doesn't, current git does).
# 20210907 bkw: the above TODO still stands, but I don't have time to do
# it right now (gearing up for 15.0 release).
# 20230114 bkw: I don't have time to deal with it right now, but
# z88dk-2.2 looks promising. Unfortunately I'll have to spend a week
# writing SlackBuilds for the 50 or so perl modules it requires, and I
# don't have a week right now.

# 20230114 bkw: BUILD=2
# - do not ship pre-compiled binaries in the doc dir
# - do not ship the windows installer

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

PRGNAM=z88dk
VERSION=${VERSION:-1.99B}
BUILD=${BUILD:-2}
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" = "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
unzip $CWD/$PRGNAM-src-$VERSION.zip
cd $PRGNAM

# Upstream permissions are bad. Please don't replace with "find . -L
# ..." boilerplate.
find . -name CVS -print0 | xargs -0 rm -rf
find . -type f   -print0 | xargs -0 chmod 0644
find . -type d   -print0 | xargs -0 chmod 0755
chmod +x *.sh

# Sneaky ways to inject CFLAGS.
SLKCFLAGS+=" -fcommon"
sed -i "s/CC=gcc/CC='gcc $SLKCFLAGS'/" build.sh
export CXX="g++ $SLKCFLAGS"

# Default prefix.
sed -i "s,/usr/local,/usr," Makefile

# Upstream seems to be in the middle of migrating from /usr/lib to
# /usr/share or vice versa. The compiler looks for stuff in lib that's
# actually installed to share, if I don't do this:
sed -i '/^prefix_share/s,/share,/lib,' Makefile

# Note to well-intentioned maintainers: please don't try to move
# this stuff to /usr/lib64 on 64-bit systems. There's no native code
# (no ELF executables, no shared or static libraries full of x86_64
# code). Everthing in /usr/lib/z88dk is either headers, source, or
# z88dk's own .lib format for z80 object code. From Linux's point
# of view, it's just data. It's no different from Pat keeping udev
# rules in /lib/udev on 64-bit.

# Parallel make of the compiler itself works OK, but not of the
# z80 native libraries.
sed -i '/^\$MAKE *-e/aexport MAKEFLAGS="-j1"' build.sh

./build.sh

# install-libs doesn't seem to support DESTDIR.
make install prefix=$PKG/usr
make install-libs prefix=$PKG/usr

# 'make install' doesn't install everything the compiler needs...
# Trying to build the examples I got "sh: zpragma: command not found".
cp -a bin/* $PKG/usr/bin/

# strip strips everything but chokes on the perl script.
strip $PKG/usr/bin/* 2>/dev/null || true

# man pages from Debian:
# http://http.debian.net/debian/pool/main/z/z88dk/z88dk_1.8.ds1-10.debian.tar.gz
# They're for an older version of z88dk, and there's not a complete
# set of them, but it's better than nothing I hope.
mkdir -p $PKG/usr/man/man1
for i in $CWD/man/*.1; do
  gzip -9c < $i > $PKG/usr/man/man1/$( basename $i ).gz
done

# 20230114 bkw: do not ship executables in the doc dir.
rm -f support/bin2var/{bin2var,*.exe}
rm -f support/graphics/{z80svg,*.o}
rm -rf support/winstall

mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a README* LICENSE EXTENSIONS doc examples support \
      $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

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