[gnu.utils.bug] some problems with gnumake

grady@fxgrp (Steven Grady) (02/17/89)

First, I want to say that gnumake is infinitely cool (excuse the
hyperbole).  Our group wants to use it to compile multiple
object files from a single source tree, like this:

		   src
		  / | \
    Makefile foo.c  sun3 rtpc hpux ultrix
		     |    |    |     |
		  foo.o foo.o foo.o foo.o

We also use mkmf to update the Makefile.  But supporting
this construction was easy:

      ARCH := $(strip $(shell machinetype))
      OBJS = ...	[created by mkmf]
      ROBJS = $(addprefix $(ARCH)/, $(OBJS))

      $(TARGET): $(ROBJS) ...

Simple, elegant, and it works.  The problem is that gnumake
did not really get a full-blown port to System V.  Below are
some changes required to get it to work on all our machines.
I had few problems on SunOS 3.5, SunOS 4.0, and Ultrix..

I'm not including diffs because I'm not sure if my fixes
were the best possible.  Also, I don't have a vanilla copy
of the source.

The "struct stringlist" structure in make.c contains the element
"index", which some compilers (ie HP's) want to preprocess to
be strchr if USG is defined (from make.h).

USGr3 is not supported in commands.c, as opposed to all
the other files.

Some (USG) machines do strange things when the handler for SIGC[H]LD
is set to SIG_IGN.  (They force wait() to block until all the
children terminate.)  The handler should be set to SIG_DFL instead.

On HPUX, if you reinstall a SIGCLD handler, you must do so
_after_ the call to wait(), or you recursively call the
child_handler until you get a core dump.

On AIX, "fcntl.h" is in /usr/include, not in /usr/include/sys.

In commands.c, the WRETCODE macro is not always used to reference the status
from a wait().

Line 154 of commands.c contains the line:
    while (wait (&status) > 0)
It should be:
    while ((pid = wait (&status)) > 0)

Also, given that systems without wait3() are supported,
is there any reason to have two sets of code, one which
uses wait3(), and one which doesn't?

	Steven
	...!ucbvax!grady
	grady@postgres.berkeley.edu

"It's no longer a blue world, Max.  Where can we go?"
"Argentina?"