モジュール セット ファイルの構文

JHBuild は モジュール間の依存関係を XML ファイルに記述します。RELAX-NG スキーマとドキュメント タイプの定義は、JHBuild の modulesets/ ディレクトリにあります。RELAX-NG スキーマにより、Emacs の nxml-mode でモジュール セットファイルを編集できます。

モジュール セット ファイルのトップレベル要素は、moduleset という要素です。XML のネームスペースは使用されておらず、トップレベル要素の下には、モジュール ソース、インクルード文、モジュール定義 の3つのタイプがあります。

7.1. モジュール ソース

それぞれのモジュールの場所をすべてリストするよりは、いくつかの "モジュール ソース" をモジュール セットに記述し、モジュール定義でその名前を参照するほうが簡単です。同様に、モジュール セットの冗長な情報を減らすことにより、それらのモジュールの代替ソースを指定するのが簡単になります(開発者やユーザにとって CVS や Subversion などは、異なるリポジトリにアクセスする方法として一般的です)。

repository 要素は、すべてのタイプのリポジトリを説明するのに使用します。branch 要素は、モジュール定義の内部で、追加の設定を指定するのに使用します。

<repository name="name"
  type="type"
  [ default="default" ]
  [ password="password" ]
  [ cvsroot="cvsroot" ]
  [ archive="archive" ]
  [ href="href" ]
  [ server="server" ]
  [ database="database" ]
  [ defbranch="defbranch" ]
  [ trunk-template="trunk-template" ]
  [ branches-template="branches-template" ]
  [ tags-template="tags-template" ]
  [ developer-href-example="developer-href-example" ] />

name 属性により、リポジトリを一意に識別します。

default 属性により、そのモジュールに対するデフォルトのソースがどこにあるかを指定します。

type 属性により、リポジトリのタイプを指定します。この属性には archbzrcvsdarcsfossilgithgmntsvntarball のどれか1つを指定できます。モジュール定義の中には typebranch に依存する属性があります。それらについては以下で説明します。

developer-href-example 属性は、開発者が使うリポジトリの URL の書式を指定します。この属性は情報の提供のためだけに使用されます。

branch 要素は、モジュール定義の内部で使用します。

<branch
  [ repo="repository" ]
  [ module="module name" ]
  [ checkoutdir="checkoutdir" ]
  [ revision="revision" ]
  [ tag="tag" ]
  [ update-new-dirs="update-new-dirs" ]
  [ override-checkoutdir="override-checkoutdir" ]
  [ subdir="subdir" ]
  [ branch="branch" ]
  [ version="version" ]
  [ size="size" ]
  [ source-subdir="source-subdir" ]
  [ hash="hash" ]/>

すべての属性には実用的なデフォルト値があり、それらはモジュールとリポジトリの定義に依存します。以下は、一般的な属性についての説明です。

repo 属性は、リポジトリのサーバを指定します。

module 属性は、リポジトリからチェックアウトするモジュールの名前を指定します。デフォルトはモジュール ID です。

checkoutdir 属性は、チェックアウト ディレクトリの名前を指定します。デフォルトはモジュール ID です。

その他の属性については、以下で説明します

7.1.1. Arch

このリポジトリ タイプは、Arch リポジトリを定義します。

archive 属性は、使用するアーカイブを指定します。

href 属性は、使用するリポジトリの URL を指定します。

<repository type="arch" name="rhythmbox"
    archive="rhythmbox-devel@gnome.org--2004"
    href="http://web.rhythmbox.org/arch/2004"/>

7.1.2. Bazaar

このリポジトリ タイプは、Bazaar リポジトリを定義します。Bazaar 1.16 以降を推奨します。

<repository type="bzr" name="launchpad.net"
      href="lp:"/>
        

追加の属性は: trunk-template (defaults to "%(module)s") と branches-template (defaults to "%(module)s/%(branch)s") です。これらの属性は、URL を構築するために使用します。モジュール定義内の branch 要素では、branchuser 属性を指定できます。もしこれらが branches-templatetrunk-template で使用されている場合は、設定した値でテンプレートを置き換えることができます。この方法で、リポジトリをオーバーライドしてあなたの個人的なブランチからモジュールをビルドしたり、非標準的なレイアウトのリポジトリから多くのモジュールをビルドすることができます。

