# JHBuild マニュアル

James
Henstridge
C.J.
Adams-Collier
Frederic
Peters
David
Turner
2004, 2008
James Henstridge
JHBuild Manual v0.5
January 2008
JHBuild Manual v0.1
August 2007

JHBuild はバージョン管理システムを利用して、GNOME デスクトップ全体をビルドするのに使用されるツールです。JHBuild は他のプロジェクトをビルドするようにカスタマイズすることもできます。

Hiroyuki Sekihara
hiroyuki.sekihara@gmail.com
2010
Hiroyuki Sekihara
松澤 二郎
jmatsuzawa@gnome.org
2010
2012
松澤 二郎

## はじめに

JHBuild は モジュール(modules) と呼ばれる、ソースパッケージのあつまりを、簡単にビルドできるように作られたツールです。JHBuild はビルドできるモジュールの記述に、モジュールセット(module set) というファイルを使います。モジュールセット ファイルには、JHBuild があるモジュールをビルドするのに、何を必要としているかを見つけるための、依存関係の情報が含まれています。

JHBuild のオリジナルは GNOME をビルドするために作られましたが、その後、他のプロジェクトでも使用できるように拡張されています。モジュールセット ファイルはウェブサーバー上に置くことができるので、JHBuild プロジェクトのビルドルールとは独立させることができます。

JHBuild can build modules from a variety of sources, including CVS, Subversion, Bazaar, Darcs, Git and Mercurial repositories, as well as Tar and Zip archives hosted on web or FTP sites. JHBuild can build modules using a variety of build systems, including Autotools, CMake, Meson, WAF, Python Distutils and Perl Makefiles.

JHBuild は、ディストリビューションのパッケージ管理システムを置き換えるものではありません。JHBuild は、インストール先を prefix によって分離することにより、システムの他の部分に影響を及ぼすことなくソフトウェアをビルドするのを簡単にします。

## さあ、はじめましょう

JHBuild でソフトウェアをビルドする前に、いくつかのセットアップを実行する必要があります。JHBuild には前提条件となるいくつかのソフトウェアがあるので、モジュールの取得やビルドに必要な、それらのツールをインストールする必要があります。

### JHBuild のインストール

JHBuild requires a Python runtime. Verify Python >= 3.5 is installed.

The recommended way to download JHBuild is via the version control system, `git`. This can be achieved with the following command. It is recommended to run the command from a new directory where all source code will be installed, for example, `~/jhbuild/checkout`.

    $ git clone https://gitlab.gnome.org/GNOME/jhbuild.git
    ...
    $

これにより、現在のディレクトリ配下に `jhbuild` という新しいディレクトリが作成され、そこに JHBuild がダウンロードされます。次に JHBuild のビルド、およびインストールを行います:

    $ cd jhbuild
    $ ./autogen.sh
    ...
    $ make
    ...
    $ make install
    ...
    $

gnome-common、yelp-tools、および autotools がインストールされていれば、`autogen.sh` は、autotools の処理を経てインストールするように JHBuild を構成します。gnome-common、yelp-tools、またはautotools がインストールされていない場合、`autogen.sh` は、デフォルトの Makefile を使ってインストールするように JHBuild を構成します。常にデフォルトの Makefile を使用するには、`autogen.sh` に `--simple-install` オプションを指定します。

上記の手順が正常に終了すると、JHBuild を起動するための小さなシェルスクリプトが、`~/.local/bin` にインストールされるので、`~/.local/bin` を `PATH` に加えます:

    $ PATH=$PATH:~/.local/bin
    $

常に `~/.local/bin` を `PATH` に追加したい場合は、以下のコマンドを実行してください:

    $ echo 'PATH=$PATH:~/.local/bin' >> ~/.bashrc
    $

### JHBuild の設定

JHBuild は、設定ファイルによる設定が可能です。設定ファイルのデフォルトの場所は `~/.config/jhbuildrc` です。設定ファイルが存在しない場合は、デフォルトの設定が使用されます。設定ファイルは Python の構文で記述します。記述例は、`examples/sample.jhbuildrc` を参照してください。`examples/sample.jhbuildrc` を `~/.config/jhbuildrc` にコピーし、必要に応じて修正してください。

The sample configuration will make JHBuild build the meta-gnome-core and meta-gnome-apps-tested modules and dependencies from the gnome-apps module set. JHBuild will unpack source trees to `~/jhbuild/checkout/` and install all files to subdirectories of `~/jhbuild/install/`. The two directories must be writable.

設定変数については、 を参照してください。次の変数はよく使用します。

`repos`

  あるリポジトリにたいして、リポジトリの場所を指定するディクショナリ (訳注:Python の辞書型のこと。他言語での連想配列に相当) です。この変数はモジュール開発者にとって便利です。デフォルトでは、JHBuild は匿名アクセスでリポジトリからコードをチェックアウトします。ディクショナリのキーはリポジトリの略称で、値は代わりとなるリポジトリの場所をあらわす文字列です。以下は記述例です。

      repos['git.gnome.org'] = 'ssh://username@git.gnome.org/git/'

`moduleset`

  モジュールセットの名前を指定する文字列、または文字列のリスト(配列)です。これは JHBuild に含まれるファイル名(パスと拡張子を除く)、または 外部で管理されているモジュールセットの完全な HTTP URL のどちらでも構いません。HTTP URL のモジュールセットは、ローカルにキャッシュされます。ふたつ以上のモジュールセットに同じ名前のモジュールが存在する場合は、最後のモジュールセットのモジュールが優先します。JHBuild により提供されるモジュールセットは、その時の GNOME の開発リリースに合わせて更新されます。

`modules`

  ビルドするモジュールを指定する文字列のリストです。 `buildone` コマンドを使用しないかぎり、実際にビルドされるモジュールは、指定したモジュールが依存するモジュールもすべて含まれます。依存関係は再帰的に展開されます。デフォルトは `['meta-gnome-desktop']` です。

`checkoutroot`

  A string specifying the directory to unpack source trees to. If `buildroot` is set to `None`, builds will occur in this directory too. Defaults to `~/jhbuild/checkout`.

`prefix`

  A string specifying the prefix to install modules to. `prefix` must be an absolute path. This directory must be writable. Defaults to `'~/jhbuild/install/'`.

`autogenargs`

  `autogen.sh` スクリプトに渡す引数を指定する文字列です。すべてのモジュールに適用されます。`module_autogenargs` ディクショナリで、特定のモジュールにたいして上書きできます。

`cmakeargs`

  A string containing arguments passed to the `cmake` invocation of all modules. Can be overridden for particular modules using the `module_cmakeargs` dictionary.

`makeargs`

  A string listing additional arguments to be passed to `make`. JHBuild will automatically append the parallel execution option (`-j`) based upon available CPU cores. Defaults to `''`.

`mesonargs`

  A string containing arguments passed to the `meson` invocation of all modules. Can be overridden for particular modules using the `module_mesonargs` dictionary.

`ninjaargs`

  A string listing additional arguments to be passed to `ninja`. Defaults to `''`.

### ビルドの前提条件

モジュールをビルドする前に、いくつかのビルドツールをインストールする必要があります。ビルドするモジュールにもよりますが、共通のビルドツールには、GNU Autotools (autoconf、automake、libtool および gettext)、GNU Toolchain (binutils、gcc、g++)、make、pkg-config および Python などがあります。

JHBuild の `sanitycheck` コマンドを使って、ツールがインストールされているかをチェックできます。

    $ jhbuild sanitycheck

このコマンドが何かメッセージを表示した場合は、メッセージを参考に、お使いのディストリビューションのリポジトリから必要なパッケージをインストールしてください。さまざまなディストリビューション用のパッケージ名の一覧が GNOME wiki でメンテナンスされています。ディストリビューションのパッケージをインストールしたあとに、もういちど `sanitycheck` コマンドを実行し、必要なツールが揃ったか確認してください。

