summaryrefslogtreecommitdiffstats
path: root/development/obcpl/obcpl.SlackBuild
blob: 77595517e23fcd3780eb5dbaafdd04d72dbdb859 (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
#!/bin/bash

# Slackware build script for obcpl

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

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

# 20230103 bkw: BUILD=3, fix broken LIBHDR symlink in doc dic.

# 20210906 bkw: BUILD=2
# - fix build on -current
# - add missing docs to docdir
# - compile and install the stuff from util/*.b
# - add some example code

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

PRGNAM=obcpl
VERSION=${VERSION:-0.9.8}
BUILD=${BUILD:-3}
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-$VERSION
tar xvf $CWD/$PRGNAM-$VERSION.tar.xz
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 {} \+

# Fix a return-without-value from a non-void function. This warning
# was there all along, but in 14.2 it didn't seem to cause a
# problem. Now it makes the 'cg' binary segfault. So:
patch -p1 < $CWD/fix_segfault.diff

cd src
ln -s sys_linux.s sys.s

sed -i \
  -e 's,/usr/local,/usr,g' \
  -e "s,\<lib/$PRGNAM,lib$LIBDIRSUFFIX/$PRGNAM,g" \
  *

make CFLAGS="$SLKCFLAGS" PREFIX="/usr"

# Not quite ready to install: the PREFIX override doesn't entirely work
# because the st binary was built from st.O (obcpl's parsed syntax tree
# format) which has the /usr/local/lib path baked into it (not affected
# by the sed command, above). st.O is distributed this way because obcpl
# needs to be buildable on a system without an existing BCPL compiler. So
# we need to regenerate st.O from st.b (its BCPL source), then rebuild
# st from st.O. This works because st will look for its includes in the
# current dir first. This is the sort of thing gcc has 'make bootstrap'
# for...

rm -f st.O
./st < st.b > st.O
rm -f st st.s st.o
make st

# Now we're good to go.
make PREFIX="$PKG/usr" install

gzip $PKG/usr/man/man1/$PRGNAM.1

# Use a symlink instead of a hard link here:
rm -f $PKG/usr/lib$LIBDIRSUFFIX/$PRGNAM/libhdr
ln -s LIBHDR $PKG/usr/lib$LIBDIRSUFFIX/$PRGNAM/libhdr

# 20210906 bkw: build utils too. have to use a custom obcpl wrapper
# that runs the uninstalled binaries and make sure LIBHDR can be found
# in the current dir (see above). Install them with obcpl- prefix
# because 'gpm' is a conflict with Slackware's gpm, and 'xref' is
# a pretty generic name (can't guarantee there's no other xref command
# on SBo).

cd ../util
sed "/^d=/s,=.*,=../src," < ../src/obcpl > ./obcpl
ln -s ../src/LIBHDR .
chmod +x ./obcpl
make BC=./obcpl
mkdir -p $PKG/usr/bin
for i in cmpltest xref gpm; do
  install -s -m0755 $i $PKG/usr/bin/obcpl-$i
done
make clean # so the util/ in the docdir will be just the source
rm -f ./obcpl
cd ..

# util/ is included as example code. Also our own examples/ dir.

PKGDOC=$PKG/usr/doc/$PRGNAM-$VERSION
mkdir -p $PKGDOC/examples
cp -a C* README doc/*.txt util $PKGDOC
for i in $CWD/examples/*; do
  cat $i > $PKGDOC/examples/$( basename $i )
done
cat $CWD/$PRGNAM.SlackBuild > $PKGDOC/$PRGNAM.SlackBuild

# 20230103 bkw: fix broken symlink in util.
rm -f $PKGDOC/util/LIBHDR
ln -s ../../../lib$LIBDIRSUFFIX/$PRGNAM/LIBHDR $PKGDOC/util/LIBHDR

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