(訳注:最新の情報は原文を参照したください.)
Contents
概要
マニフェスト (manifest.xml) は,あなたのパッケージの最小構成であり,ディストリビューションのコンパイルから文書まで,幅広い ROS ツールをサポートします.パッケージの最小構成メタデータを提供するのに加えて,マニフェストの重要な役割は言語中立かつOS中立な方法で依存関係を宣言することです.ディレクトリ内の manifest.xml の存在は,意味を持ちます.ROS パッケージパス内の manifest.xml ファイルが含まれるディレクトリは,パッケージとみなされます[1].
原始的な最小のマニフェストファイルは注意書きのようなもので,”誰が書いたのか”と”どんなライセンス下にあるのか”という記述で始まっています.パッケージにとってライセンスは重要で,どの ROS コードがそこに関わっているかを意味します.一番普通のマニフェストファイルは,パッケージのインストールと実際の使用を助ける <depend> と <export> タグもまた含まれています.
<depend> タグは他のインストールされているべき ROS パッケージを指します.指されているパッケージの内容には様々な意味があります.例えば,rospy コードによれば,他のパッケージを追加するために PYTHONPATH を宣言するべきです. For roslaunch files, a depend may indicate that this package includes roslaunch files from the other package.
<export> タグは言語依存のビルドとあなたのパッケージに依存するパッケージで使用されるべきランタイム フラグを示します.roscpp のコードを含むパッケージでは,export タグがそれに依存するパッケージを抽出して,ヘッダーファイルとライブラリで宣言するべきです.
[1]: パッケージがパッケージを含むことはできません.
XML リファレンス
manifest.xml タグ リファレンスを参照してください.
例
<package> <description brief="one line of text"> long description goes here, <em>XHTML is allowed</em> </description> <author>Alice/alice@somewhere.bar, Bob/bob@nowhere.foo</author> <license>BSD</license> <url>http://pr.willowgarage.com/</url> <logo>http://pr.willowgarage.com/blog/photos/sensor_head1_500.jpg</logo> <depend package="pkgname"/> <depend package="common"/> <rosdep name="python" /> <versioncontrol type="svn" url="https://playerstage.svn.sourceforge.net/svnroot/playerstage/code/player/trunk"/> <export> <cpp cflags="-I${prefix}/include" lflags="-L${prefix}/lib -lros"/> <cpp os="osx" cflags="-I${prefix}/include" lflags="-L${prefix}/lib -Wl,-rpath,-L${prefix}lib -lrosthread -framework CoreServices"/> </export> </package>
依存関係のタイプ
マニフェストで示される最もよくある依存関係のタイプは,<depend> タグで示される別のパッケージへの依存関係です. 上記で説明しているように、この依存関係の真の意味では、実行されるコードに依存し、コンパイルタイム依存とランタイム依存でありうることも意味します。
manifestは、OSによって提供されるサードパーティのソフトウェアに依存することを宣言することもでき、<rosdep> タグを用いて表現されます。例えば、あなたのパッケージは、boostが必要とすると、:
<rosdep name="boost" />
上記を宣言することで、rosdepツールを使ってboostをinstallすることができます。rosdepは、それらのOSを調べ、適切なパッケージマネージャとパッケージ名を調べ、インストールします。
manifestが宣言できる依存の3種類目は、version-control上であり、それは<versioncontrol> タグを使って表現される.このオプションは、あまり一般的ではありませんが、ROSの中でサードパーティコードをラップしているパッケージの中で起こります。この情報は、おもにこれら外部レポジトリの証明プロセスを合理化するために、ナイトリービルドツールによって使われます。
ツール
rospackはmanifest.xmlをパースし、情報を受けとります。例えば、rospack depends package-nameは、package-nameの依存するものすべてを教えてくれます。(depends1を使用すれば、直接の依存のみを受け取ることができます。).
クライアントライブラリサポート
Pythonでは、roslibパッケージの中のroslib.manifestモジュールをmanifestsから情報を受けとるのに使うことができます。例えば:
import roslib.manifest # get the path of the manifest p = roslib.manifest.manifest_file('roscpp') # create a roslib.manifest.Manifest instance from the file m = roslib.manifest.parse_file(p)