[CMake] Better handling of library dependencies for CPack

Rosen Diankov rosen.diankov at gmail.com
Fri Apr 22 09:46:45 EDT 2011


Hi Guys,

You are right about shlibdeps, but this is not the whole story.

Debian source packages required "build dependencies" to be
preinstalled before cmake even runs. This tells each distribution what
it needs so that cmake can find it with find_package.

Afterwards, it isn't necessary to specify all the dependencies since
they can be extracted from the symbols of the shared objects
(dpkg-shlibdeps). However, there are cases where the symbols are not
used, but it is still required.

For example, I have a program that generates c++ files once it is
called. This program requires g++ to be present, or otherwise it will
not work. Therefore g++ is a runtime dependency, but there are no g++
symbols in the program.

About Eric's suggestion with "Generator"  specific dependencies, this
is not necessary for our application at the moment. What we want is
for a specific generator, to have "distribution" specific
dependencies.

thank you,
rosen,

2011/4/22 Eric Noulard <eric.noulard at gmail.com>:
> 2011/4/22 Rolf Eike Beer <eike at sf-mail.de>:
>>> We've recently started generating (debian) packages with CPack and
>>> discovered that handling library dependencies for particular
>>> distributions was not as smooth as it can be. The *_DEPENDS string
>>> just gets copied over to the final package so it puts all the burden
>>> on the user side to manage what distribution's dependencies get
>>> enabled.
>>>
>>> Instead, can we have something similar to how build-type-dependent
>>> libraries work out? For example, a library string can be set according
>>> to:
>>>
>>> set(LIBRARY debug mylibraryd optimized mylibrary)
>>>
>>> And joining multiple library strings will take care of organizing the
>>> dependencies. In the same way, it would be cool if we can specify
>>> distribution dependencies that way:
>>>
>>> set(*DEPENDS ubuntu mylib3-dev debian mylib-devel)
>>>
>>> Then depending on the distribution type the user sets, the correct
>>> dependencies can be selected.
>>
>> There are not that many binary package formats out there. Since we already know the absolute path of the libraries we depend on (since the find_package() things found them) we could feed them through "rpm -qf" or whatever meets that on Debian based systems. Then you automatically have the correct package names no matter how the distros decide to call them.
>
> That should be what dpkg-shlibdeps does for Debian.
>
> The usage of rpm -qf is not used by CPackRPM but it would be a nice
> contribution :-]
>
> --
> Erk
> Membre de l'April - « promouvoir et défendre le logiciel libre » -
> http://www.april.org
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.cmake.org/mailman/listinfo/cmake
>


More information about the CMake mailing list