I can understand that this sort of black magic by GNU make is sometimes called for,
OK, I get it now. Actually it's really an important feature of GNU make (documented in section 4.5 of the info file: Rules > Directory Search), which I think can be of interest, so I will explain it: when looking for prerequisites, GNU make can be specified a list of directories to search in addition to the current directory; for example, assume we're building luatex in build/texk/web2c: actually there are no source files there, everything is in ../../../src/texk/web2c, and GNU make knows about it if we set the variable VPATH, which is taken care of by the configure script. So, if the Makefile can find prerequisites there and if they're up to date, it's happy and it builds the target. So in my case, when building loadpool.c, make was looking for luatexdir/makecpool, found ../../../src/texk/web2c/luatexdir/makecpool (the Perl script), assumed it was up to date (since it was freshly checked out and just as old as the C program in the same directory), and then tried to output loadpool.c by running ./luatexdir/makecpool which was absent. Of course, in a working directory with the right timestamps, the C program would be 24 hours old while the Perl script would date back to six months, so the Makefile would decide that luatexdir/makecpool had to be rebuilt. Anyway, it's settled now, and sorry for the noise. Arthur