### JHBuild を使用する

セットアップが完了すれば、JHBuild でソフトウェアをビルドできます。設定ファイルの`~/.config/jhbuildrc` で指定したモジュールをすべてビルドするには、次のコマンドを実行します。

    $ jhbuild build

JHBuild は、各モジュールのダウンロード、configure、コンパイル、そしてインストールを行います。どこかのステージでエラーが発生した場合、JHBuild はメニューを表示して、どうするか確認します。選択肢としては、シェルを起動してエラーを修正する、各ステージからビルドを再実行する、そのモジュールをビルドしない、エラーを無視して処理を続行する、などがあります。

あるモジュールをビルドしなかった場合、そのモジュールに依存するモジュールのビルドも失敗することになります。

以下は、表示されるメニューの例です。

      [1] Rerun phase build
      [2] Ignore error and continue to install
      [3] Give up on module
      [4] Start shell
      [5] Reload configuration
      [6] Go to phase "wipe directory and start over"
      [7] Go to phase "configure"
      [8] Go to phase "clean"
      [9] Go to phase "distclean"
    choice:

`build` コマンドの引数にモジュール名を指定することで、異なるモジュールとその依存モジュールをビルドできます。たとえば、gtk+ をビルドするには次のコマンドを実行します。

    $ jhbuild build gtk+

もしビルドの途中で JHBuild がキャンセルされた場合、`--start-at` オプションを使用して特定のモジュールからビルドを再開できます。

    $ jhbuild build --start-at=pango

1つ(または複数)のモジュールを、依存関係を無視してビルドするために、JHBuild は `buildone` コマンドを提供しています。`buildone` コマンドが正常に終了するには、依存するモジュールが事前にビルド、インストールされているか、ディストリビューションのパッケージが提供されていなければなりません。

    $ jhbuild buildone gtk+

モジュールの開発を活発に行っているときは、ソースの作業ディレクトリにいることがよくあります。`make` コマンドは、ビルドシステムの起動およびモジュールのインストールを行います。これは、編集-コンパイル-インストール-テストのサイクルの重要な一部になります。

    $ jhbuild make

JHBuild がビルドしようとするモジュールと依存関係、その他のビルドされるモジュールの一覧を取得するには、`list` コマンドを使用します。

    $ jhbuild list

特定のモジュールの情報を取得するには、`info` コマンドを使用します。

    $ jhbuild info gtk+

ビルドせずにソフトウェアのソースをダウンロード、更新だけを行うには、`update` コマンドを使用します。`update` コマンドはビルドする前にソースを修正する機会を提供します。またインターネットの帯域幅が変化する場合に便利です。

    $ jhbuild update

その後で、JHBuild はソースのダウンロードや更新をせずに、すべてをビルドできます。

    $ jhbuild build --no-network

JHBuild と同じ環境で特定のコマンドを実行するには、`run` コマンドを使用します。

    $ jhbuild run program

JHBuild と同じ環境でシェルを起動するには、`shell` コマンドを使用します。

    $ jhbuild shell

## JHBuild と GNOME

このセクションは、GNOME のビルド、インストール、および実行に関するガイダンスです。

### GNOME のビルド

GNOME をビルドするには、以下に示すいくつかの開発用パッケージが必要となります。

- DocBook XML DTD と XSLT スタイルシート。これらは、XML カタログ (`/etc/xml/catalog`) に登録する必要があります。

- X libraries.

- Samba の `libsmbclient` (Windows ネットワークのブラウジングに使用)。

- bzip2 の `libbz2`。

- `libpng`、`libjpeg`、および `libtiff` (イメージのロードに使用)。

ディストリビューションのパッケージをインストールする場合、お使いのディストリビューションに適用できるなら、対応する dev、または devel パッケージをインストールしてください。さまざまなディストリビューション用のパッケージ名の一覧が GNOME wiki でメンテナンスされています。

### 単独の GNOME アプリケーションの実行

ここでは、単独の GNOME アプリケーションを実行する方法について説明します。アプリケーションを現在のデスクトップ環境で実行します。アプリケーションを JHBuild で構築した GNOME で実行する方法については、 を参照してください。

JHBuild のシェルを起動します。JHBuild のシェルには、必要となるすべての環境変数が設定されています。

    $ jhbuild shell

実行するアプリケーションが正しいことを確認します。たとえば、次のコマンドで確認します。

    $ which gedit
    /home/wanda/jhbuild/install/bin/gedit

アプリケーションを実行します。

    $ gedit &

あるいは、`run` コマンドでアプリケーションを実行することもできます。

    $ jhbuild run gedit

### GNOME デスクトップ環境の起動

Create a new user account to run the JHBuild GNOME. Running JHBuild GNOME using a different user account is recommended to avoid problems caused by user settings stored in the home directory. This manual refers to the new account as gnomedev.

新しく作成した gnomedev アカウントの JHBuild 環境をセットアップします。gnomedev のホームディレクトリに、`~/.config/jhbuildrc` と `~/.local/bin/jhbuild` をコピーするか、ソフトリンクを作成します。

gnomedev ユーザーで端末を開きます。以下のコマンドにより、`PATH` 変数に `~/.local/bin` を追加します。

    $ echo 'PATH=$PATH:~/.local/bin' >> ~/.bashrc

JHBuild が動作することを確認します。

    $ jhbuild run pkg-config gtk+-2.0 --modversion
    2.20.1

#### GNOME をディスプレイマネージャーから起動するためのセットアップ

JHBuild の GNOME をビルド、およびインストールします。

Enable system services. JHBuild GNOME will use the `/usr/bin` system D-Bus daemon and the system services within `/usr/share/dbus-1/system-services/`. JHBuild GNOME will use the JHBuild session D-Bus daemon and the services within `~/jhbuild/install//share/dbus-1/services/`. Replace `~/jhbuild/install` with GNOME install `prefix` in the command below:

    $ rm -rf ~/jhbuild/install/var/run/dbus
    $ ln -s /var/run/dbus ~/jhbuild/install/var/run/dbus
    $ rm -rf ~/jhbuild/install/var/lib/dbus/machine-id
    $ ln -s /var/lib/dbus/machine-id ~/jhbuild/install/var/lib/dbus/machine-id

Create a GNOME startup script at `/usr/bin/gnome-jhbuild-session` with the following, replacing `~/jhbuild/install` with GNOME install `prefix`:

    #!/bin/sh

    GNOME=~/jhbuild/install

    GDK_USE_XFT=1
    XDG_DATA_DIRS=$XDG_DATA_DIRS:$GNOME/share
    XDG_CONFIG_DIRS=$XDG_CONFIG_DIRS:$GNOME/etc/xdg

    jhbuild run gnome-session

`/usr/bin/gnome-jhbuild-session` を実行可能にします。

    $ chmod a+x /usr/bin/gnome-jhbuild-session

ディスプレイマネージャーに新しいセッションエントリを追加するために、`/usr/share/xsessions/gnome-jhbuild.desktop` を作成して、次のとおり入力します。

    [Desktop Entry]
    Name=GNOME (JHBuild)
    Comment=This session logs you into GNOME testing session
    TryExec=/usr/bin/gnome-jhbuild-session
    Exec=/usr/bin/gnome-jhbuild-session
    Icon=
    Type=Application

`gdm` を再起動します。

#### ディスプレイマネージャーから GNOME を起動する

JHBuild GNOME を起動するには、ディスプレイマネージャーで GNOME (JHBuild) セッションを選択してから、gnomedev のログイン情報を入力します。成功した場合は、JHBuild GNOME が表示されます。失敗した場合は、ログファイルを確認してください。ログファイルの場所は、`~gnomedev/.cache/gdm/session.log` か `~gnomedev/.xsession-errors` です。