さらに branch 要素は、特定のリビジョンにたいするアンカーとして revspec 属性を指定できます。有効な bzr revspec を指定することができます。例えば、date:yesterday,-5,tag:0.1 は、昨日以降で、tag が "0.1"、5回前に コミットされたリビジョン取得します。指定可能な値については bzr help revisionspec を参照してください。

template 属性が定義された、リポジトリの例です:

<repository type="bzr" name="launchpad.net"
      href="lp:"
      trunk-template="~bzr-pqm/%(module)s/bzr.dev"
      branches-template="~bzr-pqm/%(module)s/%(branch)s"/>
        

上記のリポジトリにたいする、branch 要素の例です:

<branch repo="launchpad.net"
      module="bzr"
      checkoutdir="bzr-next"/>
        
<branch repo="launchpad.net"
      module="bzr"
      branch="2.2"
      checkoutdir="bzr-beta"/>
        

7.1.3. CVS

このリポジトリ タイプは、CVS リポジトリを定義します。

password 属性は、リポジトリのパスワードを指定します。

cvsroot 属性は、リポジトリの root を指定します。

<repository type="cvs" name="tango.freedesktop.org"
    cvsroot=":pserver:anoncvs@anoncvs.freedesktop.org:/cvs/tango"
    password=""/>
        

追加の属性は: revisionupdate-new-dirs、および override-checkoutdir です。

7.1.4. Darcs

このリポジトリ タイプは、Darcs リポジトリを定義します。

<repository type="darcs" name="telepathy.freedesktop.org"
      href="http://projects.collabora.co.uk/darcs/telepathy/"/>

7.1.5. Git

このリポジトリ タイプは、Git リポジトリを定義します。

<repository type="git" name="git.freedesktop.org"
    href="git://anongit.freedesktop.org/git/"/>
        

branch 要素には、以下の属性を指定できます:

revision 属性には、更新のフェーズにおいてローカル、またはリモートで追跡するブランチの切り替えを指定します。デフォルトは 'master' です。branches の設定値で、この属性をオーバーライドすることができます。現在のブランチがリモートのブランチを追跡している場合は、あなたの作業を破壊しないように切り替えのみが処理されます。

tag 属性は、更新フェーズでリビジョンを無条件にチェックアウトするために使用します。この属性は、revision 属性より優先されます。

<branch repo="git.freedesktop.org" module="swfdec/swfdec"
        checkoutdir="swfdec"
        revision="local-or-remote-branch"
        tag="tree-ish"/>
        

7.1.6. Mercurial

このリポジトリ タイプは、Mercurial リポジトリを定義します。

<repository type="hg" name="hg.gtk-vnc"
    href="http://gtk-vnc.codemonkey.ws/hg/" />
<branch repo="hg.gtk-vnc" module="outgoing.hg" checkoutdir="gtk-vnc"/>

7.1.7. Monotone

このリポジトリ タイプは、Monotone リポジトリを定義します。

server 属性は、リポジトリのサーバを指定します。

database 属性は、リポジトリで使用するデータベースを指定します。

defbranch 属性は、使用するリポジトリのブランチを指定します。

<repository type="mtn" name="pidgin.im"
    server="pidgin.im" database="pidgin.im.mtn"
    defbranch="im.pidgin.pidgin"/>

7.1.8. Subversion

このリポジトリ タイプは、Subversion リポジトリを定義します。

<repository type="svn" name="svn.gnome.org" default="yes"
    href="http://svn.gnome.org/svn/"/>
        

branchrevision を指定できます。この属性で、チェックアウトするブランチの定義、または、チェックアウトするブランチのリビジョン番号を指定します。

<branch revision="gnome-2-20"/>
        

trunk-template (デフォルトは "%(module)s/trunk")、branches-template (デフォルトは "%(module)s/branches/%(branch)s")、tags-template (デフォルトは "%(module)s/tags/%(tag)s") を使用して、カスタマイズされた svn レイアウトを指定できます。

7.1.9. Tarballs

このリポジトリ タイプは、tarball のリポジトリを定義します。

<repository type="tarball" name="dbus/dbus-python"
    href="http://dbus.freedesktop.org/releases/dbus-python/"/>

branch 要素には、以下の属性を指定できます:

module 属性により、ダウンロード、およびコンパイルするファイルを指定し、version 属性でモジュールのバージョンを指定します。

