README FOR BASH-1.12 UNDER OS/2
This archive consists of files which I downloaded from the GNU FTP site at
MIT and modified so that they would compile and mostly work under OS/2. I
use the HPFS on my system, so the file names have not been changed to the
dreaded 8.3 format. The programs in this archive will compile under the
emx 0.8g version of the GNU compiler. The Makefile is intended for use
with dmake.
This file is an important improvement over various versions of bash(1)
which are available for OS/2. The other ports do not get status from child
processes, hence are virtually useless for running things like
configuration scripts. The problem is caused by the emx implementation of
the fork() command. The really ugly hacks were an attempt to work around
problems with fork(). This is not a complaint - the marvel is not that
fork works imperfectly but that it works at all under OS/2. Where ever
possible I replaced the fork(); exec() sequence with a direct OS/2 DosExec
call. I also made some mods to the emx library related to the exec()
function. One of these is very important in that it fixes a bug in
spawnve() which causes bash (or any other program) to crash if it attempts
to exec a program and pass more that 512 characters of parameter
information. Even if you decide not to use bash I STRONGLY reccomend that
you make this fix in your copy of the emx library. The other changes
enable a caller to run programs pretty much as OS/2 shells run them. i.e.,
if it can not find the input file on the path it attempts to append '.exe'
to the input file name and run the resulting file. If the given file
appears to be ascii the library routines assume the file is a command
script and use the UNIX #! thing to try and find the shell. Oh yes, there
are some ugly changes required because OS/2 will not allow a parent to
receive exit status from a grandchild. I made other hacks as required - I
can't remember all the reasons. Mostly changes are marked with my initials
(ROB) and the date.
The resulting executable is by no means perfect, and the unbiased observer
would probably not even call it good. However, it is stable, and operates
fairly reliably. I mostly use it to run configuration scripts that
typically come with GNU source archives. These files generally need some
hand configuration. Change things like /bin/sh to bash, change
redirections from /dev/null to nul, make sure CC equals gcc or your
favorite compiler, make executable file names end with .exe, etc. Running
the scripts is generally uneventful, except that the shell sometimes
receives some 'hangup` signals. I can't find the reason for this. I don't
even know how often you will have to edit the resulting Makefile by hand
because of this situation.
If a script uses "here indirections", ie things like
cat<<END_OF_FILE
you must have a directory /tmp on your current disk. Temporary files are
created there. Unfortunately, they are not deleted so you will have to go
into this directory and delete the files there by hand from time to time.
Or, you could do that during your start up procedure.
Making bash requires dmake. I have been unable to use GNU make
successfully because I can't get things like
-DVAR=\"Some text\"
to work under OS/2. To make bash proceede as follows:
1. Edit the file /emx/include/sys/process.h by deleting the qualifier
__volatile__ from the definition of abort(). I have made other
changes to the emx include files but I have been less than rigorous in
recording them, so you may have to make a few other changes as well.
2. Execute dmake in each of the three directories lib/glob, lib/readline/
and lib/builtins.
3. In the main bash directory type `dmake -f makefile.os2'.
My Email address:
robrien@gsfcmail.nasa.gov