### Static Analysis

JHBuild supports running static analysis tools on the code in modules as they’re built. To enable this, set the `static_analyzer` configuration variable to `True` in the `.jhbuildrc` configuration file.

If enabled, every time a module is built using JHBuild, the build process will be wrapped in a static analyzer, which will generate a report of any problems it finds with the code. These reports are saved as HTML files in subdirectories of `/tmp/jhbuild_static_analyzer` (by default; the path can be changed using the `static_analyzer_outputdir` configuration variable).

Static analysis currently only works for modules which use autotools as their build system. It requires the `scan-build` program to be installed, although the command it uses can be changed by modifying the `static_analyzer_template` configuration variable.

## コマンドリファレンス

JHBuild は CVS などのツールに似たコマンドラインシンタックスを使用します。

    jhbuild global-options command command-arguments

JHBuild のグローバルオプションは次のとおりです。

`-f`, `--file` config

  デフォルトの `~/.config/jhbuildrc` の代わりに、別の設定ファイルを使用します。

`-m`, `--moduleset` moduleset

  設定ファイルに記述されたモジュールセットではなく、別のモジュールセットを使用します。このオプションは、モジュールセットが JHBuild のモジュールセットフォルダーにある場合は相対パスで指定できます。それ以外の場所にある場合は、絶対パスで指定します。

`--no-interact`

  ユーザーに入力を求めません。無人でビルドを行い、ビルドが中断されないようにする場合に、このオプションは便利です。

`--exit-on-error`

  Exit immediately if a module fails to build. This option is primarily useful in noninteractive mode, in order to ensure jhbuild does not continue to build any additional modules.

`--conditions`

  Modify the condition flags to be different than those determined on the basis of the OS and those specified in jhbuildrc. Modifications are specified like `-wayland` or `+docs` in order to remove or add conditions. Multiple modifications can be separated by a comma like `--conditions=+docs,-wayland` or you can split them across multiple `--conditions` arguments.

Additionally, JHBuild checks the presence, and value, of the following environment variables:

`JHBUILD_RUN_AS_ROOT`

  By default, JHBuild does not run when using the root user, to avoid destructive operations that may affect the whole system. In certain cases, though, it's acceptable to run JHBuild as root; for instance, inside a container, or in a continuous integration environment. Exporting the `JHBUILD_RUN_AS_ROOT` will disable the user id check at startup.

コマンドごとのオプションについては、以下で説明します。

### autobuild

`autobuild` コマンドは、設定ファイルで指定されたモジュールを自動的にビルドして、結果を JhAutobuild にアップロードします。

    jhbuild autobuild --autogen --clean --distcheck --skip=module --start-at=module --report-url=reporturl --verbose

`--autogen`、`--clean`、`--distcheck`、`--skip`、および `--start-at` のオプションは、`build` コマンドに引き渡されます。

`--report-url=reporturl`, `-r reporturl`

  このオプションは、報告先である JhAutobuild の URL を指定します。

`--verbose`, `-v`

  このオプションを指定すると、JHBuild はより詳細に出力します。

### bootstrap

`bootstrap` コマンドは、ビルドユーティリティのセットをインストールします。ビルドユーティリティには、autoconf、automake および類似のユーティリティが含まれます。ビルドユーティリティの推奨インストール方法は、お使いのディストリビューションのパッケージ管理システムを使ったインストールです。Mac OS など、ディストリビューションのパッケージ管理システムでビルドユーティリティが提供されていない場合にだけ、`bootstrap` コマンドを使用してください。

    jhbuild bootstrap

`bootstrap` コマンドがモジュールをビルドする方法は、`build` コマンドと同じですが、`bootstrap.modules` モジュールセットを使用します。

利用可能なオプションについては、`build` コマンドのドキュメントを参照してください。

### build

`build` コマンドはひとつ以上のパッケージを、その依存関係も含めてビルドします。

    jhbuild build --autogen --clean --check --dist --distcheck --distclean --ignore-suggests --no-network --skip=module --start-at=module --tags=tags -D date --no-xvfb --try-checkout --no-poison --force --build-optional-modules --min-age=time --nodeps module

コマンドラインでモジュール名が指定されなかった場合、設定ファイルの modules のリストが使用されます。

`-a`, `--autogen`

  Always run `autogen.sh` before building modules.

`-c`, `--clean`

  モジュールをビルドする前に、`make clean` を実行します。

`--check`

  モジュールをビルドした後に、`make check` を実行します。

`-d`, `--dist`

  モジュールをビルドした後に、`make dist` を実行します。

`--distcheck`

  モジュールをビルドした後に、`make distcheck` を実行します。

`--distclean`

  git モジュールにたいしては、モジュールをビルドする前に、`git clean -dfx` を実行し、その他のモジュールにたいしては、ビルドする前に、`make distclean` を実行します。

  This option will delete any uncommitted changes.

`--ignore-suggests`

  弱い依存関係にあるモジュールをビルドしません。

`-n`, `--no-network`

  モジュールをビルドするときに、ネットワークにアクセスしません。ビルドのダウンロードステージ、および更新ステージをスキップします。ネットワークアクセスなしではモジュールをビルドできない場合、ビルドは失敗します。

`-s`, `--skip`=module,...

  指定したモジュールをビルドしません。依存関係のビルドをスキップするのに使用します。

`--tags`=tag,...

  tag で指定したタグにマッチしないモジュールを無視します。モジュールは、そのモジュールのモジュールセット名にマッチするタグを自動的に付与されます。

`-t`, `--start-at`=module

  リストの先頭からではなく、指定したモジュールから開始します。このオプションはビルドを中断した場合などに便利です。

`-D` date

  バージョン管理システムでサポートされていれば、ビルドの前にソースツリーを指定した日時に更新します。ISO の日時フォーマットで指定します。例 `"2009-09-18 02:32Z"`。

`-x`, `--no-xvfb`

  Xvfb によりシミュレートされたものではなく、実際の X サーバーでグラフィカルなテストを実行します。

`-C`, `--try-checkout`

  ビルドが失敗した場合に、バージョン管理システムがサポートしていれば、ビルドを再試行する前に、強制的にチェックアウトして `autogen.sh` を実行します。

`-N`, `--no-poison`

  ひとつ以上の依存関係のビルドに失敗した場合でも、強制的にモジュールのビルドを試みます。

`-f`, `--force`

  ビルドポリシー上ビルドが不要でも、指定のモジュールをビルドします。

`--build-optional-modules`

  依存関係がオプションとなるモジュールは、目的のモジュールをビルドするのに必須ではありません。このオプションはオプションの依存関係にあるモジュールを強制的にビルドします。

`--min-age`=time

  指定された相対時間より最近にインストールされたモジュールをスキップします。time の文字列書式は、単位を付加した数字です。付加する単位は、次のものがサポートされています: 秒 (s)、分 (m)、時間 (h)、日 (d)。例えば、`--min-age=2h` は2時間前以降にビルドされたモジュールをスキップします。

`--nodeps`

  インストールされていないシステムの依存モジュールを無視します。単独のシステムの依存モジュールを無視するには、そのモジュールを `skip` に追加します。

### make

`make` コマンドは、特定のモジュールで活発に行われている開発作業向けのコマンドです。ソースのチェックアウトディレクトリで実行する必要があります。このコマンドは、`buildone -nf $(basename $(pwd))` と同等です。

    jhbuild make --clean --check --distcheck --quiet

このオプションは、`buildone` のオプションと同じです。

### buildone

