Hi,
GNU make 3.79.1 apparently contains a pattern rule "%.out : % ; ..." which has some undesirable side effects. You can observe it as follows: - unpack ftp://alpha.gnu.org/gnu/gettext/gettext-0.11-pre1.tar.gz, - make a VPATH build: $ cd gettext-0.11-pre1 $ mkdir build $ cd build $ ../configure $ make - make a distribution package: $ make dist You will observe that the created distribution contains a tests/msguniq-1.out file which differs from the one in the source. During the "make dist" a dependency of 'distdir' on 'msguniq-1.out' has caused the following command to be executed: cp ../../tests/msguniq-1 msguniq-1.out Both 'msguniq-1' and 'msguniq-1.out' exist in the source directory ../../tests, and 'msguniq-1.out' is older than 'msguniq-1'. This has apparently triggered the implicit rule. I'd like to ask to remove this misfeature rule from GNU make because 1) It is undocumented. The "make" documentation (node "Catalogue of Implicit Rules") doesn't mention this pattern rule. It only mentions the .out suffix, but the tests/Makefile redefines the suffix list anyway. 2) It cannot be turned off in a portable way. Node "Canceling Implicit Rules" recommends redefining the same pattern rule with no commands. But since pattern rules are not portable (see SUSV2 "make" documentation), I cannot do that in a portable Makefile. 3) Compared to the rationale of the rule, namely the ability to write rules like .out.symlist : nm $< > $@ which create 'foo,symlist' from 'foo', its implementation is gross: it copies the complete executable file. This is a case where pattern rules are needed. Bruno _______________________________________________ Bug-make mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/bug-make
