The distribution contains a shell script mv-if-diff, which does what it says. The Makefile uses it to avoid touching the timestamps on automatically generated files, if they've not actually changed. For example, lib/Config.pm
I notice that on my local checkout of maint, when I do a clean rebuild, lib/unicore/mktables is being run 7 times. I also observe that sometimes when I edit files and rebuild, later files needlessly get rebuilt, probably because make thinks something is out of date, something that never gets updated, probably because it's not being "touch"ed, due to mv-if-diff, and there are non-file targets in the dependency tree. Parallel makes are also broken. I wonder if all this is related. Should we just get rid of mv-if-diff, and let make be the sole arbiter of what needs updating? And trust that if make wants to rebuild something, it should. I think that doing this would make our rebuilds cleaner, and make it easier to work out the correct set of dependencies such that we can make parallel makes work. Nicholas Clark