commit: c00fa39838634e2775b2568cd4da7ed21d3a7f10
parent 0373292a1f98e2ef8533374563daca30d08ab73a
Author: Samuel Tyler <fosslinux@aussies.space>
Date: Wed, 12 Feb 2025 19:48:48 +1100
Merge pull request #498 from fosslinux/byacc2oyacc
Replace byacc with oyacc
Diffstat:
15 files changed, 197 insertions(+), 329 deletions(-)
diff --git a/parts.rst b/parts.rst
@@ -322,15 +322,23 @@ we skip them.
The ``cp`` in this stage replaces the ``mescc-tools-extra`` ``cp``.
-byacc 20240109
-==============
+oyacc 6.6
+=========
+
+``oyacc`` is a portable derivative of OpenBSD's Yacc parser generator. Unlike
+``bison``, it can be compiled with a simple ``Makefile``. Some simple patches
+are required for mes libc.
+
+We need a Yacc implementation for bash.
-The Berkeley Yacc parser generator, a public-domain implementation of the
-``yacc`` utility. Differently from the analogous ``bison`` utility from the
-GNU project, it can be compiled with a simple ``Makefile``.
+Side note; the following other implementations have been tested and not adopted:
-Some code is backported from an earlier version of byacc, 20140101, because
-of an incompatibility of newer versions with meslibc.
+- GNU Bison: requires a more complicated build we cannot yet support without
+ lots of work
+- Heirloom Devtools: licensed under a GPL-incompatible license, which makes the
+ resultant binary with mes libc (GPL licensed) non-distributable
+- Berkeley Yacc: has a few C files generated using an Awk script; Awk is not yet
+ available to us
bash 2.05b
==========
@@ -341,7 +349,7 @@ kaem, including proper POSIX sh support, globbing, etc.
Bash ships with a bison pre-generated file here which we delete.
Unfortunately, we have not bootstrapped bison but fortunately for us,
-Berkeley Yacc is able to cope here.
+OpenBSD's Yacc is able to cope here.
setup_repo
==========
@@ -465,7 +473,7 @@ Differently from the analogous utilities from the GNU project, they can
be compiled with a simple ``Makefile``.
Because issues with the Heirloom version of ``yacc`` compiled against musl,
-we continue using Berkeley Yacc together with Heirloom ``lex`` for the next
+we continue using OpenBSD's ``yacc`` together with Heirloom ``lex`` for the next
few steps.
flex 2.5.11
diff --git a/steps/SHA256SUMS.pkgs b/steps/SHA256SUMS.pkgs
@@ -45,9 +45,9 @@ c30d11b798f3a6198f339ec98a88f8971c6ec13d5dcb10cb7af780752e97509f e2fsprogs-1.45
139af6684f275e362e5c247bb830e85c888aa6c263622c1f3e967b2f71ff38f4 ed-1.4_0.tar.bz2
ce69ed8b48cf5440d33c756aadefc48711bdf058ead79121176e13fd9e306c50 file-5.44_0.tar.bz2
eec07e0d710ed3dd8d0ba6a1ec6ca9f1fa3a611bbb225195435679175317bf90 findutils-4.2.33_0.tar.bz2
-6f2194592682f4a448ccb0aa897e707a8a00eeb69d4b1f5f0236eb6d0fef6242 flex-2.5.11_0.tar.bz2
+0fb7580f81433aaf9f560e796799c0875c33a8ddf1da27ea523f6f895a1797e6 flex-2.5.11_0.tar.bz2
9cb13b1e60c2c860e2f6fb11efffa74646290ef8461fbc43ed6e5ccfc3bd673f flex-2.5.33_0.tar.bz2
-7bd44ec26cad78e5bb146e5ab709d489b6589da6049e319a4f438603f10eda4b flex-2.6.4_0.tar.bz2
+9e898068d570b5cfa016f0e14819d7f7a6577bae9177ef1e9bb62866d5b0f0b9 flex-2.6.4_0.tar.bz2
c925739472260498342ba6dc3263da937abf5237e7e9102622bf5657ec98094a gawk-3.0.4_0.tar.bz2
97e255a5852cb5fbd16e632249787f80e6bfd75cc5b31f8dfc8c81660a0801e1 gawk-5.3.0_0.tar.bz2
ab8b5b92de4780b085d8bc7e98ee72ad5ba9c07b26690c579c559b5cc21817eb gc-8.0.4_0.tar.bz2
@@ -64,7 +64,7 @@ bfeb5cad6720cd6ff629095f562fc7b60e2b352d248c4f8bdc9de3db1ed09b17 grep-3.7_0.tar
3f08414ffc65cebc8a635b0339f95c7ea0259d33cb53676293c3b28b0453f8c1 grub-2.06_0.tar.bz2
fc97b59e6b3a99ef457890a00ddee4a9ad44316e41cb746cf6cac1d193e480b7 guile-3.0.9_0.tar.bz2
4b784b57ed27e22750cf79492bb65bf68bd8211d942eeb74490981effa41196b gzip-1.13_0.tar.bz2
-d0cb00116d742d4216af4a7ed47f20408640229909a497c184aed3d4fcd4f30a heirloom-devtools-070527_0.tar.bz2
+30910d1d4af913272a46d76e824155bf3d023347a940db03837250000c17bab5 heirloom-devtools-070527_0.tar.bz2
8d2015b87337abbf287f7a39ee4cf53514120b5d3e90a93fe7d533dcc43f14fa help2man-1.36.4_0.tar.bz2
f59be8342ecf28d94e07c862de2d04dc46a7f9415e5256360d0e2ea6d1e3b252 kbd-1.15_0.tar.bz2
eaac2e938932926864c3866eb60b05c710137f20bb08b6fbdcba752d729f5b68 kexec-linux-1.0.0_0.tar.bz2
diff --git a/steps/bash-2.05b/bash-2.05b.checksums b/steps/bash-2.05b/bash-2.05b.checksums
@@ -1 +1 @@
-366f84242bee042ea0919d06f536d48541175ce6fdcfaa238282867c8b85a300 /usr/bin/bash
+d6f725a9998443629e9d8496df3ed4a938a9bdc80cd1aab2b31b011b99f0dae4 /usr/bin/bash
diff --git a/steps/byacc-20240109/byacc-20240109.checksums b/steps/byacc-20240109/byacc-20240109.checksums
@@ -1 +0,0 @@
-34a6457920fd314e198b289d8c4b76f8e6a48178f0a29c6d8ded0f5b9dbf877d /usr/bin/yacc
diff --git a/steps/byacc-20240109/files/Makefile b/steps/byacc-20240109/files/Makefile
@@ -1,98 +0,0 @@
-# SPDX-FileCopyrightText: 2002-2022 Thomas E. Dickey
-# SPDX-FileCopyrightText: 2024 Gábor Stefanik <netrolller.3d@gmail.com>
-#
-# SPDX-License-Identifier: CC0-1.0
-#
-# From original byacc README:
-# Berkeley Yacc is in the public domain. The data structures and algorithms
-# used in Berkeley Yacc are all either taken from documents available to the
-# general public or are inventions of the author. Anyone may freely distribute
-# source or binary forms of Berkeley Yacc whether unchanged or modified.
-# Distributers may charge whatever fees they can obtain for Berkeley Yacc.
-# Programs generated by Berkeley Yacc may be distributed freely.
-#
-# (typo "Distributers" in original)
-
-DEST = .
-
-HDRS = defs.h
-
-CFLAGS ?= -O -DNDEBUG
-
-LDFLAGS ?=
-
-LIBS ?=
-
-LINKER ?= $(CC)
-
-MAKEFILE = Makefile
-
-OBJS = closure.o \
- error.o graph.o \
- lalr.o \
- lr0.o \
- main.o \
- mkpar.o mstring.o \
- output.o \
- reader.o \
- symtab.o \
- verbose.o \
- warshall.o yaccpar.o
-
-PRINT = pr -f -l88
-
-PROGRAM = yacc
-
-SRCS = closure.c \
- error.c graph.c \
- lalr.c \
- lr0.c \
- main.c \
- mkpar.c mstring.c \
- output.c \
- reader.c \
- symtab.c \
- verbose.c \
- warshall.c yaccpar.c
-
-all: $(PROGRAM)
-
-$(PROGRAM): $(OBJS) $(LIBS)
- @$(LINKER) $(LDFLAGS) -o $(PROGRAM) $(OBJS) $(LIBS)
-
-clean:; @rm -f $(OBJS)
-
-clobber:; @rm -f $(OBJS) $(PROGRAM)
-
-depend:; @mkmf -f $(MAKEFILE) PROGRAM=$(PROGRAM) DEST=$(DEST)
-
-index:; @ctags -wx $(HDRS) $(SRCS)
-
-install: $(PROGRAM)
- @echo Installing $(PROGRAM) in $(DEST)
- @install -s $(PROGRAM) $(DEST)
-
-listing:; @$(PRINT) Makefile $(HDRS) $(SRCS) | lpr
-
-lint:; @lint $(SRCS)
-
-program: $(PROGRAM)
-
-tags: $(HDRS) $(SRCS); @ctags $(HDRS) $(SRCS)
-
-###
-closure.o: defs.h
-error.o: defs.h
-lalr.o: defs.h
-lr0.o: defs.h
-main.o: defs.h
-mkpar.o: defs.h
-output.o: defs.h
-reader.o: defs.h
-symtab.o: defs.h
-verbose.o: defs.h
-warshall.o: defs.h
-btyaccpar.o: defs.h
-yaccpar.o: defs.h
-graph.o: defs.h
-mstring.o: defs.h
diff --git a/steps/byacc-20240109/pass1.kaem b/steps/byacc-20240109/pass1.kaem
@@ -1,45 +0,0 @@
-#!/bin/sh
-
-# SPDX-FileCopyrightText: 2021 Andrius Štikonas <andrius@stikonas.eu>
-# SPDX-FileCopyrightText: 2021-22 fosslinux <fosslinux@aussies.space>
-# SPDX-FileCopyrightText: 2024 Gábor Stefanik <netrolller.3d@gmail.com>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-set -ex
-
-# Check tarball checksums
-checksum-transcriber sources
-sha256sum -c sources.SHA256SUM
-
-mkdir build src
-cd build
-
-# Extract
-cp ${DISTFILES}/${pkg}.tgz ../src/${pkg}.tar.gz
-gunzip -f ../src/${pkg}.tar.gz
-tar xf ../src/${pkg}.tar
-rm -r ../src/
-cd ${pkg}
-
-# Prepare and patch
-cp ../../files/Makefile .
-patch -Np1 -i ../../patches/meslibc.patch
-
-# Build yacc
-make CC=tcc AR=tcc\ -ar CFLAGS=-DMAXPATHLEN=100\ -DEILSEQ=84\ -DMB_LEN_MAX=100 LDFLAGS=-lgetopt\ -static RANLIB=true
-
-# Install yacc
-install yacc ${BINDIR}/yacc
-
-cd ../..
-
-# Checksums
-if match x${UPDATE_CHECKSUMS} xTrue; then
- sha256sum -o ${pkg}.checksums \
- /usr/bin/yacc
-
- install ${pkg}.checksums ${SRCDIR}
-else
- sha256sum -c ${pkg}.checksums
-fi
diff --git a/steps/byacc-20240109/patches/meslibc.patch b/steps/byacc-20240109/patches/meslibc.patch
@@ -1,170 +0,0 @@
-SPDX-FileCopyrightText: 2024 Gábor Stefanik <netrolller.3d@gmail.com>
-
-SPDX-License-Identifier: GPL-3.0-or-later
-
-Remove usages of tmpfile(), rewind(), fgetpos(), fsetpos() and bsearch(),
-which are unsupported by meslibc, and add missing declaration for strdup.
-
-License note: Berkeley Yacc is in the public domain, but it's linked with
-meslibc, which is GPL-3.0-or-later, so we apply that license here too.
-
-diff -ru ../byacc-20240109.bak/main.c ./main.c
---- byacc-20240109/main.c 2024-04-14 16:06:09.646465507 +0200
-+++ byacc-20240109/main.c 2024-04-14 20:41:56.227083399 +0200
-@@ -788,7 +788,7 @@
- (void)umask(save_umask);
- }
- #else
-- result = tmpfile();
-+ result = fopen(label, "w+");
- #endif
-
- if (result == 0)
-diff -ru ../byacc-20240109.bak/output.c ./output.c
---- byacc-20240109/output.c 2024-04-14 16:06:09.646465507 +0200
-+++ byacc-20240109/output.c 2024-04-14 16:06:24.636465897 +0200
-@@ -1289,7 +1289,7 @@
- {
- if (union_file != 0)
- {
-- rewind(union_file);
-+ fseek(union_file, 0, SEEK_SET);
- while ((c = getc(union_file)) != EOF)
- putc_code(fp, c);
- }
-@@ -1314,7 +1314,7 @@
-
- if (text_file == NULL)
- open_error("text_file");
-- rewind(text_file);
-+ fseek(text_file, 0, SEEK_SET);
- in = text_file;
- if ((c = getc(in)) == EOF)
- return;
-@@ -1684,7 +1684,7 @@
- int state;
- char line_state[20];
-
-- rewind(action_file);
-+ fseek(action_file, 0, SEEK_SET);
- if ((c = getc(action_file)) == EOF)
- return;
-
-diff -ru ../byacc-20240109.bak/reader.c ./reader.c
---- byacc-20240109/reader.c 2024-04-14 16:06:09.646465507 +0200
-+++ byacc-20240109/reader.c 2024-04-14 20:40:58.387082748 +0200
-@@ -70,7 +70,7 @@
- char *line_data; /* saved input-line */
- size_t line_used; /* position within saved input-line */
- size_t line_size; /* length of saved input-line */
-- fpos_t line_fpos; /* pointer before reading past saved input-line */
-+ long line_fpos; /* pointer before reading past saved input-line */
- }
- SAVE_LINE;
-
-@@ -315,7 +315,7 @@
- line = save_area.line_data;
- cptr = save_area.line_used + line;
- linesize = save_area.line_size;
-- if (fsetpos(input_file, &save_area.line_fpos) != 0)
-+ if (fseek(input_file, save_area.line_fpos, SEEK_SET) != 0)
- on_error();
- memset(&save_area, 0, sizeof(save_area));
- }
-@@ -338,7 +338,7 @@
- save_area.line_size = linesize;
- NO_SPACE(save_area.line_data);
- memcpy(save_area.line_data, line, linesize);
-- if (fgetpos(f, &save_area.line_fpos) != 0)
-+ if ((save_area.line_fpos = ftell(f)) == -1)
- on_error();
- must_save = -must_save;
- }
-@@ -572,6 +572,36 @@
- return strcmp(p->name, q->name);
- }
-
-+/*
-+ * Compare keyword to cached token, treating '_' and '-' the same. Some
-+ * grammars rely upon this misfeature.
-+ */
-+static int
-+matchec(const char *name)
-+{
-+ const char *p = cache;
-+ const char *q = name;
-+ int code = 0; /* assume mismatch */
-+
-+ while (*p != '\0' && *q != '\0')
-+ {
-+ char a = *p++;
-+ char b = *q++;
-+ if (a == '_')
-+ a = '-';
-+ if (b == '_')
-+ b = '-';
-+ if (a != b)
-+ break;
-+ if (*p == '\0' && *q == '\0')
-+ {
-+ code = 1;
-+ break;
-+ }
-+ }
-+ return code;
-+}
-+
- static int
- keyword(void)
- {
-@@ -612,10 +642,36 @@
- }
- cachec(NUL);
-
-- if ((key = bsearch(cache, keywords,
-- sizeof(keywords) / sizeof(*key),
-- sizeof(*key), compare_keys)))
-- return key->token;
-+ if (matchec("token") || matchec("term"))
-+ return (TOKEN);
-+ if (matchec("type"))
-+ return (TYPE);
-+ if (matchec("left"))
-+ return (LEFT);
-+ if (matchec("right"))
-+ return (RIGHT);
-+ if (matchec("nonassoc") || matchec("binary"))
-+ return (NONASSOC);
-+ if (matchec("start"))
-+ return (START);
-+ if (matchec("union"))
-+ return (UNION);
-+ if (matchec("ident"))
-+ return (IDENT);
-+ if (matchec("expect"))
-+ return (EXPECT);
-+ if (matchec("expect-rr"))
-+ return (EXPECT_RR);
-+ if (matchec("pure-parser"))
-+ return (PURE_PARSER);
-+ if (matchec("parse-param"))
-+ return (PARSE_PARAM);
-+ if (matchec("lex-param"))
-+ return (LEX_PARAM);
-+ if (matchec("token-table"))
-+ return (TOKEN_TABLE);
-+ if (matchec("yacc"))
-+ return (POSIX_YACC);
- }
- else
- {
-@@ -1178,6 +1234,9 @@
- return result;
- }
-
-+char *
-+strdup (char const *s);
-+
- static void
- save_param(int k, char *buffer, int name, int type2)
- {
diff --git a/steps/byacc-20240109/sources b/steps/byacc-20240109/sources
@@ -1 +0,0 @@
-https://invisible-island.net/archives/byacc/byacc-20240109.tgz f2897779017189f1a94757705ef6f6e15dc9208ef079eea7f28abec577e08446
diff --git a/steps/manifest b/steps/manifest
@@ -50,7 +50,7 @@ build: tar-1.12
build: sed-4.0.9
build: bzip2-1.0.8
build: coreutils-5.0
-build: byacc-20240109
+build: oyacc-6.6
build: bash-2.05b
improve: setup_repo
improve: update_env
diff --git a/steps/oyacc-6.6/mk/main.mk b/steps/oyacc-6.6/mk/main.mk
@@ -0,0 +1,36 @@
+# SPDX-FileCopyrightText: 2019 Brian Callahan <bcallah@openbsd.org>
+# SPDX-FileCopyrightText: 2025 fosslinux <fosslinux@aussies.space>
+#
+# SPDX-License-Identifier: CC0-1.0
+
+CC = tcc
+CFLAGS = -D__dead= -D__unused=
+LDFLAGS = -static
+LIBS = -lgetopt
+PREFIX = /usr
+BINDIR = /usr/bin
+MANDIR = /usr/share/man
+PROG = yacc
+
+OBJS = closure.o error.o lalr.o lr0.o main.o mkpar.o output.o reader.o \
+ skeleton.o symtab.o verbose.o warshall.o portable.o
+
+all: ${PROG}
+
+${PROG}: ${OBJS}
+ ${CC} ${LDFLAGS} -o ${PROG} ${OBJS} ${LIBS}
+
+install: all
+ install -d ${DESTDIR}${BINDIR}
+ install -d ${DESTDIR}${MANDIR}
+ install -m 555 ${PROG} ${DESTDIR}${BINDIR}
+ install -m 555 yyfix.sh ${DESTDIR}${BINDIR}/yyfix
+
+test:
+ @echo "No tests"
+
+clean:
+ rm -f ${PROG} ${OBJS}
+
+distclean: clean
+ rm -f Makefile config.h
diff --git a/steps/oyacc-6.6/oyacc-6.6.checksums b/steps/oyacc-6.6/oyacc-6.6.checksums
@@ -0,0 +1,2 @@
+34daad98b980e2dd6ff7c4949598445aeb47a732c1751db5bc51a92aa89f4044 /usr/bin/yacc
+9d3a06dbcf75c3098dba17fab4e013bf91c78be163387b1f23862c2171b1b2c0 /usr/bin/yyfix
diff --git a/steps/oyacc-6.6/pass1.kaem b/steps/oyacc-6.6/pass1.kaem
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+# SPDX-FileCopyrightText: 2025 fosslinux <fosslinux@aussies.space>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+set -ex
+
+# Check tarball checksums
+checksum-transcriber sources
+sha256sum -c sources.SHA256SUM
+
+mkdir build src
+cd build
+
+# Extract
+cp ${DISTFILES}/${pkg}.tar.gz ../src/${pkg}.tar.gz
+gunzip -f ../src/${pkg}.tar.gz
+tar xf ../src/${pkg}.tar
+rm -r ../src/
+cd ${pkg}
+
+# Prepare
+cp ../../mk/main.mk Makefile
+touch config.h
+patch -Np1 -i ../../patches/meslibc.patch
+patch -Np1 -i ../../patches/tcc.patch
+
+# Build
+make
+
+# Install
+make install
+
+cd ../..
+
+# Checksums
+if match x${UPDATE_CHECKSUMS} xTrue; then
+ sha256sum -o ${pkg}.checksums \
+ /usr/bin/yacc \
+ /usr/bin/yyfix
+
+ install ${pkg}.checksums ${SRCDIR}
+else
+ sha256sum -c ${pkg}.checksums
+fi
diff --git a/steps/oyacc-6.6/patches/meslibc.patch b/steps/oyacc-6.6/patches/meslibc.patch
@@ -0,0 +1,75 @@
+SPDX-FileCopyrightText: 2025 fosslinux <fosslinux@aussies.space>
+
+SPDX-License-Identifier: BSD-3-Clause
+
+* paths.h does not exist, hardcode /tmp
+* mkstemp does not exist, replace with mktemp
+* getopt.h needs explicit inclusion
+* sig_atomic_t is undefineed
+
+--- oyacc-6.6/main.c 2025-02-05 14:14:48.552829130 +1100
++++ oyacc-6.6/main.c 2025-02-05 14:20:05.025828293 +1100
+@@ -35,7 +35,7 @@
+
+ #include <sys/types.h>
+ #include <fcntl.h>
+-#include <paths.h>
++#include <getopt.h>
+ #include <signal.h>
+ #include <stdlib.h>
+ #include <unistd.h>
+@@ -104,7 +104,7 @@
+ void create_file_names(void);
+ void open_files(void);
+
+-volatile sig_atomic_t sigdie;
++volatile int sigdie;
+
+ void
+ done(int k)
+@@ -234,7 +234,7 @@
+ size_t len;
+ char *tmpdir;
+
+- tmpdir = _PATH_TMP;
++ tmpdir = "/tmp";
+
+ len = strlen(tmpdir);
+ if (tmpdir[len - 1] == '/')
+@@ -300,7 +300,7 @@
+ void
+ open_files(void)
+ {
+- int fd;
++ char *fname;
+
+ create_file_names();
+
+@@ -309,12 +309,12 @@
+ if (input_file == 0)
+ open_error(input_file_name);
+ }
+- fd = mkstemp(action_file_name);
+- if (fd == -1 || (action_file = fdopen(fd, "w")) == NULL)
++ fname = mktemp(action_file_name);
++ if (!fname || (action_file = fopen(fname, "w")) == NULL)
+ open_error(action_file_name);
+
+- fd = mkstemp(text_file_name);
+- if (fd == -1 || (text_file = fdopen(fd, "w")) == NULL)
++ fname = mktemp(text_file_name);
++ if (!fname || (text_file = fopen(fname, "w")) == NULL)
+ open_error(text_file_name);
+
+ if (vflag) {
+@@ -326,8 +326,8 @@
+ defines_file = fopen(defines_file_name, "w");
+ if (defines_file == NULL)
+ open_write_error(defines_file_name);
+- fd = mkstemp(union_file_name);
+- if (fd == -1 || (union_file = fdopen(fd, "w")) == NULL)
++ fname = mktemp(union_file_name);
++ if (!fname || (union_file = fopen(fname, "w")) == NULL)
+ open_error(union_file_name);
+ }
+ output_file = fopen(output_file_name, "w");
diff --git a/steps/oyacc-6.6/patches/tcc.patch b/steps/oyacc-6.6/patches/tcc.patch
@@ -0,0 +1,15 @@
+SPDX-FileCopyrightText: 2025 fosslinux <fosslinux@aussies.space>
+
+SPDX-License-Identifier: BSD-3-Clause
+
+In tcc, a variable declared as extern that is assigned to does not work
+correctly.
+
+--- oyacc-6.6/defs.h 2025-02-05 14:23:40.883827721 +1100
++++ oyacc-6.6/defs.h 2025-02-05 14:23:43.879827713 +1100
+@@ -365,4 +365,4 @@
+
+ /* system variables */
+
+-extern char *__progname;
++char *__progname;
diff --git a/steps/oyacc-6.6/sources b/steps/oyacc-6.6/sources
@@ -0,0 +1 @@
+https://github.com/ibara/yacc/releases/download/oyacc-6.6/oyacc-6.6.tar.gz eb0866e740b79bd3a23e0ca47885eb3148aab18d77a4bedba96e979d8b4ebfe1