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

Why does rmw_implementation have a build dependency on certain middleware packages?

asked 2019-09-05 03:28:41 -0600

DanRose gravatar image

updated 2019-09-05 03:36:39 -0600

I notice in rmw_implementation package.xml, there are build dependencies for certain middleware implementation packages. I thought the point of build_depends was only to list the packages that must be around for a package to be built, so rosdep can install them or colcon can build in topological order.

"Bloom does not support group_depend so entries below duplicate the group rmw_implementation_packages. This ensures that binary packages have support for all of these rmw impl. enabled"

The comment there mentions that these dependencies are needed for Bloom. How so? What happens in Bloom if these packages are not listed as build dependencies? Why doesn't Bloom need build references to other available RMW packages (e.g. rmw_fastrtps_dynamic_cpp and rmw_coredds_cpp)?

edit retag flag offensive close merge delete


Comments from the PR that added those lines: ros2/rmw_implementation#41: here.

gvdhoorn gravatar image gvdhoorn  ( 2019-09-05 03:40:23 -0600 )edit

Thanks, @gvdhoorn. I saw that discussion already but it just left me scratching my head.

DanRose gravatar image DanRose  ( 2019-09-05 03:50:48 -0600 )edit

Yeah. It wasn't meant as an answer. Just some additional context.

gvdhoorn gravatar image gvdhoorn  ( 2019-09-05 06:10:50 -0600 )edit

1 Answer

Sort by » oldest newest most voted

answered 2019-09-05 11:43:39 -0600

Dirk Thomas gravatar image

bloom generates the Debian control files based on the dependencies in the package manifest. When the Debian package is being built all declared build dependencies will be installed in order to build the package. As the comment mentions it doesn't take group dependencies into account.

If the package wouldn't declare any explicit build dependencies on RMW implementations there would be none installed and the package would simply fail to build (see

edit flag offensive delete link more


Note that because of this these dependencies reflect the dependencies that the debian packages will be built against and available to be selected using the environment variable RMW_IMPLEMENTATION.

tfoote gravatar image tfoote  ( 2019-09-05 13:36:54 -0600 )edit

Thank you, Dirk and Tully! So why are some middlewares excluded from package.xml? Do they work without being in the Debian control files or do I need to rebuild rmw_implementation from source in order to use them?

DanRose gravatar image DanRose  ( 2019-09-05 14:52:35 -0600 )edit
Dirk Thomas gravatar image Dirk Thomas  ( 2019-09-06 12:07:51 -0600 )edit

That’s the convo that prompted this question :-). Correct if wrong, but I think what you might be trying to say is “a particular RMW needs to be present when rmw_implementation is compiled if that RMW has a custom typesupport”

DanRose gravatar image DanRose  ( 2019-09-06 13:31:25 -0600 )edit

It it has a custom typesupport you will also need to rebuild all interface packages. The need to rebuild rmw_implementation to use a RMW impl, installed afterwards (assuming it uses e.g. introspection typesupport) is being re-evaluated and there are PRs pending to get rid of that requirement.

Dirk Thomas gravatar image Dirk Thomas  ( 2019-09-06 13:36:45 -0600 )edit

Question Tools

1 follower


Asked: 2019-09-05 03:28:41 -0600

Seen: 349 times

Last updated: Sep 05 '19