【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

MSYSでGTK+をビルド (2)

MSYSでGTK+をビルドする手順をまとめました。

ビルド後のパッケージ一覧は前回の記事を参照してください。

ビルドには非常に時間と手間が掛かります。自分でビルドしなくても本家でWindowsバイナリが公開されています。

参考までに私がビルドしたバイナリを置いておきます。/usr/localに展開することが前提のアーカイブです。

これは一時ディレクトリにインストールしたファイルを固めたものです。make installの代わりに使うスクリプトを作成したので、参考までに置いておきます。

Python

Windows用のPython 2.7.3をインストールしてPATHを通します。

$ export PATH=$PATH:/c/Python27

MSYSからPythonのビルドを試みましたが、ライブラリがうまく読み込めずに断念しました。参考までに作りかけのパッチを置いておきます。

cURL

ダウンローダです。インストール直後のMinGW+MSYSにはダウンロード用のコマンドがないため、ブラウザなどでダウンロードします。

$ tar xvf curl-7.25.0.tar.lzma
$ cd curl-7.25.0
$ ./configure
$ make
$ make install
$ cd ..

使い方は、-LOオプションを付けてファイルをダウンロードします。Lはリダイレクトに対応、OはURLと同じファイル名で保存というオプションです。wgetと異なりオプションは省略できません。

$ curl -LO http://...

zlib

win32でconfigureすると拒否されるので、win32/Makefile.gccを指定します。

$ curl -LO http://zlib.net/zlib-1.2.6.tar.bz2
$ tar xvf zlib-1.2.6.tar.bz2
$ cd zlib-1.2.6
$ make -f win32/Makefile.gcc
$ make -f win32/Makefile.gcc install SHARED_MODE=1 INCLUDE_PATH=/usr/local/include LIBRARY_PATH=/usr/local/lib BINARY_PATH=/usr/local/bin
$ cd ..

何となく、zlibをbz2でダウンロードしました。

libffi

$ curl -LO ftp://sourceware.org/pub/libffi/libffi-3.0.11.tar.gz
$ tar xvf libffi-3.0.11.tar.gz
$ cd libffi-3.0.11
$ ./configure
$ make
$ make install
$ cd ..

GLib

zlibとlibffiのフラグを指定します。

$ curl -LO http://ftp.gnome.org/pub/GNOME/sources/glib/2.32/glib-2.32.2.tar.xz
$ tar xvf glib-2.32.2.tar.xz
$ cd glib-2.32.2
$ CFLAGS=-march=i686 LDFLAGS=-L/usr/local/lib ZLIB_CFLAGS=-I/usr/local/include ZLIB_LIBS=-lz LIBFFI_CFLAGS=-I/usr/local/lib/libffi-3.0.11/include LIBFFI_LIBS=-lffi ./configure
$ make
$ make install
$ cd ..

アトミック処理の関係でi486以上が要求されるため、i686を指定しています。glibではなくglibcでも似た事情があるので、参考までにリンクしておきます。

pkg-config

$ curl -LO http://pkgconfig.freedesktop.org/releases/pkg-config-0.26.tar.gz
$ tar xvf pkg-config-0.26.tar.gz
$ cd pkg-config-0.26

出力にゴミが付くのでパッチを当てます。

$ GLIB_CFLAGS="-I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include" GLIB_LIBS=/usr/local/bin/libglib-2.0-0.dll ./configure
$ make
$ make install
$ cd ..

使用している関数がインポートライブラリから隠されているため、DLLを直接リンクします。

  • /usr/local/lib/glib-2.0.def
    • g_win32_get_package_installation_directory PRIVATE
    • g_win32_get_package_installation_subdirectory PRIVATE

libpng

$ curl -LO http://prdownloads.sourceforge.net/libpng/libpng-1.5.10.tar.xz
$ tar xvf libpng-1.5.10.tar.xz
$ cd libpng-1.5.10
$ CPPFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib ./configure
$ make
$ make install
$ cd ..

