[ros-users] handling multiple package and stack versions?

Ken Conley kwc at willowgarage.com
Mon May 31 18:28:54 UTC 2010

For our own development, we maintain two branches of our code bases:

 * boxturtle
 * latest (which becomes c-turtle)

Our features are frozen for boxturtle, which means that boxturtle
maintenance consists of just patches, while active development is on
latest. We minimize combinatorial issues by applying the branch policy
to all of our packages/stacks.

In the past we tested putting version numbers in <depend> tags, but
found that this was a source of combinatorial blowup.

There's many ways beyond C++ APIs that a package can depend on
another; conditional compilation only covers a small set, and it's far
safer to do the branching policy. We expect, over time, for the state
of the world to mature more, but ROS is being expanded to a
ever-increasing variety of platforms (quadrotors, boats, humanoids,
etc...) that will stress development for the near future.

We recommend minimizing your own overhead by targeting new features at
only one version of ROS at a time (currently boxturtle, but soon
cturtle). We anticipate the uptake of cturtle to be fairly high as
several new features/libraries (nodelets, pcl) are in high demand.

 - Ken

On Fri, May 28, 2010 at 6:24 AM, Jack O'Quin <jack.oquin at gmail.com> wrote:
> I've been wondering about the ROS process for handling version
> dependencies between stacks. Each stack seems to be released with a
> specific version number, using rosbuild_make_distribution().
> Is there a way to specify a minimum version number in the <depend>
> statement of another stack.xml?
> Is there a way to code a package so it works with multiple versions of
> some package it depends on?
> These questions have become more immediate as I try to update the
> simulator_art package, which depends on stage. For latest, stage has
> been upgraded to 3.2.2, and I need to test with that version. But, I
> also want to continue support for Box Turtle, which includes an
> intermediate stage 3.0 revision. Those versions of stage are quite
> different, and I need to detect the version and conditionally compile
> several interface types. Otherwise, if I commit my changes, I will
> break support for Box Turtle.
> One solution would be to fork a different branch for each ROS release.
> But, the combinatorics can get out of hand with significant time spent
> back-porting and merging fixes to multiple branches. I would prefer
> conditional compilation with automatic build-time detection of the
> version I am using.
> What is the "official" ROS approach to supporting multiple package or
> stack versions?
> --
>  joq
> _______________________________________________
> ros-users mailing list
> ros-users at code.ros.org
> https://code.ros.org/mailman/listinfo/ros-users

More information about the ros-users mailing list