wildcard ignores dangling symlinks, and .MAKEPID

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

wildcard ignores dangling symlinks, and .MAKEPID

David Boyce-3
These are two minor topics and I'm not asking for anything to be done about either for the upcoming release but I thought it couldn't hurt to mention them for discussion. First, the $(wildcard ...) function appears to rely on stat(), not lstat(), which means it considers a dangling symlink to not exist (test case below). This can be a pain in "make clean" scenarios and other corner cases. One could imagine fixing this in the code with (say) a $(wildcardl ...) function but it may be sufficient to address it in the documentation. I've been able to work around any problems this causes by use of $(shell ls ...).

Second: now that make has $(file ...) and can create files internally, not just via a recipe, there is the possibility of race conditions such as two make processes creating the same file and no internal way to uniqify them. Would it make sense to publish a new variable like $(.MAKEPID) for that use? I thought I had a test case for this but the problem turned out to be different: however it still seems like a theoretical possibility. A .MAKEPID variable could also be useful in strace etc scenarios.


Test case for wildcard:

$ ls -lrt
total 4
-rw-rw-r-- 1 xxxxxxxx users 120 Sep 10 09:05 Makefile
-rw-rw-r-- 1 xxxxxxxx users   0 Sep 10 09:06 target
lrwxrwxrwx 1 xxxxxxxx users   6 Sep 10 09:06 testlink -> target

$ cat Makefile
ifneq ($(wildcard testlink),)
  $(warning testlink is present)
  $(warning testlink does not exist)

$ make
Makefile:2: testlink is present

$ rm target

$ make
Makefile:4: testlink does not exist

Bug-make mailing list
[hidden email]