Merge pull request #40 from stikonas/perl

Add perl 5.004_05 (5.4.50).
This commit is contained in:
fosslinux 2021-02-18 18:38:34 +11:00 committed by GitHub
commit e2796e8d57
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 565 additions and 2 deletions

View File

@ -334,4 +334,28 @@ 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.
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.
#### 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.
### Part 31: perl 5.004_05
Yet another version of perl.

View File

@ -13,4 +13,7 @@ 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
1ae43c8d2983404b9eec61c96e3ffa27e7b07e08215c95c015a4ab0095373ef3 perl-5.000.tar.gz
9fa29beb2fc4a3c373829fc051830796de301f32a719d0b52a400d1719bbd7b1 perl-5.003.tar.gz
1184478b298978b164a383ed5661e3a117c48ab97d6d0ab7ef614cdbe918b9eb perl5.004_05.tar.gz
c6c37e888b136ccefab903c51149f4b7bd659d69d4aea21245f61053a57aa60a tar-1.12.tar.gz

View File

@ -190,6 +190,15 @@ 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 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 \;

View File

@ -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

View File

@ -0,0 +1,73 @@
// SPDX-FileCopyrightText: 2021 Andrius Štikonas <andrius@stikonas.eu>
// 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

View File

@ -0,0 +1,8 @@
#!/bin/sh -e
# SPDX-FileCopyrightText: 2021 Andrius Štikonas <andrius@stikonas.eu>
#
# 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

View File

@ -0,0 +1,31 @@
# SPDX-FileCopyrightText: 2021 Andrius Štikonas <andrius@stikonas.eu>
#
# 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)
}

72
sysa/perl-5.000/files/opcode.sh Executable file
View File

@ -0,0 +1,72 @@
#!/bin/sh -e
# SPDX-FileCopyrightText: 2021 Andrius Štikonas <andrius@stikonas.eu>
#
# 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
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

View File

@ -0,0 +1,18 @@
# SPDX-FileCopyrightText: 2021 Andrius Štikonas <andrius@stikonas.eu>
# 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

33
sysa/perl-5.000/perl-5.000.sh Executable file
View File

@ -0,0 +1,33 @@
# SPDX-FileCopyrightText: 2021 Andrius Štikonas <andrius@stikonas.eu>
#
# 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
}

View File

@ -0,0 +1,90 @@
// SPDX-FileCopyrightText: 2021 Andrius Štikonas <andrius@stikonas.eu>
// 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 */

View File

@ -0,0 +1,20 @@
# SPDX-FileCopyrightText: 2021 Andrius Štikonas <andrius@stikonas.eu>
# 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
mkdir -p $(PREFIX)/lib/perl5/5.003
mv lib/* $(PREFIX)/lib/perl5/5.003/

25
sysa/perl-5.003/perl-5.003.sh Executable file
View File

@ -0,0 +1,25 @@
# SPDX-FileCopyrightText: 2021 Andrius Štikonas <andrius@stikonas.eu>
#
# 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
done
}

View File

@ -0,0 +1,98 @@
// SPDX-FileCopyrightText: 2021 Andrius Štikonas <andrius@stikonas.eu>
// 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"

View File

@ -0,0 +1,20 @@
# SPDX-FileCopyrightText: 2021 Andrius Štikonas <andrius@stikonas.eu>
# 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/

View File

@ -0,0 +1,29 @@
# SPDX-FileCopyrightText: 2021 Andrius Štikonas <andrius@stikonas.eu>
#
# 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
}

View File

@ -41,4 +41,13 @@ build coreutils-5.0
# Part 28
build gawk-3.0.4
# Part 29
build perl-5.000
# Part 30
build perl-5.003
# Part 31
build perl5.004_05
echo "Bootstrapping completed."