development/obcpl: Updated for version 0.9.8, fix build.

Signed-off-by: B. Watson <yalhcru@gmail.com>

Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
This commit is contained in:
B. Watson 2021-09-06 14:21:04 -04:00 committed by Willy Sudiarto Raharjo
parent e4744bafbf
commit d932be9cd6
No known key found for this signature in database
GPG Key ID: 3F617144D7238786
7 changed files with 115 additions and 9 deletions

View File

@ -12,3 +12,20 @@ deal to recommend it. The compiler frontend consists of only about
x86_64 note: obcpl doesn't require multilib on Slackware64. It only
generates 32-bit x86 code, but the binaries it creates are 100%
statically linked, and will run fine on Slackware64 without multlib.
The package includes:
- The BCPL compiler itself (/usr/bin/obcpl and the support files in
/usr/lib(64)?/obcpl)
- The utilities:
- obcpl-cmpltest: compiler test
- obcpl-gpm: macro generator
- obcpl-xref: cross referencer
- The sources for the utilities
- Example code (Hello World and a factorial calculator)
- The obcpl documentation, including manual.txt and standard.txt
See also:
https://en.wikipedia.org/wiki/BCPL
https://www.cl.cam.ac.uk/~mr10/bcplman.pdf

View File

@ -0,0 +1,17 @@
# Makefile for obcpl/util
BC=obcpl
BFLAGS=-O
all: hello factorial
hello: hello.b
$(BC) $(BFLAGS) hello.b
factorial: factorial.b
$(BC) $(BFLAGS) factorial.b
install:
clean:
rm -f hello factorial *.o

View File

@ -0,0 +1,14 @@
README for SlackBuilds.org development/obcpl examples
-----------------------------------------------------
This directory contains simple example programs written in BCPL.
hello.b: The canonical Hello World program.
Original source: https://github.com/leachim6/hello-world/
factorial.b: Calculates the factorials of the integers 1 through 5.
Original source: https://en.wikipedia.org/wiki/BCPL
If you want to mess with this directory, it's best to copy it to your
user's home directory (so you don't have to compile the programs as
root). You can compile hello and factorial just by running "make".

View File

@ -0,0 +1,9 @@
GET "LIBHDR"
LET START() = VALOF $(
FOR I = 1 TO 5 DO
WRITEF("%N! = %I4*N", I, FACT(I))
RESULTIS 0
$)
AND FACT(N) = N = 0 -> 1, N * FACT(N - 1)

View File

@ -0,0 +1,6 @@
GET "LIBHDR"
LET START() BE
$(
WRITES("Hello World*N")
$)

View File

@ -0,0 +1,12 @@
diff -Naur obcpl-0.9.8/src/cg.c obcpl-0.9.8.patcged/src/cg.c
--- obcpl-0.9.8/src/cg.c 2013-03-25 17:41:43.000000000 -0400
+++ obcpl-0.9.8.patcged/src/cg.c 2021-09-06 04:43:29.444894247 -0400
@@ -374,7 +374,7 @@
emit(".equ G%d,%s", x, label(rdn()));
}
}
- return;
+ break;
case S_FINISH:
emit("jmp finish");
break;

View File

@ -6,11 +6,17 @@
# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details.
# 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:-1}
BUILD=${BUILD:-2}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}
@ -22,9 +28,6 @@ if [ -z "$ARCH" ]; then
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
@ -60,6 +63,11 @@ 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
@ -73,7 +81,7 @@ 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). It's distributed this way because obcpl
# 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
@ -88,16 +96,39 @@ make st
# Now we're good to go.
make PREFIX="$PKG/usr" install
cd -
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
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a doc/*.txt util $PKG/usr/doc/$PRGNAM-$VERSION
# 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.
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION/examples
cp -a C* README doc/*.txt util $PKG/usr/doc/$PRGNAM-$VERSION
for i in $CWD/examples/*; do
cat $i > $PKG/usr/doc/$PRGNAM-$VERSION/examples/$( basename $i )
done
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
mkdir -p $PKG/install