`buildone` コマンドは、`build` と似ていますが、依存するモジュールをビルドしません。このコマンドは、ひとつ以上のモジュールをリビルドするときに便利です。

    jhbuild buildone
            --autogen
            --clean
            --check
            --distcheck
            --distclean
            --no-network
            -D date
            --no-xvfb
            --force
            --min-age=time
            --nodeps
            module

The `--autogen`, `--check`, `--clean`, `-d`, `--distcheck`, `--distclean`, `--no-network`, `-D`, `-x` and `--nodeps` options are processed as per the `build` command.

コマンドラインで、少なくともひとつのモジュールを指定しなければなりません。

### checkbranches

`checkbranches` は、バージョン管理システムでブランチが正しく定義されているか、およびブランチのモジュールセットに矛盾がないかをチェックします。

    jhbuild checkbranches --branch=branch

`--branch`=branch, `-b` branch

  チェックするブランチを指定します。

    $ jhbuild -m gnome-2.20 checkbranches
    libgnomecanvas is missing branch definition for gnome-2-20
    $

### clean

`clean` コマンドはひとつ以上のモジュールのビルドディレクトリを clean します。

    jhbuild clean --skip=module --start-at=module

コマンドラインでモジュール名が指定されなかった場合、設定ファイルの modules のリストが使用されます。

利用可能なオプションについては `build` コマンドのドキュメントの説明を参照してください。

### dot

`dot` コマンドは、モジュール間の依存関係によって形成された、有向グラフが記述されたファイルを生成します。このファイルは、ダイアグラムを生成する GraphViz ソフトウェアで処理することができます。

    jhbuild dot --soft-deps --clusters module

コマンドラインでモジュール名が指定されなかった場合、設定ファイルの modules のリストが使用されます。

`--soft-deps` オプションはモジュールから、推奨される依存関係への点線を追加します。`--clusters` オプションは metamodules によりモジュールをグループ化します。

dot コマンドの出力は、dot ユーティリティにパイプすることにより、PostScript ファイルを生成することができます:

    $ jhbuild dot modules | dot -Tps > dependencies.ps

PNG イメージを生成することもできます:

    $ jhbuild dot modules | dot -Tpng > dependencies.png

#### JHBuild dot コマンドの出力例

### gui

`gui` コマンドは、JHBuild のためにモジュールを選択したり、いくつかのビルドオプションを変更できる、グラフィカルなインターフェースを起動します。

    jhbuild gui

グラフィカルなインターフェースの描画には GTK を使用しているので、追加のサポートライブラリが必要です。

### info

`info` コマンドは、ひとつ以上のモジュールの情報を表示します。

    jhbuild info
              --installed
              module

このコマンドはモジュールの名前、タイプ、依存関係、依存するパッケージ、JHBuild で最後にインストールされた日時を表示します。もし可能なら、そのモジュールの CVS リポジトリやダウンロード元の URL などの、具体的な情報も表示されます。

コマンドにモジュールが指定されなかった場合、モジュールセットで定義されたすべてのモジュールについての情報が表示されます。

If the `--installed` option is specified, the output will be filtered to include only installed packages. This resulting output only contains modules that were actually built and installed by jhbuild. The output does not include system dependencies.

If the `--installed` option is specified together with one or more module names, then only the installed modules (not including system dependencies) are printed out. If at least one module is not installed, then the command will exit with a return value of 1.

### list

`list` コマンドは、`build` コマンドがビルドするモジュールのリストを、展開して表示します。

    jhbuild list -a -r -s --start-at=module --tags=tags --ignore-suggests --list-optional-modules module

コマンドラインでモジュール名が指定されなかった場合、設定ファイルの modules のリストが使用されます。

`--skip`、`--start-at`、`--tags`、および `--ignore-suggests` のオプションは、`build` コマンドに引き渡されます。

`-a`, `--all-modules`

  ビルドの依存関係に関わらず、モジュールセットのモジュールをすべて一覧します。

`-r`, `--show-revision`

  モジュールがブランチとして設定されている場合、モジュール名とともにブランチ名が表示されます。

`--list-optional-modules`

  このオプションは JHBuild にたいして、オプショナルな依存関係の一覧を強制します。

### rdepends

`rdepends` コマンドは、モジュールの依存関係を逆方向に表示します。

    jhbuild rdepends module

`--dependencies`

  モジュールの横に、依存関係のパスを表示します。

`--direct`

  指定されたモジュールと直接の依存関係にあるモジュールに、表示を限定します。

### run

`run` コマンドは、JHBuild がモジュールをビルドするのに使用するのと同じ環境で、指定したコマンドを実行します。

    jhbuild run --in-builddir --in-checkoutdir program argument

GNOME をビルドするのに JHBuild を使用する場合、このコマンドは X の起動スクリプトなどで便利です。

`--in-builddir`=module

  指定したモジュールの、ビルドディレクトリでコマンドを実行します。

`--in-checkoutdir`=module

  指定したモジュールの、ソースディレクトリでコマンドを実行します。

### sanitycheck

`sanitycheck` コマンドは、ビルド環境に問題がないことを確認するために、いくつかのチェックを行います。

    jhbuild sanitycheck

以下のチェックが含まれます:

- チェックアウト先とインストール先が書き込み可能か。

- 必要なビルドツールがインストールされているか。

- さまざまなバージョンの `automake` に関連付けられている `aclocal` コマンドの検索パスで、よく使用されるマクロが利用可能か。

- XML カタログに DocBook の DTD と スタイルシートが含まれているか。

### shell

`shell` コマンドは、JHBuild がモジュールをビルドするのと同じ環境で、ユーザーシェルを起動します。

    jhbuild shell

このコマンドは次のコマンドと同等です。

    $ jhbuild run $SHELL

このシェルがアクティブなときは、環境変数 `UNDER_JHBUILD` が "true" にセットされます。この変数の存在を利用して、JHBuild 制御下のシェルにあることがわかるようシェルのプロンプトをカスタマイズできます。たとえば、`.bashrc` に次の記述をするとよいでしょう。

    	if [ -n "$UNDER_JHBUILD" ]; then
    	    PS1="[jhbuild] $PS1"
    	fi

これにより、あなたの bash シェルは、通常のプロンプトの前に `[jhbuild]` を表示するようになるので、どのシェルが JHBuild の制御下にあるかを識別しやすくなります。

### sysdeps

`sysdeps` コマンドは次の情報を表示します。

1. ビルド中に使用する、インストール済みシステムパッケージの一覧。JHBuild は、これらのモジュールをビルドせずに、代わりにシステムパッケージを使用します。

2. 必須パッケージの一覧。ビルドを始めるにあたり、このパッケージがお使いのシステムで提供されている必要があります。

3. オプションパッケージの一覧。対応するシステムパッケージが見つからないか、古すぎます。JHBuild は、指定のモジュールをビルドします。`partial_build` が `False` に設定されている場合は、オプションパッケージは表示されません。

    jhbuild sysdeps --install

`--install`

  This option installs system packages which are dependencies of the moduleset. The installation method depends on your distribution. System packages are installed using PackageKit, if available. For distributions using APT such as Debian and Ubuntu, this option requires apt-file to be installed.

#### `sysdeps` の例

    $ jhbuild sysdeps
    System installed packages which are new enough:
      speex (speex.pc required=1.2rc1, installed=1.2rc1)
      lcms2 (lcms2.pc required=2.2, installed=2.2)
    ...
    Required packages:
      System installed packages which are too old:
        (none)
      No matching system package installed:
        zlib (zlib.pc required=1.2)
    Optional packages: (JHBuild will build the missing packages)
      System installed packages which are too old:
        WebKit (webkitgtk-3.0.pc required=1.5.1, installed=1.4.0)
        ...
      No matching system package installed:
        pulseaudio (libpulse.pc required=2.0)
        ...

