JHBuild は複数のソースパッケージの依存関係等を定義して、何らかの成果物をビルドするためのツールです。各ソースパッケージはモジュールとよばれます。モジュールのソースコードは Git や Subversion、FTP/Web サーバ上の zip、tar 等様々なものが利用できます。モジュールのビルドシステムとしては cmake や make といった様々なものが利用できます。ここでは特にバージョン 3.15 を利用して、簡単な使い方をまとめます。
ソースコードからインストールする場合は以下のようにします。2.3 以上の python が必要です。インストールされていることを確認します。
$ python --version
Python 2.7.13
ソースコードをダウンロードしてビルドします。
git clone https://gitlab.gnome.org/GNOME/jhbuild.git
cd jhbuild/
./autogen.sh
make
make install
echo 'PATH=$PATH:~/.local/bin' >> ~/.bashrc
source ~/.bashrc
以下の場所にインストールされます。
...
Creating /home/vagrant/.local/bin/jhbuild
Creating /home/vagrant/.local/share/applications/jhbuild.desktop
$ which jhbuild
/home/vagrant/.local/bin/jhbuild
あるいは、apt コマンド等によってもインストールできます。
sudo apt install jhbuild
既定では ~/.config/jhbuildrc
の設定が読み込まれます。特定の設定を読み込むためには -f
で指定します。
jhbuild -f /path/to/your/jhbuildrc build
設定ファイルでは python の記法を利用します。例えば、以下のように設定します。
mkdir -p ~/jhbuild_home/modulesets
touch ~/jhbuild_home/jhbuildrc
~/jhbuild_home/jhbuildrc
# -*- mode: python -*-
# -*- coding: utf-8 -*-
# 便宜的に、今回のビルドを以下のディレクトリで行います。JHBuild 自体の設定ではありません。
jhhome = os.path.join(os.environ['HOME'], 'jhbuild_home')
# モジュール定義ファイルが格納されたディレクトリを指定します。
modulesets_dir = os.path.join(jhhome, 'modulesets')
use_local_modulesets = True
# `modulesets_dir` に格納されているモジュール定義ファイルのうち、特に今回ビルドする
# モジュールが含まれているものを指定します。
moduleset = 'my_moduleset_1'
# `moduleset` に記載されているモジュールのうち、今回
# `jhbuild build` したいものを指定します。`buildone` でない場合は
# 依存関係にあるモジュールも再帰的にビルドされます。
modules = ['my_module_a', 'my_module_b']
# モジュール定義で指定されている先からソースコードをダウンロードして
# 展開するディレクトリを指定します。
checkoutroot = os.path.join(jhhome, 'checkoutroot')
tarballdir = os.path.join(jhhome, 'downloads')
# `checkoutroot` ではなく特定のディレクトリでビルドしたい場合
buildroot = os.path.join(jhhome, 'build')
# ビルド結果である成果物を格納する先を指定
prefix = os.path.join(jhhome, 'install')
# ディレクトリが存在しなければ作成します。
for dirname in [checkoutroot, tarballdir, buildroot, prefix]:
if not os.path.isdir(dirname):
os.makedirs(dirname)
本ページでビルドした jhbuid コマンドを、モジュールとしてビルドしてみます。autotools を設定します。
~/jhbuild_home/modulesets/my_moduleset_1.modules
<?xml version="1.0"?>
<moduleset>
<!-- module includes -->
<include href="my_moduleset_2.modules"/>
<!-- meta packages -->
<metamodule id="my_module_a">
<dependencies>
<dep package="my_module_c"/>
</dependencies>
</metamodule>
<metamodule id="my_module_b">
<dependencies>
<dep package="my_module_c"/>
</dependencies>
</metamodule>
</moduleset>
~/jhbuild_home/modulesets/my_moduleset_2.modules
<?xml version="1.0"?>
<moduleset>
<!-- repositories -->
<repository type="git" name="mygit" href="https://gitlab.gnome.org/GNOME/"/>
<!-- make packages -->
<autotools id="my_module_c">
<branch repo="mygit" module="jhbuild" tag="f04471954daf066ab088d0b3d7fb0d66ce4bfe81" />
</autotools>
</moduleset>
必要なツールの確認およびインストール
jhbuild -f ./jhbuildrc sanitycheck
jhbuild -f ./jhbuildrc sysdeps --install
jhbuildrc
で指定したモジュールをビルド
jhbuild -f ./jhbuildrc build
$ ls ./install/bin
jhbuild
個別に指定してモジュールをビルド
jhbuild -f ./jhbuildrc build my_module_a
依存先はビルド済みであるとして、指定したモジュールのみをビルド
jhbuild -f ./jhbuildrc buildone my_module_a
ビルドに失敗したモジュールを、ローカルで修正してから、再ダウンロードせずにビルドし直す。
jhbuild -f ./jhbuildrc buildone my_module_a -nfc
リビジョン情報付きで全モジュールをリスト表示
jhbuild -f ./jhbuildrc list -r
my_module_c (f04471954daf066ab088d0b3d7fb0d66ce4bfe81)
my_module_a
my_module_b
モジュール情報を確認
jhbuild -f ./jhbuildrc info my_module_a
最新のソースコードのダウンロードとビルドを別々に行う (インターネット接続ができる環境でダウンロードだけ行っておきたい場合、あるいはダウンロードしたソースコードをローカル環境で編集してからビルドしたい場合)
jhbuild -f ./jhbuildrc update
jhbuild -f ./jhbuildrc build --no-network
デバッグ等の情報を得るために jhbuild と同じ環境のシェルを開始
jhbuild -f ./jhbuildrc shell
echo $PATH
依存関係を可視化