diff --git a/README.md b/README.md index f34af0f..f6eacfe 100644 --- 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 index 2d2cc45..5f61543 100755 --- 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 index f2a0ab1..db3a8d6 100755 --- 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 index e96a2ce..c185150 100755 --- 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 deleted file mode 100644 index 0f33808..0000000 --- a/sysa/flex-2.5.11/mk/main2.mk +++ /dev/null @@ -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 deleted file mode 100755 index edf31de..0000000 --- a/sysa/flex-2.5.14/flex-2.5.14.sh +++ /dev/null @@ -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 deleted file mode 100644 index caf85a2..0000000 --- a/sysa/flex-2.5.14/mk/main.mk +++ /dev/null @@ -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 deleted file mode 100644 index e69de29..0000000 diff --git a/sysa/flex-2.6.4/flex-2.6.4.sh b/sysa/flex-2.6.4/flex-2.6.4.sh new file mode 100755 index 0000000..59737bb --- /dev/null +++ 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 new file mode 100644 index 0000000..2064dab --- /dev/null +++ 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 deleted file mode 100755 index bf324e6..0000000 --- a/sysa/grep-2.4/grep-2.4.kaem +++ /dev/null @@ -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 index c35d91b..3a49d5e 100644 --- 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/mk/main.mk b/sysa/m4-1.4.4/mk/main.mk similarity index 83% rename from sysa/m4-1.4/mk/main.mk rename to sysa/m4-1.4.4/mk/main.mk index a47d196..72c4176 100644 --- a/sysa/m4-1.4/mk/main.mk +++ b/sysa/m4-1.4.4/mk/main.mk @@ -7,7 +7,9 @@ AR = tcc -ar CFLAGS = -I lib \ -DPRODUCT=\"$(PRODUCT)\" \ - -DVERSION=\"$(VERSION)\" + -DVERSION=\"$(VERSION)\" \ + -DHAVE_SIGNAL_H=1 \ + -DPACKAGE_STRING=\"GNU\ M4\ 1.4.4\" LDFLAGS = -L . -lm4 diff --git a/sysa/m4-1.4/patches/signal-include.patch b/sysa/m4-1.4/patches/signal-include.patch deleted file mode 100644 index c027475..0000000 --- a/sysa/m4-1.4/patches/signal-include.patch +++ /dev/null @@ -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 --#include -+#include - - static void usage _((int)); - diff --git a/sysa/run.sh b/sysa/run.sh index f557e75..93b73c6 100755 --- a/sysa/run.sh +++ b/sysa/run.sh @@ -9,19 +9,22 @@ set -e export PREFIX=/after -# Part 21 -build m4-1.4 +# Part 20 +build m4-1.4.4 -# Part 22 +# Part 21 build flex-2.5.11 -# Part 23 -build flex-2.5.14 - -# Part 24 +# Part 22 build musl-1.1.24 -# Part 25 +# Part 23 build tcc-0.9.27 tcc-musl.sh +# Part 24 +build flex-2.6.4 + +# Part 25 +build grep-2.4 + echo "Bootstrapping completed."