66 qolibri を make してみる

(しばらく工事中)

普段 EPWING 辞書を読むために qolibri というアプリを使っている。 大変助かっています。

「qolibri - EPWINGリーダー」

macOS を 27 にアップデートしたら、qolibri を起動しようとすると、 Rosetta をインストールする? macOS 28 からは使えなくなるぜ、みたいなことを言われる。


あー、つまり、インストールしてある qolibri は Intel Mac 用のバイナリーで、 これまで Rosetta 2 を使って動いていた。OS のアップデートをするとき、 そのまま Rosetta 2 が使えていたけれど、 macOS 27 では上のようなお尋ねをする、と。 macOS 28 では、Rosetta 2 を提供しないつもりということだろう。

(けち…まあきちんとした情報提供ではある。)


えーと、まずは、Rosetta 2 だ。「はい。インストールします。」 無事 qolibri が起動した。

それはそれとして、macOS 28 ではどうするのかな。 qolibri は https://github.com/mvf/qolibri にソースがある。

待っていれば Apple Silicon 用のバイナリーが提供されるかな? という期待もあるけれど、今だったら AI に make してみて、 と言ってみるのだろう。

窓が開いていたので Chappy 君とチャット。 ああせい、こうせい。
sudo port install cmake qt6-qtbase qt6-qt5compat qt6-qttools qt6-qtmultimedia qt6-qtwebengine
として、と言われて、やってみると最後でコケる。

考えてみると、Codex にするのだったかな…

うーん、どうしよう。まあ、Chappy 君もやってくれると思うけれど、 考えてみれば、こういうのって、普段 Claude 君にやらせていたっけ (私も慣れてきている)。 選手交替。
これは qolibri というアプリケーションのソースをおさめたディレクトリです。 https://github.com/mvf/qolibri を clone しました。make して下さい。
Qt WebEngine が必要ですが、インストールされていないようです。確認します。

(中略)

次のコマンドを実行していただけますか: sudo port install qt6-qtwebengine

うん、そうだよね (笑)。 ここでエラー・ログを貼り付ける。
エラーメッセージの指示どおり、 Xcode の Metal Toolchain コンポーネントをダウンロードします。

あ、そうなんですね (実は全然わかっていない。お任せモード)。
Metal Toolchain のダウンロードは完了しました(838.9your browser. MB)。もう一度インストールを実行してください:

注意点が一つあります。macOS 27 (darwin_27) 用のビルド済みパッケージがMacPorts のサーバーに無いため、 Qt WebEngine(中身は Chromium)をソースからビルドすることになります。 数時間かかり、ディスクも数十 GB 使います。

これが重すぎる場合は、Qt 公式のオンラインインストーラで WebEngine 付きのビルド済み Qt 6 を入れ、その Qt を CMAKE_PREFIX_PATH に指定してビルドする方法もあります。

ふうん。

まあ、ソースビルドでやってみる。
sudo port install qt6-qtwebengine

しばらくはお任せしておこう。Mac を電源につないで……


あれをやんないといけないんだった (実は qolibri は現実逃避なのだった)。


無事お仕事終了。これで本当の日曜日が始まる。

えーと、どうなっているのかな…

引っかかってる。

macOS 27 SDK の sandbox.h から kSBXProfilePureComputation が消えたのが原因のようです。SDK の中身を確認します。

SDK 26.5 には宣言がありますが、SDK 27 では削除されています。ライブラリ側にシンボルが残っているか確認します。

原因がわかりました。qolibri ではなく qt6-qtwebengine(Chromium)側の問題です。

macOS 27 SDK の sandbox.h から kSBXProfilePureComputation の宣言が削除されている(SDK 26.5 にはある) - シンボル自体は libsystem_sandbox.tbd にまだ残っているので、宣言を1行補えばビルドもリンクも通るはずです

MacPorts の作業ディレクトリは root 所有で私からは書き換えられないため、次の2つ を実行してください(失敗時の作業ディレクトリが残っているので、58% の続きから再開されます):

(実行する)

