vala: avoid potential useless remakes (minor bugfix)
authorStefano Lattarini <stefano.lattarini@gmail.com>
Mon, 16 Jan 2012 15:42:25 +0000 (16:42 +0100)
committerStefano Lattarini <stefano.lattarini@gmail.com>
Mon, 16 Jan 2012 15:43:53 +0000 (16:43 +0100)
* automake.in (lang_vala_finish_target): Ensure the timestamp file
from which the C files generated from Vala sources depend on gets
created with a modification time that is truly older than those of
said generated C files.  This prevents make from attempting useless
rebuilds (which were bound to happen deterministically on systems
with sub-second timestamp resolutions).  It is worth noting that,
luckily, those useless rebuild ended up being a no-op, since the
Vala compiler is careful not to update the timestamp of an output
file if its content has not changed from the previous version.
Still, the useless rebuilds messed up "make -q" and "make -n"
invocations, and were technically incorrect (despite being, as
noted, inoffensive in practice).

Problem revealed by failure of tests vala-mix.test and vala5.test
on a fast Solaris 10 system whose filesystem had a sub-second
timestamp resolution.

automake.in

index eb859e2fd3bcd58abfe8c65f5525e9bc9792f6d7..50a9d87307172173b891e51f0b9901bb0b2d0005 100644 (file)
@@ -6077,8 +6077,15 @@ sub lang_vala_finish_target ($$)
 
   $output_rules .=
     "\$(srcdir)/${derived}_vala.stamp: \$(${derived}_SOURCES)\n".
+# Since the C files generated from the vala sources depend on the
+# ${derived}_vala.stamp file, we must ensure its timestamp is older than
+# those of the C files generated by the valac invocation below (this is
+# especially important on systems with sub-second timestamp resolution).
+# Thus we need to create the stamp file *before* invoking valac, and to
+# move it to its final location only after valac has been invoked.
+    "\t${silent}rm -f \$@ && echo stamp > \$@-t\n".
     "\t${verbose}\$(am__cd) \$(srcdir) && ${compile} \$(${derived}_SOURCES)\n".
-    "\t${silent}touch \$@\n";
+    "\t${silent}mv -f \$@-t \$@\n";
 
   push_dist_common ("${derived}_vala.stamp");