sizehash、同様に 旧来の md5sum 属性はオプションです。これらが指定された場合、パッケージが正しくダウンロードされたかチェックするのに使用されます。

branch 要素は、任意の数の patch 要素を持つことができます。ここで指定したパッチは、展開したソース ツリーにたいして記述した順に適用されます。file 属性でパッチのファイル名を指定し、strip 属性でパッチを適用する際に無視するディレクトリのレベル数を指定します(訳注:patch コマンドの -p オプションに相当)。

JHBuild に同梱されているモジュール セットでは、jhbuild/patches/ ディレクトリからパッチ ファイルを探します。URI で参照されるモジュール セットの場合、モジュール セットと同じディレクトリ、もしくはpatches/ というサブ ディレクトリからパッチ ファイルを探します。file 属性に URI を指定することもでき、その場合は指定された場所からファイルをダウンロードします。

<branch module="dbus-python-0.80.2.tar.gz" version="0.80.2"
    repo="dbus/dbus-python"
    hash="md5:2807bc85215c995bd595e01edd9d2077" size="453499">
  <patch file="dbus-glib-build.patch" strip="1" />
</branch>

また、tarball の branch 要素は、内部に quilt 要素を含めることで、インポートしたい入れ子の branch を指定することもできます。

7.2. 他のモジュール セットのインクルード

JHBuild では include 要素により、モジュール セットから他のモジュール セットをインクルードすることができます。

<include href="uri"/>

href は、インクルードするモジュール セットを参照するための URI で、include 要素を含むファイルからの相対的な URI です。

参照されるモジュール セットからインポートされるのはモジュール定義だけで、モジュール ソースはインポートされません。複数階層のインクルードもできますが、インクルードのループはできません(今のところループの処理は実装されていません)。

7.3. モジュールの定義

モジュール セット ファイルで使用できるモジュール定義には、さまざまな種類があり、そのリストは簡単に拡張できます。以下に記載するのは、最も一般的なものです。

基本的にモジュール定義は、モジュールをどうやって取得するかを記述する branch 要素と、モジュールの依存関係を定義する dependenciessuggestsafter 要素で構成されます。

dependencies 要素にリストされたモジュールは、それがインクルードされていない場合 jhbuild build のモジュール リストに追加され、依存するモジュールが最初にビルドされることを保証します。

モジュール リストを生成した後で、suggests 要素にリストされたモジュールが、モジュール リストの他に使用されます(追加のモジュールを取得しないとしても)。これはモジュールが他のモジュールに対してオプションの依存関係をもつ場合を想定したものです。

7.3.1. autotools

autotools 要素は、GNU Autotools ビルド システムでモジュールをコンパイルすることを定義します。

<autotools id="id"
	      [ autogenargs="autogenargs" ]
	      [ makeargs="makeargs" ]
	      [ makeinstallargs="makeinstallargs" ]
	      [ autogen-sh="autogen-sh" ]
	      [ makefile="makefile" ]
	      [ skip-autogen="skip-autogen" ]
	      [ autogen-template="autogen-template" ]
	      [ check-target="check-target" ]
	      [ supports-non-srcdir-builds="supports-non-srcdir-builds" ]>

  <branch [ ... ] >
    [...]
  </branch>

  <dependencies>
    <dep package="modulename"/>
    ...
  </dependencies>
  <after>
    <dep package="modulename"/>
    ...
  </after>

</autotools>

autogenargsmakeargsmakeinstallargs 属性では、それぞれ autogen.shmake および make install に引き渡す追加の引数を指定します。

autogen-sh 属性は、実行する autogen.sh スクリプトの名前を指定します。autoreconf の値は、モジュールに autogen.sh に相当するスクリプトがない場合に使用されます。この場合、JHBuild は適切な configure の後で autoreconf -i を実行します。skip-autogen では autogen.sh を実行するかどうかを指定します。指定できるのはブール値、および never で、never を指定した場合 JHBuild は決して autogen.sh の実行をスキップしません。makefile は、使用する makefile のファイル名を指定します。

supports-non-srcdir-builds 属性は、分離されたソース ディレクトリでクリーンなビルドができないモジュールであることをマークします。

autogen-template 属性は、autogen のコマンド ラインを "優雅" に制御したい場合に使用できます。これには Python の文字列書式を使用でき、以下の変数が置換されます: srcdirautogen-shprefixlibdirautogenargs。例えば、これはデフォルトの autogen-template です:

