home *** CD-ROM | disk | FTP | other *** search
- Greetings -
-
- Enclosed are the patches to 28sep90 Scheme->C for the Sparc and
- Intel 386 architectures. These were built by Roger Critchlow, who can
- be reached as rec@arris.com or rec@elf.org. There are the following
- files enclosed in this shar archive:
-
- README - this informative file.
- patches - context diffs for the combined sparc and i386 changes
- to the 28sep90 sources. These modify the following files:
- makefile
- scrt/apply.h
- scrt/callcc.c
- scrt/cio.c
- scrt/heap.c
- scrt/heap.h
- scrt/makefile-tail
- scrt/objects.h
- scrt/scinit.c
- scrt/signal.c
- scsc/makefile-tail
- test/makefile-tail
- test/test16.sc
- sources - a shar archive of additional source files to be extracted
- after the distribution source tree has been built. This has:
- scrt/sparc.s - the sparc assembly assist, sans protected
- fixnum routines.
- scrt/i386.s - an empty i386 assembly assist.
- SPARC - the sparc configuration header.
- I386 - a generic intel 386 configuration header.
- ISC386IX - an Interactive Systems 386/ix specific
- configuration header.
- xlib/xwss.sch - a scheme header file for the only xlib
- source that doesn't already have one.
- tar.fix - a script to extract 28sep90 on System V and rewrite file
- names to the 14 character limit. It extracts the archive four
- times, moves files to shorter names, and edits the makefiles.
- You need to edit it to tell it where to put the source tree
- and the temporary files.
- tar.unfix - a script to restore the files hacked by tar.fix to their
- original glory. Only useful if you have a tar built on SysV
- which needs to go back to the BSD world.
- shlibs - a shar archive of files for building System V.3.2 shared
- libraries for the scheme runtime and the xlib interface. This
- contains:
- shlibsc/ - a directory for building the shared libsc.a.
- shlibsc/makefile - a makefile for building the shared libsc.a.
- shlibscx/ - a directory for building the shared version of
- scixl.a, which I call libscx.a.
- shlibscx/makefile - a makefile for building the shared
- libscx.a.
- shlibscx/xlib.export - a list of symbols from the C xlib
- interface which must be exported from libscx.a.
- shlibscx/hexname.sc - a scheme program for converting scheme
- header files containing (define-external ...) forms
- into lists of exportable names. I planned to include
- the list, but it's 90Kb and it isn't that hard to generate.
-
- Configuration notes:
-
- The patches to the root makefile allow one to make a version of
- Scheme->C on top of the source distribution. It does this by moving
- the distributed makefiles out of the way where necessary so that the
- version specific information can be prepended. The forI386,
- forISC386IX, and forSPARC targets use this facility.
-
- There are a few patches to the scrt, scsc, and test makefiles which
- make them more useful when CC != cc and -lm is not the only library
- required. The SPARC and *386 headers have been modified to take these
- patches into account.
-
- System V portability notes:
-
- My System V machine is a 386 with 8 Mb of RAM and 300 Mb of disk.
- ISC 386/ix version 2.0.2, ie UNIX System V.3.2
- ISC TCP/IP version 1.1.2
- (but no network connection)
- ISC X Windows version 1.1, ie MIT X11R3/p
- Gnu gcc version 1.37.1
- Scheme->C was compiled with gcc but linked with the ISC development tools.
-
- The conditionals for the 386 are separated into SYSV, for those which
- depend on the features (or the nonfeatures) of System V, I386, for those
- which I believe to be useful for any Intel 386 hosted Unix, and ISC386IX,
- for those which appear to be dependent on the Interactive Systems Corp.
- version of System V.3.2 386 Unix.
-
- There have been successful ports of Scheme->C to both Xenix and SCO
- Unix on the 386, but neither of these ports used the X11 libraries.
-
- System V doesn't do symbolic links. Use the new inplaceCPU target
- in the root makefile to build the objects in place.
-
- System V doesn't have ranlib. Make a command file named ranlib
- which runs 'ar rs' on the archive instead. Like this:
-
- cat > /usr/local/bin/ranlib << 'END /usr/local/bin/ranlib'
- #!/bin/sh
- for f in $*; do ar rs $f; done
- END /usr/local/bin/ranlib
- chmod +x /usr/local/bin/ranlib
-
- System V tar complains vociferously about lots of stuff which makes
- no difference. Ignore it. It won't say anything about the real
- violence it does when filenames get truncated.
-
- System V install is not equivalent to BSD install. All
- installations need to be done by hand, unless you have the ISC X
- windows package on line in which case you can use this:
-
- ed - /usr/bin/X11/bsdinstall << 'END /usr/bin/X11/bsdinstall'
- /install -f/s;;/etc/&;
- w /usr/local/bin/install
- q
- END /usr/bin/X11/bsdinstall
- chmod +x /usr/local/bin/install
-
- System V ar refuses to ranlib xlib/xlib.a (too many symbols!) and ld
- refuses to link against archives without ranlib symbol tables. (UNIX
- used to be known as a system designed for software development.) Just
- build a partially linked object with 'ld -r -o xlib.o' and pretend it's
- a library. You didn't really care about the size of your binaries,
- did you?
-
- The System V signal handling interface didn't work as it should
- have, but thanks to tih@barsoom.nhh.no (Tom Ivar Helbekkmo) we now
- have a much better implementation.
-
- The replacement I used for select() in scrt/cio.c is a version of
- sigpoll() which ISC has extended beyond the SV3.2 specification.
- Other implementations of System V may need other solutions. Actually,
- Joel built select() into the runtime at the scheme level, so both the
- sigpoll() hack and ISC's libinet.a version of select() are used in the
- current runtime support.
-
- System V shared libraries:
-
- The order of making is:
-
- edit tar.fix to set directories
- tar.fix
- unshar sources
- unshar shlibs
- patch <patches
- edit shlibsc/makefile to set directories and read instructions
- edit ISC386IX or I386 to set directories and CFLAGS for shared
- make port
-
- It is essential that you read the instructions in shlibsc/makefile.
- You need to patch some binary modules in /usr/lib/libinet.a among
- other nastinesses.
-
- cd shlibsc; make
- cd shlibsc; /bin/su root -c 'make install'
-
- At this point you will have a shared scheme runtime library, a
- scheme interpreter linked against the shared library, and a scheme
- compiler linked agains the shared library. It is important that the
- scheme compiler be installed at this point since it will be used to
- build xlib and the list of exported names for xlib.
-
- cd xlib; make scxl.a
-
- Note that the make of scxl.a will fail when ar discovers how many symbols
- it is supposed to index. Don't worry, that's why we're making a shared
- library.
-
- edit shlibscx/makefile to set directories
- cd shlibscx; make
- cd shlibscx; /bin/su root -c 'make install'
-
- At this point you will have a shared scheme xlib and libX library
- and a scheme interpreter linked against the xlib support.
-
- IMPORTANT NOTE: I don't have a network interface on my machine, so the
- TCP/IP portion of xlib has never been tested. All of this works fine with
- a local connection.
-
- Sparc portability notes:
-
- The Bigendian changes are confined to objects.h, but they make a
- hash of the source. They are currently conditionalized on SPARC, but
- ought to be more specifically identified.
-
- The MATHTRAPS code remains to be written. There is a trap on
- overflow instruction on the Sparc and a software trap number assigned
- to integer overflow traps defined in the system headers. It shouldn't
- be too hard.
-
- There are a handful of Little-endian dependent tests in test/test16.sc
- which are patched to look at a list of big-endian machine names and
- apply the correct interpretation to their results.
-
- I386 portability notes:
-
- The MATHTRAPS code remains to be written. I have no idea if it can be
- done or not.
-
-