Travis Vitek wrote:


Martin Sebor wrote:
It looks like the implicit rules are somehow causing it. Passing
-r to make to disable them make it work:

$ rm -f 22.locale.codecvt.out.o 22.locale.codecvt.out; \
      make 22.locale.codecvt.out && ls -l 22.locale.codecvt.out \
   || rm -f 22.locale.codecvt.out.o 22.locale.codecvt.out; \
   make -r 22.locale.codecvt.out && ls -l 22.locale.codecvt.out
make: Nothing to be done for `22.locale.codecvt.out'.
22.locale.codecvt.out: No such file or directory
gcc -c -I/build/sebor/stdcxx/include/ansi -D_RWSTDDEBUG -D_RWSTD_USE_CONFIG -I/build/sebor/stdcxx/include -I/build/sebor/stdcxx-gcc-4.1.0-11s/include -I/build/sebor/stdcxx/../rwtest -I/build/sebor/stdcxx/../rwtest/include -I/build/sebor/stdcxx/tests/include -pedantic -nostdinc++ -g -W -Wall -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long /build/sebor/stdcxx/tests/localization/22.locale.codecvt.out.cpp gcc 22.locale.codecvt.out.o -o 22.locale.codecvt.out -L/build/sebor/stdcxx-gcc-4.1.0-11s/rwtest -lrwtest11s -L/build/sebor/stdcxx-gcc-4.1.0-11s/lib -lstd11s -lsupc++ -lm
rm 22.locale.codecvt.out.o
-rwxr-xr-x   1 sebor    devel    3032001 Mar 12 12:31
22.locale.codecvt.out


Well `gmake -r 22.locale.codecvt.out' doesn't work on AIX with gmake v3.80.
If I remove the %.out rule from makefile.rules, I can use -r and the problem
goes away.

I can confirm the same behavior with GNU make 3.81 on Linux.

I don't understand the why -r switch works. This is the output
I get from make -d after disabling the %.out: % rule:

$    ls -l 22.locale.codecvt.* \
  || make -d 22.locale.codecvt.out 2>&1 | tail -n 11 \
  && ls -l 22.locale.codecvt.*
ls: 22.locale.codecvt.*: No such file or directory
 No implicit rule found for `22.locale.codecvt.out'.
Considering target file `/build/sebor/stdcxx-gcc-4.1.2-15S/lib/libstd15S.a'. Finished prerequisites of target file `/build/sebor/stdcxx-gcc-4.1.2-15S/lib/libstd15S.a'. No need to remake target `/build/sebor/stdcxx-gcc-4.1.2-15S/lib/libstd15S.a'. Considering target file `/build/sebor/stdcxx-gcc-4.1.2-15S/rwtest/librwtest15S.a'. Finished prerequisites of target file `/build/sebor/stdcxx-gcc-4.1.2-15S/rwtest/librwtest15S.a'. No need to remake target `/build/sebor/stdcxx-gcc-4.1.2-15S/rwtest/librwtest15S.a'.
 Finished prerequisites of target file `22.locale.codecvt.out'.
Must remake target `22.locale.codecvt.out'.
Successfully remade target file `22.locale.codecvt.out'.
make: Nothing to be done for `22.locale.codecvt.out'.
ls: 22.locale.codecvt.*: No such file or directory


I find this issue particularly annoying because it happens across the board
and it isn't caused by a compiler bug or even an issue with the code itself.
If we refuse to rename the test to eliminate this issue, then we should do
_something_ to eliminate the error. I realize that renaming the test is a
less than ideal solution, but something is definitely better than nothing.

Ugh. I really don't want to hack around it by renaming the test.
If it bothers you that much why don't you take the time to figure
out what's behind the make behavior we don't understand? We'll
all learn something :)

Martin

Reply via email to