Dear gnu-make gurus, I have the following c program (garble.c)
#include <unistd.h> int main() { unsigned char buf[256]; int off; for(off = 0; off < sizeof buf; off++) buf[off] = off; return write(1, buf, sizeof buf) != off; } and the following makefile (makefile) E ?= $(shell ./garble | tr -d \\000) $(error $(E)) Running the following commands, give me result which seem inconsistent to me. $ make 2>&1 | md5sum 6bfaed01fc4f24828ce7014b81c4edf1 - $ make E="$(./garble | tr -d \\000)" 2>&1 | md5sum 59d743d40047b58aa7829fd38870f288 - I would expect there to be no difference between the two hashes. My environment is $ sed q /etc/issue; uname -r; make --version Debian GNU/Linux wheezy/sid \n \l 3.2.0-4-amd64 GNU Make 3.81 Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. This program built for x86_64-pc-linux-gnu If instead of piping the output of make to md5sum I convert the output to hex, I see that ... In one case (the first one) - make converts the newline character to a space. In the other case (the second one) - make does not convert the newline character to a space - make deletes the characters \044 \045 - leading me to think make tried to expand $% as a variable.
_______________________________________________ Bug-make mailing list Bug-make@gnu.org https://lists.gnu.org/mailman/listinfo/bug-make