Stack manifest files

A ROS stack manifest (stack.xml) is a minimal specification for ROS stacks. Whereas a package manifest.xml provides information for building software, a stack manifest mainly deals with distributing and installing software.

In addition to providing a metadata about a stack, an important role of a stack.xml is to declare dependencies on other stacks. The presence of a stack.xml file in a directory is significant: a directory that contains a stack.xml file is considered to be a stack, and any packages within it are considered to be part of that stack (NOTE: stacks cannot contain stacks).

A bare minimum stack.xml file is much like a readme file, stating who is responsible for the stack and what license it is under. The license is important as it indicates who can use your code. stack.xml files usually include <depend> tags, which declare stacks that must be installed as pre-requisites.

Uses

Indexing

If a stack.xml is present, the directory is assumed to be a ROS stack, and the name of the package is the same as the name of the directory. Additionally, properties like the author, license, and description provide important metadata for an indexer.

Documentation

As part of the DRY (Don’t Repeat Yourself) principle, manifest information is oftena automatically imported into documentation, such as header information on ROS.org wiki pages, as well as in Doxygen documentation.

Deployment and Release

Dependencies between ROS stacks are used to generate installation packages.

XML Reference

Please see the stack.xml tags reference.

Example

<stack>
  <description brief="common code for personal robots">
    A set of code and messages that are widely useful to all robots. Things
    like generic robot messages (i.e., kinematics, transforms), a generic
    transform library (tf), laser-scan utilities, etc.
  </description>
  <author>Maintained by Tully Foote</author>
  <license>BSD</license>
  <review status="unreviewed" notes=""/>
  <url>http://ros.org/wiki/common</url>
  <depend stack="ros"/>
</stack>

Tools

rosstack parses and retrieves information from manifest.xml files. For example, rosstack depends stack-name will tell you all of the dependencies of stack-name (use depends1 to retrieve the direct dependencies).

Library Support

See the rospkg.RosPack and rospkg.RosStack for Python APIs to retrieve and parse manifest files.