Qt 勉強会 @ Tokyo #65 参加報告 | Qtのソースコードからのビルドに苦戦
概要
項目 | 内容 |
---|---|
イベント名 | Qt 勉強会 @ Tokyo #65 |
URL | https://qt-users.connpass.com/event/109720/ |
ハッシュタグ | #qtjp |
主催者 | 日本Qtユーザー会 |
開催地 | 東京都新宿区新宿1-23-1 新宿マルネビル9F |
開催日時 | 2018-11-24 Sat 13:00~18:00 |
参加人数 | 6 |
SNS | https://social.senooken.jp/conversation/1040918 |
参加者6名のこじんまりとした集まりとなった。
作業
今回は以下の2点の作業を行った。
- Qt製ブラウザーのFalkonのインストール記事の作成
- Qtのソースコードからのビルド方法調査
前回の勉強会で,Qt製ブラウザーのFalkonをソースコードからインストールし,タブページUIの実装の参考にしようとしていた。インストールはうまくいったものの,インストール手順を作成していなかった。Falkonのインストール手順はWeb上には存在しないので,今後のために残すことにした。本来なら,勉強会とは別の時間で作成すればよかった。しかし,依存関係のインストール手順も残す必要があり,それなりに文量がありなかなか時間が取れなかった。そのため,勉強会中に手順を作成することにした。
勉強会中に以下の記事を作成・修正した。
- Qt 勉強会 @ Tokyo #64 参加報告 | Qt製WebブラウザーFalkonのソースコード調査
- error: must install xorg-macros 1.16.0 or later
- util-macros (xorg-macros) のインストール
- xcb-utilのインストール
- Qt製WebブラウザーFalkonのインストール
Linux上でのインストールに成功したので,Linux特有のX関係のライブラリーが必要で,そのインストールに若干手間取った。
記事作成完了でだいたい15:00になった。その後は,Qtのソースコードからのインストールに挑戦した。
というのも,前回の勉強会の参加報告でも書いたが,Falkonのタブページの実装で,tabSizeHintという関数が重要な役割を果たしており,これがQtのコアな部分なAPIを使っているように感じたからだ。
また,今後自分でQtをしっかりやっていくうえで,自分でQtをソースコードからビルドできたほうがよいと感じていた。そのため,Qtのソースコードからのビルド方法を調査した。
ビルド方法については以下の情報を参照した。
- Building Qt Sources | Qt 5.12
- Building Qt 5 from Git – Qt Wiki
- README.git – qt/qt5.git – Qt5 super module
Qtのソースコードリポジトリーは「http://code.qt.io/cgit/qt/qt5.git/」だ。
ここからGitを使ってダウンロードする。ただし,Qtはsubmoduleで大量のモジュールを含んでいる。Qt 3Dなどは使わないのに,ファイルサイズが大きい。そのため,標準だとダウンロードやビルドに時間がかかってしまう。そこで,必要なものだけをダウンロードする方法を探していた。
具体的には,「Getting the source code – Building Qt 5 from Git – Qt Wiki」を参照してソースコードのダウンロードを試みていた。
以下のコードでQt 5の最小限のソースコードをダウンロードできる。
## Check remote repository
#git ls-remote git://code.qt.io/qt/qt5.git
cd ~/.local/src
git clone --depth 1 git://code.qt.io/qt/qt5.git
#git clone --recursive --shallow-submodules --depth 1 git://code.qt.io/qt/qt5.git
cd qt5
git fetch --depth 1 origin tag v5.11.2
ここからが問題だ。qt5.gitにはGitのsubmoduleで大量のモジュールを含んでいる。このsubmoduleを必要なものだけ (–depth 1) でダウンロードする方法が難しい。qt5ディレクトリーに含まれているPerlスクリプトである「init-repository」を使えば,ダウンロードするモジュールを選択できる。
ただ,これだと以下2点の問題がある。
- Gitの–depth 1に相当することができているのかどうかよくわからない。
--module-subset=essential
で必要最小限のモジュールのダウンロードができそうだが,関係ないものも入っている気がする。
Gitのsubmodule機能について勉強して,自分で必要なものだけを–depth 1オプションでダウンロードするのがいいのではないかと考えて試行錯誤していて時間切れになった。
おそらく以下のような感じのコマンドで行ける気がするが,検証しきれなかった。
git submodule update --init --recursive --depth 1 qtbase
その他,Qtのソースコードからのビルド方法を会場に訪ねてみると,日本Qtユーザー会でホストしているミラーサイトを使えば,ダウンロードが早いと教えてもらった。
git clone git://git.qt-users.jp/qt/qt5.git
cd qt5/
perl init-repository --mirror git://git.qt-users.jp/
ただし,上記のgit://git.qt-users.jp/のURLが無効だった。いろいろ調べてみると,「日本Qtユーザー会WebSiteのコンテンツについて – Qiita」が参考になった。「http://git.qt-users.jp/」が日本Qtユーザー会のリポジトリーとなっており,リポジトリーの先頭にmirrorとついているのがQt公式リポジトリーのミラーリポジトリーのようだった。
以下のようにinit-repository --mirror
オプションでgit://git.qt-users.jp/mirror/
を指定してやればうまく機能していた。
./init-repository -f --module-subset=essential --mirror git://git.qt-users.jp/mirror/
結論
今回の勉強会はブログの作成とインストール方法の調査で終わった。QtのソースコードからのビルドはQtをやっていくうえで避けて通ることはできないところ。次回以降も取り組み,きっちりできるようにしたい。
資格試験やIoTのハッカソンやら,MTGやらでQtの勉強時間を確保するのが難しくなってきている。月一のQt勉強会をQtの勉強のきっかけにして,今後も細く長く継続できるようにする。