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

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

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

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

JHBuild の基本的な使い方

モーダルを閉じる

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

モーダルを閉じる

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

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

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

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

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

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

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

目次

    アカウント プロフィール画像 (サイドバー)

    週末エンジニア

    0
    ステッカーを贈るとは?

    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 コンセプト画像

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

      関連記事