mstorsjo wrote:

> Without any other reference, I checked the Apple clang, on my macOS:
> 
> ```
> ilg@wksi ~ % /usr/bin/clang -v
> Apple clang version 14.0.0 (clang-1400.0.29.202)
> Target: x86_64-apple-darwin21.6.0
> Thread model: posix
> InstalledDir: /Library/Developer/CommandLineTools/usr/bin
> 
> 
> ilg@wksi ~ % mkdir tmp/a 
> ilg@wksi ~ % ln -s /usr/bin/clang tmp/a
> 
> ilg@wksi ~ % tmp/a/clang -v
> Apple clang version 14.0.0 (clang-1400.0.29.202)
> Target: x86_64-apple-darwin21.6.0
> Thread model: posix
> InstalledDir: /Library/Developer/CommandLineTools/usr/bin
> ```
> 
> So Apple decided to **follow the links**, and, in my opinion, this is the 
> less ambiguous and expected behaviour.

No, this is a side effect of something else. Note, `/usr/bin/clang` isn't a 
symlink to `/Library/Developer/CommandLineTools/usr/bin/clang`, but it is a 
wrapper executable that executes the latter (after setting some env variables, 
iirc, and after locating where it is installed - it can also be in an Xcode.app 
bundle somewhere).

Let's recreate your experiment like this:
```console
% mkdir -p tmp/a
% ln -s /Library/Developer/CommandLineTools/usr/bin/clang tmp/a
% tmp/a/clang -v
Apple clang version 12.0.5 (clang-1205.0.22.9)
Target: arm64-apple-darwin21.6.0
Thread model: posix
InstalledDir: /Users/martin/tmp/a
```

There you see that Apple's clang also behaves exactly the same, if you 
disregard the external wrapper executable.

> Another way to rephrase the question: the current implementation that 
> preserves the symlinks, was it an explicitly required feature, or rather a 
> side effect that came into existence by accident when implementing the 
> current tests?

Regardless of whether it was intentional or not, due to Hyrum's law, it's quite 
possible that someone has ended up depending on the previous defacto behaviour.

We did a similar cleanup for llvm-rc not long ago, and llvm-rc has much much 
fewer users than clang. In 8c6a0c8bf50bca6c3a0c4de1b84f21466ee31655 we changed 
llvm-rc to explicitly look up the executable path (instead of looking for what 
would be found in `$PATH`, essentially finding the source end of symlinks - 
just like what clang does right now). But this broke Google's internal uses of 
the tool, so in e4eb8d97e8afcb879dc5cd0da7a937dbb26fbf12 we reverted to 
checking both paths, essentially testing both directories.

https://github.com/llvm/llvm-project/pull/68091
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to