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

Glynn Clements glynn at gclements.plus.com
Wed Oct 3 05:10:35 EDT 2007


William Kyngesburye wrote:

> On Oct 2, 2007, at 3:50 PM, Glynn Clements wrote:
> 
> > I have 3.81, and that's the only version for which I can find online
> > documentation.
> >
> > Can you check the 3.80 documentation to ensure that order-only
> > prerequisites are mentioned? They should be described in:
> >
> > 	4 Writing Rules
> > 	4.3 Types of Prerequisites
> >
> Yep, it's there.
> 
> > Other than that, I can only suggest re-building a directory with make
> > debugging enabled (make -d ...). It can generate a lot of output, so
> > pick the smallest case which demonstrates the problem (e.g. a module
> > with only one source file).
> >
> 
> I picked the datetime lib (the first module I tried *didn't* recompile).

           Prerequisite `OBJ.i686-apple-darwin8.10.1' is newer than target `OBJ.i686-apple-darwin8.10.1/between.o'.
          Must remake target `OBJ.i686-apple-darwin8.10.1/between.o'.

This suggests a bug with order-only dependencies. The whole point of
order-only dependencies is that make only considers their existence;
the timestamp is supposed to be ignored.

> Interesting - on a closer look, it seems to be completely recompiling  
> libraries, but only relinking programs.  That's with a make at the  
> top level.
> 
> If I make an individual library, it also completely recompiles.  But  
> re-making an individual program doesn't even relink, this seems to be  
> the only correct case.

That's particularly strange. The only rule which has $(OBJDIR) as a
prerequisite is the one to build object files (in Rules.make):

# default cc rules
$(OBJDIR)/%.o : %.c $(LOCAL_HEADERS) | $(OBJDIR)
	$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(NLS_CFLAGS) $(EXTRA_INC) $(INC) \
		-o $(OBJDIR)/$*.o -c $*.c

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?

Before that, can you try using "make -p" on both a library and a
module?

-- 
Glynn Clements <glynn at gclements.plus.com>




More information about the grass-dev mailing list