bug-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: VPATH file rename is not detected by $<


From: Bauernberger, Joachim (EXT-Other - DE/Ulm)
Subject: RE: VPATH file rename is not detected by $<
Date: Wed, 8 Jun 2011 21:25:22 +0200

Sorry line wrapping broke the test case bbelow. Hope it's ok to attach
it once more. 
Cheers,
joachim

-----Original Message-----
From: address@hidden
[mailto:address@hidden On
Behalf Of Bauernberger, Joachim (EXT-Other - DE/Ulm)
Sent: Wednesday, June 08, 2011 9:10 PM
To: address@hidden
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,address@hidden; \
        perl -ne 'print $$_; $$_ =~ s/.*: //; push @a, $$_; END {
$$a[-1]  =~ s/$$/ :/; print join("", @a, ); }' address@hidden > address@hidden

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
address@hidden
https://lists.gnu.org/mailman/listinfo/bug-make

Attachment: err_in_dep.sh
Description: err_in_dep.sh


reply via email to

[Prev in Thread] Current Thread [Next in Thread]