From aa11513fdd220b7b59c01bb665cd78c6adcaa264 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Tue, 16 Feb 2021 17:46:35 +0000 Subject: [PATCH 1/6] gawk: enable bit operations. --- sysa/gawk-3.0.4/mk/main.mk | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sysa/gawk-3.0.4/mk/main.mk b/sysa/gawk-3.0.4/mk/main.mk index 1b47401..ec3d217 100644 --- a/sysa/gawk-3.0.4/mk/main.mk +++ b/sysa/gawk-3.0.4/mk/main.mk @@ -32,7 +32,8 @@ CFLAGS = -I vms \ -DHAVE_STRING_H=1 \ -DHAVE_STRTOD=1 \ -DHAVE_SYS_PARAM_H=1 \ - -DHAVE_UNISTD_H=1 + -DHAVE_UNISTD_H=1 \ + -DBITOPS=1 .PHONY: all From 221b1d07ade33c502c23d978cf5ead609e10ef0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Sun, 14 Feb 2021 15:36:05 +0000 Subject: [PATCH 2/6] Add perl 5.000. --- README.md | 17 +++++++- SHA256SUMS.sources | 1 + rootfs.sh | 3 ++ sysa/perl5.000/files/config.h | 73 ++++++++++++++++++++++++++++++++ sysa/perl5.000/files/keywords.sh | 6 +++ sysa/perl5.000/files/opcode.awk | 31 ++++++++++++++ sysa/perl5.000/files/opcode.sh | 71 +++++++++++++++++++++++++++++++ sysa/perl5.000/mk/main.mk | 18 ++++++++ sysa/perl5.000/perl5.000.sh | 23 ++++++++++ sysa/run.sh | 3 ++ 10 files changed, 245 insertions(+), 1 deletion(-) create mode 100644 sysa/perl5.000/files/config.h create mode 100644 sysa/perl5.000/files/keywords.sh create mode 100644 sysa/perl5.000/files/opcode.awk create mode 100755 sysa/perl5.000/files/opcode.sh create mode 100644 sysa/perl5.000/mk/main.mk create mode 100755 sysa/perl5.000/perl5.000.sh diff --git a/README.md b/README.md index 5be363e..e2f370d 100644 --- a/README.md +++ b/README.md @@ -334,4 +334,19 @@ is required later for autotools. #### Part 28: gawk 3.0.4 `gawk` is the GNU implementation of `awk`, yet another pattern matching and data -extraction utility. It is also required for autotools. \ No newline at end of file +extraction utility. It is also required for autotools. + +#### Part 29: perl 5.000 + +Perl is a general purpose programming language that is especially suitable for +text processing. It is essential for autotools build system because automake +and some other tools are written in Perl. + +Perl itself is written in C but ships with some pre-generated files that need +perl for processing. To bootstrap Perl we will start with the oldest Perl 5 +version which has the fewest number of pregenerated files. We reimplement two +remaining perl scripts in awk and use our custom makefile instead of Perl's +pre-generated Configure script. + +At this first step we build `miniperl` which is `perl` without support for +loading modules. diff --git a/SHA256SUMS.sources b/SHA256SUMS.sources index 763570e..f86ee27 100644 --- a/SHA256SUMS.sources +++ b/SHA256SUMS.sources @@ -13,4 +13,5 @@ a32032bab36208509466654df12f507600dfe0313feebbcd218c32a70bf72a16 grep-2.4.tar.g 64b30b41fde2ebf669e6af489883fb1df6a06ac30555a96cfa3c39ecce7267dd make-3.80.tar.gz 1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3 musl-1.1.24.tar.gz ecb5c6469d732bcf01d6ec1afe9e64f1668caba5bfdb103c28d7f537ba3cdb8a patch-2.5.9.tar.gz +1beb92a6fc29483d0a8ab71379fb0e930a2c90198d81ba2930c1e788b5f58873 perl5.000.tar.gz c6c37e888b136ccefab903c51149f4b7bd659d69d4aea21245f61053a57aa60a tar-1.12.tar.gz diff --git a/rootfs.sh b/rootfs.sh index bb43667..e7e4ce1 100755 --- a/rootfs.sh +++ b/rootfs.sh @@ -190,6 +190,9 @@ get_file https://ftp.gnu.org/gnu/diffutils/diffutils-2.7.tar.gz # gawk 3.0.4 get_file https://ftp.gnu.org/gnu/gawk/gawk-3.0.4.tar.gz +# perl 5.000 +get_file http://mirrors.develooper.com/perl/really-ancient-perls/oldperl/dist/leo/src/perl5/perl5.000.tar.gz + # General cleanup find tmp -name .git -exec rm -rf \; diff --git a/sysa/perl5.000/files/config.h b/sysa/perl5.000/files/config.h new file mode 100644 index 0000000..a5126e6 --- /dev/null +++ b/sysa/perl5.000/files/config.h @@ -0,0 +1,73 @@ +// SPDX-FileCopyrightText: 2021 Andrius Štikonas + +// SPDX-License-Identifier: GPL-3.0-or-later + +#define MEM_ALIGNBYTES 8 +#define BIN "/after/bin" +#define BYTEORDER 0x4321 +#define CPPSTDIN "tcc -E" +#define CPPMINUS "-" +#define HAS_ALARM +#define HAS_FORK +#define HAS_MKDIR +#define HAS_PAUSE +#define HAS_RMDIR +#define HAS_STRERROR +#define HAS_SYS_ERRLIST +#define Strerror(e) strerror(e) + +#define HAS_SYSCALL +#define HAS_TIMES + +#define HAS_VPRINTF +#define Gid_t gid_t + +#define I_DIRENT +#define Direntry_t struct dirent + +#define I_DLFCN +#define I_FCNTL +#define I_LIMITS +#define I_MATH +#define I_NETINET_IN +#define I_STDDEF +#define I_STDLIB +#define I_STRING +#define I_SYS_DIR +#define I_SYS_IOCTL +#define I_SYS_PARAM +#define I_SYS_SELECT +#define I_SYS_TIMES +#define I_TERMIOS +#define I_TIME +#define I_UNISTD +#define I_UTIME +#define I_STDARG + +#define INTSIZE 4 +#define Off_t off_t + +#define PRIVLIB "/after/lib/perl5" + +#define _(args) args + +#define RANDBITS 31 + +#define SCRIPTDIR "/after/bin" + +#define SIG_NAME "ZERO","HUP","INT","QUIT","ILL","TRAP","IOT","BUS","FPE","KILL","USR1","SEGV","USR2","PIPE","ALRM","TERM","STKFLT","CHLD","CONT","STOP","TSTP","TTIN","TTOU","URG","XCPU","XFSZ","VTALRM","PROF","WINCH", "IO", "POLL", "PWR", "SYS", "UNUSED" + +#define Size_t size_t + +#define STDCHAR char +#define Uid_t uid_t + +#define LOC_SED "/after/bin/sed" +#define ARCHLIB "/after/lib/perl5/" + +#define CAT2(a,b) a##b +#define Gconvert(x,n,t,b) gcvt((x),(n),(b)) + +#define Time_t time_t + +#define SSize_t ssize_t diff --git a/sysa/perl5.000/files/keywords.sh b/sysa/perl5.000/files/keywords.sh new file mode 100644 index 0000000..76950e5 --- /dev/null +++ b/sysa/perl5.000/files/keywords.sh @@ -0,0 +1,6 @@ +#!/bin/sh -e +# SPDX-FileCopyrightText: 2021 Andrius Štikonas +# +# SPDX-License-Identifier: GPL-3.0-or-later + +sed -e '1,/__END__/ d' keywords.pl | sed '1d' | awk '{print "#define", "KEY_"$0, NR-1}' > keywords.h diff --git a/sysa/perl5.000/files/opcode.awk b/sysa/perl5.000/files/opcode.awk new file mode 100644 index 0000000..e81d7e2 --- /dev/null +++ b/sysa/perl5.000/files/opcode.awk @@ -0,0 +1,31 @@ +# SPDX-FileCopyrightText: 2021 Andrius Štikonas +# +# SPDX-License-Identifier: GPL-3.0-or-later + +{ + argsum = 0 + + argsum = or(argsum, 1 * (index($4, "m") != 0)) + argsum = or(argsum, 2 * (index($4, "f") != 0)) + argsum = or(argsum, 4 * (index($4, "s") != 0)) + argsum = or(argsum, 8 * (index($4, "t") != 0)) + argsum = or(argsum, 16 * (index($4, "i") != 0)) + argsum = or(argsum, 32 * (index($4, "I") != 0)) + argsum = or(argsum, 64 * (index($4, "d") != 0)) + argsum = or(argsum, 128 * (index($4, "u") != 0)) + + mul = 256 + + arg_val="SLAHCFR" + + argstr=$5 + gsub(" ", "", argstr) + split(argstr, args, "") + for(i=1; i<=length(argstr); i+=1) { + argnum = (index(argstr, "?") != 0) * 8 + argnum += index(arg_val, args[i]) + argsum += argnum * mul + mul = lshift(mul, 4) + } + printf("\t0x%08x,\t/* %s */\n", argsum, $1) +} diff --git a/sysa/perl5.000/files/opcode.sh b/sysa/perl5.000/files/opcode.sh new file mode 100755 index 0000000..9f52c18 --- /dev/null +++ b/sysa/perl5.000/files/opcode.sh @@ -0,0 +1,71 @@ +#!/bin/sh -e +# SPDX-FileCopyrightText: 2021 Andrius Štikonas +# +# SPDX-License-Identifier: GPL-3.0-or-later + + +sed -e '1,/__END__/ d; s/[#].*$//g; /^$/d' opcode.pl | tr -s '\t' '\t' > data + +exec 1> opcode.h + +# Emit defines. +echo "typedef enum {"; +awk '{print "\tOP_"toupper($1)","}' data +echo " OP_max" +echo "} opcode;" +echo "#define MAXO " $(wc -l data | awk '{print $1}') + +# Emit opnames. +printf " +#ifndef DOINIT +EXT char *op_name[]; +#else +EXT char *op_name[] = { +" +awk -F'\t' '{print "\t\""$2"\","}' data +printf "}; +#endif + +" + +# Emit function declarations. +awk -F'\t' '{print "OP *\t"$3"\t_((OP* op));"}' data | sort | uniq +awk '{print "OP *\tpp_"$1"\t_((void));"}' data + +# Emit ppcode switch array. +printf " +#ifndef DOINIT +EXT OP * (*ppaddr[])(); +#else +EXT OP * (*ppaddr[])() = { +" +awk '{print "\tpp_"$1","}' data +printf "}; +#endif +" + +# Emit check routines. +printf " +#ifndef DOINIT +EXT OP * (*check[])(); +#else +EXT OP * (*check[])() = { +" +awk -F'\t' '{print "\t"$3",\t/* "$1" */"}' data +printf "}; +#endif +" + +# Emit allowed argument types. +printf " +#ifndef DOINIT +EXT U32 opargs[]; +#else +EXT U32 opargs[] = { +" +awk -F'\t' -f opcode.awk data +printf "}; +#endif +" + +rm data diff --git a/sysa/perl5.000/mk/main.mk b/sysa/perl5.000/mk/main.mk new file mode 100644 index 0000000..9cfa285 --- /dev/null +++ b/sysa/perl5.000/mk/main.mk @@ -0,0 +1,18 @@ +# SPDX-FileCopyrightText: 2021 Andrius Štikonas + +# SPDX-License-Identifier: GPL-3.0-or-later + +CC = tcc + +.PHONY: all + +MINIPERL_SRC = av deb doio doop dump gv hv mg miniperlmain op perl perly pp pp_ctl pp_hot pp_sys regcomp regexec run scope sv taint toke util +MINIPERL_OBJ = $(addsuffix .o, $(MINIPERL_SRC)) + +all: miniperl + +miniperl: $(MINIPERL_OBJ) + $(CC) $(CFLAGS) $^ $(LDFLAGS) -o $@ + +install: all + install miniperl $(PREFIX)/bin/perl diff --git a/sysa/perl5.000/perl5.000.sh b/sysa/perl5.000/perl5.000.sh new file mode 100755 index 0000000..56c0a90 --- /dev/null +++ b/sysa/perl5.000/perl5.000.sh @@ -0,0 +1,23 @@ +# SPDX-FileCopyrightText: 2021 Andrius Štikonas +# +# SPDX-License-Identifier: GPL-3.0-or-later + +src_prepare() { + default_src_prepare + + rm perly.c perly.h + bison -d perly.y + mv perly.tab.c perly.c + mv perly.tab.h perly.h + + rm embed.h + ./embed_h.SH + + rm keywords.h + chmod +x keywords.sh + ./keywords.sh + + rm opcode.h + chmod +x opcode.sh + ./opcode.sh +} diff --git a/sysa/run.sh b/sysa/run.sh index facb32c..7c73ca1 100755 --- a/sysa/run.sh +++ b/sysa/run.sh @@ -41,4 +41,7 @@ build coreutils-5.0 # Part 28 build gawk-3.0.4 +# Part 29 +build perl5.000 + echo "Bootstrapping completed." From 7bace0cc9921b2a5689451cdb5612beac0bf2cc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Tue, 16 Feb 2021 23:20:34 +0000 Subject: [PATCH 3/6] Build perl 5.003. --- README.md | 6 +++ SHA256SUMS.sources | 1 + rootfs.sh | 4 ++ sysa/perl5.003/files/config.h | 90 +++++++++++++++++++++++++++++++++++ sysa/perl5.003/mk/main.mk | 18 +++++++ sysa/perl5.003/perl5.003.sh | 17 +++++++ sysa/run.sh | 3 ++ 7 files changed, 139 insertions(+) create mode 100644 sysa/perl5.003/files/config.h create mode 100644 sysa/perl5.003/mk/main.mk create mode 100755 sysa/perl5.003/perl5.003.sh diff --git a/README.md b/README.md index e2f370d..02716f8 100644 --- a/README.md +++ b/README.md @@ -350,3 +350,9 @@ pre-generated Configure script. At this first step we build `miniperl` which is `perl` without support for loading modules. + +#### Part 30: perl 5.003 + +We now use `perl` from the previous stage to recreate pre-generated files that +are shipped in perl 5.003. But for now we still need to use handwritten makefile +instead of `./Configure` script. diff --git a/SHA256SUMS.sources b/SHA256SUMS.sources index f86ee27..5d482a2 100644 --- a/SHA256SUMS.sources +++ b/SHA256SUMS.sources @@ -14,4 +14,5 @@ a32032bab36208509466654df12f507600dfe0313feebbcd218c32a70bf72a16 grep-2.4.tar.g 1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3 musl-1.1.24.tar.gz ecb5c6469d732bcf01d6ec1afe9e64f1668caba5bfdb103c28d7f537ba3cdb8a patch-2.5.9.tar.gz 1beb92a6fc29483d0a8ab71379fb0e930a2c90198d81ba2930c1e788b5f58873 perl5.000.tar.gz +7dd4f058d3437f7469a1ca5be77e3834e631e295bc2d4d75d6fab5a9730070fd perl5.003.tar.gz c6c37e888b136ccefab903c51149f4b7bd659d69d4aea21245f61053a57aa60a tar-1.12.tar.gz diff --git a/rootfs.sh b/rootfs.sh index e7e4ce1..9cee346 100755 --- a/rootfs.sh +++ b/rootfs.sh @@ -193,6 +193,10 @@ get_file https://ftp.gnu.org/gnu/gawk/gawk-3.0.4.tar.gz # perl 5.000 get_file http://mirrors.develooper.com/perl/really-ancient-perls/oldperl/dist/leo/src/perl5/perl5.000.tar.gz +# perl 5.003 +# Upstream tarball is a bit broken, slackware repackaged it +get_file https://mirrors.slackware.com/slackware/slackware-3.1/source/d/perl-5.003/perl5.003.tar.gz + # General cleanup find tmp -name .git -exec rm -rf \; diff --git a/sysa/perl5.003/files/config.h b/sysa/perl5.003/files/config.h new file mode 100644 index 0000000..7656fc2 --- /dev/null +++ b/sysa/perl5.003/files/config.h @@ -0,0 +1,90 @@ +// SPDX-FileCopyrightText: 2021 Andrius Štikonas + +// SPDX-License-Identifier: GPL-3.0-or-later + +#define MEM_ALIGNBYTES 8 +#define BIN "/after/bin" +#define BYTEORDER 0x4321 +#define CPPSTDIN "tcc -E" +#define CPPMINUS "-" +#define HAS_ALARM +#define HAS_FORK +#define HAS_MKDIR +#define HAS_PAUSE +#define HAS_RMDIR +#define HAS_STRERROR +#define HAS_SYS_ERRLIST +#define Strerror(e) strerror(e) + +#define HAS_SYSCALL +#define HAS_TIMES + +#define HAS_VPRINTF +#define Gid_t gid_t + +#define I_DIRENT +#define Direntry_t struct dirent + +#define I_DLFCN +#define I_FCNTL +#define I_GRP +#define I_LIMITS +#define I_MATH +#define I_NETINET_IN +#define I_PWD +#define I_STDDEF +#define I_STDLIB +#define I_STRING +#define I_SYS_DIR +#define I_SYS_IOCTL +#define I_SYS_PARAM +#define I_SYS_SELECT +#define I_SYS_STAT +#define I_SYS_TIMES +#define I_TERMIOS +#define I_TIME +#define I_UNISTD +#define I_UTIME +#define I_STDARG + +#define INTSIZE 4 +#define Off_t off_t + +#define PRIVLIB "/after/lib/perl5" + +#define _(args) args + +#define RANDBITS 31 + +#define SCRIPTDIR "/after/bin" + +#define SIG_NAME "ZERO","HUP","INT","QUIT","ILL","TRAP","IOT","BUS","FPE","KILL","USR1","SEGV","USR2","PIPE","ALRM","TERM","STKFLT","CHLD","CONT","STOP","TSTP","TTIN","TTOU","URG","XCPU","XFSZ","VTALRM","PROF","WINCH", "IO", "POLL", "PWR", "SYS", "UNUSED" +#define SIG_NUM 0, 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 + +#define Size_t size_t + +#define STDCHAR char +#define Uid_t uid_t + +#define LOC_SED "/after/bin/sed" +#define ARCHLIB "/after/lib/perl5/" + +#define CAT2(a,b) a##b +#define Gconvert(x,n,t,b) gcvt((x),(n),(b)) + +#define Time_t time_t + +#define SSize_t ssize_t + +#define Sigjmp_buf sigjmp_buf + +#define Sigsetjmp(buf,save_mask) setjmp(buf) +#define Siglongjmp(buf,retval) longjmp(buf,retval) + +#define Signal_t void + +#define OSNAME "linux" + +#define PRIVLIB_EXP "/after/lib/perl5/5.003" + +#undef __DATE__ /* want reproducible build */ diff --git a/sysa/perl5.003/mk/main.mk b/sysa/perl5.003/mk/main.mk new file mode 100644 index 0000000..1122f73 --- /dev/null +++ b/sysa/perl5.003/mk/main.mk @@ -0,0 +1,18 @@ +# SPDX-FileCopyrightText: 2021 Andrius Štikonas + +# SPDX-License-Identifier: GPL-3.0-or-later + +CC = tcc + +.PHONY: all + +MINIPERL_SRC = av deb doio doop dump globals gv hv mg miniperlmain op perl perly pp pp_ctl pp_hot pp_sys regcomp regexec run scope sv taint toke util +MINIPERL_OBJ = $(addsuffix .o, $(MINIPERL_SRC)) + +all: miniperl + +miniperl: $(MINIPERL_OBJ) + $(CC) $(CFLAGS) $^ $(LDFLAGS) -o $@ + +install: all + install miniperl $(PREFIX)/bin/perl diff --git a/sysa/perl5.003/perl5.003.sh b/sysa/perl5.003/perl5.003.sh new file mode 100755 index 0000000..fdd4892 --- /dev/null +++ b/sysa/perl5.003/perl5.003.sh @@ -0,0 +1,17 @@ +# SPDX-FileCopyrightText: 2021 Andrius Štikonas +# +# SPDX-License-Identifier: GPL-3.0-or-later + +src_prepare() { + default_src_prepare + + rm perly.c perly.h + bison -d perly.y + mv perly.tab.c perly.c + mv perly.tab.h perly.h + + for file in embed keywords opcode; do + rm ${file}.h + perl ${file}.pl + done +} diff --git a/sysa/run.sh b/sysa/run.sh index 7c73ca1..660b739 100755 --- a/sysa/run.sh +++ b/sysa/run.sh @@ -44,4 +44,7 @@ build gawk-3.0.4 # Part 29 build perl5.000 +# Part 30 +build perl5.003 + echo "Bootstrapping completed." From e9455c8463a1f0575d728cb5a2c5219407604732 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Wed, 17 Feb 2021 00:20:44 +0000 Subject: [PATCH 4/6] Install perl 5.003 library files. --- sysa/perl5.003/mk/main.mk | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sysa/perl5.003/mk/main.mk b/sysa/perl5.003/mk/main.mk index 1122f73..332aabd 100644 --- a/sysa/perl5.003/mk/main.mk +++ b/sysa/perl5.003/mk/main.mk @@ -16,3 +16,5 @@ miniperl: $(MINIPERL_OBJ) install: all install miniperl $(PREFIX)/bin/perl + mkdir -p $(PREFIX)/lib/perl5/5.003 + mv lib/* $(PREFIX)/lib/perl5/5.003/ From 621b099a57e1eea03a14672fdb7239f69dc91336 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Wed, 17 Feb 2021 20:23:50 +0000 Subject: [PATCH 5/6] Switch to perl tarballs generated from archiving git tags. --- SHA256SUMS.sources | 4 ++-- rootfs.sh | 5 ++--- sysa/{perl5.000 => perl-5.000}/files/config.h | 0 sysa/{perl5.000 => perl-5.000}/files/keywords.sh | 2 ++ sysa/{perl5.000 => perl-5.000}/files/opcode.awk | 0 sysa/{perl5.000 => perl-5.000}/files/opcode.sh | 1 + sysa/{perl5.000 => perl-5.000}/mk/main.mk | 0 .../perl5.000.sh => perl-5.000/perl-5.000.sh} | 12 +++++++++++- sysa/{perl5.003 => perl-5.003}/files/config.h | 0 sysa/{perl5.003 => perl-5.003}/mk/main.mk | 0 .../perl5.003.sh => perl-5.003/perl-5.003.sh} | 8 ++++++++ sysa/run.sh | 4 ++-- 12 files changed, 28 insertions(+), 8 deletions(-) rename sysa/{perl5.000 => perl-5.000}/files/config.h (100%) rename sysa/{perl5.000 => perl-5.000}/files/keywords.sh (87%) rename sysa/{perl5.000 => perl-5.000}/files/opcode.awk (100%) rename sysa/{perl5.000 => perl-5.000}/files/opcode.sh (97%) rename sysa/{perl5.000 => perl-5.000}/mk/main.mk (100%) rename sysa/{perl5.000/perl5.000.sh => perl-5.000/perl-5.000.sh} (67%) rename sysa/{perl5.003 => perl-5.003}/files/config.h (100%) rename sysa/{perl5.003 => perl-5.003}/mk/main.mk (100%) rename sysa/{perl5.003/perl5.003.sh => perl-5.003/perl-5.003.sh} (70%) diff --git a/SHA256SUMS.sources b/SHA256SUMS.sources index 5d482a2..3961a5e 100644 --- a/SHA256SUMS.sources +++ b/SHA256SUMS.sources @@ -13,6 +13,6 @@ a32032bab36208509466654df12f507600dfe0313feebbcd218c32a70bf72a16 grep-2.4.tar.g 64b30b41fde2ebf669e6af489883fb1df6a06ac30555a96cfa3c39ecce7267dd make-3.80.tar.gz 1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3 musl-1.1.24.tar.gz ecb5c6469d732bcf01d6ec1afe9e64f1668caba5bfdb103c28d7f537ba3cdb8a patch-2.5.9.tar.gz -1beb92a6fc29483d0a8ab71379fb0e930a2c90198d81ba2930c1e788b5f58873 perl5.000.tar.gz -7dd4f058d3437f7469a1ca5be77e3834e631e295bc2d4d75d6fab5a9730070fd perl5.003.tar.gz +1ae43c8d2983404b9eec61c96e3ffa27e7b07e08215c95c015a4ab0095373ef3 perl-5.000.tar.gz +9fa29beb2fc4a3c373829fc051830796de301f32a719d0b52a400d1719bbd7b1 perl-5.003.tar.gz c6c37e888b136ccefab903c51149f4b7bd659d69d4aea21245f61053a57aa60a tar-1.12.tar.gz diff --git a/rootfs.sh b/rootfs.sh index 9cee346..aacdce6 100755 --- a/rootfs.sh +++ b/rootfs.sh @@ -191,11 +191,10 @@ get_file https://ftp.gnu.org/gnu/diffutils/diffutils-2.7.tar.gz get_file https://ftp.gnu.org/gnu/gawk/gawk-3.0.4.tar.gz # perl 5.000 -get_file http://mirrors.develooper.com/perl/really-ancient-perls/oldperl/dist/leo/src/perl5/perl5.000.tar.gz +get_file https://github.com/Perl/perl5/archive/perl-5.000.tar.gz # perl 5.003 -# Upstream tarball is a bit broken, slackware repackaged it -get_file https://mirrors.slackware.com/slackware/slackware-3.1/source/d/perl-5.003/perl5.003.tar.gz +get_file https://github.com/Perl/perl5/archive/perl-5.003.tar.gz # General cleanup find tmp -name .git -exec rm -rf \; diff --git a/sysa/perl5.000/files/config.h b/sysa/perl-5.000/files/config.h similarity index 100% rename from sysa/perl5.000/files/config.h rename to sysa/perl-5.000/files/config.h diff --git a/sysa/perl5.000/files/keywords.sh b/sysa/perl-5.000/files/keywords.sh similarity index 87% rename from sysa/perl5.000/files/keywords.sh rename to sysa/perl-5.000/files/keywords.sh index 76950e5..34b0173 100644 --- a/sysa/perl5.000/files/keywords.sh +++ b/sysa/perl-5.000/files/keywords.sh @@ -3,4 +3,6 @@ # # SPDX-License-Identifier: GPL-3.0-or-later +# This file replaces keywords.pl + sed -e '1,/__END__/ d' keywords.pl | sed '1d' | awk '{print "#define", "KEY_"$0, NR-1}' > keywords.h diff --git a/sysa/perl5.000/files/opcode.awk b/sysa/perl-5.000/files/opcode.awk similarity index 100% rename from sysa/perl5.000/files/opcode.awk rename to sysa/perl-5.000/files/opcode.awk diff --git a/sysa/perl5.000/files/opcode.sh b/sysa/perl-5.000/files/opcode.sh similarity index 97% rename from sysa/perl5.000/files/opcode.sh rename to sysa/perl-5.000/files/opcode.sh index 9f52c18..8645e75 100755 --- a/sysa/perl5.000/files/opcode.sh +++ b/sysa/perl-5.000/files/opcode.sh @@ -3,6 +3,7 @@ # # SPDX-License-Identifier: GPL-3.0-or-later +# This file replaces opcode.pl sed -e '1,/__END__/ d; s/[#].*$//g; /^$/d' opcode.pl | tr -s '\t' '\t' > data diff --git a/sysa/perl5.000/mk/main.mk b/sysa/perl-5.000/mk/main.mk similarity index 100% rename from sysa/perl5.000/mk/main.mk rename to sysa/perl-5.000/mk/main.mk diff --git a/sysa/perl5.000/perl5.000.sh b/sysa/perl-5.000/perl-5.000.sh similarity index 67% rename from sysa/perl5.000/perl5.000.sh rename to sysa/perl-5.000/perl-5.000.sh index 56c0a90..b209ce7 100755 --- a/sysa/perl5.000/perl5.000.sh +++ b/sysa/perl-5.000/perl-5.000.sh @@ -2,21 +2,31 @@ # # SPDX-License-Identifier: GPL-3.0-or-later +src_unpack() { + default_src_unpack + + mv perl5-perl-5.000 perl-5.000 +} + src_prepare() { default_src_prepare + # Remove and regenerate bison files rm perly.c perly.h bison -d perly.y mv perly.tab.c perly.c mv perly.tab.h perly.h + # Regenerate embed.h rm embed.h ./embed_h.SH + # Regenerate keywords.h rm keywords.h chmod +x keywords.sh ./keywords.sh - + + # Regenerate opcode.h rm opcode.h chmod +x opcode.sh ./opcode.sh diff --git a/sysa/perl5.003/files/config.h b/sysa/perl-5.003/files/config.h similarity index 100% rename from sysa/perl5.003/files/config.h rename to sysa/perl-5.003/files/config.h diff --git a/sysa/perl5.003/mk/main.mk b/sysa/perl-5.003/mk/main.mk similarity index 100% rename from sysa/perl5.003/mk/main.mk rename to sysa/perl-5.003/mk/main.mk diff --git a/sysa/perl5.003/perl5.003.sh b/sysa/perl-5.003/perl-5.003.sh similarity index 70% rename from sysa/perl5.003/perl5.003.sh rename to sysa/perl-5.003/perl-5.003.sh index fdd4892..e683d1f 100755 --- a/sysa/perl5.003/perl5.003.sh +++ b/sysa/perl-5.003/perl-5.003.sh @@ -2,14 +2,22 @@ # # SPDX-License-Identifier: GPL-3.0-or-later +src_unpack() { + default_src_unpack + + mv perl5-perl-5.003 perl-5.003 +} + src_prepare() { default_src_prepare + # Regenerate bison files rm perly.c perly.h bison -d perly.y mv perly.tab.c perly.c mv perly.tab.h perly.h + # Regenerate other prebuilt header files for file in embed keywords opcode; do rm ${file}.h perl ${file}.pl diff --git a/sysa/run.sh b/sysa/run.sh index 660b739..4d7cb89 100755 --- a/sysa/run.sh +++ b/sysa/run.sh @@ -42,9 +42,9 @@ build coreutils-5.0 build gawk-3.0.4 # Part 29 -build perl5.000 +build perl-5.000 # Part 30 -build perl5.003 +build perl-5.003 echo "Bootstrapping completed." From d4ddf4b79b2c8be53036b03d24fcd3a44d001ed3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Wed, 17 Feb 2021 23:46:18 +0000 Subject: [PATCH 6/6] Build Perl 5.4.50. --- README.md | 3 + SHA256SUMS.sources | 1 + rootfs.sh | 3 + sysa/perl5.004_05/files/config.h | 98 +++++++++++++++++++++++++++++++ sysa/perl5.004_05/mk/main.mk | 20 +++++++ sysa/perl5.004_05/perl5.004_05.sh | 29 +++++++++ sysa/run.sh | 3 + 7 files changed, 157 insertions(+) create mode 100644 sysa/perl5.004_05/files/config.h create mode 100644 sysa/perl5.004_05/mk/main.mk create mode 100755 sysa/perl5.004_05/perl5.004_05.sh diff --git a/README.md b/README.md index 02716f8..7df2be5 100644 --- a/README.md +++ b/README.md @@ -356,3 +356,6 @@ loading modules. We now use `perl` from the previous stage to recreate pre-generated files that are shipped in perl 5.003. But for now we still need to use handwritten makefile instead of `./Configure` script. + +### Part 31: perl 5.004_05 +Yet another version of perl. diff --git a/SHA256SUMS.sources b/SHA256SUMS.sources index 3961a5e..3608aee 100644 --- a/SHA256SUMS.sources +++ b/SHA256SUMS.sources @@ -15,4 +15,5 @@ a32032bab36208509466654df12f507600dfe0313feebbcd218c32a70bf72a16 grep-2.4.tar.g ecb5c6469d732bcf01d6ec1afe9e64f1668caba5bfdb103c28d7f537ba3cdb8a patch-2.5.9.tar.gz 1ae43c8d2983404b9eec61c96e3ffa27e7b07e08215c95c015a4ab0095373ef3 perl-5.000.tar.gz 9fa29beb2fc4a3c373829fc051830796de301f32a719d0b52a400d1719bbd7b1 perl-5.003.tar.gz +1184478b298978b164a383ed5661e3a117c48ab97d6d0ab7ef614cdbe918b9eb perl5.004_05.tar.gz c6c37e888b136ccefab903c51149f4b7bd659d69d4aea21245f61053a57aa60a tar-1.12.tar.gz diff --git a/rootfs.sh b/rootfs.sh index aacdce6..501cb98 100755 --- a/rootfs.sh +++ b/rootfs.sh @@ -196,6 +196,9 @@ get_file https://github.com/Perl/perl5/archive/perl-5.000.tar.gz # perl 5.003 get_file https://github.com/Perl/perl5/archive/perl-5.003.tar.gz +# perl 5.004_05 +get_file https://www.cpan.org/src/5.0/perl5.004_05.tar.gz + # General cleanup find tmp -name .git -exec rm -rf \; diff --git a/sysa/perl5.004_05/files/config.h b/sysa/perl5.004_05/files/config.h new file mode 100644 index 0000000..9b1206b --- /dev/null +++ b/sysa/perl5.004_05/files/config.h @@ -0,0 +1,98 @@ +// SPDX-FileCopyrightText: 2021 Andrius Štikonas + +// SPDX-License-Identifier: GPL-3.0-or-later + +#define MEM_ALIGNBYTES 8 +#define BIN "/after/bin" +#define BYTEORDER 0x4321 +#define CPPSTDIN "tcc -E" +#define CPPMINUS "-" +#define HAS_ALARM +#define HAS_FORK +#define HAS_MKDIR +#define HAS_PAUSE +#define HAS_RMDIR +#define HAS_STRERROR +#define HAS_SYS_ERRLIST +#define Strerror(e) strerror(e) + +#define HAS_SYSCALL +#define HAS_TIMES + +#define HAS_VPRINTF +#define Gid_t gid_t + +#define I_DIRENT +#define Direntry_t struct dirent + +#define I_DLFCN +#define I_FCNTL +#define I_GRP +#define I_LIMITS +#define I_MATH +#define I_NETINET_IN +#define I_PWD +#define I_STDDEF +#define I_STDLIB +#define I_STRING +#define I_SYS_DIR +#define I_SYS_IOCTL +#define I_SYS_PARAM +#define I_SYS_SELECT +#define I_SYS_STAT +#define I_SYS_TIMES +#define I_TERMIOS +#define I_TIME +#define I_UNISTD +#define I_UTIME +#define I_STDARG + +#define INTSIZE 4 +#define Off_t off_t + +#define PRIVLIB "/after/lib/perl5" + +#define _(args) args + +#define RANDBITS 31 + +#define SCRIPTDIR "/after/bin" + +#define SIG_NAME "ZERO","HUP","INT","QUIT","ILL","TRAP","IOT","BUS","FPE","KILL","USR1","SEGV","USR2","PIPE","ALRM","TERM","STKFLT","CHLD","CONT","STOP","TSTP","TTIN","TTOU","URG","XCPU","XFSZ","VTALRM","PROF","WINCH", "IO", "POLL", "PWR", "SYS", "UNUSED" +#define SIG_NUM 0, 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 + +#define Size_t size_t + +#define STDCHAR char +#define Uid_t uid_t + +#define LOC_SED "/after/bin/sed" +#define ARCHLIB "/after/lib/perl5/" + +#define CAT2(a,b) a##b +#define Gconvert(x,n,t,b) gcvt((x),(n),(b)) + +#define Time_t time_t + +#define SSize_t ssize_t + +#define Sigjmp_buf sigjmp_buf + +#define Sigsetjmp(buf,save_mask) setjmp(buf) +#define Siglongjmp(buf,retval) longjmp(buf,retval) + +#define Signal_t void + +#define OSNAME "linux" + +#define PRIVLIB_EXP "/after/lib/perl5/5.004_05" + +#undef __DATE__ /* want reproducible build */ + +#define Malloc_t void * +#define Free_t void + +#define SH_PATH "/bin/sh" +#define ARCHNAME "i386-linux" +#define BIN_EXP "/after/bin" + diff --git a/sysa/perl5.004_05/mk/main.mk b/sysa/perl5.004_05/mk/main.mk new file mode 100644 index 0000000..75fb848 --- /dev/null +++ b/sysa/perl5.004_05/mk/main.mk @@ -0,0 +1,20 @@ +# SPDX-FileCopyrightText: 2021 Andrius Štikonas + +# SPDX-License-Identifier: GPL-3.0-or-later + +CC = tcc + +.PHONY: all + +MINIPERL_SRC = av deb doio doop dump globals gv hv mg miniperlmain op perl perlio perly pp pp_ctl pp_hot pp_sys regcomp regexec run scope sv taint toke universal util +MINIPERL_OBJ = $(addsuffix .o, $(MINIPERL_SRC)) + +all: miniperl + +miniperl: $(MINIPERL_OBJ) + $(CC) $(CFLAGS) $^ $(LDFLAGS) -o $@ + +install: all + install miniperl $(PREFIX)/bin/perl + mkdir -p $(PREFIX)/lib/perl5/5.004_05 + mv lib/* $(PREFIX)/lib/perl5/5.004_05/ diff --git a/sysa/perl5.004_05/perl5.004_05.sh b/sysa/perl5.004_05/perl5.004_05.sh new file mode 100755 index 0000000..11029e2 --- /dev/null +++ b/sysa/perl5.004_05/perl5.004_05.sh @@ -0,0 +1,29 @@ +# SPDX-FileCopyrightText: 2021 Andrius Štikonas +# +# SPDX-License-Identifier: GPL-3.0-or-later + +src_prepare() { + default_src_prepare + + # Regenerate bison files + rm perly.c perly.h + bison -d perly.y + mv perly.tab.c perly.c + mv perly.tab.h perly.h + + # tcc messes up floats, which breaks version detection + sed -i '/require/d' embed.pl + + # Regenerate other prebuilt header files + for file in embed keywords opcode; do + rm ${file}.h + perl ${file}.pl + done +} + +src_install() { + default_src_install + + # Remove old perl + rm -rf "${PREFIX}"/lib/perl5/5.003 +} diff --git a/sysa/run.sh b/sysa/run.sh index 4d7cb89..c545ed1 100755 --- a/sysa/run.sh +++ b/sysa/run.sh @@ -47,4 +47,7 @@ build perl-5.000 # Part 30 build perl-5.003 +# Part 31 +build perl5.004_05 + echo "Bootstrapping completed."