Sorry line wrapping broke the test case bbelow. Hope it's ok to attach it once more. Cheers, joachim
-----Original Message----- From: bug-make-bounces+joachim.bauernberger.ext=nsn....@gnu.org [mailto:bug-make-bounces+joachim.bauernberger.ext=nsn....@gnu.org] On Behalf Of Bauernberger, Joachim (EXT-Other - DE/Ulm) Sent: Wednesday, June 08, 2011 9:10 PM To: bug-make@gnu.org Subject: VPATH file rename is not detected by $< Hi, sorry for the bother, I checked the archives but have not found an answer. If there is already a solution please kindly point me to it. Here is the situation: If a source file is renamed and moved from one VPATH to another then $< still points to the old (previous) path. It detects that it no longer exists at the previous location but $< is still pointing to it. Please consider the attached minimalistic test case. It creates a directory called test/ in your CWD (and removes it if already present so please beware before running it) Cheers, Joachim 8<---------SNIP---------8<---------SNIP---------8<---------SNIP--------- #!/bin/bash rm -rf test mkdir -p test/src/a test/src/b test/res cat > test/src/a/foo.c <<'EOF' #include <stdio.h> int main() { printf("CMD\n"); return 0; } EOF cat > test/Makefile <<'EOF' all: foo VPATH = src/a src/b res foo: res/foo.o $(CC) -o $@ $< res/%.o: %.c $(info found $<, actual $(wildcard src/*/*.c)) $(CC) -o $@ -c $< -Wp,-MD,$@.d; \ perl -ne 'print $$_; $$_ =~ s/.*: //; push @a, $$_; END { $$a[-1] =~ s/$$/ :/; print join("", @a, ); }' $@.d > $@.d.cmd include $(wildcard res/*.d.cmd) EOF cat > test/mine.out <<EOF 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-redhat-linux-gnu First build works found src/a/foo.c, actual src/a/foo.c cc -o res/foo.o -c src/a/foo.c -Wp,-MD,res/foo.o.d; \ perl -ne 'print $_; $_ =~ s/.*: //; push @a, $_; END { $a[-1] =~ s/$/ :/; print join("", @a, ); }' res/foo.o.d > res/foo.o.d.cmd cc -o foo res/foo.o mv src/a/foo.c src/b/foo.c Second build fails found src/a/foo.c, actual src/b/foo.c cc -o res/foo.o -c src/a/foo.c -Wp,-MD,res/foo.o.d; \ perl -ne 'print $_; $_ =~ s/.*: //; push @a, $_; END { $a[-1] =~ s/$/ :/; print join("", @a, ); }' res/foo.o.d > res/foo.o.d.cmd cc: src/a/foo.c: No such file or directory cc: no input files EOF cd test make --version echo echo -------------------------------------------- First build works echo make echo echo -------------------------------------------- mv src/a/foo.c src/b/foo.c echo mv src/a/foo.c src/b/foo.c echo -------------------------------------------- Second build fails echo make echo echo -------------------------------------------- Please compare your results with mine in test/mine.out echo _______________________________________________ Bug-make mailing list Bug-make@gnu.org https://lists.gnu.org/mailman/listinfo/bug-make
err_in_dep.sh
Description: err_in_dep.sh
_______________________________________________ Bug-make mailing list Bug-make@gnu.org https://lists.gnu.org/mailman/listinfo/bug-make