%(srcdir)s/%(autogen-sh)s --prefix %(prefix)s --libdir %(libdir)s %(autogenargs)s

check-target 属性は、make check ターゲットがないモジュールの場合は指定しなければなりません(値は false)。

7.3.2. cmake

autotools 要素は、CMake ビルド システムでモジュールをビルドすることを定義します。

<cmake id="modulename">
  <branch [ ... ] >
    [...]
  </branch>

  <dependencies>
    <dep package="modulename"/>
    ...
  </dependencies>
  <after>
    <dep package="modulename"/>
    ...
  </after>
</cmake>

7.3.3. distutils

autotools 要素は、python の distutils でモジュールをビルドすることを定義します。

<distutils id="modulename"
            [ supports-non-srcdir-builds="yes|no" ]>
  <branch [ ... ] >
    [...]
  </branch>

  <dependencies>
    <dep package="modulename"/>
    ...
  </dependencies>
  <after>
    <dep package="modulename"/>
    ...
  </after>
</distutils>

7.3.4. linux

linux 要素は、linux カーネルのビルドで使用されるモジュールを定義します。加えて、kconfig サブ要素により、別のカーネル設定を選択することができます。

<linux id="id"
	  [ makeargs="makeargs" ]>

  <branch [ ... ] >
    [...]
  </branch>

  <dependencies>
    <dep package="modulename"/>
    ...
  </dependencies>
  <after>
    <dep package="modulename"/>
    ...
  </after>

  <kconfig [ repo="repo" ]
	    version="version"
	    [ module="module" ]
	    [ config="config" ] />

</linux>

7.3.5. perl

perl 要素は、perl モジュールをビルドするために使用します。

makeargs 属性は、make に引き渡す追加の引数を指定します。

<perl id="modulename"
	 [ makeargs="makeargs" ]>

  <branch [ ... ] >
    [...]
  </branch>

  <dependencies>
    <dep package="modulename"/>
    ...
  </dependencies>
  <after>
    <dep package="modulename"/>
    ...
  </after>

</perl>

7.3.6. waf

autotools 要素は、Waf ビルド システムでモジュールをビルドすることを定義します。

waf-command 属性は、使用する waf コマンド スクリプトを指定します。デフォルトは waf です。

<waf id="modulename">
	 [ waf-command="waf-command" ]>
  <branch [ ... ] >
    [...]
  </branch>

  <dependencies>
    <dep package="modulename"/>
    ...
  </dependencies>
  <after>
    <dep package="modulename"/>
    ...
  </after>
</waf>

7.3.7. Ant

autotools 要素は、Java ベースのビルド ツールである Ant でモジュールをビルドすることを定義します。

<ant id="modulename">
  <branch [ ... ] >
    [...]
  </branch>

  <dependencies>
    <dep package="modulename"/>
    ...
  </dependencies>
  <after>
    <dep package="modulename"/>
    ...
  </after>
</ant>
例 1ant でビルドするモジュールの例
<repository type="svn" name="wikimedia"
  href="http://svn.wikimedia.org/svnroot/"/>

<ant id="cortado">
  <branch repo="wikimedia" module="mediawiki/trunk/cortado"
      checkoutdir="cortado"/>
</ant>

7.3.8. testmodule

testmodule 要素は、LDTP、または Dogtail でテストを実行するモジュールを作成するために使用します。

<testmodule id="id"
	       type="type">

  <branch [ ... ] >
    [...]
  </branch>

  <dependencies>
    <dep package="modulename"/>
    ...
  </dependencies>
  <after>
    <dep package="modulename"/>
    ...
  </after>

  <testedmodules>
    <tested package="package" />
  </testedmodules>

</testmodule>

type 属性には、モジュールで実行するテストのタイプを指定します。'dogtail' は、すべての .py ファイルの実行に Python を使用します。'ldtp' は 'ldtprunner run.xml' を実行します。

noxvfb オプションが設定されていない場合、テストのために Xvfb サーバが起動されます。

7.3.9. metamodule

metamodule 要素は、実際には何もしないモジュールを定義します。このモジュールの唯一の目的は、依存関係のためです。

例えば、meta-gnome-desktop は GNOME デスクトップの主要コンポーネントに依存しているので、実際には完全なデスクトップをインストールするよう JHBuild に指定することになります。

