diff --git a/rootfs.sh b/rootfs.sh index c60e6da..43bad6d 100755 --- a/rootfs.sh +++ b/rootfs.sh @@ -133,6 +133,9 @@ get_file https://ftp.gnu.org/gnu/make/make-3.80.tar.gz # bzip2 1.0.8 get_file ftp://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz +# 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 diff --git a/sysa/after.kaem.run b/sysa/after.kaem.run index ade0191..9c2ee43 100755 --- a/sysa/after.kaem.run +++ b/sysa/after.kaem.run @@ -97,9 +97,15 @@ cd bzip2-1.0.8 kaem --file ../bzip2-1.0.8.kaem cd .. -# Part 15: m4 +# Part 15: bash +/after/bin/gunzip bash-2.05b.tar.gz +/after/bin/tar xf bash-2.05b.tar +cd bash-2.05b +kaem --file ../bash-2.05b.kaem +cd .. + +# Part 16: m4 /after/bin/gunzip m4-1.4.tar.gz /after/bin/tar xf m4-1.4.tar cd m4-1.4 kaem --file ../m4-1.4.kaem -cd .. diff --git a/sysa/bash-2.05b-builtins.mk b/sysa/bash-2.05b-builtins.mk new file mode 100644 index 0000000..5e4146a --- /dev/null +++ b/sysa/bash-2.05b-builtins.mk @@ -0,0 +1,23 @@ +.SUFFIXES = .def + +include ../common.mk + +CFLAGS = \ + -I. \ + -I.. \ + -I../include \ + -I../lib \ + $(COMMON_CFLAGS) + +BUILTINS_DEFS = $(addsuffix .def, $(BUILTINS_DEF_FILES)) +BUILTINS_DEF_OBJS = $(addsuffix .o, $(BUILTINS_DEF_FILES)) +BUILTINS_STATIC_FILES = common evalstring evalfile getopt bashgetopt +BUILTINS_STATIC_OBJS = $(addsuffix .o, $(BUILTINS_STATIC_FILES)) +BUILTINS_OBJS = $(BUILTINS_DEF_OBJS) $(BUILTINS_STATIC_OBJS) + +%.o: %.def + ../mkbuiltins $< + $(CC) -c $(CFLAGS) -o $@ $*.c + +libbuiltins.a: $(BUILTINS_OBJS) builtins.o + $(AR) cr $@ $(BUILTINS_OBJS) builtins.o diff --git a/sysa/bash-2.05b-common.mk b/sysa/bash-2.05b-common.mk new file mode 100644 index 0000000..3cca351 --- /dev/null +++ b/sysa/bash-2.05b-common.mk @@ -0,0 +1,53 @@ +CC = tcc +LD = tcc +AR = tcc -ar + +COMMON_CFLAGS = \ + -DHAVE_DIRENT_H \ + -DSTRUCT_DIRENT_HAS_D_INO \ + -DHAVE_STDINT_H \ + -DHAVE_LIMITS_H \ + -DHAVE_STRING_H \ + -DHAVE_INTTYPES_H \ + -DRETSIGTYPE=void \ + -DHUGE_VAL=10000000000.0 \ + -DTERMIO_TTY_DRIVER \ + -DPREFER_STDARG \ + -DHAVE_DECL_STRTOL \ + -DHAVE_DECL_STRTOLL \ + -DHAVE_DECL_STRTOUL \ + -DHAVE_DECL_STRTOULL \ + -DHAVE_TZNAME \ + -DPIPESIZE=4096 \ + -DDEFAULT_PATH_VALUE=\"/after/bin\" \ + -DSTANDARD_UTILS_PATH=\"/after/bin\" \ + -DPPROMPT=\"$ \" \ + -DSPROMPT=\"$ \" \ + -DCONF_MACHTYPE=\"bootstrap\" \ + -DGETGROUPS_T=int \ + -DCOND_COMMAND \ + -DCONF_HOSTTYPE=\"i386\" \ + -DCONF_OSTYPE=\"linux\" \ + -DDEFAULT_MAIL_DIRECTORY=\"/fake-mail\" \ + -DVOID_SIGHANDLER \ + -DDISTVERSION=\"2.05b\" \ + -DBUILDVERSION=\"0\" \ + -DSCCSVERSION=\"2.05b\" \ + -DLC_ALL=\"C\" \ + -DHAVE_STRERROR \ + -DHAVE_MEMSET \ + -DHAVE_DUP2 \ + -DHAVE_STRTOUL \ + -DHAVE_STRTOULL \ + -DHAVE_STRCHR \ + -DHAVE_BCOPY \ + -DHAVE_BZERO \ + -DHAVE_POSIX_SIGNALS \ + -DHAVE_GETCWD \ + -Dendpwent\(x\)=0 \ + -Denable_hostname_completion\(on_or_off\)=0 + +BUILTINS_DEF_FILES = alias bind break builtin cd colon command complete declare \ + echo enable eval exec exit fc fg_bg hash history jobs kill let read return \ + set setattr shift source suspend test times trap type ulimit umask wait \ + getopts pushd shopt printf diff --git a/sysa/bash-2.05b.kaem b/sysa/bash-2.05b.kaem new file mode 100755 index 0000000..2daf28c --- /dev/null +++ b/sysa/bash-2.05b.kaem @@ -0,0 +1,31 @@ +#!/bin/sh + +set -ex + +# Variables +bindir=/after/bin + +catm config.h +catm include/version.h +catm include/pipesize.h + +# Patch +patch -Np0 -i ../patches/bash-2.05b/mes-libc.patch +patch -Np0 -i ../patches/bash-2.05b/tinycc.patch +patch -Np0 -i ../patches/bash-2.05b/missing-defines.patch +patch -Np0 -i ../patches/bash-2.05b/locale.patch +patch -Np0 -i ../patches/bash-2.05b/dev-tty.patch + +# Compile +cp ../bash-2.05b.mk Makefile +cp ../bash-2.05b-builtins.mk builtins/Makefile +cp ../bash-2.05b-common.mk common.mk +make mkbuiltins +cd builtins +make libbuiltins.a +cd .. +make + +# Install +cp bash /after/bin/ +chmod 755 /after/bin/bash diff --git a/sysa/bash-2.05b.mk b/sysa/bash-2.05b.mk new file mode 100644 index 0000000..87eb5df --- /dev/null +++ b/sysa/bash-2.05b.mk @@ -0,0 +1,84 @@ +include common.mk + +CFLAGS = \ + -I. \ + -Iinclude \ + -Ilib \ + -Ilib/sh \ + -Ibuiltins \ + $(COMMON_CFLAGS) + +LDFLAGS = -L. -Lbuiltins +LIBRARIES = libsh.a builtins/libbuiltins.a libglob.a libtilde.a + +SHLIB_FILES = clktck getcwd getenv oslib setlinebuf strcasecmp strerror strtod \ + vprint itos rename zread zwrite shtty inet_aton netopen \ + strpbrk timeval clock makepath pathcanon pathphys stringlist stringvec \ + tmpfile spell strtrans strindex shquote snprintf mailstat fmtulong \ + fmtullong strtoll strtoull strtoimax strtoumax fmtumax netconn mktime \ + strftime xstrchr zcatfd +# FIXME: for some reason these don't get picked up correctly in the +# final linking cmd +SHLIB_ODD_FILES = zcatfd strtoumax spell pathphys +SHLIB_OBJS = $(addprefix lib/sh/, $(addsuffix .o, $(SHLIB_FILES))) +SHLIB_ODD_OBJS = $(addprefix lib/sh/, $(addsuffix .o, $(SHLIB_ODD_FILES))) + +MKBUILTINS_OBJS = builtins/mkbuiltins.o +BUILTINS_DEFS = $(addprefix builtins/, $(addsuffix .def, $(BUILTINS_DEF_FILES))) + +GLOB_FILES = glob strmatch smatch xmbsrtowcs +GLOB_OBJS = $(addprefix lib/glob/, $(addsuffix .o, $(GLOB_FILES))) + +TILDE_OBJS = lib/tilde/tilde.o + +MKSYNTAX_OBJS = mksyntax.o +MKSIGNAMES_OBJS = support/mksignames.o + +FILES = shell eval y.tab general make_cmd print_cmd dispose_cmd execute_cmd \ + variables copy_cmd error expr flags nojobs subst hashcmd hashlib mailcheck \ + trap input unwind_prot pathexp sig test version alias array arrayfunc \ + braces bracecomp bashhist bashline list stringlib locale findcmd redir \ + pcomplete pcomplib syntax xmalloc siglist +OBJS = $(addsuffix .o, $(FILES)) + +all: bash + +# Builtins + +mkbuiltins: $(MKBUILTINS_OBJS) + $(CC) $(CFLAGS) $(MKBUILTINS_OBJS) $(LDFLAGS) -o $@ + ./mkbuiltins -externfile builtins/builtext.h -structfile builtins/builtins.c -noproduction $(BUILTINS_DEFS) + +# libsh + +libsh.a: $(SHLIB_OBJS) + $(AR) cr $@ $(SHLIB_OBJS) + +# libglob + +libglob.a: $(GLOB_OBJS) + $(AR) cr $@ $(GLOB_OBJS) + +# libtilde + +libtilde.a: $(TILDE_OBJS) + $(AR) cr $@ $(TILDE_OBJS) + +# The actual program + +mksyntax: $(MKSYNTAX_OBJS) + $(CC) $(MKSYNTAX_OBJS) $(LDFLAGS) -o $@ -lgetopt + +syntax.c: mksyntax + ./mksyntax -o $@ + +mksignames: $(MKSIGNAMES_OBJS) + $(CC) $(MKSIGNAMES_OBJS) $(LDFLAGS) -o $@ -lgetopt + +signames.h: mksignames + ./mksignames $@ + +trap.c: signames.h + +bash: libsh.a libglob.a libtilde.a $(OBJS) + $(CC) -o bash $(LIBRARIES) $(OBJS) $(SHLIB_ODD_OBJS) $(LDFLAGS) -lsh -lbuiltins -lglob -ltilde diff --git a/sysa/patches/bash-2.05b/dev-tty.patch b/sysa/patches/bash-2.05b/dev-tty.patch new file mode 100644 index 0000000..3f59a65 --- /dev/null +++ b/sysa/patches/bash-2.05b/dev-tty.patch @@ -0,0 +1,11 @@ +diff --color -ru shell.c +--- shell.c 2002-07-02 01:27:11.000000000 +1000 ++++ shell.c 2021-01-16 11:23:36.407287955 +1100 +@@ -342,8 +342,6 @@ + # endif + #endif + +- check_dev_tty (); +- + #ifdef __CYGWIN__ + _cygwin32_check_tmp (); diff --git a/sysa/patches/bash-2.05b/extern.patch b/sysa/patches/bash-2.05b/extern.patch new file mode 100644 index 0000000..c424c29 --- /dev/null +++ b/sysa/patches/bash-2.05b/extern.patch @@ -0,0 +1,12 @@ +--- builtins/common.c.bak 2021-01-15 21:32:56.938683418 +1100 ++++ builtins/common.c 2021-01-15 21:34:09.102153806 +1100 +@@ -46,6 +46,9 @@ + #include "../flags.h" + #include "../jobs.h" + #include "../builtins.h" ++int num_shell_builtins; ++struct builtin *shell_builtins; ++struct builtin *current_builtin; + #include "../input.h" + #include "../execute_cmd.h" + #include "../trap.h" diff --git a/sysa/patches/bash-2.05b/locale.patch b/sysa/patches/bash-2.05b/locale.patch new file mode 100644 index 0000000..6529fe3 --- /dev/null +++ b/sysa/patches/bash-2.05b/locale.patch @@ -0,0 +1,11 @@ +--- locale.c 2021-01-15 09:38:55.729307629 +1100 ++++ locale.c 2021-01-15 11:19:01.929391346 +1100 +@@ -190,7 +190,7 @@ + set_lang (var, value) + char *var, *value; + { +- return ((lc_all == 0 || *lc_all == 0) ? setlocale (LC_ALL, value?value:"") != NULL : 0); ++ return 0; + } + + /* Get the value of one of the locale variables (LC_MESSAGES, LC_CTYPE) */ diff --git a/sysa/patches/bash-2.05b/mes-libc.patch b/sysa/patches/bash-2.05b/mes-libc.patch new file mode 100644 index 0000000..49eb5b0 --- /dev/null +++ b/sysa/patches/bash-2.05b/mes-libc.patch @@ -0,0 +1,13 @@ +diff --git lib/sh/snprintf.c lib/sh/snprintf.c +index 7669576..747aeba 100644 +--- lib/sh/snprintf.c ++++ lib/sh/snprintf.c +@@ -376,7 +376,7 @@ static void xfree __P((void *)); + if ((p)->flags & PF_STAR_P) \ + (p)->precision = GETARG (int) + +-#if defined (HAVE_LOCALE_H) ++#if 0 + # define GETLOCALEDATA(d, t, g) \ + do \ + { \ diff --git a/sysa/patches/bash-2.05b/missing-defines.patch b/sysa/patches/bash-2.05b/missing-defines.patch new file mode 100644 index 0000000..8227b7c --- /dev/null +++ b/sysa/patches/bash-2.05b/missing-defines.patch @@ -0,0 +1,21 @@ +--- ../bash-2.05b.bak/execute_cmd.c 2021-01-15 09:38:55.730307635 +1100 ++++ execute_cmd.c 2021-01-15 09:43:41.046896754 +1100 +@@ -286,12 +286,18 @@ + { + if (currently_executing_command->type == cm_simple) + return currently_executing_command->value.Simple->line; ++#ifdef COND_COMMAND + else if (currently_executing_command->type == cm_cond) + return currently_executing_command->value.Cond->line; ++#endif ++#ifdef DPAREN_ARITHMETIC + else if (currently_executing_command->type == cm_arith) + return currently_executing_command->value.Arith->line; ++#endif ++#ifdef ARITH_FOR_COMMAND + else if (currently_executing_command->type == cm_arith_for) + return currently_executing_command->value.ArithFor->line; ++#endif + else + return line_number; + } diff --git a/sysa/patches/bash-2.05b/tinycc.patch b/sysa/patches/bash-2.05b/tinycc.patch new file mode 100644 index 0000000..9fa0864 --- /dev/null +++ b/sysa/patches/bash-2.05b/tinycc.patch @@ -0,0 +1,23 @@ +diff --git lib/sh/oslib.c lib/sh/oslib.c +index 90d7be9..37fdf2a 100644 +--- lib/sh/oslib.c ++++ lib/sh/oslib.c +@@ -192,8 +192,7 @@ bzero (s, n) + # include + int + gethostname (name, namelen) +- char *name; +- int namelen; ++ char *name; int namelen; + { + int i; + struct utsname ut; +@@ -209,7 +208,7 @@ gethostname (name, namelen) + # else /* !HAVE_UNAME */ + int + gethostname (name, namelen) +- int name, namelen; ++ char* name; int namelen; + { + strncpy (name, "unknown", namelen); + name[namelen] = '\0';