On 10.03.2013 18:04, Peter Maydell wrote:
Oh, right. Tracing functions moved from trace.h to the files in the
trace/ subdirectory. This means that if you didn't do a make clean or
distclean before doing the git update then the new makefile knows
nothing about the old trace.h file and so won't delete it, but the
compiler may still pull it in anyhow. However this happened a long
time back which is why I didn't mention it as a possibility (it was
discussed on the list at the time as a number of people including me
ran into it). If you remove all the files: trace.c trace.h
trace.c-timestamp trace.h-timestamp this should resolve the problem.
This is an example of a longstanding problem we have, where the
makefile's dependency rules aren't able to cope with changes to the
project source file structure, and so clean, distclean and incremental
build sometimes breaks across a git update. I think this is pretty
intractable as a problem to solve; you can mitigate it by doing all
your builds in a build directory rather than in the source tree
itself, since then you can always just delete the whole build tree to
get a definite from-scratch build.
rm -f trace.c trace.h libcacard/trace.c
find . -name \*-timestamp -exec rm -f {} \;
make distclean
make clean
./configure --target-list=x86_64-softmmu
# No files found
find . -name \*-timestamp
# No files found
find . -name trace.c
# Under git version control:
# ./include/trace.h
find . -name trace.h
=> Worked well
But shouldn't "make distclean" do the job correctly (even with a changed
directory structure, at least for some time)?
Ciao,
Gerhard