Hi,
I want to generate a .deb package and have dpkg
installed (on my arch linux system). My code looks something like that:
set(CPACK_COMPONENTS_ALL Beans)
set(CPACK_COMPONENTS_GROUPING ALL_COMPONENTS_IN_ONE)
set(CPACK_DEB_COMPONENT_INSTALL ON)
set(CPACK_DEBIAN_PACKAGE_DEPENDS "")
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS ON)
I don’t understand two things here (which might be the cause of my problem):
-
Do I need the COMPONENT
variables like CPACK_DEBIAN_<COMP>_PACKAGE_SHLIBDEPS
? I do use components, but don’t generate different packages.
-
What is the difference between CPACK_DEBIAN_PACKAGE_SHLIBDEPS
and CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS
. I’ve read the documentation, but I don’t really understand the difference
My actual problem though is that with the current configuration no dependencies are generated. Cmake tells me CPACK_DEBIAN_PACKAGE_DEPENDS not set, the package will have no dependencies.
. But shouldn’t dependencies are determined automatically by using dpkg-shlibdeps
.
There is also no dependency line in Deb/Controll
. But at least something like libstdc
should always be found I assumed?
What did I do wrong?
Found out that I can run with debug output:
CPack: Create package using DEB
CPack: Install projects
CPack: - Install project: BeansServer []
CPack: - Install component: Beans
CPack: Create package
CPackDeb Debug: dpkg-shlibdeps --version output is 'Debian dpkg-shlibdeps version 1.20.9.
This is free software; see the GNU General Public License version 2 or
later for copying conditions. There is NO warranty.'
CPackDeb Debug: dpkg-shlibdeps version is <1.20.9>
CPackDeb: - Generating dependency list
CPackDeb Debug: dpkg-shlibdeps warnings
dpkg-shlibdeps: warning: package could avoid a useless dependency if ./opt/BeansServer/bin/BeansServer was not linked against libboost_date_time.so.1.76.0 (it uses none of the library's symbols)
dpkg-shlibdeps: warning: package could avoid a useless dependency if ./opt/BeansServer/bin/BeansServer was not linked against libboost_system.so.1.76.0 (it uses none of the library's symbols)
CPackDeb Debug: Found dependency: from output
-- CPACK_DEBIAN_PACKAGE_DEPENDS not set, the package will have no dependencies
Also there is a shlibs
file now. But there is still no depends
line in the control file. And I think there should be one, right?
1 Like
Okay it seems it just doesn’t work very well on arch, but only on debian based distro.
There is one problem left though. I want to ship Qt6 as part of the package as the library isn’t available in the package manager. On my Debian I therefore have installed Qt6 somewhere in my home directory and included it with CMAKE_PREFIX_PATH. Apart from Qt6.so libraries it contains also all dependencies in the same directory.
To copy the dependencies I do the following with the hint to the Qt6 library
install(TARGETS BeansServer COMPONENT Beans
RUNTIME_DEPENDENCIES
DIRECTORIES $<TARGET_FILE_DIR:Qt6::Core>
)
This will install everything properly. It issues a warning though, but as Qt6 is in a local directory, this seems to be right?
I also set the RPATH accordingly so all dependencies are found.
But when generating the deb I get errors like these:
CPackDeb: dpkg-shlibdeps: 'dpkg-shlibdeps: error: cannot find library
libicudata.so.56 needed by
./home/leon/beans-server/build-ninja-clang-release/install/lib/libicuuc.so.56.1
(ELF format: 'elf64-x86-64' abi: '0201003e00000000'; RPATH:
'/home/qt/icu_install/lib')
So first of all all the libraries: Qt6Core.so, libicuuc.so.56.1, libicudata.so.56 are from QT and are installed probably through the command above.
But it seems when analyzing libicuuc.so.56.1
it searches in the RPATH of this library. The RPATH is wrong though, the above directory /home/qt/icu_install/lib
doesn’t even exist.
Instead it should search in my defined RPATH (for BeansServer), where it would find the library.
What can I do about it?