Robert Mecklenburg wrote:
> 
> > From: "Noel Yap" <[EMAIL PROTECTED]>
> > Robert Mecklenburg wrote:
> > > %.o: %.c %.mkdir
> > >
> > > So I was thinking the target would be, say, "out/bar.o".  Now, with the
> > > "slow" version it has prereq of "out/bar.mkdir" (In the slow version we
> omit
> > > the .. path component.)  Then the command script executes:
> > >
> > >     @mkdir -p $(dir out/bar.mkdir)
> > >     @touch out/bar.mkdir
> >
> > I see.  Doing this would create one directory per object file
> 
> I must be off today, I don't understand.  This would execute mkdir for each
> object file, but it would not create a new directory each time (or did I
> miss something?):
> 
>     @mkdir -p $(dir out/bar.mkdir)
> =>
>     @mkdir -p out

No, I'm the one that's off.  I think the only differences are 's|\.\./\.\.\.|\.mkdir|' 
and there'd be one .mkdir file per .o file.  Did I get it right this time?

> If many .o files live in out, then you would still get only one directory.
> You _would_ get many zero-length timestamp files out/bar.mkdir,
> out/foo.mkdir, etc.

Yup, I guess I did :-)

> > and would still have a race condition when using --jobs.
> 
> Again, I'm not sure I understand you.  Directory creation on unix is atomic.
> There can be no race conditions with mkdir.  There can be with the execution
> of the touch, but that is non-critical and there would be no ill effects of
> having a second touch "beat" the first touch.
> 
> What did I miss?

I think "mkdir -p" may not be atomic, but I could be wrong.

Hmmm, at first I thought that gmake should prevent the race condition due to the 
dependency on %/../... since that should stat to the same file (but not if the 
dependency is on %.mkdir), but now I'm thinking there may still be room for a race 
condition. 
If there is, I think you're right in that there's really no harm done.

Noel
-- 
NOTICE: If received in error, please destroy and notify sender.  Sender does not waive 
confidentiality or privilege, and use is prohibited.


_______________________________________________
Help-make mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/help-make

Reply via email to