### tinderbox

`tinderbox` コマンドは、`build` コマンドに似ていますが、すべての端末出力を、ウェブサイトに掲載するのに適した HTML ファイルに出力します。このコマンドは Mozilla の Tinderbox や、Debian の Buildd と同じようにシステムをセットアップします。

    jhbuild tinderbox
            --autogen
            --clean
            --distclean
            --no-network
            --output=directory
            --skip=module
            --start-at=module
            -D date
            -C
            -N
            -f
            --nodeps
            module

The `--autogen`, `--clean`, `--distclean`, `--no-network`, `--skip`, `--start-at`, `-D`, `-C`, `-N`, `-f` and `--nodeps` options are processed as per the `build` command.

`-o`, `--output`=directory

  The directory to write the HTML files. JHBuild will create an index (`index.html`) and a HTML file for each module.

### uninstall

`uninstall` コマンドは、ひとつ以上のモジュールをアンインストールします。

    jhbuild uninstall module

### update

`update` コマンドは `build` コマンドに似ていますが、モジュールのビルドは行わずに、ダウンロードと更新のステージのみ実行します。

    jhbuild update --skip=module --start-at=module --tags=tags --ignore-suggests -D date module

`--skip`、`--start-at`、`--tags`、`--ignore-suggests` および `-D` オプションは、`build` コマンドと同様に処理されます。

### updateone

`updateone` コマンドは `update` と似ていますが、依存するモジュールをビルドしません。このコマンドは、ひとつ以上のモジュールをビルドするときに便利です。

    jhbuild updateone -D date module

`-D` オプションは、`build` コマンドと同様に処理されます。

コマンドラインで、少なくともひとつのモジュールを指定しなければなりません。

## 設定ファイルリファレンス

設定ファイルの `~/.config/jhbuildrc` は、標準的な Python の構文を使用します。このファイルは実行され、その名前空間で定義された実行結果の変数は、JHBuild の挙動を制御するのに使用されます。ユーザーの設定ファイルが実行される前に、各変数のデフォルト値がこの名前空間に読み込まれます。

変数にブール値をセットする場合、以下の例で示す構文が使用されます。

    use_local_modulesets = True

変数に文字列をセットする場合、以下の例で示す構文が使用されます。

    autogenargs = '--disable-static --disable-gtk-doc'

リストへ設定値をセットする場合、以下の例で示す構文が使用されます。

    skip = ['mozilla'、'pulseaudio']

ディクショナリへ設定値をセットする場合、以下の例で示す構文が使用されます。

    repos['git.gnome.org'] = 'ssh://username@git.gnome.org/git/'

### 設定変数

`alwaysautogen`

  A boolean value if set to `True`, always run `autogen.sh`. This is equivalent to passing `--autogen` option to JHBuild. Defaults to `False`.

`autogenargs`

  `autogen.sh` スクリプトに渡す引数を指定する文字列です。すべてのモジュールに適用されます。`module_autogenargs` ディクショナリで、特定のモジュールにたいして上書きできます。

`branches`

  特定のモジュールで使用するブランチを指定するディクショナリです。あるモジュールのあるブランチで変更を加えている場合に、モジュールセットで定義されたブランチではなく、その変更を加えたブランチをビルドするときなどに便利です。

  ブランチの定義の仕方は、バージョン管理システムに依存します。

  - CVS: リビジョンを指定します。例: `'BRANCH-PROJECT-0_8'`

  - Bazaar: モジュールブランチの URI を指定します。例: `'http://bzr.example.net/project/gnome-2-28'`

  - Git: タプル で指定します。先頭要素はオプションのリポジトリ(または None 値)、2 番目の要素はブランチ名を指定します。例: `('git://git.example.net/project'、'gnome-2-28')`

    #### シンプルな例

        branches['modulename'] = (None, 'branchname')

  - Subversion: URI of module branch. E.g. `'svn://svn.example.net/project/gnome-2-28'`

`builddir_pattern`

  ビルドディレクトリの名前を生成するための、`printf` スタイルの書式設定パターンです。これはソースとビルドツリーが違う場合のみ使用します。書式の中の `%s` は、`checkoutdir` で置き換えられます。デフォルトは `'%s'` です。

`buildroot`

  A string specifying the parent directory to place build trees. Defaults to `~/.cache/jhbuild/build`. Setting the value to `None` causes builds to be performed within the source trees.

`buildscript`

  どのビルドスクリプトを使用するかを指定する文字列です。推奨の設定はデフォルトの `terminal` です。特に `gtk` に設定しないでください。

`build_policy`

  どのモジュールをビルドするかを指定する文字列です。利用可能なオプションは、要求されたモジュールをすべてビルドする `all`、変更されたモジュールだけをビルドする `updated`、モジュール または 依存するモジュールが変更されたときにモジュールをビルドする `updated-deps` の3つです。デフォルトは `updated-deps` です。

`checkoutroot`

  ソースツリーを展開するディレクトリを指定する文字列です。`buildroot` がセットされていない場合は、ビルドもこのディレクトリで行います。デフォルトは `~/checkout/gnome` です。

`checkout_mode`

  A string specifying how the checkout is performed for directories in version control. Defaults to `update`. This can be set per module using `module_checkout_mode`. Possible values are `update` (update checkout directory), `clobber` (wipe out directory before checking out the sources), `export` (wipe out directory then create a tarball of the sources containing any patches) and `copy` (checkout in a directory different from the one it will build).

`cmakeargs`

  A string containing arguments passed to the `cmake` invocation of all modules. Can be overridden for particular modules using the `module_cmakeargs` dictionary. Defaults to `''`.

`copy_dir`

  `checkout_mode` が copy の場合に、コピー先のディレクトリを指定する文字列です。デフォルトはチェックアウトディレクトリです。

`export_dir`

  A string specifying the directory to export to, if the export `checkout_mode` is in use. Defaults to the checkout directory.

`cvs_program`

  cvs をサポートするために、どのプログラムを使用するかを指定する文字列です。`git-cvsimport`、または `cvs` が指定できます。デフォルトは `cvs` です。

`disable_Werror`

  A boolean value (default `True`) which controls if `--disable-Werror` will be passed to automake builds. Many packages use this flag as a way to disable fatal compiler warnings. The value of `True` is selected as a reasonable default for those using jhbuild as a means to get an up-to-date version of software packages without being side-tracked by build failures in other people's modules. Setting this value to `False` may make sense for those using jhbuild as part of a continuous integration or testing system.

`dvcs_mirror_dir`

  ローカルミラーのディレクトリを指定する文字列です。JHBuild は指定されたディレクトリにリポジトリのローカルミラーを作成します。ミラーは複数のリポジトリグループによって共有することができ、ローカルのクローンにたいしてハードリンクが使用されるため領域と時間の節約につながります。`update` および `updateone` コマンドはミラーを作成し、オンラインのリポジトリから新規のコミットをフェッチします。このオプションは Git および Bazaar リポジトリにたいしてのみサポートされます。

`exit_on_error`

  A boolean value specifying whether to exit immediately when a module fails to build. This is primarily useful in noninteractive mode, in order to prevent additional modules from building after one fails. Setting this value to `True` is equivalent to passing the `--exit-on-error` option. Defaults to `False`.

`extra_prefixes`

  A list of strings specifying, in precedence order, the list of extra prefixes. JHBuild sets many environment variables (such as `LD_LIBRARY_PATH`, `PKG_CONFIG_PATH` and `XDG_DATA_DIRS`) based on the `prefix` variable. Adding directories to `extra_prefixes` will cause these prefixes to be included as well, at a lower precedence than the JHBuild `prefix`, but at a higher precedence than system directories. This variable is empty by default except on systems that install software in `/usr/local`, in which case it contains this directory.

