You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
This fixesllvm#117438.
If paths in dependency file are not absoulte, make (or ninja) will
canonicalize them.
While their canonicalization does not involves symbolic links
expansion (for IO performance concerns), leaving a
non-absolute path in dependency file may lead to unexpected
canonicalization.
For example, '/a/../b', where '/a' is a symlink to '/c/d', it should be
'/c/b' but make (and ninja) canonicalizes it as '/b', and fails for file
not found.
Signed-off-by: Bingwu Zhang <[email protected]>
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.The text was updated successfully, but these errors were encountered: