On Fri, 1 Jun 2018, John Calcote wrote:

I recently ran across some sample code in section 19.4 of the Autoconf
manual (modified slightly to reduce example):

$(TESTSUITE): $(srcdir)/testsuite.at $(srcdir)/package.m4
       autom4te --language=autotest -I '$(srcdir)' -o [email protected] [email protected]
       mv [email protected] $@

This question isn't about autotest, but rather about the two commands in
this rule - why generate the output into [email protected] and then mv [email protected] into $@?
Is there some power mv has over autom4te that allows it better access to
the target under some conditions?

A reason to do such a thing is to avoid leaving a partial/corrupt output file in place due to the command writing it encountering an error. The assumption is the the 'mv' command would not be executed if the previous command encountered an error.

Another reason would be in a multi-processing environment (e.g. parallel compile) where the file content (or its timestamp) might be consumed before it is ready. The 'mv' is an atomic operation so once the file is in its final location, it is assured to be completely written.

Bob
--
Bob Friesenhahn
[email protected], http://www.simplesystems.org/users/bfriesen/
GraphicsMagick Maintainer,    http://www.GraphicsMagick.org/

_______________________________________________
Autoconf mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/autoconf

Reply via email to