`help_website`

  A tuple specifying a help website name and URL. The website is displayed in the tinderbox html for failed modules. `%(module)s` in the URL will be replaced with the module name. To disable, set `help_website` to `None`. Defaults to `('Gnome Live!', 'http://live.gnome.org/JhbuildIssues/%(module)s')`.

`installprog`

  A string specifying a program to use as replacement for `/usr/bin/install`.

`ignore_suggests`

  依存ツリーを計算するときに、推奨される依存関係を無視するかどうかを指定するブール値です。デフォルトは `False` です。

`interact`

  ユーザーと対話するかどうかを指定するブール値です。この値を `False` に設定することは、`--no-interact` オプションを指定するのと同じです。デフォルトは `True` です。

`makeargs`

  A string listing additional arguments to be passed to `make`. JHBuild will automatically append the parallel execution option (`-j`) based upon available CPU cores. Defaults to `''`.

`makecheck`

  `make` の後に、`make check` を実行するかどうかを指定するブール値です。デフォルトは `False` です。

`makecheck_advisory`

  `make check` が失敗したときに、ビルドを失敗させない(メッセージの表示のみ)にするかどうかを指定する文字列です。デフォルトは `False` です。

`makeclean`

  `make` の前に、`make clean` を実行するかどうかを指定するブール値です。デフォルトは `False` です。

`makedist`

  `make` の後に、`make dist` を実行するかどうかを指定するブール値です。デフォルトは `False` です。これは `--dist` オプションを指定するのと同じです。

`makedistcheck`

  `make` の後に、`make distcheck` を実行するかどうかを指定するブール値です。デフォルトは `False` です。これは `--distcheck` オプションを指定するのと同じです。

`mesonargs`

  A string containing arguments passed to the `meson` invocation of all modules. Can be overridden for particular modules using the `module_mesonargs` dictionary. Defaults to `''`.

`module_autogenargs`

  モジュールの名前と、`autogen.sh` に渡す引数をマッピングするディクショナリです。`module_autogenargs` の設定は、`autogenargs` のグローバルな設定より優先されます。モジュールがディクショナリに指定されていないときは、グローバルな `autogenargs` が使用されます。

`module_checkout_mode`

  チェックアウトモードをモジュールごとに指定するためのディクショナリです。この設定はグローバルな `checkout_mode` の設定より優先されます。

`module_cmakeargs`

  A dictionary mapping module names to strings specifying the arguments to be passed to `cmake`. The setting in `module_cmakeargs` is used instead of the global `cmakeargs` setting. If a particular module isn’t listed in the dictionary, the global `cmakeargs` will be used.

`module_makeargs`

  モジュールの名前と、`make` に渡す引数をマッピングするディクショナリです。`module_makeargs` の設定は、`makeargs` の値を置き換えます。モジュールがディクショナリに指定されていないときは、グローバルな `makeargs` が使用されます。

`module_makecheck`

  モジュールの名前と、`make` の後に `make check` を実行するかどうかの指定をマッピングするディクショナリです。`module_makecheck` の設定は、`makecheck` の値より優先されます。モジュールがディクショナリに指定されていないときは、グローバルな `makecheck` の設定が使用されます。

`module_mesonargs`

  A dictionary mapping module names to strings specifying the arguments to be passed to `meson`. The setting in `module_mesonargs` is used instead of the global `mesonargs` setting. If a particular module isn’t listed in the dictionary, the global `mesonargs` will be used.

`module_ninjaargs`

  A dictionary mapping module names to strings specifying the arguments to pass to `ninja`. The setting in `module_ninjaargs` replaces the value of `ninjaargs`. If a particular module isn't listed in the dictionary, the global `ninjaargs` will be used.

`module_nopoison`

  モジュールの名前とブール値をマッピングするディクショナリです。モジュールに `True` が設定されている場合、JHBuild は指定されたモジュールのビルドが失敗しても、依存するモジュールをビルドしようと試みます。`module_nopoison` の設定は、`nopoison` の設定より優先されます。モジュールがディクショナリに指定されていないときは、グローバルな `nopoison` の設定が使用されます。

`module_extra_env`

  モジュールの名前と、追加の環境変数と値のディクショナリをマッピングするディクショナリです。モジュールのためにコマンドを実行するときに使用されます。

`module_static_analyzer`

  Dictionary mapping module names to boolean values indicating whether static analysis should be performed while building that module. This allows the global `static_analyzer` configuration option to be overridden.

`modules`

  ビルドするモジュールを指定する文字列のリストです。 `buildone` コマンドを使用しないかぎり、実際にビルドされるモジュールは、指定したモジュールが依存するモジュールもすべて含まれます。依存関係は再帰的に展開されます。デフォルトは `['meta-gnome-desktop']` です。

`moduleset`

  モジュールセットの名前を指定する文字列、または文字列のリスト(配列)です。これは JHBuild に含まれるファイル名(パスと拡張子を除く)、または 外部で管理されているモジュールセットの完全な HTTP URL のどちらでも構いません。HTTP URL のモジュールセットは、ローカルにキャッシュされます。ふたつ以上のモジュールセットに同じ名前のモジュールが存在する場合は、最後のモジュールセットのモジュールが優先します。JHBuild により提供されるモジュールセットは、その時の GNOME の開発リリースに合わせて更新されます。

`modulesets_dir`

  モジュールセットのあるディレクトリを指定する文字列です。デフォルトは JHBuild のソースの `modulesets/` ディレクトリです。

`nice_build`

  ビルドの実行を、Linux では `SCHED_IDLE` の優先度で行い、他の Unix では `nice` を通じて行います。これを利用すると、ビルドのスループットにたいする影響をごくわずかに抑えながらも、並列ビルドにたいするデスクトップの応答性能を大幅に改善できます。

`ninjaargs`

  A string listing additional arguments to be passed to `ninja`. Defaults to `''`.

`nobuild`

  A boolean value, if set to `True` JHBuild will not build modules, but just download and unpack the sources. The default value is `False`.

`nonetwork`

  ネットワークにアクセスするかどうかを指定するブール値です。この設定は CVS モジュールのチェックアウトと更新、および tarball のダウンロードと、モジュールセットの更新に影響を与えます。`True` に設定した場合、`--no-network` オプションを指定したのと同じです。デフォルトは `False` です。

`nonotify`

  通知デーモンを使用して、通知を発行するかどうかを指定するブール値です。`False` に設定した場合、通知を発行します。デフォルトは `True` です。

`nopoison`

  ブール値です。`True` に設定された場合、依存関係にある1つ以上のモジュールのビルドに失敗しても、JHBuild はビルドを試みます。このオプションは `--no-poison` を引数で指定するのと同じです。デフォルトは `False` です。

`notrayicon`

  A boolean value specifying whether to show an icon in the system tray using Zenity. If set to `False`, an icon is shown. Defaults to `True`.

`noxvfb`

  A boolean value, if set to `True` JHBuild will run any graphical tests on the real X server, rather than using `Xvfb`. This option is equivalent to passing `--no-xvfb`. The default value is `False`.

`partial_build`

  ブール値です。`True` に設定した場合、依存対象のモジュールがシステムパッケージとしてインストール済みで、かつそのバージョンが十分であれば、依存対象のモジュールをビルドしません。デフォルトは `True` です。

`prefix`

  A string specifying the prefix to install modules to. `prefix` must be an absolute path. This directory must be writable. Defaults to `'~/jhbuild/install/'`.

`pretty_print`

  サブプロセスの出力を、綺麗にプリントするかどうかを指定するブール値です。CVS の出力のみをサポートします。この指定により問題が発生する場合は無効にしてください。デフォルトは `True` です。

