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 にダウンロードされて、ここが書き変わります。
記事の執筆者にステッカーを贈る
有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。
さらに詳しく →Feedbacks
ログインするとコメントを投稿できます。
関連記事
- 輪郭に関連した画像処理 (OpenCV3 C++)cv::Canny などで検出したエッジをもとに cv::findContours で輪郭を計算できます。輪郭に関連した処理の例を記載します。 輪郭の描画 #include <opencv2/opencv.hpp> #in
- Qt for Python (PySide2) の基本的な使い方QT を Python から利用するためのライブラリには PyQt や PySide 等が存在します。PySide は元々 QT4 向けのライブラリでしたが、QT5 に対応するために新たに PySide2 が開発されました。PySide2 は Qt for Python ともよばれています。 Q: PySide? Qt for Python? what is the name?A: The nam...
- OpenGL を Python3 から利用するための環境設定および簡単なサンプルコード (Linux)コンピュータグラフィックスのレンダリングライブラリの一つである OpenGL を Python3 から利用するための Linux 環境を準備して、設定例およびサンプルコードを記載します。特にここでは Debian9 を利用します。 Getting Started [Language bindings / Python](ht
- 立方体を回転させるサンプル (OpenGL、Python)立方体を二つ配置して回転させてみます。ライブラリを用いずに OpenGL API を直接利用します。 wget https://gist.githubusercontent.com/harubot/df886254396a449038ee542ed317f7b3/raw/92216e02d0210b9d81770562ddf7741339f1b286/opengl-setup2.py DISPLA...
- Open Dynamics Engine によるロボットの自己位置の推定 (Python)ロボットアプリケーションを開発する際に、ロボットの自己位置を推定する必要がある場合を考えます。ここでは Open Dynamics Engine を Python から利用した場合について、自己位置推定のサンプルを記載します。自己位置推定と環境の地図作成を同時に行う場合を SLAM (Simultaneous Localization and Mapping) とよびます。 検証に用いる車輪型ロボ...