Обсуждение: makefiles writing to $@ should first write to $@.new

Поиск
Список
Период
Сортировка

makefiles writing to $@ should first write to $@.new

От
Justin Pryzby
Дата:
There are many Makefile rules like

foo: bar
    ./tool $< > $@

If the rule is interrupted (due to ^C or ENOSPC), foo can be 0 bytes or
partially written, but won't be rebuilt until someone runs distclean or debugs
it and removes the individual file, as I did for errcodes.h.

It'd be better if these did

./tool $< > $@.new
mv $@.new $@

-- 
Justin



Re: makefiles writing to $@ should first write to $@.new

От
Michael Paquier
Дата:
On Sun, Jan 23, 2022 at 09:23:05PM -0600, Justin Pryzby wrote:
> If the rule is interrupted (due to ^C or ENOSPC), foo can be 0 bytes or
> partially written, but won't be rebuilt until someone runs distclean or debugs
> it and removes the individual file, as I did for errcodes.h.

Honestly, I am not sure that this worth bothering about.  This comes
down to a balance between the code complexity and the likelihood of a
failure, and the odds are not in favor of the later IMO.  Now, it
could be perhaps possible to make such a change simple enough while it
avoids a lot of technical debt, but we have a lot of custom rules
particularly in src/bin/, so changing all that or even require that in
future changes is not really appealing.
--
Michael

Вложения

Re: makefiles writing to $@ should first write to $@.new

От
Tom Lane
Дата:
Julien Rouhaud <rjuju123@gmail.com> writes:
> On Mon, Jan 24, 2022 at 12:41:49PM +0900, Michael Paquier wrote:
>> Honestly, I am not sure that this worth bothering about.  This comes
>> down to a balance between the code complexity and the likelihood of a
>> failure, and the odds are not in favor of the later IMO.  Now, it
>> could be perhaps possible to make such a change simple enough while it
>> avoids a lot of technical debt, but we have a lot of custom rules
>> particularly in src/bin/, so changing all that or even require that in
>> future changes is not really appealing.

> I agree, it doesn't seem worth it.

Agreed.  Another reason to not bother about this is the likelihood
that it'd all be wasted effort as soon as we switch to meson.
If that project fails, I'd be open to revisiting this issue;
but I don't think we should spend time improving the Makefiles
right now.

            regards, tom lane



Re: makefiles writing to $@ should first write to $@.new

От
Peter Eisentraut
Дата:
On 24.01.22 04:23, Justin Pryzby wrote:
> There are many Makefile rules like
> 
> foo: bar
>     ./tool $< > $@
> 
> If the rule is interrupted (due to ^C or ENOSPC), foo can be 0 bytes or
> partially written, but won't be rebuilt until someone runs distclean or debugs
> it and removes the individual file, as I did for errcodes.h.

If a rule fails, make removes the target file.  So I don't see how this 
can happen unless you hard kill -9 make or something like that.