`print_command_pattern`

  JHBuild がコマンドを実行する前に表示する文字列です。文字列中の `%(command)s` は、実行対象のコマンドに置換されます。文字列中の `%(cwd)s` は現在の作業ディレクトリに置換されます。デフォルトは `'%(command)s'` です。

`progress_bar`

  quiet mode で、プログレスバーを表示するかどうかを指定するブール値です。デフォルトは `True` です。

`quiet_mode`

  ブール値です。`True` に設定した場合、コマンドの出力を抑止します。デフォルトは `False` です。

`repos`

  特定のリポジトリにたいして、かわりのリポジトリロケーションを指定するディクショナリです。この設定変数は、モジュール開発者にとって便利です。デフォルトでは、JHBuild は匿名のリポジトリロケーションから、コードをチェックアウトします。ディクショナリのキーはリポジトリの略称で、値はリポジトリロケーションの文字列です。例:

      repos['git.gnome.org'] = 'ssh://username@git.gnome.org/git/'

`shallow_clone`

  A boolean value specifying if JHBuild should prefer smaller version control downloads. Equivalent to `git clone --depth 1` or `bzr co --light`. Defaults to `False`.

`skip`

  A list of modules to skip. This `--skip` command line option extends the list. This list is empty by default. If the list contains the special value `'*'`, JHBuild will skip all modules not explicitly listed in the `modules` variable. This may be useful if you want to build modules without their implicit dependencies.

`static_analyzer`

  A boolean value: if set to `True`, run a static analysis tool on each module as it’s being built. Defaults to `False`.

`static_analyzer_outputdir`

  Root directory below which static analysis reports will be saved (if `static_analyzer` is `True`). Defaults to `/tmp/jhbuild_static_analyzer`.

`static_analyzer_template`

  Command template for the static analyzer. This has the parameters `outputdir` (the value of the `static_analyzer_outputdir` configuration variable) and `module` (the name of the module currently being built) substituted into it `printf`-style. The resulting command is used as a prefix to `make` when building a module. Defaults to `scan-build`.

`sticky_date`

  文字列型です。もし指定された場合、背後のバージョン管理システムがサポートしていれば、JHBuild はビルドの前に、ソースツリーを指定された日付に更新します。ここで指定できるのは ISO の日付書式です。例: `'yyyy-mm-dd'`。デフォルトは `None` です。

`svn_program`

  subversion をサポートするために、どのプログラムを使用するかを指定する文字列です。`svn`、または `git-svn` が指定できます。デフォルトは `svn` です。

`system_libdirs`

  A list of strings specifying the system library paths. This is used when setting the default values of some environment variables, such as `PKG_CONFIG_PATH`.

`tarballdir`

  A string if set, tarballs will be downloaded to the specified directory instead of `checkoutroot`. This is useful if you have multiple JHBuild environments or regularly clear out `checkoutroot` and want to reduce bandwidth usage. Defaults to `'~/.cache/jhbuild/downloads'`.

`tinderbox_outputdir`

  `jhbuild tinderbox` の出力を保存するディレクトリを指定する文字列です。この設定は `--output` オプションより優先されます。デフォルトは `None` なので、コマンドラインオプションで指定するか、設定ファイルの中でこれが指定されていなければなりません。

`trycheckout`

  ブール値です。`True` を指定した場合、JHBuild は失敗したときに次の解決を自動的に試みます。 1) `autogen.sh` コマンドを再実行する 2) バージョン管理システムから新しいバージョンをチェックアウトする。この設定は `--try-checkout` オプションを指定するのと同じです。

`use_local_modulesets`

  GNOME のバージョン管理システムから、オンザ フライでモジュールセットを取得するのではなく、JHBuild のソースコードと一緒にチェックアウトしたモジュールセットを使用するかどうかを指定するブール値です。デフォルトは `False` です。

`xvfbargs`

  グラフィックテストを `Xvfb` で実行する場合の引数を指定するリスト型です。

`conditions`

  A set of condition (strings) that can influence the modules that are built and the options that are used for building them. You should use `conditions.add()` and `conditions.discard()` to modify the list if you want to make changes.

  The original set of conditions is determined on a per-OS basis and can be modified using the `--conditions=` commandline argument. The changes made by `--conditions` are visible at the time that jhbuildrc is sourced, so you can set other variables based on the current value of the set, but `--conditions` will be applied again after any changes made by jhbuildrc.

### その他の設定ファイルの構造

上述の変数に加えて、以下の文字列が設定ファイルで指定できます:

`os.environ`

  環境をあらわすディクショナリです。この環境は JHBuild により 生成されたプロセスに引き渡されます。

  `CPPFLAGS`、`CFLAGS`、`INSTALL`、そして `LDFLAGS` を含む、影響のある環境変数が含まれます。例:

      os.environ['CFLAGS'] = '-O0 -g'

`addpath`(`envvar`, `pathname`)

  `PATH` 環境変数にディレクトリを追加します。`addpath` は、環境変数の初期値が空の場合を確実に処理します(環境変数の先頭、もしくは末尾にある単独のコロンは予期せぬ結果をもたらすことがあります)。

`prependpath`(`envvar`, `pathname`)

  設定ファイルを処理した後、JHBuild は `prefix` のような変数に基づくパスに対して変更を加えます(例: `PATH` の先頭に `$prefix/bin` を追加する)。

  `prependpath` は `addpath` と同じように動作しますが、JHBuild が環境に対して行った変更の後に環境変数への変更が適用される点が異なります。

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

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

モジュールセットファイルのトップレベル要素は、`moduleset` 要素です。XML 名前空間は使用しません。トップレベル要素の配下に来るものは 3 種類あります。モジュールソース、インクルード文、およびモジュール定義です。

Content in the moduleset file can be conditionally included by use of the <if> tag to surround the conditional content. It is currently only possible to predicate the inclusion on whether a particular condition flag is set or not, using <if condition-set='cond'> or <if condition-unset='cond'>. Conditions are set by default on a per-OS basis but can be influenced by way of the `conditions` variable in jhbuildrc or the `--conditions=` commandline argument.

### モジュールソース