新しい SDK 向けのパッチはまだ出ていないようなので、 ほかの箇所でも同じようなエラーが出るかもしれません。 止まったらまた教えてください。ログを見て対処します。

(できた。)

❯ できたみたいです。

qolibri のビルドができました。

成果物: /Users/mk/work/qolibri-making/qolibri/build/qolibri.app(arm64)

- 実行したコマンド:
cmake -S . -B build -G Ninja -DCMAKE_PREFIX_PATH=/opt/local/libexec/qt6 -DCMAKE_BUILD_TYPE=Release
cmake -build build
- エラーはありませんでした。 新しい Qt6 で非推奨になった API への警告は出ましたが、動作には影響しません。
- 試しに起動したところ、6秒後もエラーなく動いていたので終了させました。辞書の検索などの操作は試していません。
- EB ライブラリは GitHub から自動で取得され、アプリに組み込まれています。

起動方法: open build/qolibri.app

注意点:
- このアプリは MacPorts の Qt(/opt/local/libexec/qt6)を直接読み込みます。 他の Mac に配布したり、MacPorts の Qt を消したりすると動きません。 macdeployqt で Qt を同梱すれば単独で動くアプリにできます。
- qt6-qtwebengine は手作業でパッチを当ててビルドしたものです。 今後 port upgrade で新しいバージョンが来たとき、 MacPorts 側が macOS 27 SDK に対応していなければ同じエラーがまた出ます。

❯ よそのMacで使えるようにできるならそうして下さい。

⏺ 他の Mac でも動く形にして、dmg も作りました。

─成果物(/Users/mk/work/qolibri-making/qolibri/dist/)
- qolibri.app(319 MB):Qt と関連ライブラリをすべて中に含めたアプリ
- qolibri-2.1.4-macos27-arm64.dmg(140 MB):配布用。開くと Applications へのショートカットも入っています

確認できたこと
- アプリ内のどのファイルも、もう
MacPorts(/opt/local)のファイルを参照していません。
- 起動時とページ表示用の子プロセス(QtWebEngineProcess)の両方で、読み込まれた
ライブラリはすべてアプリの中のものでした。
- MacPorts が入っていない Mac では試していません。

作業の途中で変えたこと
- 同梱ツール(macdeployqt)は ffmpeg 経由で librsvg・cairo・pango
などを取り込もうとして失敗しました。そこで ffmpeg
の音声・動画プラグインを外し、macOS 標準の音声機能(darwin プラグイン)だけ にしました。辞書の音声再生はこちらで鳴るはずですが、試していません。
- 同梱ツールが書き換え漏らした QtWebEngineProcess
の参照先を手で直し、アプリ全体に署名(ad-hoc)をし直しました。

使える Mac の条件と注意
- macOS 27 以降の Apple Silicon Mac に限られます。macOS 27 の SDK
でビルドしたためで、Intel Mac や古い macOS では起動しません。
- Apple の公証を受けていないので、他の Mac
で初回に開くと「開けません」と表示されます。「システム設定 →プライバシーと セキュリティ」から「このまま開く」を選ぶか、次のコマンドで解除してください

※recap: qolibri をビルドし、他の Mac でも使えるアプリと dmg を dist
フォルダに作りました(macOS 27 以降の Apple Silicon Mac 専用)。次は、MacPorts
の入っていない Mac で dmg から起動と音声再生を試してみてください。 (disable recaps in /config)

ふう。qolibri.app は確かに動く。単語の発音を鳴らしてみて確かに聞こえた。

実際に使えそうだ。

当分は大丈夫そうだ。


ずっと昔、ソースプログラムからの make (今だとビルドっていうのかな) を 色々頑張ってやっていたけれど、今はお任せで済むわけか。


qolibri の前はコトノコという EPWING リーダーを使っていて、 新しい Mac では動かなくなって (ソースは公開されていたけれど、 使っていた機能が削除されたため、make できなくなっていた)、 やむを得ず乗り換え先を探して、qolibri に行き着いたのだけど、 もしかすると、コトノコも make できたりするのかしら…

桂田 祐史