<div dir="ltr">Hi LLVM,<div><br></div><div>I complained about the deb packages couple of times previously, even fixed some issues in packaging. I'm mostly interested in having reliable share cmake files available in llvm-dev packages. The version 3.7 was fine, but 3.8+ have regressions.</div><div><br></div><div>I'm not here to blame anybody. I would like to identify the issues and discuss long term solutions.</div><div><br></div><div>I started with building very simple test framework that checks different Ubuntu/Debian versions and currently supported LLVM versions. The first and only test just checks find_package(LLVM CONFIG) cmake function.</div><div><a href="https://github.com/chfast/llvm-apt-tests/blob/master/CMakeLists.txt" target="_blank">https://github.com/chfast/llvm-apt-tests/blob/master/CMakeLists.txt</a><br></div><div><br></div><div>I've tested {3.8, 3.9, 4.0} x {xenial, jessie} using docker images and Travis CI.</div><div><a href="https://travis-ci.org/chfast/llvm-apt-tests/builds/146508275" target="_blank">https://travis-ci.org/chfast/llvm-apt-tests/builds/146508275</a><br></div><div>As you can see, only the 3.8 on Jessie passed the test.</div><div><br></div><div>Issues I've identified:</div><div><ol><li>Packaging adds version prefix to binaries, directories, etc. -- eg. llc is renamed to llc-3.8. I'm not sure how it is done, but maybe we should add support for such feature to LLVM's cmake?</li><li>Default install location for cmake shared files is <prefix>/lib/llvm/share/llvm/cmake. find_package() is not able to find them there as it is non-standard path. find_package() needs a hint, like setting LLVM_DIR variable as in <a href="https://github.com/chfast/llvm-apt-tests/blob/master/configure.sh#L6" target="_blank">https://github.com/chfast/llvm-apt-tests/blob/master/configure.sh#L6</a><br>If we moved the cmake shared files to <prefix>/lib/llvm/cmake no hint would be needed.</li><li>On Ubuntu, packaging script moves cmake shared files to <prefix>/share/llvm-X.Y/cmake. I'm guessing to solve the issue (2). find_package() is able to find LLVMConfig.cmake file without any hint, but this file contains absolute paths referencing previous locations of other files. You usually get issues like this one:<br><span style="line-height:1.5"><br>CMake Error at /usr/share/llvm-3.8/cmake/LLVMConfig.cmake:181 (include):<br></span><span style="line-height:1.5">include could not find load file:<br>/usr/share/llvm/cmake/LLVM-Config.cmake</span><br><br><span style="line-height:1.5">Maybe it is good idea to include other cmake files assuming there are located next to the main file instead of relying on </span>absolute<span style="line-height:1.5"> paths.</span></li><li><span style="line-height:1.5">It's a bit </span>weird Debian and Ubuntu packages has different layout of installed shared files.</li><li><span style="line-height:1.5">Packages 3.9+ does not have any cmake's shared files, just empty dirs where those files are supposed to be. That might be a bug in the latest packaging script. </span></li></ol></div><div dir="ltr"><div><div>- Paweł</div></div></div></div>