言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

mingw で gtk をコンパイルする。

gtk のソースに興味があったので、ソースからコンパイルしてみる事にした。

目的: テキストエディタのスクロールの方法を知りたい。

前に使ったお手軽インストーラhttp://gladewin32.sourceforge.net に合わせて、ちょっと古いバージョン(GTK+ 2.10.11)を使う。実は最新のやつは依存ライブラリも新しくしないといけないので見合わせた。

http://ftp.gnome.org/pub/gnome/sources/gtk+/2.10/gtk+-2.10.12.tar.bz2

configure

ちょっとしたバグがあるらしいので、次のようなおまじないで回避します。

$ vi pkg-config.sh
#!/bin/sh
if pkg-config "$@" > /dev/null 2>&1 ; then
res=true
else
res=false
fi
pkg-config "$@" | tr -d \\r && $res

$ export PKG_CONFIG=c:/takashi/src/gtk+-2.10.12/pkg-config.sh # ここは貴方のパス
$ ./configure

... 待つ

make

その後 make すると、demos/ のコンパイルで libglib-2.0-0.dll が無いと言うが出ると思います。正しい直し方は良く分かりませんが、野生の勘で次のように Makefile を書き換え、簡単インストーラについていた gtk-pixbuf-csource を使うようにすると通りました。

$ diff -u demos/Makefile.orig demos/Makefile
--- demos/Makefile.orig Sun Mar  2 06:06:42 2008
+++ demos/Makefile      Sun Mar  2 07:39:16 2008
@@ -330,7 +330,7 @@
 BUILT_SOURCES = test-inline-pixbufs.h
 
 #pixbuf_csource = $(GDK_PIXBUF_CSOURCE)
-pixbuf_csource = GDK_PIXBUF_MODULE_FILE=$(top_builddir)/gdk-pixbuf/gdk-pixbuf.loaders $(top_builddir)/gdk-pixbuf/gdk-pixbuf-csource
+pixbuf_csource = gdk-pixbuf-csource
 #pixbuf_csource_deps = 
 pixbuf_csource_deps = $(top_builddir)/gdk-pixbuf/gdk-pixbuf-csource $(top_builddir)/gdk-pixbuf/gdk-pixbuf.loaders 

デバッグしてみる。

$ cp gtk/.libs/libgtk-win32-2.0-0.dll /c/GTK/bin/

のように出来上がったライブラリを古い奴に上書きすると、ライブラリの中までデバッグ出来ます(本当はインストールしようかと思ったけど、例の libglib-2.0-0.dll のエラーが出て上手く行きませんでした。何故だ???)。試しに examples/ の中に沢山サンプルがあるのを試してみると大変面白いです。サンプルに付いてくる Makefile は -g オプションが付いてないので、CFLAGS に -g を追加するのを忘れないようにしないといけません。私はソースコードだけ読むという事が出来ないので、このようにデバッガを使いながらだと楽しくソースを味わう事が出来てとても快適です。

失敗談

上の pkg-config.sh を vi を使わないでヒヤドキュメントでかっこよく作ろうとしてハマった。$ や \ があるとクォート難しい。しかも眠くてどこが悪いのか分からなかった。