Closed GiulioRomualdi closed 3 years ago
Hi @GiulioRomualdi !
The problem that you spotted is indeed that eigen
and tl-optional
are "Build Export Dependencies" (see documentation of http://wiki.ros.org/catkin/package.xml) of manif
, but they are not installed when one installs manif
. Historically, there is no strict guideline on conda-forge (as far as a I know) for how "Build Export Dependencies" (i.e., packages that you need if you developed against the library) as opposed to run dependencies (i.e. libraries that need to be installed if run a program that is compiled agaist that library), so I guess it is up to the mantainers.
For example, to compile a C++ program against qt on Linux, you also need to install https://github.com/robotology/robotology-superbuild/blob/master/doc/conda-forge.md#create-an-environment-and-install-dependencies libselinux-cos6-x86_64 libxau-cos6-x86_64 libxcb-cos6-x86_64 libxdamage-cos6-x86_64 libxext-cos6-x86_64 libxfixes-cos6-x86_64 libxxf86vm-cos6-x86_64 mesalib mesa-libgl-cos6-x86_64
(see https://github.com/robotology/robotology-superbuild/blob/master/doc/conda-forge.md#create-an-environment-and-install-dependencies), but those are not run dependencies of qt as you don't need them to run a program compile against qt or use Python bindings linked with qt. By the way, this one point we were discussing during the RoboStack hackaton fyi @wolfv @Tobias-Fischer @nuclearsandwich .
As there is no strict guideline (again, as far as I know of) I think it is up to the mantainers to decice what do to. In the specific case of manif, that is header-only C++ library, if a user installs it is because he/she wants to develop against manif, so I think it just make sense to add eigen
and tl-optional
as run
dependencies.
Hi @traversaro, thank you for the explanation. I can open a PR for that
Hi @traversaro, thank you for the explanation. I can open a PR for that
Just done it, sorry: https://github.com/conda-forge/manif-feedstock/pull/11 . : )
To clarify a bit more, not every use of an header-only library result in it being a "Build Export Dependency". This happens only if the library is used in public headers. However, as manif is a header-only library, all dependencies are included in public headers.
yeah indeed there is a bit of a blurry line.
For example, to install python packages with pip one sometimes need a compiler, but the compiler
package is not a dep of python.
Similar the situation for QT. Since most people are only "users" of those packages and don't need the dependencies.
However, for a header only library one could argue that the situation is different :)
Similar the situation for QT. Since most people are only "users" of those packages and don't need the dependencies.
Yes, for that I was actually thinking of opening an issue to propose having a qt-devel
package or similar, as manually documenting which packages to install whener you want to describe how to install from source something that depends on qt is a bit error-prone. However, I think I will wait for the situation on qt packaging to calm a bit.
Issue:
Hi @traversaro, I installed
manif
with the following commandand I noticed that eigen and tl-optional are not installed. The two dependencies are note required to compile manif since is a template only library however they are required in the consumer application to correctly compile.
Indeed when I tried to configure a project composed by the following
main
and the following
CMakeLists.txt
I got the following error
Environment (
conda list
):Details about
conda
and system (conda info
):