119 lines
4.8 KiB
Plaintext
119 lines
4.8 KiB
Plaintext
BUILDING THE PD KSH
|
|
===================
|
|
|
|
As usual, there are differences between BSD and System V
|
|
versions. Ideally, all you have to do is edit the Makefile in
|
|
this directory to set the CONFIG macro to the appropriate value.
|
|
(Actually, you may wish to change the CONFIG macro in all
|
|
Makefiles; if you always invoke make(1) from here, CONFIG will
|
|
be passed down, but if you invoke make(1) from a subdirectory
|
|
you'll want the appropriate definition in that Makefile.)
|
|
|
|
Of course it's not quite that simple. You may, however, take
|
|
solace in the knowledge that it used to be worse.
|
|
|
|
The Compatibility Libraries
|
|
---------------------------
|
|
|
|
Eric Gisin wrote this shell using ANSI C and POSIX as
|
|
portability guidlines. Realizing that nobody had a POSIX
|
|
system and almost no one had an ANSI C environment, he provided
|
|
minimal compatibility libraries.
|
|
|
|
There are two libraries, one for POSIX (libposix.a) and one for
|
|
ANSI C (libstdc.a).
|
|
|
|
Libposix.a is pretty simple. Nothing in it has ever broken on
|
|
me, so I'd just leave it. It provides a version of dup2() for
|
|
System V systems.
|
|
|
|
Libstdc.a is a bit hairy. I recommend looking at the routines
|
|
provided and, and editing the std/stdc Makefile and only
|
|
including objects that have routines your system libc.a is
|
|
lacking. Various of the provided routines are just plain
|
|
flaky, but only when they're not really needed. The other
|
|
hairy thing he does is craft an ANSI stdio.h from the system
|
|
supplied one and one of his own. Again, it's better than it
|
|
used to be, but it's still a hack, and you may have to modify
|
|
it by hand.
|
|
|
|
You will also need a POSIX compatible set of directory reading
|
|
routines. System V.3 systems have this in libc.a. The
|
|
std/posix directory provides a something for BSD systems. I
|
|
use a slightly modified version of Doug Gwyn's PD version.
|
|
|
|
(The ``slightly modified'' is to work around a bug in Gwyn's version.
|
|
The POSIX routines are documented as returning failure if the file for
|
|
opendir(3) is not a directory. Gwyn attempts to open(2) the file, and
|
|
then stats it to see if the file is a directory. However, if the file
|
|
is a special file, and the open(2) doesn't return, you're screwed. My
|
|
change was to open the file with the O_NDELAY flag, but Gwyn didn't
|
|
feel this was portable (true, but I only do it where it works) and
|
|
that stat-ing before the open would be too slow (true). The upshot is
|
|
if you use his routines unmodified, don't ever do an "ls -l /dev/*/*".)
|
|
|
|
The Shell Source
|
|
----------------
|
|
|
|
The source for the shell itself is in the sh directory. There you
|
|
will want to edit config.h to determine the configuration options. Vi
|
|
mode is in kind of rough shape, but does work. DIRSTACK routines
|
|
aren't implemented yet, so again, why bother. SWTCH is a bit arcane,
|
|
but it you use shl(1) and you define EMACS or VI you want to define
|
|
this. JOBS is really only useful on BSD systems. It might work on
|
|
systems that have POSIX job control, but I wouldn't bet on it.
|
|
SHARPBANG is only useful on systems where the exec() family don't
|
|
honour the #!/prog/path convention.
|
|
|
|
This is where the shell gets built so you may wish to change
|
|
the OTHERLIBS macro in the Makefile to point to your POSIX
|
|
directory routines, or to use -lc_s, or whatever.
|
|
|
|
Miscellaneous
|
|
-------------
|
|
|
|
The Makefiles that actually compile things use the macro
|
|
CCOPTS, so you can change it in individual Makefiles or specify
|
|
it on the command line, eg. "make CCOPTS=-O OTHERLIBS=-lc_s".
|
|
LDOPTS is used in the Makefile where the ksh is actually built.
|
|
|
|
The very first time on a new system, do a "make clobber"
|
|
|
|
Good luck.
|
|
|
|
Documentation
|
|
-------------
|
|
|
|
The ksh.1 is a man page for the PD ksh, although it lags
|
|
somewhat behind the code. You get what you pay for.
|
|
|
|
The ksh88.1 is a man page for AT&T's ksh88 (the latest version)
|
|
provided for comparison.
|
|
|
|
History
|
|
-------
|
|
|
|
Much of the shell was written by Eric Gisin at the University
|
|
of Waterloo, using some pieces of other stuff, notably Charles
|
|
Forsythe's V7 shell, and some enhancements from the BRL shell.
|
|
He placed it (in a alpha test state) into the public domain
|
|
while I was at UW. I snarfed a copy, and got it running on my
|
|
UNIXpc, and later some machines at work. I sent Gisin some bug
|
|
reports, but he seems to have lost interest in the project.
|
|
This may be because he now does some work for MKS, who produce a
|
|
commercial version of the ksh for MS-DOS machines, so there may
|
|
be a conflict of interest.
|
|
|
|
So I gave up on getting future versions, and adopted it. I've
|
|
made some enhancements, and quite a few bug fixes, and various
|
|
people at work have contributed as well. It remains in the
|
|
public domain, although I imagine the people involved would
|
|
appreciate leaving their names attached (I'm exempt; I haven't
|
|
actually included my name anywhere but here).
|
|
|
|
The README in the sh directory is Gisin's, and tells a bit of
|
|
the story from his point of view. Note that his compilation
|
|
instructions don't really apply anymore.
|
|
|
|
John R. MacMillan
|