【きっかけ】
Linuxのターミナルってどんな仕組みになってるんだろう?
よし、gnome-terminalのソースコードをgit cloneして、まずビルドしてみるか!と、思ったのですが、gnome-terminalってビルドがmesonを使うようになってるんですね。
gnome-terminalは基本的なソフトウェアだしビルドもそんなに苦労せずにできるかな?と思ったのが間違いで、約半日の時間を溶かした原因になったのでした。
【環境】
Ubuntu | 22.04 |
meson | 1.0.0 |
ninja | 1.11.1 |
pkg-config | 0.29.2 |
【環境構築】
meson + ninja は、pip3を使用してインストールしました。(あちこちのサイトでインストール手順は紹介されているので省略します)
他の方法を使ってインストールしても、基本的にバージョンが一緒であれば問題ないはずです。
【エラーに至る手順】
まず、ソースコードのダウンロードを。
$ git clone https://github.com/GNOME/gnome-terminal.git
$ cd gnome-terminal
いよいよビルドなのですが、最初、ライブラリのvte-2.91が見つからず、そうか、パス指定しないといけないのかなと思い、HomeBrewで pkg-config をインストールしました。
先に結論を言ってしまうと、このHomeBrewの pkg-config が原因でmesonが混乱して、ライブラリが見つかんねー!!って言ってたのです。
話をもとに戻して、一応 meson でのビルド手順も書いておきます。
$ meson setup <ビルドしたファイルを格納するディレクトリ名> ← build や builddirとすることが多いようです
これで、mesonが成果物を格納するディレクトリを作って、その中にファイルを格納してくれるはずなんですが、ログや中間ファイルは生成されているものの、ライブラリの vte-2.91 が見つからず、ninjaを使ってコンパイルするためのファイルが生成されていませんでした。
ここで、上で書いた pkg-config をHomeBrewでインストールしたのですが、いろいろ試したりバージョンも確認していた中で気づいたのが、HomeBrewの pkg-config とaptでインストールした pkg-config は同じバージョンの0.29.2であるにも関わらず、mesonから呼ばれた場合の挙動に差異があるということでした。
そして、厄介なことに、mesonはライブラリを探しに行く際にHomeBrewでインストールしていた pkg-config をまず見つけて、そいつを使って共有ライブラリを探しに行こうとするのです。
これは多分なのですが、aptでインストールした Ubuntuの公式リポジトリの pkg-configは 、どうもバグフィックスされているような感じなのです。 " pkg-config --version "では 0.29.2 としか表示されないので、リビジョンまではわからなかったのですが、おそらくそういうことなんだと思います。
ちなみに、mesonが先にHomeBrewの pkg-config を見つけに行くのは、exportしたPATHの順番なのかなぁと想像しています。ただ、マイPCの環境では、PATH自体に特殊な設定はしておらず(HomeBrew以外のパスは幾つか追加していますがまるっきり関係ないパスなので、これによる影響はありません)、HomeBrew自体をインストールした際に $HOME/.profile に追加してね!と指定された設定しか適用していません。HomeBrewで pkg-config をインストールしてしまうと、mesonでのビルドで十中八九、この共有ライブラリが見つからないというエラーに出くわす可能性が高いです。
もうすこし補足しておくと、HomeBrewの pkg-config がmesonから呼ばれるときには、/etc/ld.so.conf.d/ に共有ライブラリのパスを追記して ldconfig でそれを反映させても、やっぱり共有ライブラリは見つからずじまいです。
【結論】
mesonを使うときは HomeBrew の pkg-config は $ brew remove pkg-config でサクッとリムーブしちゃいましょう。でないと、無駄に時間が溶けるばかりです。
長くなってしまいましたが、さいごまでお付き合いいただきありがとうございました!