<metamodule id="modulename">
  <dependencies>
    <dep package="modulename"/>
    ...
  </dependencies>
  <suggests>
    <dep package="modulename"/>
    ...
  </suggests>
</metamodule>

id 属性には、モジュールの名前を指定します。子要素は autotools と同様に処理されます。

7.4. 非推奨となった要素

7.4.1. モジュール ソース

7.4.1.1. cvsroot

cvsroot 要素は、現在は非推奨となっています - かわりに repository 要素を使用してください。

cvsroot 要素は、CVS リポジトリを記述するのに使用します。

  <cvsroot name="rootname"
           [ default="yes|no" ]
           root="anon-cvsroot"
           password="anon-password"/>

name 属性は、CVS リポジトリを一意に識別する名前です。

default 属性には、モジュール セット ファイルのデフォルトのモジュール ソースを記述します。

root 属性には、このリポジトリへの匿名アクセスに使用される CVS root のリストを記述し、password 属性で匿名アクセスするときのパスワードを記述します。

7.4.1.2. svnroot

svnroot 要素は、現在は非推奨となっています - かわりに repository 要素を使用してください。

svnroot 要素は、Subversion リポジトリを記述するのに使用します。

  <svnroot name="rootname"
           [ default="yes|no" ]
           href="anon-svnroot"/>

name 属性は、Subversion リポジトリを一意に識別する名前です。

default 属性には、モジュール セット ファイルのデフォルトのモジュール ソースを記述します。

href 属性には、リポジトリの URL のリストを記述します。おそらく httphttpssvn のような URL となるでしょう。

7.4.1.3. arch-archive

arch-archive 要素は、現在は非推奨となっています - かわりに repository 要素を使用してください。

arch-archive 要素は、GNU Arch arch リポジトリを記述するのに使用します。

  <arch-archive name="archivename"
                [ default="yes|no" ]
                href="mirror-url"/>

name 属性には、Arch アーカイブの名前を指定します。

default 属性には、モジュール セット ファイルのデフォルトのモジュール ソースを記述します。

href 属性は、使用するアーカイブの URL を指定します。

7.4.2. 非推奨となったモジュール タイプ

このセクションでは、既存のモジュール セットでは使用されているものの、今後の使用は非推奨の要素について説明します。

7.4.2.1. tarball

この非推奨な要素は、autotools モジュール タイプと tarball リポジトリ タイプの単なる軽量なラッパーです。

tarball 要素では、tarball からビルドされるモジュールを定義します。

  <tarball id="modulename"
              [ version="version" ]
              [ checkourdir="checkoutdir" ]
              [ autogenargs="autogenargs" ]
              [ makeargs="makeargs" ]
              [ autogen-sh="autogen-sh" ]
              [ supports-non-srcdir-builds="yes|no" ]>
    <source href="source-url"
            [ size="source-size" ]
            [ hash="source-algo:source-hash" ]
            [ md5sum="source-md5sum" ]/>
    <patches>
      <patch file="filename" strip="level"/>
      ...
    </patches>
    <dependencies>
      <dep package="modulename"/>
      ...
    </dependencies>
    <suggests>
      <dep package="modulename"/>
      ...
    </suggests>
  </tarball>

id、および version 属性は、モジュールを識別するために使用されます。

source 要素では、ダウンロードしてコンパイルするファイルを指定します。href は必須の属性で、sizehash、同様に 旧来の md5sum 属性はオプションです。最後の2つの属性が指定された場合は、ダウンロードされたソースが正しいものであるか確認するために使用されます。

patches 要素は、ソース ツリーを展開後に1つ (または複数) のパッチの適用を指定します。file 属性はファイル名を指定し、strip 属性はパッチを適用する際に無視するディレクトリのレベル数を指定します(訳注:patch コマンドの -p オプションに相当)。

JHBuild に同梱されているモジュール セットでは、jhbuild/patches/ ディレクトリからパッチ ファイルを探します。URI で参照されるモジュール セットの場合、モジュール セットと同じディレクトリ、もしくはpatches/ というサブ ディレクトリからパッチ ファイルを探します。file 属性に URI を指定することもでき、その場合は指定された場所からファイルをダウンロードします。

その他の属性、および dependenciessuggestsafter 要素は、autotools によって処理されます。