aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--shar/README.md29
-rw-r--r--shar/compile.patch390
2 files changed, 419 insertions, 0 deletions
diff --git a/shar/README.md b/shar/README.md
new file mode 100644
index 0000000..7a97c8c
--- /dev/null
+++ b/shar/README.md
@@ -0,0 +1,29 @@
+Notes on building Python 0.9.1
+==============================
+
+A note to [email protected] referred us to Guido's 0.9.1 release as
+a set of shell archive files posted to alt.sources:
+
+https://groups.google.com/g/alt.sources/search?q=%22python%200.9.1%22
+
+I downloaded them as well as a single patch. I then made a few edits
+to get the interpreter to build. The shar files as well as a single
+patch file Guido posted are in this directory. Note the missing
+part 02. As Guido explained:
+
+> In case anyone wondered where the real part 02 is, it isn't needed.
+> It contained a generated file of 151K that shouldn't be in the
+> distribution, and I cancelled it.
+> --
+> Guido van Rossum, CWI, Amsterdam <[email protected]>
+> "PS I have never kissed the editor of the Radio Times"
+
+(I have no idea what is going on in Guido's .sig. You will have to ask
+him. <wink>)
+
+The patch didn't apply for me (structural issues), so I just applied
+its edits manually. I then set about getting the interpreter to
+compile. That was pretty straightforward. The result is in
+compile.patch in this directory.
+
+-- Skip Montanaro - 2021-02-16
diff --git a/shar/compile.patch b/shar/compile.patch
new file mode 100644
index 0000000..e15642c
--- /dev/null
+++ b/shar/compile.patch
@@ -0,0 +1,390 @@
+diff --git a/.gitignore b/.gitignore
+new file mode 100644
+index 0000000..6d0fbd0
+--- /dev/null
++++ b/.gitignore
+@@ -0,0 +1,4 @@
++*.o
++*.a
++python
++*~
+diff --git a/src/Makefile b/src/Makefile
+index d47eceb..3811b77 100644
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -86,8 +86,8 @@ DEFPYTHONPATH= .:/usr/local/lib/python:/ufs/guido/lib/python:../lib
+ # is missing in most systems I have encountered, so it is turned on
+ # in the Makefile. Turn it off if your system doesn't have sys_errlist.)
+
+-STRERROR_SRC= strerror.c
+-STRERROR_OBJ= strerror.o
++# STRERROR_SRC= strerror.c
++# STRERROR_OBJ= strerror.o
+
+ # If your BSD system does not have a fmod() function in the library,
+ # uncomment the following two lines to use one I wrote.
+@@ -317,83 +317,82 @@ STRERROR_OBJ= strerror.o
+ # =================
+
+ STANDARD_OBJ= acceler.o bltinmodule.o ceval.o classobject.o \
+- compile.o dictobject.o errors.o fgetsintr.o \
+- fileobject.o floatobject.o $(FMOD_OBJ) frameobject.o \
+- funcobject.o $(GETCWD_OBJ) \
+- graminit.o grammar1.o import.o \
+- intobject.o intrcheck.o listnode.o listobject.o \
+- mathmodule.o methodobject.o modsupport.o \
+- moduleobject.o node.o object.o parser.o \
+- parsetok.o posixmodule.o regexp.o regexpmodule.o \
+- strdup.o $(STRERROR_OBJ) \
+- stringobject.o $(STRTOL_OBJ) structmember.o \
+- sysmodule.o timemodule.o tokenizer.o traceback.o \
+- tupleobject.o typeobject.o
++ compile.o dictobject.o errors.o fgetsintr.o \
++ fileobject.o floatobject.o $(FMOD_OBJ) frameobject.o \
++ funcobject.o $(GETCWD_OBJ) \
++ graminit.o grammar1.o import.o \
++ intobject.o intrcheck.o listnode.o listobject.o \
++ mathmodule.o methodobject.o modsupport.o \
++ moduleobject.o node.o object.o parser.o \
++ parsetok.o posixmodule.o regexp.o regexpmodule.o \
++ strdup.o $(STRERROR_OBJ) \
++ stringobject.o $(STRTOL_OBJ) structmember.o \
++ sysmodule.o timemodule.o tokenizer.o traceback.o \
++ tupleobject.o typeobject.o
+
+ STANDARD_SRC= acceler.c bltinmodule.c ceval.c classobject.c \
+- compile.c dictobject.c errors.c fgetsintr.c \
+- fileobject.c floatobject.c $(FMOD_SRC) frameobject.c \
+- funcobject.c $(GETCWD_SRC) \
+- graminit.c grammar1.c import.c \
+- intobject.c intrcheck.c listnode.c listobject.c \
+- mathmodule.c methodobject.c modsupport.c \
+- moduleobject.c node.c object.c parser.c \
+- parsetok.c posixmodule.c regexp.c regexpmodule.c \
+- strdup.c $(STRERROR_SRC) \
+- stringobject.c $(STRTOL_SRC) structmember.c \
+- sysmodule.c timemodule.c tokenizer.c traceback.c \
+- tupleobject.c typeobject.c
++ compile.c dictobject.c errors.c fgetsintr.c \
++ fileobject.c floatobject.c $(FMOD_SRC) frameobject.c \
++ funcobject.c $(GETCWD_SRC) \
++ graminit.c grammar1.c import.c \
++ intobject.c intrcheck.c listnode.c listobject.c \
++ mathmodule.c methodobject.c modsupport.c \
++ moduleobject.c node.c object.c parser.c \
++ parsetok.c posixmodule.c regexp.c regexpmodule.c \
++ strdup.c $(STRERROR_SRC) \
++ stringobject.c $(STRTOL_SRC) structmember.c \
++ sysmodule.c timemodule.c tokenizer.c traceback.c \
++ tupleobject.c typeobject.c
+
+ CONFIGDEFS= $(STDW_USE) $(AM_USE) $(AUDIO_USE) $(GL_USE) $(PANEL_USE) \
+- '-DPYTHONPATH="$(DEFPYTHONPATH)"'
++ '-DPYTHONPATH="$(DEFPYTHONPATH)"'
+
+ CONFIGINCLS= $(STDW_INCL)
+
+ LIBDEPS= libpython.a $(STDW_LIBDEPS) $(AM_LIBDEPS) \
+- $(GL_LIBDEPS) $(PANEL_LIBSDEP) $(RL_LIBDEPS)
++ $(GL_LIBDEPS) $(PANEL_LIBSDEP) $(RL_LIBDEPS)
+
+ # NB: the ordering of items in LIBS is significant!
+ LIBS= libpython.a $(STDW_LIBS) $(AM_LIBS) \
+- $(PANEL_LIBS) $(GL_LIBS) $(RL_LIBS) -lm
++ $(PANEL_LIBS) $(GL_LIBS) $(RL_LIBS) -lm
+
+ LIBOBJECTS= $(STANDARD_OBJ) $(STDW_OBJ) $(AM_OBJ) $(AUDIO_OBJ) \
+- $(GL_OBJ) $(PANEL_OBJ)
++ $(GL_OBJ) $(PANEL_OBJ)
+
+ LIBSOURCES= $(STANDARD_SRC) $(STDW_SRC) $(AM_SRC) $(AUDIO_SRC) \
+- $(GL_SRC) $(PANEL_SRC)
++ $(GL_SRC) $(PANEL_SRC)
+
+ OBJECTS= pythonmain.o config.o
+
+ SOURCES= $(LIBSOURCES) pythonmain.c config.c
+
+ GENOBJECTS= acceler.o fgetsintr.o grammar1.o \
+- intrcheck.o listnode.o node.o parser.o \
+- parsetok.o strdup.o tokenizer.o bitset.o \
+- firstsets.o grammar.o metagrammar.o pgen.o \
+- pgenmain.o printgrammar.o
++ intrcheck.o listnode.o node.o parser.o \
++ parsetok.o strdup.o tokenizer.o bitset.o \
++ firstsets.o grammar.o metagrammar.o pgen.o \
++ pgenmain.o printgrammar.o
+
+ GENSOURCES= acceler.c fgetsintr.c grammar1.c \
+- intrcheck.c listnode.c node.c parser.c \
+- parsetok.c strdup.c tokenizer.c bitset.c \
+- firstsets.c grammar.c metagrammar.c pgen.c \
+- pgenmain.c printgrammar.c
++ intrcheck.c listnode.c node.c parser.c \
++ parsetok.c strdup.c tokenizer.c bitset.c \
++ firstsets.c grammar.c metagrammar.c pgen.c \
++ pgenmain.c printgrammar.c
+
+
+ # Main Targets
+ # ============
+
+ python: libpython.a $(OBJECTS) $(LIBDEPS) Makefile
+- $(CC) $(CFLAGS) $(OBJECTS) $(LIBS) -o @python
+- mv @python python
++ $(CC) $(CFLAGS) $(OBJECTS) $(LIBS) -o python
+
+ libpython.a: $(LIBOBJECTS)
+- -rm -f @lib
+- ar cr @lib $(LIBOBJECTS)
+- $(RANLIB) @lib
+- mv @lib libpython.a
++ -rm -f @lib
++ ar cr @lib $(LIBOBJECTS)
++ $(RANLIB) @lib
++ mv @lib libpython.a
+
+ python_gen: $(GENOBJECTS) $(RL_LIBDEPS)
+- $(CC) $(CFLAGS) $(GENOBJECTS) $(RL_LIBS) -o python_gen
++ $(CC) $(CFLAGS) $(GENOBJECTS) $(RL_LIBS) -o python_gen
+
+
+ # Utility Targets
+@@ -405,15 +404,15 @@ python_gen: $(GENOBJECTS) $(RL_LIBDEPS)
+ LINTFLAGS= -h
+
+ LINTCPPFLAGS= $(CONFIGDEFS) $(CONFIGINCLS) $(SYSVDEF) \
+- $(AM_INCL) $(PANEL_INCL)
++ $(AM_INCL) $(PANEL_INCL)
+
+ LINT= lint
+
+ lint:: $(SOURCES)
+- $(LINT) $(LINTFLAGS) $(LINTCPPFLAGS) $(SOURCES)
++ $(LINT) $(LINTFLAGS) $(LINTCPPFLAGS) $(SOURCES)
+
+ lint:: $(GENSOURCES)
+- $(LINT) $(LINTFLAGS) $(GENSOURCES)
++ $(LINT) $(LINTFLAGS) $(GENSOURCES)
+
+ # Generating dependencies is only necessary if you intend to hack Python.
+ # You may change $(MKDEP) to your favorite dependency generator (it should
+@@ -422,7 +421,7 @@ lint:: $(GENSOURCES)
+ MKDEP= mkdep
+
+ depend::
+- $(MKDEP) $(LINTCPPFLAGS) $(SOURCES) $(GENSOURCES)
++ $(MKDEP) $(LINTCPPFLAGS) $(SOURCES) $(GENSOURCES)
+
+ # You may change $(CTAGS) to suit your taste...
+
+@@ -431,13 +430,13 @@ CTAGS= ctags -t -w
+ HEADERS= *.h
+
+ tags: $(SOURCES) $(GENSOURCES) $(HEADERS)
+- $(CTAGS) $(SOURCES) $(GENSOURCES) $(HEADERS)
++ $(CTAGS) $(SOURCES) $(GENSOURCES) $(HEADERS)
+
+ clean::
+- -rm -f *.o core [,#@]*
++ -rm -f *.o core [,#@]*
+
+ clobber:: clean
+- -rm -f python python_gen libpython.a tags
++ -rm -f python python_gen libpython.a tags
+
+
+ # Build Special Objects
+@@ -448,37 +447,37 @@ clobber:: clean
+ COMPILE= $(CC) -c $(CFLAGS)
+
+ amoebamodule.o: amoebamodule.c
+- $(COMPILE) $(AM_INCL) $*.c
++ $(COMPILE) $(AM_INCL) $*.c
+
+ config.o: config.c Makefile
+- $(COMPILE) $(CONFIGDEFS) $(CONFIGINCLS) $*.c
++ $(COMPILE) $(CONFIGDEFS) $(CONFIGINCLS) $*.c
+
+ fgetsintr.o: fgetsintr.c
+- $(COMPILE) $(SIGTYPEDEF) $*.c
++ $(COMPILE) $(SIGTYPEDEF) $*.c
+
+ intrcheck.o: intrcheck.c
+- $(COMPILE) $(SIGTYPEDEF) $*.c
++ $(COMPILE) $(SIGTYPEDEF) $*.c
+
+ panelmodule.o: panelmodule.c
+- $(COMPILE) $(PANEL_INCL) $*.c
++ $(COMPILE) $(PANEL_INCL) $*.c
+
+ posixmodule.o: posixmodule.c
+- $(COMPILE) $(SYSVDEF) $(NOSYMLINKDEF) $*.c
++ $(COMPILE) $(SYSVDEF) $(NOSYMLINKDEF) $*.c
+
+ sc_interpr.o: sc_interpr.c
+- $(COMPILE) $(AM_INCL) $*.c
++ $(COMPILE) $(AM_INCL) $*.c
+
+ sc_error.o: sc_error.c
+- $(COMPILE) $(AM_INCL) $*.c
++ $(COMPILE) $(AM_INCL) $*.c
+
+ stdwinmodule.o: stdwinmodule.c
+- $(COMPILE) $(STDW_INCL) $*.c
++ $(COMPILE) $(STDW_INCL) $*.c
+
+ timemodule.o: timemodule.c
+- $(COMPILE) $(SIGTYPEDEF) $(BSDTIMEDEF) $*.c
++ $(COMPILE) $(SIGTYPEDEF) $(BSDTIMEDEF) $*.c
+
+ tokenizer.o: tokenizer.c
+- $(COMPILE) $(RL_USE) $*.c
++ $(COMPILE) $(RL_USE) $*.c
+
+ .PRECIOUS: python libpython.a glmodule.c graminit.c graminit.h
+
+@@ -497,8 +496,8 @@ tokenizer.o: tokenizer.c
+ # Also ignore the warnings emitted while compiling glmodule.c; it works.
+
+ glmodule.c: cstubs cgen
+- python cgen <cstubs >@glmodule.c
+- mv @glmodule.c glmodule.c
++ python cgen <cstubs >@glmodule.c
++ mv @glmodule.c glmodule.c
+
+ # The dependencies for graminit.[ch] are not turned on in the
+ # distributed Makefile because the files themselves are distributed.
+diff --git a/src/allobjects.h b/src/allobjects.h
+index b6b487b..fe46f54 100644
+--- a/src/allobjects.h
++++ b/src/allobjects.h
+@@ -26,6 +26,7 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+ #include <stdio.h>
+ #include <string.h>
++#include <stdlib.h>
+
+ #include "PROTO.h"
+
+diff --git a/src/import.c b/src/import.c
+index d461007..59ea07e 100644
+--- a/src/import.c
++++ b/src/import.c
+@@ -167,6 +167,8 @@ load_module(name)
+ return m;
+ }
+
++static int init_builtin(char *name);
++
+ object *
+ import_module(name)
+ char *name;
+diff --git a/src/listobject.c b/src/listobject.c
+index be1382c..9a32eac 100644
+--- a/src/listobject.c
++++ b/src/listobject.c
+@@ -25,6 +25,7 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ /* List object implementation */
+
+ #include "allobjects.h"
++#include "modsupport.h"
+
+ object *
+ newlistobject(size)
+@@ -318,24 +319,6 @@ list_concat(a, bb)
+ #undef b
+ }
+
+-static int
+-list_ass_item(a, i, v)
+- listobject *a;
+- int i;
+- object *v;
+-{
+- if (i < 0 || i >= a->ob_size) {
+- err_setstr(IndexError, "list assignment index out of range");
+- return -1;
+- }
+- if (v == NULL)
+- return list_ass_slice(a, i, i+1, v);
+- INCREF(v);
+- DECREF(a->ob_item[i]);
+- a->ob_item[i] = v;
+- return 0;
+-}
+-
+ static int
+ list_ass_slice(a, ilow, ihigh, v)
+ listobject *a;
+@@ -400,6 +383,24 @@ list_ass_slice(a, ilow, ihigh, v)
+ #undef b
+ }
+
++static int
++list_ass_item(a, i, v)
++ listobject *a;
++ int i;
++ object *v;
++{
++ if (i < 0 || i >= a->ob_size) {
++ err_setstr(IndexError, "list assignment index out of range");
++ return -1;
++ }
++ if (v == NULL)
++ return list_ass_slice(a, i, i+1, v);
++ INCREF(v);
++ DECREF(a->ob_item[i]);
++ a->ob_item[i] = v;
++ return 0;
++}
++
+ static object *
+ ins(self, where, v)
+ listobject *self;
+diff --git a/src/malloc.h b/src/malloc.h
+index c2d9969..de2cc9f 100644
+--- a/src/malloc.h
++++ b/src/malloc.h
+@@ -36,6 +36,11 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ #define HAVE_STDLIB
+ #endif
+
++#ifdef __STDC__
++#define ANY void
++#define HAVE_STDLIB
++#endif
++
+ #ifndef ANY
+ #define ANY char
+ #endif
+diff --git a/src/modsupport.h b/src/modsupport.h
+index 843b209..bc9929a 100644
+--- a/src/modsupport.h
++++ b/src/modsupport.h
+@@ -25,3 +25,5 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ /* Module support interface */
+
+ extern object *initmodule PROTO((char *, struct methodlist *));
++extern int getintarg(object *v, int *a);
++extern void fatal(char *msg);
+diff --git a/src/patchlevel.h b/src/patchlevel.h
+index d00491f..110c86f 100644
+--- a/src/patchlevel.h
++++ b/src/patchlevel.h
+@@ -1 +1 @@
+-1
++#define PATCHLEVEL 1
+diff --git a/src/regexpmodule.c b/src/regexpmodule.c
+index 7c87217..62b22f2 100644
+--- a/src/regexpmodule.c
++++ b/src/regexpmodule.c
+@@ -38,7 +38,7 @@ typedef struct {
+ regexp *re_prog; /* The compiled regular expression */
+ } regexpobject;
+
+-extern typeobject Regexptype; /* Really static, forward */
++static typeobject Regexptype;
+
+ static regexpobject *
+ newregexpobject(string, prog)