losing cached no-such-file messages from includes

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

losing cached no-such-file messages from includes

David Boyce-3
I encountered a surprising corner case recently; not clear whether it constitutes a bug.

The documentation is clear that when an include file is not found make sits on the message for a while in case the file can be made. That I understand, but there are two surprising behaviors which result. First, only the most recent missing include file message seems to be cached:

$ cat Makefile
include no_such_file_1
include no_such_file_2
include no_such_file_3
all:;@:

$ make
Makefile:3: no_such_file_3: No such file or directory
make: *** No rule to make target 'no_such_file_3'.  Stop.

Second, if make is aborted by $(error ...) no cached messages are printed at all:

$ cat Makefile
include no_such_file_1
include no_such_file_2
include no_such_file_3
$(error DIE HERE)
all:;@:

$ make
Makefile:4: *** DIE HERE.  Stop.

Imagine a config file which is supposed to set BASEDIR followed by an assert to make sure it's present:

include cfgfile
$(if $(BASEDIR),,$(error Error: BASEDIR not set))

The result of not finding cfgfile is *only* the "BASEDIR not set" error - nothing about the include file. It's easy to see how a person could waste lots of time going through the code in cfgfile trying to figure out why it doesn't set BASEDIR before eventually realizing it isn't included at all. So: bug or just-how-it-is?

David

_______________________________________________
Bug-make mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/bug-make