[gnu.utils.bug] make-3.55 problems re-execing with -f flag

dale@vicorp.UUCP (Dale Nielsen) (09/08/89)

There is a problem with make-3.55 when it is invoked with
the -f option to specify the filename of the makefile.
Make writes over the internal makefiles struct so that when
it updates a dependent makefile and rexecutes itself part of
its new command line (as passed to execvp) is corrupted when
the contents of MAKEFLAGS is written on top of it.

I stepped through the code with dbx, and it seems that
malloc gives out the memory reserved for makefiles->list
when it is saving the MAKEFLAGS variable, so somewhere that
memory is being erroneously freed.  I haven't been able to
find out where the problem is exactly, but it wasn't there
in 3.48.

This sample makefile (named Make.test) demonstrates the bug:
##########################
foo : bar
include foo.mk
foo.mk : bar
foo bar foo.mk :
	touch $@

#########################

% gmake.new -f Make.test -d
GNU Make version 3.55, by Richard Stallman and Roland McGrath.
[... extra stuff deleted ]
Reading makefiles...
gmake.new: fopen: foo.mk: No such file or directory
Updating makefiles....
 Considering target file `foo.mk'.
  File `foo.mk' does not exist.
   Considering target file `bar'.
    Finished dependencies of target file `bar'.
   No need to remake target `bar'.
  Finished dependencies of target file `foo.mk'.
 Must remake target `foo.mk'.
touch foo.mk
 Successfully remade target file `foo.mk'.
[... extra stuff deleted ]
 Considering target file `Make.test'.
 No need to remake target `Make.test'.
Re-execing myself....
GNU Make version 3.55, by Richard Stallman and Roland McGrath.
[... extra stuff deleted ]
Reading makefiles...
gmake.new: fopen: d -S: No such file or directory
Updating makefiles....
 Considering target file `d -S'.
  File `d -S' does not exist.
  Looking for an implicit rule for `d -S'.
[... it just gets uglier from here out]
  Trying implicit dependency `SCCS/s.d -S.sh'.
  No implicit rule found for `d -S'.
  Finished dependencies of target file `d -S'.
 No commands for `d -S' and no dependencies actually changed.
 No need to remake target `d -S'.
gmake.new: No targets.  Stop.

I haven't found out where this goes wrong yet, but I wanted
to make it known.  Anybody else seen this?  Fixed it????
-- 
	--Dale Nielsen				ARPA:  dale@vicorp.UU.NET
	  V. I. Corporation			UUCP:  uunet!vicorp!dale
	  Amherst Research Park			PHONE: (413) 253-3482
	  Amherst, Massachusetts  01002		FAX:   (413) 256-0574