モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

工作HardwareHub ロゴ画像 (Laptop端末利用時)
工作HardwareHub ロゴ画像 (Mobile端末利用時)

JHBuild の基本的な使い方

モーダルを閉じる

ステッカーを選択してください

モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2018/05/24
最終更新最終更新
2023/12/17
記事区分記事区分
一般公開

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

サンプル設定

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

依存関係を可視化

sudo apt install xdot
jhbuild -f ./jhbuildrc dot | dot -Tpng > dependencies.png
jhbuild -f ./jhbuildrc dot --clusters | dot -Tpng > dependencies.png (metamodule 内のモジュールをグルーピング)

あるモジュールに依存するモジュール一覧を確認 (直近のみ、すべて、依存情報付きすべて)

jhbuild -f ./jhbuildrc rdepends my_module_c --direct
jhbuild -f ./jhbuildrc rdepends my_module_c
jhbuild -f ./jhbuildrc rdepends my_module_c --dependencies

アンインストール

jhbuild -f ./jhbuildrc uninstall my_module_c

モジュール情報について

$ jhbuild info my_module_c
Name: my_module_c
Module Set: my_moduleset_2
Type: distutils
Install version: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  ← jhbuild build すると書き変わります (jhbuild update だけでは書き変わりません)
Install date: 2018-01-01 00:00:00
Git Module: zzzzzzzzzz
Git Branch: master
Git Tag: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy  ← モジュール定義で指定されている git tag です。
Tree-ID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  ← jhbuild update すると checkoutroot にダウンロードされて、ここが書き変わります。
0
詳細設定を開く/閉じる
アカウント プロフィール画像 (本文下)

週末エンジニア

記事の執筆者にステッカーを贈る

有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

さらに詳しく →
ステッカーを贈る コンセプト画像

Feedbacks

Feedbacks コンセプト画像

    ログインするとコメントを投稿できます。

    関連記事