[GRASS-dev] another make problem (OSX, but could be a general problem)

Glynn Clements glynn at gclements.plus.com
Wed Oct 3 14:10:49 EDT 2007

William Kyngesburye wrote:

> > But that rule is used for libraries and modules alike. I have no idea
> > why it would behave differently for libraries and for modules.
> >
> > Everything points to this being a "make" bug. Can you try with 3.81 to
> > see if it happens there?
> 3.81 works.  There were a couple rebuilds, but that may have been  
> from earlier rebuilds, like sqlp.  I verified by building 3.80 from  
> source (complete rebuild, so Apple didn't do anything to make).
> So, looks like there may have been some bugs in 3.80.  But, your  
> average Mac user is not going to want to install a current make.   

A "user" won't care about incremental rebuilds not actually being
incremental. They'll "configure; make; make install" then not compile
it again (at least, not without [dist]clean first).

> And, since Markus had the same problem, there may be Linux distros  
> that have an older make in their package manager.

I missed that.

> > Before that, can you try using "make -p" on both a library and a
> > module?
> I remembered to zip it this time :)

That has the advantage that your message also gets posted to the list
rather than being bounced for being too large.

Your output has:

	# Implicit Rules
	OBJ.i686-apple-darwin8.10.1/%.o: %.c OBJ.i686-apple-darwin8.10.1
	#  commands to execute (from `../../include/Make/Rules.make', line 23):
	        -o $(OBJDIR)/$*.o -c $*.c

while for "make -n -p -C lib/datetime" I get:

	# Implicit Rules
	OBJ.i686-pc-linux-gnu/%.o: %.c  | OBJ.i686-pc-linux-gnu
	#  commands to execute (from `../../include/Make/Rules.make', line 21):
		-o $(OBJDIR)/$*.o -c $*.c

Note the vertical bar is missing from yours. Can you try the same
thing with a module (which doesn't re-compile everything)?

If the vertical bar is present for modules and missing for libraries,
It may be worth changing the placement of the "include .../Rules.make"
in the Lib.make and Module.make files, to see if there's some
combination that consistently avoids the bug.

I don't particularly want to build $(OBJDIR) "transparently" as part
of the %.o:%.c rule, as there is a race condition with parallel builds
(multiple processes may try to build the directory concurrently; mkdir
considers this a failure).

Also, it may be a performance issue on Cygwin. Cygwin's directory
operations are extremely inefficient; on a P4/3000, it's quicker to
mount the drive via SMB to my P3/800 Linux box and run find/ls/etc
there than it is to run the Cygwin versions locally.

Glynn Clements <glynn at gclements.plus.com>

More information about the grass-dev mailing list