Re: Make allows kind of multiple "alias" for the same target

2021-07-22 Thread Edward Welbourne
> Here, we have 2 targets:
> ../1/../main.o
> ../2/../main.o
>
> In fact, this is the same target/file (taking into account relative 
> directories).

Note that if ../1 or ../2 is a symlink to somewhere else, ../1/.. and
../2/.. aren't the same place.  It's the makefile's responsibility to
resolve any such aliasing, since make doesn't want the added complexity
(i.e. cost) by default but doesn't want to be wrong in the eccentric
case where symlinks are involved.

Eddy.



Make allows kind of multiple "alias" for the same target

2021-07-22 Thread lol lol
Hello dear developers of a Make,

Our team faced some race problems while building a project with Make.

Precise analysis shows that the problem was in fact, that Make doesn't care
if we have different aliases for the same target.
For example:
```
.PHONY: all ../1/../main.o ../2/../main.o

all: ../1/../main.o ../2/../main.o

../1/../main.o:
ccache gcc -o $@ -c ../main.c

../2/../main.o:
ccache gcc -o $@ -c ../main.c
```

Here, we have 2 targets:
../1/../main.o
../2/../main.o

In fact, this is the same target/file (taking into account relative
directories).
As a result if Make will create several threads (for each target) main.o
file will be fritten concurrently (race condition).

Make doesn't operate in a wrong way.
Anyway, I think it would be great to have an additional checker in a
Makefile which (at least) will notify the operator about the problem in a
Makefile.

P.S. Makefile project, using which it is possible to reproduce the problem
is attached to this mail.


build_race.tar
Description: Binary data