Re: Intermittent parallel make rebuild failures

2010-10-18 Thread David Highley
David Highley wrote:
 
 Philip Guenther wrote:
  
  Looking backwards, this rule from your top level makefile:
  
   $(INF_DIST_SVCS_OBJS): $(DIRS)
  
  seems bogus, given that $(INF_DIST_SVCS_OBJS) is a list of objects in
  directories _below_ the list of directories in $(DIRS).  The top level
  make may recurse, then on popping back out see that the *SOURCE
  DIRECTORY* didn't change, and thereby decide that the object must not
  have changed.
 
 OK, the fix ended up being fairly minor to implement. We replaced the
 $(DIRS) target with:
 $(INF_DIST_SVCS_OBJS): $(INF_DIST_SVCS_SCRS)
   @$(SET_E); $(MKDIR) $(@D); cd $(@D)/..  \
   PATH=$(PATH) $(MAKE) $(OBJDIR)/$(@F)
 
 Had to create another macro $(INF_DIST_SVCS_SCRS) which is defined as:
 INF_DIST_SVCS_SCRS  = $(foreach DIR,$(DIRS),$(wildcard $(DIR)/*.cpp))
 
 We still need to had a filter capability to the macro yet. Testing has
 shown this to be solid and you get the message that your object file is
 up to date for each object file that does not need to change.

Well, as is the case with most software development we still had issues.
The real issue seems to be the early evaluation of prerequisites and also
not having enough knowledge of the code at the upper level make
location. So while the fix ended up being minor the discovery was a long
process. We ended up adding a recursion at the top level:

all: $(DIRS)
$(SET_E); PATH=$(PATH) $(MAKE) $(LIBRARY)

So in the end we removed the new macro that only provided knowledge of
the body files and not the header files so it was still an incomplete
solution.

I did get a synopsis of our build process pushed to the web with some
overview documentation. We would appreciate any feedback and we hope
that others can find useful working examples from this build process.
This build system and our applications work across Solaris, Linux,
Windows, and VxWorks. While the newer WindRiver tool sets are a little
easier to work with it still requires some separate build process when
you are constructing the application image. If you are just building
support libraries it can be done like other platforms. All of our builds
use relative paths and require Cygwin for the Windows platform, and for
the VxWorks builds as the tool set is hosted on Windows. All of our
compilers are checked into ClearCase, but the build process is
independent of ClearCase except for how we build version identification
into the build products.

http://www.highley-recommended.com/make_process/index.html

 
  
  It looks me like your makefile is misleading make.
  
  Can you give examples of the output of make when this stuff *isn't*
  working?  Preferable minimal, of course, where only a single source
  file was changed/recompiled, showing how make failed to rebuild
  everything that it you wish it would, and then the output of the
  second make invocation that builds the missing piece?ou
  
  
  I don't trust dependencies on directories; you have a dependency on a
  directory WHOSE CONTENTS AREN'T BEING CHANGED.  That raises florescent
  red flags to me.
  
  
  Philip Guenther
  
 
 ___
 Bug-make mailing list
 Bug-make@gnu.org
 http://lists.gnu.org/mailman/listinfo/bug-make
 

___
Bug-make mailing list
Bug-make@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-make


Re: Intermittent parallel make rebuild failures

2010-10-10 Thread Philip Guenther
Looking backwards, this rule from your toplevel makefile:

 $(INF_DIST_SVCS_OBJS): $(DIRS)

seems bogus, given that $(INF_DIST_SVCS_OBJS) is a list of objects in
directories _below_ the list of directories in $(DIRS).  The toplevel
make may recurse, then on popping back out see that the *SOURCE
DIRECTORY* didn't change, and thereby decide that the object must not
have changed.

It looks me like your makefile is misleading make.

Can you give examples of the output of make when this stuff *isn't*
working?  Preferable minimal, of course, where only a single source
file was changed/recompiled, showing how make failed to rebuild
everything that it you wish it would, and then the output of the
second make invocation that builds the missing piece?ou


I don't trust dependencies on directories; you have a dependency on a
directory WHOSE CONTENTS AREN'T BEING CHANGED.  That raises florescent
red flags to me.


Philip Guenther

___
Bug-make mailing list
Bug-make@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-make


Re: Intermittent parallel make rebuild failures

2010-10-10 Thread David Highley
Philip Guenther wrote:
 
 Looking backwards, this rule from your top level makefile:
 
  $(INF_DIST_SVCS_OBJS): $(DIRS)
 
 seems bogus, given that $(INF_DIST_SVCS_OBJS) is a list of objects in
 directories _below_ the list of directories in $(DIRS).  The top level
 make may recurse, then on popping back out see that the *SOURCE
 DIRECTORY* didn't change, and thereby decide that the object must not
 have changed.

OK, the fix ended up being fairly minor to implement. We replaced the
$(DIRS) target with:
$(INF_DIST_SVCS_OBJS): $(INF_DIST_SVCS_SCRS)
@$(SET_E); $(MKDIR) $(@D); cd $(@D)/..  \
PATH=$(PATH) $(MAKE) $(OBJDIR)/$(@F)

Had to create another macro $(INF_DIST_SVCS_SCRS) which is defined as:
INF_DIST_SVCS_SCRS  = $(foreach DIR,$(DIRS),$(wildcard $(DIR)/*.cpp))

We still need to had a filter capability to the macro yet. Testing has
shown this to be solid and you get the message that your object file is
up to date for each object file that does not need to change.

 
 It looks me like your makefile is misleading make.
 
 Can you give examples of the output of make when this stuff *isn't*
 working?  Preferable minimal, of course, where only a single source
 file was changed/recompiled, showing how make failed to rebuild
 everything that it you wish it would, and then the output of the
 second make invocation that builds the missing piece?ou
 
 
 I don't trust dependencies on directories; you have a dependency on a
 directory WHOSE CONTENTS AREN'T BEING CHANGED.  That raises florescent
 red flags to me.
 
 
 Philip Guenther
 

___
Bug-make mailing list
Bug-make@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-make


Re: Intermittent parallel make rebuild failures

2010-10-08 Thread David Highley
Philip Guenther wrote:
 
 On Thu, Oct 7, 2010 at 9:22 AM, David Highley
 dhigh...@highley-recommended.com wrote:
 ...
  Let us just cut to the essence of the issue we are running into, how do
  target prerequisites get processed in version 3.81 of make?
 
  Example:
  $(LIBRARY): $(INF_DIST_SVCS_OBJS)
 
  $(INF_DIST_SVCS_OBJS): $(DIRS)
 
  $(DIRS):
 
  .PHONY: $(DIRS)
 
  With parallel building how does the macro $(INF_DIST_SVCS_OBJS) get
  evaluated before the target $(DIRS) is done? Is there a method to stop
  this other than turning parallel building off?
 
 Have you read the info pages section How `make' Reads a Makefile?
 In it, it explains that variables in targets and prerequisite lists
 are expanded immediately when the rule is read during the parsing of
 the Makefile.  So, *before any targets have been built*,
 $(INF_DIST_SVCS_OBJS) will be expanded twice during the parsing of the
 above Makefile snippet, once when the $(LIBRARY) rule is parsed and
 once when the $(INF_DIST_SVCS_OBJS) rule is parsed.

Yes I know the normal order of processing of includes, macros, and
targets. I will say that I have some that use $@ which is only defined
when the target is executed can work.
 
 The -j option has no effect on that, so I don't understand your last
 question above.  Or are you saying that this makefile is part of a
 recursive make setup, so that it might be read multiple times, the
 earlier of which could affect the latter of which?

OK, the behavior has been very miss leading in this case. The real issue
is that there is no knowledge of the source files at the upper make
level yet we are rolling all the lower level created object files
into a larger library. Would not need to do this if on UNIX/Linux
platforms you could stuff multiple libraries into a collection library
and get the linker work right. This does work on Windows, but we need
solutions that work across a wide array of platforms.

The behavior is such that non parallel builds work every time. If several
object files change then it seems to work. If you touch only one source
file and build then it will fail most of the time.

If you add $(INF_DIST_SVCS_OBJS) to the .PHONY: target it will work
every time, but unfortunately it will relink even if no object file
changes. If you add an order dependent prerequisite | $(DIRS) to the
library target it has no effect. So I'm still working on the right
solution.

By the way I hope to make available our build process in the near
future. I have been working on documenting it and hope that others may
find it useful, educating and can provide feedback with their ideas for
making it better. It has proven to be light weight and easy to bring up
on new projects.

 
 
 Philip Guenther
 

___
Bug-make mailing list
Bug-make@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-make


Re: Intermittent parallel make rebuild failures

2010-10-07 Thread David Highley
OK, after more testing I now believe that I have leaped to the Island
of Conclusions in the Sea of Wisdom more than once, or more accurately
I have fallen into the unconscious incompetent syndrome.

Let us just cut to the essence of the issue we are running into, how do
target prerequisites get processed in version 3.81 of make?

Example:
$(LIBRARY): $(INF_DIST_SVCS_OBJS)

$(INF_DIST_SVCS_OBJS): $(DIRS)

$(DIRS):

.PHONY: $(DIRS)

With parallel building how does the macro $(INF_DIST_SVCS_OBJS) get
evaluated before the target $(DIRS) is done? Is there a method to stop
this other than turning parallel building off?

I did read the update NEWS and looked through all the backward
incompatibles and down loaded the latest manual so I'm really not
understanding what is causing this issue. The target $(DIRS) does invoke
sub make processes but I do not see the why that would matter in the
context of understanding how the prerequisites are processed.

David Highley wrote:
 
 Well, I'm going to have to eat crow on this one. After much digging into
 this issue, down loading older versions of make back to 3.78.1.
 Researching our large build process and its history I find that we had
 disabled parallel building for this one library build in the past. We
 use the build construct describe before all over our build process and I
 find only this one library build where we disabled parallel building for
 the top makefile. I can find nothing unique about this library build as
 compared to our other library builds so I'm still not able to understand
 why we need to disable parallel building for this one library. Note the
 disabling is only for the top makefile, all the sub makes are still
 parallel which in effect means that only one source directory has sub
 make launched at a time. We have larger library builds and we have
 smaller library builds so we see no reason why this one exhibits a
 parallel build issue.
 
 What I also found was the lack of comments for the reason we disabled
 parallel building before, which I have now corrected. I did retest with
 the current version of make 3.82 and found no issue. But since I only
 did testing with the problematic area I'm not able say whether it works
 in general. Paul, if you would like me to do a larger test with the
 latest version let me know and I can work that in.

___
Bug-make mailing list
Bug-make@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-make


Re: Intermittent parallel make rebuild failures

2010-10-07 Thread Philip Guenther
On Thu, Oct 7, 2010 at 9:22 AM, David Highley
dhigh...@highley-recommended.com wrote:
...
 Let us just cut to the essence of the issue we are running into, how do
 target prerequisites get processed in version 3.81 of make?

 Example:
 $(LIBRARY): $(INF_DIST_SVCS_OBJS)

 $(INF_DIST_SVCS_OBJS): $(DIRS)

 $(DIRS):

 .PHONY: $(DIRS)

 With parallel building how does the macro $(INF_DIST_SVCS_OBJS) get
 evaluated before the target $(DIRS) is done? Is there a method to stop
 this other than turning parallel building off?

Have you read the info pages section How `make' Reads a Makefile?
In it, it explains that variables in targets and prerequisite lists
are expanded immediately when the rule is read during the parsing of
the Makefile.  So, *before any targets have been built*,
$(INF_DIST_SVCS_OBJS) will be expanded twice during the parsing of the
above Makefile snippet, once when the $(LIBRARY) rule is parsed and
once when the $(INF_DIST_SVCS_OBJS) rule is parsed.

The -j option has no effect on that, so I don't understand your last
question above.  Or are you saying that this makefile is part of a
recursive make setup, so that it might be read multiple times, the
earlier of which could affect the latter of which?


Philip Guenther

___
Bug-make mailing list
Bug-make@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-make


Re: Intermittent parallel make rebuild failures

2010-10-06 Thread David Highley
Paul,

Since yesterday was very hectic I decided to go back and re-run all my
testing for the intermittent parallel build failure. I have now
concluded that Red Hat 5.4 also does not work so the last know working
version was a 3.79-x version which came on Red Hat 3 Update 8. I did
retest the latest version 3.82 down loaded from savannah.gnu.org and it
also does not work. Let me know how I can further support getting this
issue fixed.

Paul Smith wrote:
 
 On Tue, 2010-10-05 at 11:07 -0700, David Highley wrote:
  The latest version of Fedora 13 does not have a 3.82 version of make so
  the only way to test would be to build from source which I can do. It
  may take me a while since were pretty busy right now.
 
 Building make from source is pretty trivial: only one binary (plus
 docs).  You can just run it out of the build directory if you want, no
 need to install.
 
 But no huge rush: I'm underwater at work for at least the next few weeks
 as well.
 
  Do we know if anyone is working on a newer update for Cygwin?
 
 I don't; maybe a message to make-...@gnu.org would help?  I really don't
 follow this at all (I know, lucky, right? :-)) but my vague impression
 is that people are moving away from Cygwin and towards mingw.
 
  Paul has it really only been 15 years. I though our discussions went
  back to 1995 or so when you were working a Bay Networks.
 
 Well, I've been using GNU make heavily since 1988 or 1989 so it's likely
 we did have those discussions.  But I took over maintainer ship from
 Roland in 1996 (as best as I recall).
 

___
Bug-make mailing list
Bug-make@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-make


Re: Intermittent parallel make rebuild failures

2010-10-05 Thread Edward Welbourne
 Every time the subject of cache comes up its because they are always
 wrong.

well, this *is* a *bug* list - every time anything comes up here, it's
because someone's found a bug in it !  The vast amount of the time
that the cache works just fine and makes builds faster is (quite
properly) not normally the subject of posts to the bug-make list ...

Eddy.

___
Bug-make mailing list
Bug-make@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-make


Re: Intermittent parallel make rebuild failures

2010-10-05 Thread David Highley
Edward Welbourne wrote:
 
  Every time the subject of cache comes up its because they are always
  wrong.
 
 well, this *is* a *bug* list - every time anything comes up here, it's
 because someone's found a bug in it !  The vast amount of the time
 that the cache works just fine and makes builds faster is (quite
 properly) not normally the subject of posts to the bug-make list ...

That's the issue, things used to work reliably. Now we seem to accept
that they work most of the time. So far I find no acceptable way of
modifying this build to be reliable. Here is the tough part of trying to
fix this issue. If your trying to support a large build system and have
consistency across subsystems and minimize multiple typing of code to
minimize maintenance failures then it is very hard to solve this issue.

So far the only way I have been able to get the build to work it to add
the macro $(DIRS) to the dependency line and change the $(LINK) macro
not to use $^ but to use $(INF_DIST_SVCS_OBJS) which totally breaks any
kind of maintainability across a large build system.

In the information provided the macro $(LINK) can be one of:
LINK_STATIC = \
  PATH=$(PATH) \
  $(AR) \
  $(AR_OUT) \
  $^
LINK_SHARED = \
  PATH=$(PATH) \
  LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \
  $(LD) \
  $(LD_OUT) \
  $(LIB_NAME) \
  $(LDXFLAGS) \
  $(LDBFLAGS) \
  $^
LINK_DLL= \
  PATH=$(PATH) \
  LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \
  $(LD) \
  $(LD_OUT) \
  $(LIB_NAME) \
  $(LDXFLAGS) \
  $(LDBFLAGS) \
  $^ \
  $(LIBS) \
  $(PLATFORM_LIBS) \
  $(MANIFEST)

 
   Eddy.
 

___
Bug-make mailing list
Bug-make@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-make


Re: Intermittent parallel make rebuild failures

2010-10-05 Thread David Highley
David Highley wrote:
 
 Edward Welbourne wrote:
  
   Every time the subject of cache comes up its because they are always
   wrong.
  
  well, this *is* a *bug* list - every time anything comes up here, it's
  because someone's found a bug in it !  The vast amount of the time
  that the cache works just fine and makes builds faster is (quite
  properly) not normally the subject of posts to the bug-make list ...

Good news, it appears that Red Hat 5.4 with GNU make 3.81-3 fixes the
issue we are running into. Now to find the right version for Cygwin.

 
 That's the issue, things used to work reliably. Now we seem to accept
 that they work most of the time. So far I find no acceptable way of
 modifying this build to be reliable. Here is the tough part of trying to
 fix this issue. If your trying to support a large build system and have
 consistency across subsystems and minimize multiple typing of code to
 minimize maintenance failures then it is very hard to solve this issue.
 
 So far the only way I have been able to get the build to work it to add
 the macro $(DIRS) to the dependency line and change the $(LINK) macro
 not to use $^ but to use $(INF_DIST_SVCS_OBJS) which totally breaks any
 kind of maintainability across a large build system.
 
 In the information provided the macro $(LINK) can be one of:
 LINK_STATIC = \
   PATH=$(PATH) \
   $(AR) \
   $(AR_OUT) \
   $^
 LINK_SHARED = \
   PATH=$(PATH) \
   LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \
   $(LD) \
   $(LD_OUT) \
   $(LIB_NAME) \
   $(LDXFLAGS) \
   $(LDBFLAGS) \
   $^
 LINK_DLL= \
   PATH=$(PATH) \
   LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \
   $(LD) \
   $(LD_OUT) \
   $(LIB_NAME) \
   $(LDXFLAGS) \
   $(LDBFLAGS) \
   $^ \
   $(LIBS) \
   $(PLATFORM_LIBS) \
   $(MANIFEST)
 
  
  Eddy.
  
 
 ___
 Bug-make mailing list
 Bug-make@gnu.org
 http://lists.gnu.org/mailman/listinfo/bug-make
 


-- 

Regards,

David Highley
Highley Recommended, Inc.   Phone: (206) 669-0081
2927 SW 339th StreetWEB: http://www.highley-recommended.com
Federal Way, WA 98023-7732

___
Bug-make mailing list
Bug-make@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-make


Re: Intermittent parallel make rebuild failures

2010-10-05 Thread Paul Smith
On Tue, 2010-10-05 at 10:23 -0700, David Highley wrote:
 Good news, it appears that Red Hat 5.4 with GNU make 3.81-3 fixes the
 issue we are running into. Now to find the right version for Cygwin.

I'd be really interested to know whether the current latest release of
GNU make (3.82) has this problem or not.

If not I'll need to go dig up the SRPM for that version of GNU make from
Red Hat and find out what patches they've installed.

  That's the issue, things used to work reliably. Now we seem to accept
  that they work most of the time.

Can you clarify what you mean by used to work reliably?  With which
version?  The directory caching stuff predates my involvement with GNU
make, so it's at least 15 years old.


___
Bug-make mailing list
Bug-make@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-make


Re: Intermittent parallel make rebuild failures

2010-10-05 Thread David Highley
Paul Smith wrote:
 
 On Tue, 2010-10-05 at 10:23 -0700, David Highley wrote:
  Good news, it appears that Red Hat 5.4 with GNU make 3.81-3 fixes the
  issue we are running into. Now to find the right version for Cygwin.
 
 I'd be really interested to know whether the current latest release of
 GNU make (3.82) has this problem or not.

The latest version of Fedora 13 does not have a 3.82 verion of make so
the only way to test would be to build from source which I can do. It
may take me a while since were pretty busy right now.

 
 If not I'll need to go dig up the SRPM for that version of GNU make from
 Red Hat and find out what patches they've installed.
 
   That's the issue, things used to work reliably. Now we seem to accept
   that they work most of the time.
 
 Can you clarify what you mean by used to work reliably?  With which
 version?  The directory caching stuff predates my involvement with GNU
 make, so it's at least 15 years old.

I think Red Hat 3 Update 8 Taroon had version 3.79-1-17.1 of make. Which
means there are likely many changes since that time. It appears that the
latest version of make for Cygwin is 3.81-2 which still fails for us. So
the fix maybe narrowed into a change between 3.81-2 and 3.81-3. Do we
know if anyone is working on a newer update for Cygwin?

Paul has it really only been 15 years. I though our discussions went back
to 1995 or so when you were working a Bay Networks.


___
Bug-make mailing list
Bug-make@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-make


Re: Intermittent parallel make rebuild failures

2010-10-05 Thread Paul Smith
On Tue, 2010-10-05 at 11:07 -0700, David Highley wrote:
 The latest version of Fedora 13 does not have a 3.82 verion of make so
 the only way to test would be to build from source which I can do. It
 may take me a while since were pretty busy right now.

Building make from source is pretty trivial: only one binary (plus
docs).  You can just run it out of the build directory if you want, no
need to install.

But no huge rush: I'm underwater at work for at least the next few weeks
as well.

 Do we know if anyone is working on a newer update for Cygwin?

I don't; maybe a message to make-...@gnu.org would help?  I really don't
follow this at all (I know, lucky, right? :-)) but my vague impression
is that people are moving away from cygwin and towards mingw.

 Paul has it really only been 15 years. I though our discussions went
 back to 1995 or so when you were working a Bay Networks.

Well, I've been using GNU make heavily since 1988 or 1989 so it's likely
we did have those discussions.  But I took over maintainership from
Roland in 1996 (as best as I recall).


___
Bug-make mailing list
Bug-make@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-make


Re: Intermittent parallel make rebuild failures

2010-10-05 Thread David Highley
Paul Smith wrote:
 
 On Tue, 2010-10-05 at 11:07 -0700, David Highley wrote:
  The latest version of Fedora 13 does not have a 3.82 verion of make so
  the only way to test would be to build from source which I can do. It
  may take me a while since were pretty busy right now.
 
 Building make from source is pretty trivial: only one binary (plus
 docs).  You can just run it out of the build directory if you want, no
 need to install.
 
 But no huge rush: I'm underwater at work for at least the next few weeks
 as well.

OK, I down loaded and did a build of 3.82 on both Red Hat 5.1 and Red
Hat 5.4 and it fails in the same way as 3.81-1 and 3.81-2. So 3.82 seems
to regress for this issue.

 
  Do we know if anyone is working on a newer update for Cygwin?
 
 I don't; maybe a message to make-...@gnu.org would help?  I really don't
 follow this at all (I know, lucky, right? :-)) but my vague impression
 is that people are moving away from cygwin and towards mingw.
 
  Paul has it really only been 15 years. I though our discussions went
  back to 1995 or so when you were working a Bay Networks.
 
 Well, I've been using GNU make heavily since 1988 or 1989 so it's likely
 we did have those discussions.  But I took over maintainership from
 Roland in 1996 (as best as I recall).

___
Bug-make mailing list
Bug-make@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-make


Intermittent parallel make rebuild failures

2010-10-04 Thread David Highley

We have a build process that had no issues in the past when we were on
Red Hat 3 and an older version of Cygwin. Now our core library builds
fail to link intermittently on a rebuild when building on Red Hat 5.1
and Windows using Cygwin make and Windows compilers. I did some digging
into it today and find that it is failing about half the time. I copied
code out of ClearCase and also moved it to the server hard drive to
eliminate networking and possible cache interference. For Linux the GNU
make is version 3.81-1. Build works every time if we do not parallel
build but it would take for ever to build single threaded.

When it fails if you re-run make it does no work except to link the
library. So it appears from running make with the debug option that the
top level make does not see the object file created by the lower level
make in the time when it checks the dependencies for the library. I did
more checking with strace and see only one fstat for the library when
the build fails to link and two when it succeeds.

I see a few bug reports about parallel builds failing and no resolution.

Test scenario:
- touch ../src/alarmSvc/AlarmPublisherImpl.cpp
- make -j 16 DEPFILES= DEBUG= 
MC_INTERFACES_DIR=/view/cm_mc_us_v10.=1_07/vobtags/mc_interfaces 
linux_make.log 21

Reducing the build process to essential targets and macros. The
mkcommondefs.mk file is large so I extracted the macros involved.

#-
Macros from mkcommondefs.mk file:
LIBDBG  = _$(LINK_TYPE)
OBJDIR  = $(OSTYPE)$(LIBDBG)
LIBPATH = $(TOP)/cpp/lib/$(OBJDIR)
LIBRARY = $(LIBPATH)/$(LIB_PREFIX)$(PROJECT).$(LIB_SO)
# Directory list of source code locations.
DIRS= \
  $(RELSRCPATH)/alarmSvc \
  $(RELSRCPATH)/logSvc \
  $(RELSRCPATH)/msgSvc \
  $(RELSRCPATH)/$(MSGSVCCOTSDIR) \
  $(RELSRCPATH)/msgSvcSockMux \
  $(RELSRCPATH)/recordSvc \
  $(RELSRCPATH)/timeSvc \
  $(RELSRCPATH)/utilitySvc

FIND_SRCS   = $(filter-out $(EXCLUDES), $(wildcard $(DIR)/*.cpp))
FIND_OBJS   = $(filter-out $(EXCLUDES), $(patsubst 
$(DIR)/%.cpp,$(DIR)/$(OBJDIR)/%.$(OBJ_EXT),$(FIND_SRCS)))
INF_DIST_SVCS_OBJS  = $(foreach DIR,$(DIRS),$(FIND_OBJS))

.SUFFIXES:


#-
Top level makefile:

TOP = ../..

PROJECT = infdistsvcs

# Create archive library rule.
$(LIBRARY): $(INF_DIST_SVCS_OBJS)
$(SET_E); $(MKDIR) $(LIBPATH); $(RM) $@; $(LINK)

$(INF_DIST_SVCS_OBJS): $(DIRS)

# Build library source code.
$(DIRS):
@$(SET_E); cd $@  PATH=$(PATH) $(MAKE)

# Must be located after all macro dependency targets. Only
# dependencies that are defined in a macro cause an order issue.
# The dependency macro must also be a dependency for another target.
.PHONY: $(DIRS) tests $(TDIRS) clean libclean distclean \
checkout uncheckout docs web help gen_mcis build_mcis actuate

#-
Leaf makefile where source code is located:

# Navigate up to the parent cpp, or java, or whatever directory.
TOP= ../../..

include  $(TOP)/cpp/bld/mkcommondefs.mk

# Here is the opportunity for the designer of the local subproject
# to add any def's for the local subproject.
#EXTRA_INCS =
#EXTRA_LIBS =

# Include common build rules share by build process.
include  $(TOP)/cpp/bld/mkcommonrules.mk

# Here is the opportunity for the designer of the local subproject
# to add any rules needed by the local subproject.

#-
Rules file mkcommonrules.mk:

# Default rule
all: rm_version $(OBJS)

# Create library object files, $(OBJS), rule.
$(OBJDIR)/%.$(OBJ_EXT): %.cpp
$(SET_E); $(MKDIR) $(OBJDIR); $(COMPILE)

.PHONY: all rm_version clean libclean distclean updatelibs help

Note: The target rm_version is not pertinent to rebuild issue.

___
Bug-make mailing list
Bug-make@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-make