ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

add system dependecies installed from source to rosdep check

asked 2012-07-09 10:57:24 -0500

dinamex gravatar image

updated 2012-07-09 12:06:51 -0500

joq gravatar image

Hi there,

I would like to know how to add a already installed package from source to the rosdep check.

My problem is in specific that I use a ARM Platform and could not install yaml-cpp0.2.6-dev from binaries (is needed from the uvc_camera package and many more). So I installed it from source without any problems. When I'm now using following commad:

$rosmake --rosdep-install uvc_camera

it still complains about the missing yaml dependency but When I'm using:

$rosmake --no-rosdep uvc_camera

It compiles and works. Now I want to now how I can define that yaml is already installed on the machine.

I would be glad to get a hint here...

edit retag flag offensive close merge delete


Which ROS distribution are you using?

joq gravatar image joq  ( 2012-07-09 12:07:18 -0500 )edit

I'm using ROS electric

dinamex gravatar image dinamex  ( 2012-07-09 14:12:21 -0500 )edit

2 Answers

Sort by ยป oldest newest most voted

answered 2012-07-09 11:12:54 -0500

ipso gravatar image

updated 2012-07-09 20:58:00 -0500

Perhaps the (unaccepted) answer in this question can help you (the bit about equivs).

EDIT: example equivs file which you could use:

Section: devel
Priority: optional
Standards-Version: 3.6.2
Package: yaml-cpp0.2.6-dev-meta
Version: 0.2.6-4~lucid
Maintainer: dinamex <dinamex@fake.pack.age>
Provides: yaml-cpp0.2.6-dev
Architecture: all
Description: Meta package providing the 'yaml-cpp0.2.6-dev' ROS dependency
 Package provides the 'yaml-cpp0.2.6-dev' package, without installing the
 actual files.

EDIT2: yet another option would be to just build an ARM version of the yaml-cpp0.2.6-dev and install that. makeinstall or dpkg-buildpackage could help you with that. See also the answer from @joq.

edit flag offensive delete link more


Is there a different way? I just want to make clear that one package is installed. It can't be that complicated that I need to trick the system. Even this answer points out "This is somewhat of an 'advanced' technique though, as you can create some pretty interesting apt conflicts this way"

dinamex gravatar image dinamex  ( 2012-07-09 11:34:40 -0500 )edit

I just added that warning to indicate that you should know at least something about apt and its dependency system. Using equivs and injecting a single meta-package to satisfy a dependency shouldn't pose any problems, as long as you document what you did somewhere.

ipso gravatar image ipso  ( 2012-07-09 11:48:08 -0500 )edit

And it isn't really that complicated: the equivs file will probably be a few lines at maximum, after which you build it (using equivs) and install it (using dpkg). Another option could be to edit the dependencies of all packages that require the yaml-cpp0.2.6-dev file.

ipso gravatar image ipso  ( 2012-07-09 11:50:03 -0500 )edit

Thank you. I will try that... but how come that my system doesn't recognize my installed version?

dinamex gravatar image dinamex  ( 2012-07-09 15:05:10 -0500 )edit

Most likely since the files exist on your disk, but the package manager doesn't know this. So when ROS checks for this dependency, it won't find it.

ipso gravatar image ipso  ( 2012-07-09 20:57:14 -0500 )edit

answered 2012-07-09 14:33:35 -0500

joq gravatar image

You can try building yaml-cpp0.2.6-dev like the Ubuntu package. I think it is built from one of these git repositories:

I am not certain exactly how this is done, but it is probably worth a try.

edit flag offensive delete link more

Question Tools


Asked: 2012-07-09 10:57:24 -0500

Seen: 201 times

Last updated: Jul 09 '12