すべてのモジュールの完全な場所を記述するのではなく、いくつかの "モジュールソース" をモジュールセットに記述し、モジュール定義において名前でそのソースを参照するようにします。モジュールセットから冗長な情報を減らすだけでなく、モジュールにたいする別のソースを指定するのも簡単になります (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` 属性は、リポジトリタイプを指定します。この属性には `bzr`、`cvs`、`darcs`、`fossil`、`git`、`hg`、`mnt`、`svn`、`tarball` のどれか1つを指定できます。モジュール定義内部で使用する `branch` など、その他の属性は `type` に依存します。それらは、以下のリポジトリタイプのサブセクションで説明します。

`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" ]/>

All attributes have sensible defaults and depend on the module and repository definitions. Common attributes are described here.

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

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

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

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

#### Bazaar

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

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

Additional attributes are: `trunk-template` (defaults to `"%(module)s"`) and `branches-template` (defaults to `"%(module)s/%(branch)s`"). These attributes are used to specify templates for constructing URL. A `branch` element in the module definitions can specify `branch` and `user` attributes. These values will be substituted in the templates. If either of those are defined `branches-template` is used, otherwise `trunk-template` is used. This way you can override repository to build modules from your personal branch or build many modules from a repository with non-standard layout.

An addition `branch` element accepts `revspec` attribute to anchor on a particular revision. Any valid `bzr revspec` is accepted, for example `date:yesterday, -5, tag:0.1` to get first revision since yesterday, 5 commits behind the tip or tag "0.1". See `bzr help revisionspec` for all possible values.

`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"/>

#### CVS

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

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

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

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

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

#### Darcs

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

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

#### 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"/>

#### 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"/>

#### Monotone

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

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

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

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

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

#### Subversion

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

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

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

    <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` レイアウトを指定できます。

#### System

このリポジトリタイプは、擬似的なシステムリポジトリを定義するのに使用します。システムリポジトリは、`systemmodules` を作成するのに必要となります。

    <repository type="system" name="system"/>

#### Tarballs

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

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

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

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

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

The `rename-tarball` can be used to rename the tarball file when downloading, in case the original name conflicts with another module.

`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` を指定することもできます。

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

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

    <include href="uri"/>

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

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

### モジュールの定義

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

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

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

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

#### autotools

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

    <autotools id="id"
    	      [ autogenargs="autogenargs" ]
    	      [ makeargs="makeargs" ]
    	      [ makeinstallargs="makeinstallargs" ]
    	      [ autogen-sh="autogen-sh" ]
    	      [ makefile="makefile" ]
    	      [ skip-autogen="skip-autogen" ]
    	      [ skip-install="skip-install" ]
    	      [ uninstall-before-install="uninstall-before-install" ]
    	      [ autogen-template="autogen-template" ]
    	      [ check-target="check-target" ]
    	      [ supports-non-srcdir-builds="supports-non-srcdir-builds" ]
    	      [ force-non-srcdir-builds="force-non-srcdir-builds" ]
    	      [ supports-unknown-configure-options="supports-unknown-configure-options" ]
    	      [ supports-static-analyzer="supports-static-analyzer" ]>

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

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

    </autotools>

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

`autogen-sh` 属性は、実行する autogen.sh スクリプトの名前を指定します。値 `autoreconf` は、モジュールに `autogen.sh` に相当するスクリプトがない場合に使用できます。その場合、JHBuild は、`autoreconf -fi` を実行し、その後で適切な `configure` を実行します。`skip-autogen` は、autogen.sh を実行するかどうかを指定します。指定できるのはブール値、あるいは `never` で、never を指定した場合は、`autogen.sh` の実行をスキップしません。`skip-install` は、ブール値の属性で、該当のモジュールにたいして `make install` コマンドをスキップするかどうかを指定します。`makefile` は、使用する makefile のファイル名を指定します。

The `uninstall-before-install` specifies any old installed files from the module should before removed before running the install step. This can be used to work around a problem where libtool tries to link one library it is installing against another library it is installing, but because of jhbuild's use of DESTDIR, finds the old installed library instead. The downside of specifying this is that it could cause problems if the user is currently running code that relies on installed files from the module.

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

The `force-non-srcdir-builds` attribute is used to mark modules that can't be cleanly built from the source directory, but can be built from outside it.

`autogen-template` 属性は、autogen のコマンドラインをより細かく制御する必要がある場合に使用できます。これには Python のフォーマット文字列を使用でき、以下の変数が置換されます: `srcdir`、`autogen-sh`、`prefix`、`libdir`、`autogenargs`。次の記述例はデフォルトの autogen-template です。

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

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

The `supports-static-analyzer` attribute must be specified (with false as value) for modules which don’t support being built under a static analysis tool such as `scan-build`.

The `supports-unknown-configure-options` attribute is used to mark modules that will error out if an unknown option is passed to `configure`. Global configure options will not be used for that module.

#### cmake

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

      <cmake id="modulename"
                [ cmakeargs="cmakeargs" ]
                [ ninjaargs="ninjaargs" ]
                [ makeargs="makeargs" ]
                [ skip-install="skip-install" ]
                [ cmakedir="cmakedir" ]
                [ use-ninja="use-ninja" ]
                [ force-non-srcdir-builds="force-non-srcdir-builds" ]>
      <branch [ ... ] >
        [...]
      </branch>

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

The `cmakeargs` attribute is used to specify additional arguments to pass to `cmake`.

The `ninjaargs` attribute is used to specify additional arguments to pass to `ninja`.

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

The `cmakedir` attribute specifies the subdirectory where cmake will run in relation to srcdir.

The `force-non-srcdir-builds` attribute is used to mark modules that can't be cleanly built from the source directory, but can be built from outside it.

The `use-ninja` attribute is used to mark modules should be built using the Ninja backend for cmake, instead of the Make backend. The default is to use the Ninja backend.

#### Meson

The `meson` element is used to define a module which is configured using the Meson build system and built using the Ninja build tool.

      <meson id="modulename"
                [ mesonargs="mesonargs" ]
                [ ninjaargs="ninjaargs" ]
                [ skip-install="skip-install" ]>
      <branch [ ... ] >
        [...]
      </branch>

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

The `mesonargs` attribute is used to specify additional arguments to pass to `meson`.

The `ninjaargs` attribute is used to specify additional arguments to pass to `ninja`.

#### distutils

The `distutils` element is used to define a module which is built using python's distutils.

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

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

#### 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>

#### perl

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

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

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

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

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

    </perl>

#### systemmodule

`systemmodule` 要素は、システムによって提供される必要のあるモジュールを定義するために使用します。このモジュールは、お使いのディストリビューションのパッケージ管理システムを通じてインストールされます。

    <systemmodule id="modulename">
      <pkg-config>pkg-config.pc</pkg-config>

      <branch repo="system" version="version" />
    </systemmodule>

システムモジュールが pkg-config ファイルを提供していない場合は、依存対象を特定するために `systemdependencies` タグを使用できます。`dep` タグの `type` 属性は、2 種類の値が使用可能です。

1. `path` 値。PATH を検索して、指定した名前に合致するプログラムを探します。

2. `c_include` 値。C インクルードパスを検索して、指定した名前に合致するヘッダーを探します。`name` には、サブディレクトリを含めることもできます。C インクルードパスは、設定変数 `cflags` または `module_autogenargs` 内の `CPPFLAGS` をセットすることで変更できます。

    <systemmodule id="modulename">
      <branch repo="system" version="version" />
      <systemdependencies>
        <dep type="path" name="executable-name" />
      </systemdependencies>
    </systemmodule>

    <systemmodule id="modulename">
      <branch repo="system" version="version" />
      <systemdependencies>
        <dep type="c_include" name="header-name" />
      </systemdependencies>
    </systemmodule>

If the system module may be installed in different locations or installed with different names by different distributions, `altdep` tag can be used as subelements of `dep` tag to specify alternative locations or names. `altdep` tag support the same attributes as `dep` tag does.

    <systemmodule id="modulename">
      <branch repo="system" version="version" />
      <systemdependencies>
        <dep type="path" name="executable-name">
          <altdep type="path" name="alternative-executable-name-1" />
          <altdep type="path" name="alternative-executable-name-2" />
          ...
        <dep>
      </systemdependencies>
    </systemmodule>

    <systemmodule id="modulename">
      <branch repo="system" version="version" />
      <systemdependencies>
        <dep type="c_include" name="header-name">
          <altdep type="c_include" name="alternative-header-name-1" />
          <altdep type="c_include" name="alternative-header-name-2" />
          ...
        <dep>
      </systemdependencies>
    </systemmodule>

#### waf

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

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

The `python-command` attribute is used to specify the Python executable to use; it defaults to `python`. This is useful to build modules against version 3 of Python.

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

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

#### 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' を実行します。

Unless the noxvfb configuration option is set, an Xvfb server is started to run the tests in.

#### metamodule

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

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

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

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

### 非推奨となった要素

#### モジュールソース

##### cvsroot

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

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

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

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

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

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

##### svnroot

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

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

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

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

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

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

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

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

##### tarball

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

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

      <tarball id="modulename"
                  [ version="version" ]
                  [ checkoutdir="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` は必須の属性で、`size`、`hash`、同様に 旧来の `md5sum` 属性はオプションです。最後の2つの属性が指定された場合は、ダウンロードされたソースが正しいものであるか確認するために使用されます。

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

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

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