<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/62424>62424</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
cmake fails to generate correct build.ninja with LLVM under chroot
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
jirislaby
</td>
</tr>
</table>
<pre>
I have cmake-3.26.3-1.1.x86_64. With this minimal `CMakeLists.txt`:
```cmake
cmake_minimum_required(VERSION 3.3.0)
project(pokus VERSION 1.0.0 LANGUAGES C CXX)
find_package(LLVM REQUIRED CONFIG)
include(AddLLVM)
```
I see this error at the end of `mkdir b; cd b; cmake .. -GNinja` when done in a chroot environment:
```
...
-- Generating done (0.0s)
CMake Error:
Running
'/bin/ninja' '-C' '/home/jslaby/pokus/b' '-t' 'recompact'
failed with:
ninja: error: build.ninja:114: multiple rules generate /lib64/cmake/llvm/LLVM-Config.cmake
```
It is likely because `build.ninja` `build` target contains both of these:
```
//lib64/cmake/llvm/LLVM-Config.cmake
/lib64/cmake/llvm/LLVM-Config.cmake
```
In normal root, `build.ninja` contains instead: `/usr/lib64/cmake/llvm/LLVM-Config.cmake`. And that one exists also in the chroot as `/lib64` is linked to `/usr/lib64` in both environments.
`/usr/lib64/cmake/llvm/LLVMConfig.cmake` does this:
```cmake
get_filename_component(LLVM_INSTALL_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
get_filename_component(LLVM_INSTALL_PREFIX "${LLVM_INSTALL_PREFIX}" PATH)
get_filename_component(LLVM_INSTALL_PREFIX "${LLVM_INSTALL_PREFIX}" PATH)
get_filename_component(LLVM_INSTALL_PREFIX "${LLVM_INSTALL_PREFIX}" PATH)
```
Which returns `/usr` in normal root. And `/` in chroot. For some reason, in chroot, `cmake` tries to open `/usr/lib64/cmake/llvm/LLVMConfig.cmake` first, but in chroot `/lib64/cmake/llvm/LLVMConfig.cmake` is tried first (according to `strace`). They are the same files (see above), but `cmake` doesn't try them with the same order.
So those `get_filename_component()` of `LLVMConfig.cmake` look broken in this respect -- they should set an empty string to `LLVM_INSTALL_PREFIX` and not `/`?
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcVt1y4jYUfhpxcwaNkR1DLrhgCU6Zstktyf7cMbJ1jBVsiUpydnn7jiRCWJrtZNu7zmSCLOn8f9854tbKrUKckqt35OpmwHvXaDN9lEbalpeHQanFYbqEhj8hVB3f4TClLKfpcERH9Psk3-QZhS_SNeAaaaGTSna8BZIn8_d8hytpnaXuuyN5QtIZSW5IMvPr8BcUxr2w3ATxvtsY_LOXBgVhk8-L9f3ywx2kNKUJYddHFeH_3uhHrBxhk73e9Rae745oQhNYze5uP81uF_cwh_nXrxeytVRis-fVjm-RsMlq9fk9rBd_fFquFzcw_3BXLG8vJKSq2l74yzMh_P2X8-eA4ucSLGLMBxqjDXAHrkFAJUDXPjfdTkgDJUnfQSWOvz4BQCkMb--keuQkT-BbgwqEVghSAYeqMVo7QPUkjVYdKvf3lMZPSmlcDIdwiwoNd1JtoyrCJglN7Mn5UCdYeEdP6mDdKyXV9jx8ACBsTFhRSkVYoYKTbOw3h_PjgrCi0R0SVjwG-BBWhMp4qee77rgwWOluz335xj_aqblsUcA36ZqXAJ99iHbTWUytX5S9bAV93h-NMr_Z9a2T-xbB9C1a2MYk-OiLVpZ5RlgR0ceKtn3qCCt8RYdzrWq5pWfAvKytA2mhlTtsD1BixXuLvqLnTuTJacevHTdbdFBp5bhUFkrtGo8D16DFn1WQsOLXXf2vsSlQ2nj6epwRNn8lsFMUUlmHXPhcewWs6K35FQfyhMJMCXANd-Bxid99rwDeWu3h7glzBDy3RxNReZ7EEqgdCnD6FfP-hop5PiOLpedQeqPTFz6D0GgDtf-xm23RbWrZouIdbjzMtfJsjW1ms7y7f5itVpuP60Wx_AqEMcIyMn43fz_7fbGZf1qvF3cPm9Xy_mFTLFcLMr4hjMHH2cNvJ9L-OwOvHP6_lF8A-ksjqwYMut4oe4aTiI8zrEcoxgvH04g9CoU2YHWHYJBbrTwrTqdHipzA4Yz06NCg96jeSotLhNXS2KC57N2LqR8Y8CY90gZ_RFTo2z6vKm2EHwSRNdYZXmFQfE3hocEDcIOBeZZ3CL5M1gv6ccZL_YQ-0UfPzuP2pFCEjR04c_DyXWjeL5q0EWh-oN-9Btfo2Dt_CglvLk-OM_O1GFutd1AavUMVe4a0YNDusXIwHHr7B7CN7lsBFh1wBdjt3QGsMy9peA1beQJcCVCnxIf3SzEQ01Rcp9d8gNNRPmH5eDRi2aCZpmmS1PUVryqG4qpKRmzEJ1U2HmcsqetSDOSUJSxNMjZJJukky2g9vi4rVpflJL2a5NU1yRLsuGypLynVZjuQ1vY4zVnGskHLS2xteKUxpvAbhENPj6ubgZl6mWHZby3JkjY8uU5anHQtTuPrwg_WgM_TOKy0MT5ZZ10-li68h3ol0BwBOOhNO22c24fOF6bTVrqmL2mluxckBk9O77IiuOnHfwjjrwAAAP__TLQqPg">