Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!ames!fxgrp!grady From: grady@fxgrp (Steven Grady) Newsgroups: gnu.utils.bug Subject: some problems with gnumake (3.27) under System V Message-ID: <975@fxgrp.UUCP> Date: 17 Feb 89 00:59:34 GMT Sender: grady@fxgrp.UUCP Reply-To: grady@fxgrp (Steven Grady) Distribution: na Organization: FX Development Group, Inc., Mountain View, CA Lines: 63 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?"