automake-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: gettext-0.14.2 fails on parallel build


From: Alexandre Duret-Lutz
Subject: Re: gettext-0.14.2 fails on parallel build
Date: Wed, 16 Mar 2005 16:56:28 +0100

On Wed, Mar 16, 2005 at 03:08:06PM +0100, Bruno Haible wrote:
> Alexandre Duret-Lutz wrote:
> > Thanks, I'm installing the following fix on HEAD and branch-1-9.
> > ...
> > -## Recover from the removal of $@
> > -   @if test ! -f $@; then \
> > +## Recover from the removal of address@hidden
> > +##
> > +## Make sure not to call `make elc-stamp' if emacs is not available,
> > +## because as all *.elc files appear as missing, a parallel make would
> > +## attempt to build elc-stamp several times.
> > +   @if test "$(EMACS)" != no && test ! -f $@; then \
>
> IMO this does not fix the bug. It only makes it less likely to appear.
>
> What happened was: In the rules
>
> elc-stamp: $(LISP)
>         @rm -f elc-temp && touch elc-temp
>         ...
>         @mv -f elc-temp $@
>
> 3 independent 'make' processes started working on this rule.

It seems you are trying to allow this, but that is precisely the bug I
wanted to fix.  The other points are consequences.  Only one instance
of any rule in a Makefile should run at the same time.

> Process 1 created elc-temp.
> Process 2 re-created elc-temp.
> Then process 1 and process 2 performed the "..." task.
> Process 1 moved elc-temp to elc-stemp.
> Process 2 attempted to do so as well, but elc-temp was already gone.
>
> For this to happen, the contents of the "..." task is irrelevant.

Well, if you want to allow parallel executions of "...", its contents
really matter since all instance are likely to use the same ressources
(e.g. compiling the same files... eww).

But really we do not want this: there is no reason to build the same
target more than once.

> Adding "test "$(EMACS)" != no" doesn't change the problem.

It gets rid of these 3 independent 'make' processes.  (Those
are not started when emacs exists, because when emacs exists
the *.elc files have already been built and the `test ! -f $@'
above fails.)


Here is another angle to the problem that might help: this whole issue
would not exist if the `$(am__ELCFILES): elc-stamp' rule did not have
any command.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]