commit: 88f3b52c352651ad8e10b61d5802f8531dcb4869
parent e9c83134589dc1c9ac6b6116db6cc92eed225884
Author: fosslinux <fosslinux@aussies.space>
Date: Sat, 6 Feb 2021 10:00:39 +1100
Merge pull request #29 from stikonas/flex
Add flex 2.6.4.
Diffstat:
16 files changed, 145 insertions(+), 177 deletions(-)
diff --git a/README.md b/README.md
@@ -240,17 +240,12 @@ GNU Coreutils is a collection of widely used utilities such as `cat`, `chmod`, `
A few of the utilities cannot be easily compiled with Mes C library, so we skip them.
-#### Part 18: grep 2.4
-
-GNU `grep` is a pattern matching utility. Is is not immediately needed but will
-be useful later for autotools.
-
-#### Part 19: heirloom devtools
+#### Part 18: heirloom devtools
`lex` and `yacc` from the Heirloom project. The Heirloom project is a collection
of standard UNIX utilities derived from code by Caldera and Sun. Differently from
the analogous utilities from the GNU project, they can be compiled with a simple `Makefile`.
-#### Part 20: bash 2.05b
+#### Part 19: bash 2.05b
GNU `bash` is the most well known shell and the most complex piece of software
so far. However, it comes with a number of great benefits over kaem, including
@@ -260,12 +255,12 @@ Bash ships with a bison pre-generated file here which we delete. Unfortunately,
we have not bootstrapped bison but fortunately for us, heirloom yacc is able to
cope here.
-#### Part 21: m4 1.4
+#### Part 20: m4 1.4.4
-`m4` is the first piece of software we need in the autotools suite. It allows
-macros to be defined and files to be generated from those macros.
+`m4` is the first piece of software we need in the autotools suite and flex 2.6.4.
+It allows macros to be defined and files to be generated from those macros.
-#### Part 22: flex 2.5.11
+#### Part 21: flex 2.5.11
`flex` is a tool for generating lexers or scanners: programs that recognize lexical patters.
@@ -274,11 +269,7 @@ first flex 2.5.11 is compiled, with its scanner definition manually modified so
it can be processed by lex for the Heirloom project (the required modifications
are mostly syntactical, plus a few workarounds to avoid some flex advanced features).
-#### Part 23 flex 2.5.14
-
-Then we recompile unpatched `flex` using its own lexer.
-
-#### Part 24 musl 1.1.24
+#### Part 22 musl 1.1.24
`musl` is a C standard library that is lightweight, fast, simple, free, and strives to be correct
in the sense of standards-conformance and safety. `musl` is used by some distributions of GNU/Linux
@@ -289,8 +280,19 @@ newer or more complex programs.
we replace all weak symbols with strong symbols and will patch `tcc` in the next step to ignore duplicate
symbols.
-#### Part 25 tcc 0.9.27 (musl)
+#### Part 23 tcc 0.9.27 (musl)
We recompile `tcc` against musl. This is a two stage process. First we build tcc-0.9.27 that itself
links to Mes C library but produces binaries linked to musl. Then we recompile newly produced tcc
with itself. Interestingly, tcc-0.9.27 linked against musl is self hosting.
+
+#### Part 24 flex 2.6.14
+
+We recompile unpatched GNU `flex` using older flex 2.5.11. This is again two stage process,
+first compile flex using scanner generated by old flex, then recompile scan.l using the new version
+of flex to remove any buggy artificats from the old flex.
+
+#### Part 25: grep 2.4
+
+GNU `grep` is a pattern matching utility. Is is not immediately needed but will
+be useful later for autotools.
diff --git a/rootfs.sh b/rootfs.sh
@@ -121,27 +121,27 @@ get_file ftp://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz 1
# coreutils 5.0
get_file https://ftp.gnu.org/gnu/coreutils/coreutils-5.0.tar.bz2 1
-# grep 2.4
-get_file https://ftp.gnu.org/gnu/grep/grep-2.4.tar.gz
-
# heirloom-devtools
get_file http://downloads.sourceforge.net/project/heirloom/heirloom-devtools/070527/heirloom-devtools-070527.tar.bz2
# bash 2.05b
get_file https://ftp.gnu.org/pub/gnu/bash/bash-2.05b.tar.gz
-# m4 1.4
-get_file https://ftp.gnu.org/gnu/m4/m4-1.4.tar.gz
+# m4 1.4.4
+get_file https://ftp.gnu.org/gnu/m4/m4-1.4.4.tar.gz
# flex 2.5.11
get_file http://download.nust.na/pub2/openpkg1/sources/DST/flex/flex-2.5.11.tar.gz
-# flex 2.5.14
-get_file http://download.nust.na/pub2/openpkg1/sources/DST/flex/flex-2.5.14.tar.gz
-
# musl 1.1.24
get_file https://musl.libc.org/releases/musl-1.1.24.tar.gz
+# flex 2.6.4
+get_file https://github.com/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.gz
+
+# grep 2.4
+get_file https://ftp.gnu.org/gnu/grep/grep-2.4.tar.gz
+
# General cleanup
find tmp -name .git -exec rm -rf \;
diff --git a/sysa/after.kaem.run b/sysa/after.kaem.run
@@ -129,19 +129,13 @@ cd ${pkg}
kaem --file ${pkg}.kaem
cd ..
-# Part 18: grep
-pkg="grep-2.4"
-cd ${pkg}
-kaem --file ${pkg}.kaem
-cd ..
-
-# Part 19: heirloom-devtools
+# Part 18: heirloom-devtools
pkg="heirloom-devtools-070527"
cd ${pkg}
kaem --file ${pkg}.kaem
cd ..
-# Part 20: bash
+# Part 19: bash
pkg="bash-2.05b"
cd ${pkg}
kaem --file ${pkg}.kaem
diff --git a/sysa/flex-2.5.11/flex-2.5.11.sh b/sysa/flex-2.5.11/flex-2.5.11.sh
@@ -1,13 +1,10 @@
# When we rebuild flex it no longer needs patching
# and can use simplified makefile
src_prepare() {
- if test -d /lex; then
- default_src_prepare
- else
- cp ../../mk/main2.mk Makefile
- fi
+ default_src_prepare
+
touch config.h
- rm parse.c parse.h scan.c
+ rm parse.c parse.h scan.c skel.c
}
src_install() {
diff --git a/sysa/flex-2.5.11/mk/main2.mk b/sysa/flex-2.5.11/mk/main2.mk
@@ -1,28 +0,0 @@
-CFLAGS = -DVERSION=\"2.5.11\"
-
-all: flex
-
-flex: ccl.o dfa.o ecs.o gen.o main.o misc.o nfa.o parse.o scan.o skel.o sym.o tblcmp.o yylex.o options.o scanopt.o buf.o
- tcc -o $@ $^
-
-%.o: %.c
- tcc -g -c $(CFLAGS) -o $@ $<
-
-scan.o: parse.h
-yylex.o: parse.h
-
-parse.c parse.h: parse.y
- yacc -d parse.y
- mv y.tab.h parse.h
- mv y.tab.c parse.c
-
-scan.c: scan.l
- flex scan.l
- mv lex.yy.c scan.c
-
-skel.c: mkskel.sh flex.skl
- /bin/sh ./mkskel.sh ./flex.skl > skel.c
-
-install: all
- install flex $(PREFIX)/bin
- ln -sf $(PREFIX)/bin/flex $(PREFIX)/bin/lex
diff --git a/sysa/flex-2.5.14/flex-2.5.14.sh b/sysa/flex-2.5.14/flex-2.5.14.sh
@@ -1,6 +0,0 @@
-src_prepare() {
- default_src_prepare
-
- touch config.h
- rm parse.c parse.h scan.c
-}
diff --git a/sysa/flex-2.5.14/mk/main.mk b/sysa/flex-2.5.14/mk/main.mk
@@ -1,29 +0,0 @@
-CFLAGS = -I . \
- -DVERSION=\"2.5.14\"
-
-all: flex
-
-flex: ccl.o dfa.o ecs.o gen.o main.o misc.o nfa.o parse.o scan.o skel.o sym.o tblcmp.o yylex.o options.o scanopt.o buf.o
- tcc -o $@ $^
-
-%.o: %.c
- tcc -g -c $(CFLAGS) -o $@ $<
-
-scan.o: parse.h
-yylex.o: parse.h
-
-parse.c parse.h: parse.y
- yacc -d parse.y
- mv y.tab.h parse.h
- mv y.tab.c parse.c
-
-scan.c: scan.l
- flex scan.l
- mv lex.yy.c scan.c
-
-skel.c: mkskel.sh flex.skl
- /bin/sh ./mkskel.sh ./flex.skl > skel.c
-
-install: all
- install flex $(PREFIX)/bin
- ln -sf $(PREFIX)/bin/flex $(PREFIX)/bin/lex
diff --git a/sysa/flex-2.5.14/src/.placeholder b/sysa/flex-2.5.14/src/.placeholder
diff --git a/sysa/flex-2.6.4/flex-2.6.4.sh b/sysa/flex-2.6.4/flex-2.6.4.sh
@@ -0,0 +1,23 @@
+src_prepare() {
+ default_src_prepare
+
+ mv Makefile src/
+ touch src/config.h
+ rm src/parse.c src/parse.h src/scan.c src/skel.c
+}
+
+src_compile() {
+ cd src
+ default_src_compile
+ cd ..
+}
+
+src_install() {
+ cd src
+ default_src_install
+ cd ..
+
+ # Remove yacc, we won't need it any longer
+ rm ${PREFIX}/bin/yacc
+ rm /yaccpar
+}
diff --git a/sysa/flex-2.6.4/mk/main.mk b/sysa/flex-2.6.4/mk/main.mk
@@ -0,0 +1,41 @@
+CC := tcc
+CFLAGS = -DVERSION=\"2.6.4\" \
+ -DM4=\"m4\" \
+ -DHAVE_LIMITS_H=1
+
+all: flex
+
+flex: buf.o ccl.o dfa.o ecs.o filter.o gen.o main.o misc.o nfa.o options.o parse.o regex.o scan.o scanflags.o scanopt.o skel.o sym.o tables.o tables_shared.o tblcmp.o yylex.o
+ $(CC) -o $@ $^ -lm
+
+flex-tmp: buf.o ccl.o dfa.o ecs.o filter.o gen.o main.o misc.o nfa.o options.o parse.o regex.o scan-tmp.o scanflags.o scanopt.o skel.o sym.o tables.o tables_shared.o tblcmp.o yylex.o
+ $(CC) -o $@ $^ -lm
+
+%.o: %.c
+ $(CC) $(CFLAGS) -g -c -I. -o $@ $<
+
+main.o: parse.h
+scan.o: parse.h
+scan-tmp.o: parse.h
+yylex.o: parse.h
+
+parse.c parse.h: parse.y
+ yacc -d parse.y
+ mv y.tab.h parse.h
+ mv y.tab.c parse.c
+ echo 'extern int yylval;' >> parse.h
+
+scan-tmp.c: scan.l
+ flex scan.l
+ mv lex.yy.c scan-tmp.c
+
+scan.c: scan.l flex-tmp
+ ./flex-tmp scan.l
+ mv lex.yy.c scan.c
+
+skel.c: mkskel.sh flex.skl
+ /bin/sh ./mkskel.sh . m4 2.6.4 > skel.c
+
+install: all
+ install flex $(PREFIX)/bin
+ ln -sf $(PREFIX)/bin/flex $(PREFIX)/bin/lex
diff --git a/sysa/grep-2.4/grep-2.4.kaem b/sysa/grep-2.4/grep-2.4.kaem
@@ -1,23 +0,0 @@
-#!/bin/sh
-
-set -ex
-
-mkdir build
-cd build
-
-# Extract
-gunzip ../src/${pkg}.tar.gz
-tar xf ../src/${pkg}.tar
-cd ${pkg}
-cp ../../mk/main.mk Makefile
-
-# Build
-make
-
-# Install
-install grep /after/bin/
-
-# Test
-grep --version
-
-cd ../..
diff --git a/sysa/grep-2.4/mk/main.mk b/sysa/grep-2.4/mk/main.mk
@@ -8,7 +8,9 @@ AR = tcc -ar
CFLAGS = -DPACKAGE=\"$(PACKAGE)\" \
-DVERSION=\"$(VERSION)\" \
-DHAVE_DIRENT_H=1 \
- -DHAVE_UNISTD_H=1
+ -DHAVE_UNISTD_H=1 \
+ -DHAVE_STRERROR=1 \
+ -DREGEX_MALLOC=1
.PHONY: all
@@ -19,3 +21,8 @@ all: grep
grep: $(GREP_OBJECTS)
$(CC) $(CFLAGS) $^ $(LDFLAGS) -o $@
+
+install: all
+ install grep $(PREFIX)/bin
+ ln -sf $(PREFIX)/bin/grep $(PREFIX)/bin/egrep
+ ln -sf $(PREFIX)/bin/grep $(PREFIX)/bin/fgrep
diff --git a/sysa/m4-1.4.4/mk/main.mk b/sysa/m4-1.4.4/mk/main.mk
@@ -0,0 +1,33 @@
+PRODUCT = m4
+VERSION = 1.4
+
+CC = tcc
+LD = tcc
+AR = tcc -ar
+
+CFLAGS = -I lib \
+ -DPRODUCT=\"$(PRODUCT)\" \
+ -DVERSION=\"$(VERSION)\" \
+ -DHAVE_SIGNAL_H=1 \
+ -DPACKAGE_STRING=\"GNU\ M4\ 1.4.4\"
+
+LDFLAGS = -L . -lm4
+
+.PHONY: all
+
+LIB_SRC = regex getopt getopt1 error obstack xmalloc xstrdup
+LIB_OBJECTS = $(addprefix lib/, $(addsuffix .o, $(LIB_SRC)))
+
+M4_SRC = m4 builtin debug eval format freeze input macro output path symtab
+M4_OBJ = $(addprefix src/, $(addsuffix .o, $(M4_SRC)))
+
+all: m4
+
+m4: libm4.a $(M4_OBJ)
+ $(CC) $(CFLAGS) $^ $(LDFLAGS) -o $@
+
+libm4.a: $(LIB_OBJECTS)
+ $(AR) cr $@ $^
+
+install: all
+ install m4 $(PREFIX)/bin
diff --git a/sysa/m4-1.4/mk/main.mk b/sysa/m4-1.4/mk/main.mk
@@ -1,31 +0,0 @@
-PRODUCT = m4
-VERSION = 1.4
-
-CC = tcc
-LD = tcc
-AR = tcc -ar
-
-CFLAGS = -I lib \
- -DPRODUCT=\"$(PRODUCT)\" \
- -DVERSION=\"$(VERSION)\"
-
-LDFLAGS = -L . -lm4
-
-.PHONY: all
-
-LIB_SRC = regex getopt getopt1 error obstack xmalloc xstrdup
-LIB_OBJECTS = $(addprefix lib/, $(addsuffix .o, $(LIB_SRC)))
-
-M4_SRC = m4 builtin debug eval format freeze input macro output path symtab
-M4_OBJ = $(addprefix src/, $(addsuffix .o, $(M4_SRC)))
-
-all: m4
-
-m4: libm4.a $(M4_OBJ)
- $(CC) $(CFLAGS) $^ $(LDFLAGS) -o $@
-
-libm4.a: $(LIB_OBJECTS)
- $(AR) cr $@ $^
-
-install: all
- install m4 $(PREFIX)/bin
diff --git a/sysa/m4-1.4/patches/signal-include.patch b/sysa/m4-1.4/patches/signal-include.patch
@@ -1,15 +0,0 @@
-sys/signal.h is not the POSIX appropriate place for signal.h, which mes libc
-attempts to conform to.
-
-diff -r -U3 src/m4.c src/m4.c
---- src/m4.c 1994-11-02 03:14:28.000000000 +0000
-+++ src/m4.c 2021-01-15 00:19:21.947654461 +0000
-@@ -19,7 +19,7 @@
- #include "m4.h"
-
- #include <getopt.h>
--#include <sys/signal.h>
-+#include <signal.h>
-
- static void usage _((int));
-
diff --git a/sysa/run.sh b/sysa/run.sh
@@ -9,19 +9,22 @@ set -e
export PREFIX=/after
+# Part 20
+build m4-1.4.4
+
# Part 21
-build m4-1.4
+build flex-2.5.11
# Part 22
-build flex-2.5.11
+build musl-1.1.24
# Part 23
-build flex-2.5.14
+build tcc-0.9.27 tcc-musl.sh
# Part 24
-build musl-1.1.24
+build flex-2.6.4
# Part 25
-build tcc-0.9.27 tcc-musl.sh
+build grep-2.4
echo "Bootstrapping completed."