<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/117438>117438</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang] clang -M should print expanded paths
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
xtexChooser
</td>
</tr>
</table>
<pre>
When using `clang -M`, some c++ standard library headers' paths are not real paths.
For example, on AOSC OS (a usr-merged Linux distribution), `/bin/../lib64/gcc/` ... are emitted. These paths are valid for IO operations (`/bin` is linked to `/usr/bin` on usr-merged distributions, thus `/bin/../lib64` is equivalent to `/usr/lib64`), but not for Make and Ninja. Both make and ninja canonicalize them to `/lib64`, which does not exist, and they always regards these targets as dirty and rebuilds them everytime.
```
xtex@xtex1 ~ (main)> cat test.cpp
#include <cstdio>
int main() { return 0; }
xtex@xtex1 ~ (main)> clang -M test.cpp
test.o: test.cpp \
/bin/../lib64/gcc/x86_64-aosc-linux-gnu/13.2.0/../../../../include/c++/13.2.0/cstdio \
/bin/../lib64/gcc/x86_64-aosc-linux-gnu/13.2.0/../../../../include/c++/13.2.0/x86_64-aosc-linux-gnu/bits/c++config.h \
/bin/../lib64/gcc/x86_64-aosc-linux-gnu/13.2.0/../../../../include/c++/13.2.0/pstl/pstl_config.h \
/usr/include/tbb/tbb.h /usr/include/stdio.h \
/usr/include/bits/libc-header-start.h \
/usr/lib/clang/18/include/stdarg.h \
(some paths are emitted)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEVcGO2zYQ_Rr6MrAgUbZlH3RYe2OgQNM9pECPASmOJSYUqZJDx-6h315Q0sZeNyl6W0AgoSHnvcfhzFCEoFuLWLP1nq2fFyJS53x9IbwcOucC-oV06lr_0aGFGLRtgW3yxgjbwvIj2-SMHyC4HqFhfM_4HgIJq4RXYLT0wl-hQ6HQB8YrGAR1AYRHsI7AozCTKWP5M8ufpvHoPOBF9IPBBO4sPL18OsDLJ2B8KyAGv-zRt6jgV23jBZQO5LWMpJ1lfJd8Rl1HqS3jxyxj_Gi03KwYP7ZNw_iRbXLIsmwUgr0mQpXB7x0GvFN4FkYrODkPv7yAG9CLRBCSiBv8JgcdwGj7FRWQm4lj8Ld1Z-8l34sNSSp1MfxM74SOf0Z9FgYtPTK87ppPLSONcU2aP4qvCMIq-E3bLyKDvaMO-lejTUZohHVWN8LovxCow_6Gf0M-wLdONx0oh2FEx4sOlOwJiDq8gjDfxDWAx1Z4FZItIJDwLVIAEUBpT9dxu0cZtZn29IBn9FfSPb65_sQ6feNvykS2ytNUwN8p-r3Q4z2XH6ARBISBsmYYZm9eatuYqBBYeWgCKe1Y-eGeQFuCCWPL-A5YtQePFL2FnJV7YNXz_2GeK-CBfvxzrHz6bge2Pkxr8F8pedluPm9WS-FCszQprZetjYwfizLjWf7q8zDMJ2X8OBffvcN09nej_xmi1BRuHo2zJ91m3bvJHAKZefr8AzHwvdZuKCTlNKad_14ew_54osdNcxSMls1y6o_LQMLTj_2MToxjyiXt20c-4d-oZnw7duRbL5ubXMrdtzW2UHWpduVOLLAuqpKX1boqikVXV0qedpivZVmI3Q53khfb9Ulu80qdThXKha55zldFwctizbdlkVUrVZ1E3ki-QYV8zVY59kKbzJhznznfLnQIEeuiqFbldmGERBPGZ4fz-Wg8vUC-Tg5LGdvAVrnRgcINgjSZ8a2aPNbPt0IMnYtGweBTfeNlEFahmmKwiN7UHdEQWPmU-j8_tpq6KLPG9Sm-5vw6LQfvvmBDKcRJbrqlWfG55v8EAAD__62wKt0">