libjpeg

$ curl -LO http://ijg.org/files/jpegsrc.v8d.tar.gz
$ tar xvf jpegsrc.v8d.tar.gz
$ cd jpeg-8d
$ ./configure
$ make
$ make install
$ cd ..

LibTIFF

$ curl -LO ftp://ftp.remotesensing.org/pub/libtiff/tiff-4.0.1.tar.gz
$ tar xvf tiff-4.0.1.tar.gz
$ cd tiff-4.0.1
$ CPPFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib ./configure
$ make
$ make install
$ cd ..

OpenJPEG

JPEG 2000用のライブラリです。

$ curl -LO http://openjpeg.googlecode.com/files/openjpeg-1.5.0.tar.gz
$ tar xvf openjpeg-1.5.0.tar.gz
$ cd openjpeg-1.5.0
$ ./configure
$ make
$ make install
$ cd ..

FreeType

$ curl -LO http://download.savannah.gnu.org/releases/freetype/freetype-2.4.9.tar.bz2
$ tar xvf freetype-2.4.9.tar.bz2
$ cd freetype-2.4.9
$ ./configure
$ make
$ make install
$ cd ..

pixman

autogenがうまくいかないため、Cairoの配布物を使用します。

$ curl -LO http://cairographics.org/releases/pixman-0.24.4.tar.gz
$ tar xvf pixman-0.24.4.tar.gz
$ cd pixman-0.24.4
$ ./configure
$ make
$ make install
$ cd ..

Cairo

$ curl -LO http://cairographics.org/releases/cairo-1.12.2.tar.xz
$ tar xvf cairo-1.12.2.tar.xz
$ cd cairo-1.12.2
$ CPPFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib ./configure

configureでssize_tが認識されないため util/cairo-missing/cairo-missing.h がエラーになります。手動で修正します。

$ echo "#define _SSIZE_T_DEFINED 1" >> config.h
$ make
$ make install
$ cd ..

Poppler

PDF処理用のライブラリです。

$ curl -LO http://poppler.freedesktop.org/poppler-0.18.4.tar.gz
$ tar xvf poppler-0.18.4.tar.gz
$ cd poppler-0.18.4

Windowsではopenjpegがstdcallのためcdeclのスタブがリンクできないので、configureにパッチを当てます。

$ CPPFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib ./configure
$ make
$ make install
$ cd ..

gdk-pixbuf

$ curl -LO http://ftp.gnome.org/pub/GNOME/sources/gdk-pixbuf/2.26/gdk-pixbuf-2.26.1.tar.xz
$ tar xvf gdk-pixbuf-2.26.1.tar.xz
$ cd gdk-pixbuf-2.26.1
$ ./configure

make中にgdk-pixbuf-query-loaders.exeが落ちます(原因不明)。makeも止まったときは再度makeします。エラーを出しながら先に進むことがありますが、それでうまくいくようです。

$ make
$ make install
$ cd ..

ATK

$ curl -LO http://ftp.gnome.org/pub/GNOME/sources/atk/2.4/atk-2.4.0.tar.xz
$ tar xvf atk-2.4.0.tar.xz
$ cd atk-2.4.0
$ ./configure
$ make
$ make install
$ cd ..

Pango

$ curl -LO http://ftp.gnome.org/pub/GNOME/sources/pango/1.30/pango-1.30.0.tar.xz
$ tar xvf pango-1.30.0.tar.xz
$ cd pango-1.30.0
$ ./configure
$ make
$ make install
$ cd ..

GTK+

$ curl -LO http://ftp.gnome.org/pub/GNOME/sources/gtk+/2.24/gtk+-2.24.10.tar.xz
$ tar xvf gtk+-2.24.10.tar.xz
$ cd gtk+-2.24.10
$ ./configure
$ make
$ make install
$ cd ..

本当はこの後でGtk#のビルドもしたいのですが、まだ成功していません

【追記】Gtk#のビルドに成功しました。GTK+のバージョンも合わせました。