MinGW Cross Compile on Ubuntu > ライブラリのビルドの記録
目標は geocities に置いている gimp と同じ構成でビルドすること。ただし aalib とlibmng それに gtk+ theme engine は除く、予定。
ライブラリは ${XLIBRARY}/lib に保存され使用されると前提しています。
ライブラリはアルファベティカルに並べていません。依存関係があるのでこの順にビルドしています。...とかいいながら、一般と gimp で分けたので依存関係がわかりにくくなってしまいました。
dll 名はノーマルか float か long double かによって変わります。有効にできるオプションも違います。
x 記号は指定可、 - 記号は指定不可です。
ノーマルのビルド。
続けてビルドするなら target と build の中身を掃除する。
float 版のビルド。
long double は float の応用なので省略します。 configure に --enable-sse が使えないので、ノーマル版に --enable-long-double を追加した形になります。
configure で作業するのは面倒なので win32/Makefile.gcc を使います。 SHARED_MODE=1 で dll が作られます。 SHARED_MODE=0 で static になります。設定を省略すると static でビルドされます。
libzdll.a は mingw の命名規則から考えると libz.dll.a に変更しておくほうが無難です。 libzdll.a のままでは libtool が shared でリンクしてくれないかもしれない。ただし事情を考慮して回避策を入れている場合にリンクできなくなるかもしれないので、 libz.dll.a のシンボリックリンクを作成してごまかすのがよさそうです。
使うバージョンの pc ファイルを lib/pkgconfig/libpng.pc にシンボリックリンクしてください。クロス コンパイルのためのライブラリの pkgconfig に libpng.pc が存在せず、他のライブラリが *.pc ファイルの Requires.private に libpng を指定していた場合に pkg-config は規定のディレクトリーを検索し、ネイティブの libpng.pc を参照してしまいます。
同様に bin/libpng-config も作成します。
libpng*-config ファイルは中身を書き換えます。 prefix を ${XLIBRARY}/lib にあわせてください。
1.2.44 の例。 CFLAGS は makefile.mingw の設定例を参考に設定しています。
makefile.mingw に不備があって build ディレクトリーを掘ってビルドすると lib/pkgconfig/libpng12.pc が空になる。当該箇所を修正するか libpng.pc.in をコピーして書き換える。以下、 libpng12.pc の内容。参考まで。
1.4.3 ではこのように。 1.2.44 とは scripts/pngwin.rc が異なります。 SHAREDLIB は libpng14-0.dll でいいのかな... gimp 2.6.10 (simoncic) では libpng14-12.dll になっている。 gtk+ bundle にあわせて libpng14-14.dll にしました。
libjpeg-7-2 のビルド。 dll のファイル名は libjpeg-7.dll になります。
libjpeg-8b のビルド。 dll のファイル名は libjpeg-8.dll になります。
configure の結果。
static と shared で Makefile を使い分けます。 Makefile はそれぞれ用意されています。ここで扱う Makefile は debian パッチを当てているのでオリジナルとは少し異なります。
static は Makefile 、 shared は Makefile-libbz2_so でビルドします。 shared は dll のみ作成します。コマンドの作成やインストール ターゲットは static の Makefile に記述されています。つぎに述べる手順は shared をビルドしたのち static をビルドしています。パッチを含むため長くなっています。
debain patch を適用していない 1.0.6 のパッチ。
素直にビルドすると dll 名は libcharset-1.dll, libiconv-2.dll になります。しかし gimp 2.6.10 の windows binary では iconv.dll になっており、互換性がありません。ここでは後者に合わせるためパッチをあてています。具体的には libtool の soname_spec を置き換えています。生成されたばかりの libtool の soname_spec は次のようになっています。
次のように置き換えています。
dll 名は次のようになります。
gettext 0.18.1.1 は moopp の問題で c++ から c 関数をリンクできません。パッチを当てます。パッチをあてたあと念のため chmod u+x しています。
dll 名は MinGW の流儀にあわせて libopenjpeg-2.dll にしました。エクスポートした関数名も MinGW にあわせています。そのため公式の *-win32.zip とは互換性がありません。公式との表面的な互換性を求めるなら、 SHAREDLIB を $(TARGET).$(SHREXT) に、 OPJ_CALLCONV を __stdcall に設定しなおしてください。
dll 名は freetype6.dll になります。 libtool の soname_spec を書き換えています。通常は libfreetype-6.dll です。
dll 名は libfontconfig-1.dll になります。
etc/fonts/fonts.conf が設定ファイルです。フォントキャッシュは規定では次の場所を参照します。
通常は %TEMP% に作られます。 WINDOWSTEMPDIR_FONTCONFIG_CACHE がその設定です。 WINDOWSTEMPDIR_FONTCONFIG_CACHE を削除すると %HOME%/.fontconfig に作成されます。
1.19 の例。 dll 名は liblcms-1.dll です。
2.0a の例。 dll 名は liblcms2-2.dll になります。
configure する場合。 unmaintained と注記されているのが気になる。
dll 名は libXpm-noX4.dll です。
dll 名は libwmf-0-2-7.dll, libwmflite-0-2-7.dll になります。
configure が依存ライブラリ libpng のチェックで -lpng 決め打ちしているのでごまかしています。 configure.ac を書き換えるのが正しい修正ですが、修正には当該箇所をどこかの configure.ac からパクってくればよいと考えて触ってません。
configure の結果。なぜ gd が有効に...
dll 名は次のようになります。
configure の結果。 zlib を有効にするには --enable-zlib します。ただし Warning: Using zlib is not totally safe の警告が出ます。
libpoppler-5.dll が libxml2 をリンクしているのはなぜだろう...
dll 名は次のようになります。
configure の結果。
unit test 関係で pthread が必要。 tests は Makefile の SUBDIR からはずしてしまってもいい。
途中経過です。まだ動かしてません。異常なくビルドが終了するのを確認したところまで。
fontconfig のキャッシュ ファイルの作成場所は etc/fonts/fonts.conf に記述されています。規定では WINDOWSTEMPDIR_FONTCONFIG_CACHE (%TEMP%) になっています。 portable にするには当該箇所を削除し、 gimp-2.6.exe の起動前に HOME 環境変数に保存フォルダーを設定します。こうすると保存フォルダーの下にキャッシュが作成されます。保存フォルダーは COMPUTERNAME 環境変数と USERNAME 環境変数を組み合わせれば、ただしそれらの環境変数がコンピューターごとに適切に設定されていて、なおかつ COMPUTERNAME と USERNAME が漏洩する心配がなければですが、 usb などに設定を保存していても問題はない(はず)です。
同様に Gimp の各種設定は GIMP2_DIRECTORY 環境変数にフォルダーを設定します。注意すべきは、既存の空のフォルダーを指定しないことです。古い Gimp では既存の空のフォルダーを指定すると設定ファイルをうまく作成してくれませんでした。次にくる問題はフォルダー名のつけ方です。フォルダー名の生成に COMPUTERNAME 環境変数と USERNAME 環境変数を参照するべきでしょうか? 僕はユーザーが選択可能にするべきと考えます。 todo
gtk+ bundle では etc/gtk-2.0 に gtkrc を欠いています。そのためコントローラー フェイスが gtk+ 標準になっています。昔は Windows 用の gtkrc が share/themes/MS-Windows/gtk-2.0 にあったのですが、今は存在しません( bundle の問題? bundle のパッケージング ミスだったようです )。当時のファイルの内容は次のようになっていました。
%APPDATA%/gtk-2.0 が作成されます。 todo
memo
Running GTK+ Applications <http://library.gnome.org/devel/gtk/stable/gtk-runn...>
Using GTK+ on Windows <http://library.gnome.org/devel/gtk/stable/gtk-wind...>
configure の結果。
ビルドに Gtk+ 2.24.3 以上を要求するのですが、現時点(2011/4/24sun)では gnome や Ring Server Project で配布されている Windows Binary が 2.24.0-1 であるためそのままではビルドできません。 Gtk+ のヘッダーファイルと Gimp のソースを書き換えています。
configure の結果。
fix.gimp2.7.2.patch
Gimp の最小構成は次の5つのライブラリを用意すればビルドできます。
ビルドに使用した&有効になっていると思われるライブラリ。ちょっと古い。
追加予定のライブラリ。
gimp-2.6.10 (simoncic) に含まれているがよくわからないもの。 webkit がらみで増えたのか...
手順など。
configure の結果。
今後の予定。
- bzip2
- fontconfig
- freetype2
- gettext
- libcroco
- libexif
- libgsf
- libiconv
- liblcms
- libmng
- librsvg
- libxpm no X
- libxml2
- libwmf
- poppler
2011/5/4wed gimp 2.7.2 をすこし修正。
2011/4/25mon gimp 2.7.2 を追記。
2011/4/21thu libtiff を修正(まだ問題がありそうだけど調査不足...)。 freetype の dll 名を gtk+ bundles に合わせた。 babl 1.4, gegl 1.6 に置き換えた。 gegl の記述をもうすこし簡潔にした。
2010/12/10fri ページを分割しました。
2010/10/17sun Gimp に関するもろもろを追記。
2010/10/13wed poppler 0.14.4, gimp 2.6.11 を記述。libpng を修正。こまごまとした修正。
2010/10/6wed openjpeg を記述。 patch まわりを修正。
2010/9/27mon fftw3 を記述。 bzip2 1.0.6 を追記。
2010/9/24fri fontconfig, freetype, poppler を記述。
2010/9/23thu libwmf, gettext を記述。
2010/9/14tue libxpm no X を記述。
2010/9/13mon little cms 1.19, libmng を記述。 libpng, libxml2 を修正。
2010/9/10fri libpng に追記。 libexif, librsvg を記述。
2010/9/9thu libxml2, libcroco, libgsf を記述。
2010/9/7tue libiconv を記述。
2010/9/5sun bzip2, little cms を記述。
2010/9/4sat gegl, gimp を記述。
2010/9/1wed ぐだぐだな記述をやや修正。 babl を修正。
2010/8/30mon babl を記述。
目標は geocities に置いている gimp と同じ構成でビルドすること。ただし aalib と
ライブラリは ${XLIBRARY}/lib に保存され使用されると前提しています。
ライブラリはアルファベティカルに並べていません。依存関係があるのでこの順にビルドしています。...とかいいながら、一般と gimp で分けたので依存関係がわかりにくくなってしまいました。
dll 名はノーマルか float か long double かによって変わります。有効にできるオプションも違います。
(none) | --enable-float | --enable-long-double | |
dll | libfftw3-3.dll | libfftw3f-3.dll | libfftw3l-3.dll |
--enable-sse | - | x | - |
x 記号は指定可、 - 記号は指定不可です。
ノーマルのビルド。
# FFTW Home Page # http://fftw.org/ # fftw-3.2.2.tar.gz # license: GPL v.2 ( or later ) or FFTW tar -zxf fftw-3.2.2.tar.gz cd fftw-3.2.2 mkdir target mkdir build cd build ${XMINGW}/cross-ppconfigure --prefix=${PWD}/../target --enable-shared --enable-threads --with-our-malloc16 --with-windows-f77-mangling --with-gcc-arch=pentium4 CFLAGS="-O2 -msse -mno-sse2 -pipe -fomit-frame-pointer -ffast-math" LDFLAGS="-s" # bash ${XMINGW}/replibtool.sh # リンクで _fftw_mksolver_ct_hook が見つからないと出る場合。 # test, tools が引っかかった。 dll.a にはないが a にはある。 sed -i.orig -e "s|/libfftw3.la|/.libs/libfftw3.a|" tests/Makefile sed -i.orig -e "s|/libfftw3.la|/.libs/libfftw3.a|" tools/Makefile ${XMINGW}/cross make all > make.log 2>&1 ${XMINGW}/cross make install > install.log 2>&1 cd ../target 7z a fftw-3.2.2-bin.7z -mmt -mx9 bin/*.dll 7z a fftw-3.2.2-tools.7z -mmt -mx9 bin/*.exe bin/fftw-wisdom-to-conf share/man/man1 7z a fftw-dev-3.2.2.7z -mmt -mx9 include lib/*.a lib/pkgconfig share/info
続けてビルドするなら target と build の中身を掃除する。
rm * -r cd ../build rm * -r
float 版のビルド。
# CFLAGS と --enable-float --enable-sse --disable-sse2 が異なる。 ${XMINGW}/cross-ppconfigure --prefix=${PWD}/../target --enable-shared --enable-threads --with-our-malloc16 --with-windows-f77-mangling --with-gcc-arch=pentium4 CFLAGS="-O2 -pipe -fomit-frame-pointer -ffast-math" LDFLAGS="-s" --enable-float --enable-sse --disable-sse2 # リンクで _fftw_mksolver_ct_hook が見つからないと出る場合。 # test, tools が引っかかった。 dll.a にはないが a にはある。 # libfftw3f.a になることに注意。 sed -i.orig -e "s|/libfftw3f.la|/.libs/libfftw3f.a|" tests/Makefile sed -i.orig -e "s|/libfftw3f.la|/.libs/libfftw3f.a|" tools/Makefile ${XMINGW}/cross make all > make.log 2>&1 ${XMINGW}/cross make install > install.log 2>&1 cd ../target 7z a fftw3f-3.2.2-bin.7z -mmt -mx9 bin/*.dll 7z a fftw3f-3.2.2-tools.7z -mmt -mx9 bin/*.exe bin/fftw-wisdom-to-conf share/man/man1 7z a fftw3f-dev-3.2.2.7z -mmt -mx9 include lib/*.a lib/pkgconfig share/info
long double は float の応用なので省略します。 configure に --enable-sse が使えないので、ノーマル版に --enable-long-double を追加した形になります。
configure で作業するのは面倒なので win32/Makefile.gcc を使います。 SHARED_MODE=1 で dll が作られます。 SHARED_MODE=0 で static になります。設定を省略すると static でビルドされます。
libzdll.a は mingw の命名規則から考えると libz.dll.a に変更しておくほうが無難です。 libzdll.a のままでは libtool が shared でリンクしてくれないかもしれない。ただし事情を考慮して回避策を入れている場合にリンクできなくなるかもしれないので、 libz.dll.a のシンボリックリンクを作成してごまかすのがよさそうです。
# zlib Home Site # http://www.zlib.net/ # zlib-1.2.5.tar.bz2 # license: zlib tar -jxf zlib-1.2.5.tar.bz2 cd zlib-1.2.5 ${XMINGW}/cross make -f win32/Makefile.gcc CFLAGS="-O2 -mtune=pentium4 -msse -mno-sse2 -fomit-frame-pointer -pipe -ffast-math" LDFLAGS="-s" mkdir target mkdir target/bin ${XMINGW}/cross make -f win32/Makefile.gcc install SHARED_MODE=1 BINARY_PATH=target/bin INCLUDE_PATH=target/include LIBRARY_PATH=target/lib cd target 7z a zlib-1.2.5-bin.7z bin 7z a zlib-dev-1.2.5.7z include lib
使うバージョンの pc ファイルを lib/pkgconfig/libpng.pc にシンボリックリンクしてください。クロス コンパイルのためのライブラリの pkgconfig に libpng.pc が存在せず、他のライブラリが *.pc ファイルの Requires.private に libpng を指定していた場合に pkg-config は規定のディレクトリーを検索し、ネイティブの libpng.pc を参照してしまいます。
同様に bin/libpng-config も作成します。
libpng*-config ファイルは中身を書き換えます。 prefix を ${XLIBRARY}/lib にあわせてください。
1.2.44 の例。 CFLAGS は makefile.mingw の設定例を参考に設定しています。
# PNG reference library: libpng | Download PNG reference library: libpng software for free at SourceForge.net # http://sourceforge.net/projects/libpng/ # libpng-1.2.44.tar.bz2 # libpng-1.4.3.tar.bz2 # license: libpng tar -jxf libpng-1.2.44.tar.bz2 cd libpng-1.2.44 # ディレクトリーを掘ってビルドする場合の問題に対処する。 sed -i.orig -e 's!cat \(scripts/libpng.pc.in \)!cat $(SRCDIR)/\1!' scripts/makefile.mingw mkdir target mkdir build cd build ${XMINGW}/cross windres ../scripts/pngw32.rc pngw32.rc.o ${XMINGW}/cross make -f ../scripts/makefile.mingw SRCDIR="${PWD}/.." DESTDIR="${PWD}/../target" prefix="${XLIBRARY}/lib" SHAREDLIB="libpng12-0.dll" CFLAGS="-O2 -mtune=pentium4 -msse -mno-sse2 -funroll-loops -fomit-frame-pointer -pipe -ffast-math -I${XLIBRARY}/lib/include -DPNG_DEBUG=5" MINGW_LDFLAGS="-L${XLIBRARY}/lib/lib -Wl,${PWD}/pngw32.rc.o -Wl,-s" install > make.log 2>&1 cd ../target. # libpng.pc の内容を書き換える。 sed -i.orig -e "s%^\(prefix=\).*\$%\\1${XLIBRARY}/lib%" -e 's%^\(exec_prefix=\)\.$%\1${prefix}%' -e 's%^\(libdir=\)\./%\1${exec_prefix}/%' -e 's%^\(includedir=\)\./%\1${prefix}/%' lib/pkgconfig/libpng.pc # libpng-config の内容を書き換える。 sed -i.orig -e "s%^\(prefix=\)\".*\"\$%\\1\"${XLIBRARY}/lib\"%" -e 's%^\(I_opts="-I\)\./\(.*\)$%\1${prefix}/\2%' -e 's%^\(L_opts="-L\)\./\(.*\)$%\1${prefix}/\2%' bin/libpng-config 7z a libpng-1.2.44-bin.7z bin/*.dll 7z a libpng-dev-1.2.44.7z bin/libpng12-config include/libpng12 lib/libpng12.* lib/pkgconfig/libpng12.pc
makefile.mingw に不備があって build ディレクトリーを掘ってビルドすると lib/pkgconfig/libpng12.pc が空になる。当該箇所を修正するか libpng.pc.in をコピーして書き換える。以下、 libpng12.pc の内容。参考まで。
prefix=/usr/xmingw/xmingw32/local/libs/lib exec_prefix=$(prefix) libdir=${exec_prefix}/lib includedir=${exec_prefix}/include/libpng12 Name: libpng Description: Loads and saves PNG files Version: 1.2.44 Libs: -L${libdir} -lpng12 Cflags: -I${includedir}
1.4.3 ではこのように。 1.2.44 とは scripts/pngwin.rc が異なります。
tar -jxf libpng-1.4.3.tar.bz2 cd libpng-1.4.3 # ディレクトリーを掘ってビルドする場合の問題に対処する。 sed -i.orig -e 's!cat \(scripts/libpng.pc.in \)!cat $(SRCDIR)/\1!' scripts/makefile.mingw mkdir target mkdir build cd build ${XMINGW}/cross windres ../scripts/pngwin.rc pngwin.rc.o ${XMINGW}/cross make -f ../scripts/makefile.mingw SRCDIR="${PWD}/.." DESTDIR="${PWD}/../target" prefix="." SHAREDLIB="libpng14-14.dll" CFLAGS="-O2 -mtune=pentium4 -msse -mno-sse2 -funroll-loops -fomit-frame-pointer -pipe -ffast-math -I${XLIBRARY}/lib/include -DPNG_DEBUG=5" MINGW_LDFLAGS="-L${XLIBRARY}/lib/lib -Wl,${PWD}/pngwin.rc.o -Wl,-s" install > make.log 2>&1 cd ../target. # libpng.pc の内容を書き換える。 sed -i.orig -e "s%^\(prefix=\).*\$%\\1${XLIBRARY}/lib%" -e 's%^\(exec_prefix=\)\.$%\1${prefix}%' -e 's%^\(libdir=\)\./%\1${exec_prefix}/%' -e 's%^\(includedir=\)\./%\1${prefix}/%' lib/pkgconfig/libpng.pc # libpng-config の内容を書き換える。 sed -i.orig -e "s%^\(prefix=\)\".*\"\$%\\1\"${XLIBRARY}/lib\"%" -e 's%^\(I_opts="-I\)\./\(.*\)$%\1${prefix}/\2%' -e 's%^\(L_opts="-L\)\./\(.*\)$%\1${prefix}/\2%' bin/libpng-config 7z a libpng-1.4.3-bin.7z bin/*.dll 7z a libpng-dev-1.4.3.7z bin/libpng14-config include/libpng14 lib/libpng14.* lib/pkgconfig/libpng14.pc
libjpeg-7-2 のビルド。 dll のファイル名は libjpeg-7.dll になります。
# Ring Server Project # http://www.ring.gr.jp/archives/linux/debian/debian/pool/main/libj/libjpeg7/ # libjpeg7_7.orig.tar.gz # libjpeg7_7-2.diff.gz tar -zxf libjpeg7_7.orig.tar.gz cd jpeg-7 zcat ../libjpeg7_7-2.diff.gz | patch mkdir target mkdir build cd build ${XMINGW}/cross-ppconfigure --prefix=${PWD}/../target ${XMINGW}/cross make CFLAGS="-O2 -mtune=pentium4 -msse -mno-sse2 -pipe -fomit-frame-pointer -ffast-math" LDFLAGS="-s" install >make.log 2>&1 cd ../target 7z a libjpeg-7-2-bin.7z bin/*.dll 7z a libjpeg-7-2-tools.7z bin/*.exe share/man/man1 7z a libjpeg-dev-7-2.7z include lib/*.a
libjpeg-8b のビルド。 dll のファイル名は libjpeg-8.dll になります。
# Independent JPEG Group # http://www.ijg.org/ # jpegsrc.v8b.tar.gz # license: libjpeg tar -zxf jpegsrc.v8b.tar.gz cd jpeg-8b mkdir target mkdir build cd build ${XMINGW}/cross-ppconfigure --prefix=${PWD}/../target ${XMINGW}/cross make CFLAGS="-O2 -mtune=pentium4 -msse -mno-sse2 -pipe -fomit-frame-pointer -ffast-math" LDFLAGS="-s" install >make.log 2>&1 cd ../target 7z a libjpeg-8b-bin.7z bin/*.dll 7z a libjpeg-8b-tools.7z bin/*.exe share/man/man1 7z a libjpeg-dev-8b.7z include lib/*.a
# LibTIFF - TIFF Library and Utilities # http://www.remotesensing.org/libtiff/ # tiff-3.9.4.tar.gz # license: libtiff # opt: libjpeg, zlib tar -zxf tiff-3.9.4.tar.gz cd tiff-3.9.4 mkdir target mkdir build_ cd build_ # --disable-rpath しても一部(?)で libtool に -rpath を渡している... ${XMINGW}/cross-ppconfigure --prefix=${PWD}/../target --enable-shared --disable-rpath --without-x --with-zlib-include-dir=${XLOCAL}/libs/lib/include --with-zlib-lib-dir=${XLOCAL}/libs/lib/lib --with-jpeg-include-dir==${XLOCAL}/libs/lib/include --with-jpeg-lib-dir=${XLOCAL}/libs/lib/lib bash ${XMINGW}/replibtool.sh ${XMINGW}/cross make CFLAGS="-O2 -mtune=pentium4 -msse -mno-sse2 -pipe -fomit-frame-pointer -ffast-math" CXXFLAGS="-O2 -mtune=pentium4 -msse -mno-sse2 -pipe -fomit-frame-pointer -ffast-math" LDFLAGS="-L${XLOCAL}/libs/lib/lib -s" LIBS="-ljpeg -lzdll" install >make.log 2>&1 cd ../target 7z a tiff-3.9.4-bin.7z bin/*.dll 7z a tiff-3.9.4-tools.7z bin/*.exe share/man/man1 7z a tiff-dev-3.9.4.7z include lib/*.a share/man/man3 share/doc
configure の結果。
Libtiff is now configured for i386-pc-mingw32 Installation directory: /usr/xmingw/xmingw32/local/src/libs/pic/tiff-3.9.4/build_/../target Documentation directory: ${prefix}/share/doc/tiff-3.9.4 C compiler: /usr/bin/i586-mingw32msvc-cc -std=gnu99 -g -O2 -Wall -W C++ compiler: /usr/bin/i586-mingw32msvc-g++ -g -O2 Enable runtime linker paths: no Support Microsoft Document Imaging: yes Support for internal codecs: CCITT Group 3 & 4 algorithms: yes Macintosh PackBits algorithm: yes LZW algorithm: yes ThunderScan 4-bit RLE algorithm: yes NeXT 2-bit RLE algorithm: yes LogLuv high dynamic range encoding: yes Support for external codecs: ZLIB support: yes Pixar log-format algorithm: yes JPEG support: yes Old JPEG support: yes ISO JBIG support: no C++ support: yes OpenGL support: no
static と shared で Makefile を使い分けます。 Makefile はそれぞれ用意されています。ここで扱う Makefile は debian パッチを当てているのでオリジナルとは少し異なります。
static は Makefile 、 shared は Makefile-libbz2_so でビルドします。 shared は dll のみ作成します。コマンドの作成やインストール ターゲットは static の Makefile に記述されています。つぎに述べる手順は shared をビルドしたのち static をビルドしています。パッチを含むため長くなっています。
# bzip2 : Home # http://www.bzip.org/ # bzip2-1.0.5.tar.gz # license: bzip2 # Ring Server Project # http://www.ring.gr.jp/archives/linux/debian/debian/pool/main/b/bzip2/ # bzip2_1.0.5-4.diff.gz tar -zxf bzip2-1.0.5.tar.gz cd bzip2-1.0.5 zcat ../bzip2_1.0.5-4.diff.gz | patch -p 1 # bzip2.c の sys\stat.h を sys/stat.h に置き換える。 sed -i.orig -e 's!sys\\stat!sys/stat!' bzip2.c # bzlib.h の WINAPI を DECLSPEC_EXPORT に置き換える。 sed -i.orig -e 's/WINAPI/DECLSPEC_EXPORT/' bzlib.h # mingw のために Makefile, Makefile-libbz2_so を書き換えます。以下、パッチです。 patch -p 1 << \EOF --- bzip2-1.0.5.orig/Makefile +++ bzip2-1.0.5/Makefile @@ -37,13 +37,15 @@ decompress.o \ bzlib.o -all: libbz2.a bzip2 bzip2recover # test +EXEEXT=.exe -bzip2: libbz2.so bzip2.o - $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2 bzip2.o -L. -lbz2 +all: libbz2.a bzip2$(EXEEXT) bzip2recover$(EXEEXT) # test -bzip2recover: bzip2recover.o - $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2recover bzip2recover.o +bzip2$(EXEEXT): libbz2.a bzip2.o + $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2$(EXEEXT) bzip2.o -L. -lbz2 + +bzip2recover$(EXEEXT): bzip2recover.o + $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2recover$(EXEEXT) bzip2recover.o libbz2.a: $(OBJS) rm -f libbz2.a @@ -71,7 +73,7 @@ $(CC) $(CFLAGS) -D_REENTRANT -o $@ -c $< check: test -test: bzip2 +test: bzip2$(EXEEXT) @cat words1 LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH \ ./bzip2 -1 < sample1.ref > sample1.rb2 @@ -93,20 +95,20 @@ cmp sample3.tst sample3.ref @cat words3 -install: bzip2 bzip2recover libbz2.a +install: bzip2$(EXEEXT) bzip2recover$(EXEEXT) libbz2.a if ( test ! -d $(PREFIX)/bin ) ; then mkdir -p $(PREFIX)/bin ; fi if ( test ! -d $(PREFIX)/lib ) ; then mkdir -p $(PREFIX)/lib ; fi if ( test ! -d $(PREFIX)/man ) ; then mkdir -p $(PREFIX)/man ; fi if ( test ! -d $(PREFIX)/man/man1 ) ; then mkdir -p $(PREFIX)/man/man1 ; fi if ( test ! -d $(PREFIX)/include ) ; then mkdir -p $(PREFIX)/include ; fi - cp -f bzip2 $(PREFIX)/bin/bzip2 - ln $(PREFIX)/bin/bzip2 $(PREFIX)/bin/bunzip2 - ln $(PREFIX)/bin/bzip2 $(PREFIX)/bin/bzcat - cp -f bzip2recover $(PREFIX)/bin/bzip2recover - chmod a+x $(PREFIX)/bin/bzip2 - chmod a+x $(PREFIX)/bin/bunzip2 - chmod a+x $(PREFIX)/bin/bzcat - chmod a+x $(PREFIX)/bin/bzip2recover + cp -f bzip2$(EXEEXT) $(PREFIX)/bin/bzip2$(EXEEXT) + ln $(PREFIX)/bin/bzip2$(EXEEXT) $(PREFIX)/bin/bunzip2$(EXEEXT) + ln $(PREFIX)/bin/bzip2$(EXEEXT) $(PREFIX)/bin/bzcat$(EXEEXT) + cp -f bzip2recover$(EXEEXT) $(PREFIX)/bin/bzip2recover$(EXEEXT) + chmod a+x $(PREFIX)/bin/bzip2$(EXEEXT) + chmod a+x $(PREFIX)/bin/bunzip2$(EXEEXT) + chmod a+x $(PREFIX)/bin/bzcat$(EXEEXT) + chmod a+x $(PREFIX)/bin/bzip2recover$(EXEEXT) cp -f bzip2.1 $(PREFIX)/man/man1 chmod a+r $(PREFIX)/man/man1/bzip2.1 cp -f bzlib.h $(PREFIX)/include @@ -136,7 +138,7 @@ echo ".so man1/bzdiff.1" > $(PREFIX)/man/man1/bzcmp.1 clean: - rm -f *.o *.sho libbz2.a libbz2.so* bzip2 bzip2recover \ + rm -f *.o *.sho libbz2.a libbz2.so* bzip2$(EXEEXT) bzip2recover$(EXEEXT) \ sample1.rb2 sample2.rb2 sample3.rb2 \ sample1.tst sample2.tst sample3.tst EOF patch -p 1 << \EOF --- bzip2-1.0.5.orig/Makefile-libbz2_so +++ bzip2-1.0.5/Makefile-libbz2_so @@ -35,8 +35,8 @@ bzlib.o all: $(OBJS) - $(CC) -shared -Wl,-soname -Wl,libbz2.so.1.0 -o libbz2.so.1.0.4 $(OBJS) - $(CC) $(CFLAGS) -o bzip2-shared bzip2.c libbz2.so.1.0.4 + $(CC) -shared -Wl,--out-implib -Wl,libbz2.dll.a -o bz2-1.dll $(OBJS) + $(CC) $(CFLAGS) -o bzip2-shared.exe bzip2.c libbz2.dll.a rm -f libbz2.so.1.0 ln -s libbz2.so.1.0.4 libbz2.so.1.0 EOF # shared のビルド。 ${XMINGW}/cross make -f Makefile-libbz2_so CFLAGS="-O2 -mtune=pentium4 -msse -mno-sse2 -pipe -fomit-frame-pointer -ffast-math -D_FILE_OFFSET_BITS=64" LDFALGS="-Wl,-s" > make.dll.log 2>&1 # 続けて static をビルドするため *.o を削除する。 rm *.o # static のビルド。 ${XMINGW}/cross make CFLAGS="-O2 -mtune=pentium4 -msse -mno-sse2 -pipe -fomit-frame-pointer -ffast-math -D_FILE_OFFSET_BITS=64" LDFALGS="-Wl,-s" > make.log 2>&1 mkdir target ${XMINGW}/cross make install PREFIX=${PWD}/target > install.log 2>&1 cp bz2-1.dll target/bin/. cp libbz2.dll.a target/lib/. cd target 7z a bzip2-1.0.5-bin.7z bin/*.dll 7z a bzip2-1.0.5-tools.7z bin/*.exe bin/bz{cmp,diff,egrep,exe,fgrep,grep,less,more} man 7z a bzip2-dev-1.0.5.7z include lib/*.a
debain patch を適用していない 1.0.6 のパッチ。
# Makefile, Makefile-libbz2_so を書き換える。以下、パッチです。 patch -p 1 << \EOF --- bzip2-1.0.6.orig/Makefile +++ bzip2-1.0.6/Makefile @@ -26,6 +26,8 @@ # Where you want it installed when you do 'make install' PREFIX=/usr/local +EXEEXT=.exe + OBJS= blocksort.o \ huffman.o \ @@ -35,13 +37,13 @@ decompress.o \ bzlib.o -all: libbz2.a bzip2 bzip2recover test +all: libbz2.a bzip2$(EXEEXT) bzip2recover$(EXEEXT) # test -bzip2: libbz2.a bzip2.o - $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2 bzip2.o -L. -lbz2 +bzip2$(EXEEXT): libbz2.a bzip2.o + $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2$(EXEEXT) bzip2.o -L. -lbz2 -bzip2recover: bzip2recover.o - $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2recover bzip2recover.o +bzip2recover$(EXEEXT): bzip2recover.o + $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2recover$(EXEEXT) bzip2recover.o libbz2.a: $(OBJS) rm -f libbz2.a @@ -53,7 +55,7 @@ fi check: test -test: bzip2 +test: bzip2$(EXEEXT) @cat words1 ./bzip2 -1 < sample1.ref > sample1.rb2 ./bzip2 -2 < sample2.ref > sample2.rb2 @@ -69,20 +71,21 @@ cmp sample3.tst sample3.ref @cat words3 -install: bzip2 bzip2recover +install: bzip2$(EXEEXT) bzip2recover$(EXEEXT) libbz2.a if ( test ! -d $(PREFIX)/bin ) ; then mkdir -p $(PREFIX)/bin ; fi if ( test ! -d $(PREFIX)/lib ) ; then mkdir -p $(PREFIX)/lib ; fi if ( test ! -d $(PREFIX)/man ) ; then mkdir -p $(PREFIX)/man ; fi if ( test ! -d $(PREFIX)/man/man1 ) ; then mkdir -p $(PREFIX)/man/man1 ; fi if ( test ! -d $(PREFIX)/include ) ; then mkdir -p $(PREFIX)/include ; fi - cp -f bzip2 $(PREFIX)/bin/bzip2 - cp -f bzip2 $(PREFIX)/bin/bunzip2 - cp -f bzip2 $(PREFIX)/bin/bzcat - cp -f bzip2recover $(PREFIX)/bin/bzip2recover - chmod a+x $(PREFIX)/bin/bzip2 - chmod a+x $(PREFIX)/bin/bunzip2 - chmod a+x $(PREFIX)/bin/bzcat - chmod a+x $(PREFIX)/bin/bzip2recover + + cp -f bzip2$(EXEEXT) $(PREFIX)/bin/bzip2$(EXEEXT) + ln $(PREFIX)/bin/bzip2$(EXEEXT) $(PREFIX)/bin/bunzip2$(EXEEXT) + ln $(PREFIX)/bin/bzip2$(EXEEXT) $(PREFIX)/bin/bzcat$(EXEEXT) + cp -f bzip2recover$(EXEEXT) $(PREFIX)/bin/bzip2recover$(EXEEXT) + chmod a+x $(PREFIX)/bin/bzip2$(EXEEXT) + chmod a+x $(PREFIX)/bin/bunzip2$(EXEEXT) + chmod a+x $(PREFIX)/bin/bzcat$(EXEEXT) + chmod a+x $(PREFIX)/bin/bzip2recover$(EXEEXT) cp -f bzip2.1 $(PREFIX)/man/man1 chmod a+r $(PREFIX)/man/man1/bzip2.1 cp -f bzlib.h $(PREFIX)/include @@ -109,7 +112,7 @@ echo ".so man1/bzdiff.1" > $(PREFIX)/man/man1/bzcmp.1 clean: - rm -f *.o libbz2.a bzip2 bzip2recover \ + rm -f *.o *.sho libbz2.a libbz2.so* bzip2$(EXEEXT) bzip2recover$(EXEEXT) \ sample1.rb2 sample2.rb2 sample3.rb2 \ sample1.tst sample2.tst sample3.tst --- bzip2-1.0.6.orig/Makefile-libbz2_so +++ bzip2-1.0.6/Makefile-libbz2_so @@ -35,8 +35,8 @@ bzlib.o all: $(OBJS) - $(CC) -shared -Wl,-soname -Wl,libbz2.so.1.0 -o libbz2.so.1.0.6 $(OBJS) - $(CC) $(CFLAGS) -o bzip2-shared bzip2.c libbz2.so.1.0.6 + $(CC) -shared -Wl,--out-implib -Wl,libbz2.dll.a -o bz2-1.dll $(OBJS) + $(CC) $(CFLAGS) -o bzip2-shared.exe bzip2.c libbz2.dll.a rm -f libbz2.so.1.0 ln -s libbz2.so.1.0.6 libbz2.so.1.0 EOF
素直にビルドすると dll 名は libcharset-1.dll, libiconv-2.dll になります。しかし gimp 2.6.10 の windows binary では iconv.dll になっており、互換性がありません。ここでは後者に合わせるためパッチをあてています。具体的には libtool の soname_spec を置き換えています。生成されたばかりの libtool の soname_spec は次のようになっています。
soname_spec="\${libname}\`echo \${release} | \$SED -e s/[.]/-/g\`\${versuffix}\${shared_ext}"
次のように置き換えています。
soname_spec="\`echo \${libname} | \$SED -e s/^lib//\`\${shared_ext}"
# libiconv - GNU Project - Free Software Foundation (FSF) # http://www.gnu.org/software/libiconv/ # libiconv-1.13.1.tar.gz # license: GPL v3, LGPL v2 ( lib ) tar -zxf libiconv-1.13.1.tar.gz cd libiconv-1.13.1 mkdir target mkdir build cd build ${XMINGW}/cross-ppconfigure --prefix=${PWD}/../target --enable-extra-encodings --with-libintl-prefix=${XLIBRARY}/libs # dll 名を iconv.dll, charset.dll にするために libtool を書き換える。 sed -i.orig -e 's#^soname_spec=.*#soname_spec="\\\`echo \\\${libname} | \\\$SED -e s/^lib//\\\`\\\${shared_ext}"#' libtool libcharset/libtool ${XMINGW}/cross make CFLAGS="-O2 -mtune=pentium4 -msse -mno-sse2 -pipe -fomit-frame-pointer -ffast-math" > make.log 2>&1 ${XMINGW}/cross make install > install.log 2>&1 cd ../target 7z a libiconv-1.13.1-bin.7z bin/*.dll lib/charset.alias 7z a libiconv-1.13.1-tools.7z bin/*.exe share/man/man1 7z a libiconv-dev-1.13.1.7z include lib/*.a share/doc share/man/man3
# The XML C parser and toolkit of Gnome # http://xmlsoft.org/ # libxml2-2.7.7.tar.gz # license: libxml2 # opt: iconv, pthread, zlib tar -zxf libxml2-2.7.7.tar.gz cd libxml2-2.7.7 mkdir target mkdir build cd build ${XMINGW}/cross-ppconfigure --prefix=${PWD}/../target --enable-shared --disable-static --without-python --without-pthread CFLAGS="-O2 -mtune=pentium4 -msse -mno-sse2 -pipe -fomit-frame-pointer -ffast-math `${XMINGW}/cross --cflags`" LDFLAGS="`${XMINGW}/cross --ldflags` -s" # zlib の gzopen64 をリンクしようとして失敗している。 shared にはない。 static には存在する。 # gtk+-bundle の zlib.h ( zlib 1.2.4 ) が腐っている模様。 1.2.5 では問題ない。 # config.h の HAVE_LIBPTHREAD, HAVE_PTHREAD_H を寝かせる。 pthread は使わない。 sed -i.orig -e 's!^\(#define HAVE_\(LIB\|\)PTHREAD\(_H\|\)\) /\*\*/!/* \1 */!' # Makefile を書き換える。 testThreads をはずして testThreadsWin32 に変える。 # testThreads_SOURCES と am_testThreads_OBJECTS の変更。 sed -i.orig -e 's!\(\(testThreads_SOURCES\|am_testThreads_OBJECTS\)\s\+=\s\+testThreads\)\.!\1Win32.!' Makefile ${XMINGW}/cross make > make.log 2>&1 ${XMINGW}/cross-make install > install.log 2>&1 cd ../target sed -i.orig -e 's/-lpthread//' lib/pkgconfig/libxml-2.0.pc 7z a libxml2-2.7.7-bin.7z bin/*.dll 7z a libxml2-2.7.7-tools.7z bin/*.exe share/man/man1/xml{catalog,lint}.1 7z a libxml2-dev-2.7.7.7z bin/*-config include lib/*.a lib/xml2Conf.sh lib/pkgconfig share/man/man1/xml2-config.1 share/man/man3 share/{aclocal,doc,gtk-doc}
dll 名は次のようになります。
- libasprintf-0.dll
- libgettextlib-0-18-1.dll
- libgettextpo-0.dll
- libgettextsrc-0-18-1.dll
- libintl-8.dll
gettext 0.18.1.1 は moopp の問題で c++ から c 関数をリンクできません。パッチを当てます。パッチをあてたあと念のため chmod u+x しています。
# http://ftp.gnu.org/pub/gnu/gettext/ # gettext-0.18.1.1.tar.gz # license: GPL v3 # opt: glib2, libacl, libcroco, libiconv, libxml2, tar -zxf gettext-0.18.1.1.tar.gz cd gettext-0.18.1.1 patch -p 1 << \EOF --- gettext-0.18.1.1.orig/build-aux/moopp +++ gettext-0.18.1.1/build-aux/moopp @@ -516,7 +516,13 @@ echo "#endif" echo echo "/* Functions that invoke the methods. */" + echo "#ifdef __cplusplus" + echo "extern \"C\" {" + echo "#endif" echo "$all_methods" | sed -e "$sed_remove_empty_lines" -e 's/\([^A-Za-z_0-9]\)\([A-Za-z_0-9][A-Za-z_0-9]*\)[ ]*([^,)]*/\1'"${main_classname}_"'\2 ('"${main_classname}_t first_arg"'/' -e 's,^,extern ,' -e 's,$,;,' + echo "#ifdef __cplusplus" + echo "}" + echo "#endif" echo # Now come the implementation details. echo "/* Type representing an implementation of ${main_classname}_t. */" EOF chmod u+x build-aux/moopp mkdir target mkdir build cd build XLIBRARY_SET=${XLIBRARY}/gimp_build_set ${XMINGW}/cross-ppconfigure --prefix=${PWD}/../target --enable-shared --disable-static --disable-java --disable-native-java --enable-threads=win32 --disable-rpath --enable-relocatable --disable-openmp --disable-largefile CFLAGS="`${XMINGW}/cross --cflags`" LDFLAGS="`${XMINGW}/cross --ldflags` -s" # GNULIB_MEMCHR=1 では rpl_memchr にリンクしようとするが、存在しない関数。 # GNULIB_MEMCHR=0 にする。 CFLAGS="-O2 -mtune=pentium4 -msse -mno-sse2 -pipe -fomit-frame-pointer -ffast-math `${XMINGW}/cross --cflags`" && ${XMINGW}/cross make CFLAGS="${CFLAGS}" CXXFLAGS="${CFLAGS}" GNULIB_MEMCHR=0 > make.log 2>&1 ${XMINGW}/cross make install > install.log 2>&1 cd ../target 7z a gettext-0.18.1.1-bin.7z bin/*.dll 7z a gettext-0.18.1.1-tools.7z bin/*.exe bin/{autopoint,gettext.sh,gettextize} lib/gettext share/locale share/man/man1 7z a gettext-dev-0.18.1.1.7z include lib/*.a share/{aclocal,doc,gettext,info} share/man/man3
dll 名は MinGW の流儀にあわせて libopenjpeg-2.dll にしました。エクスポートした関数名も MinGW にあわせています。そのため公式の *-win32.zip とは互換性がありません。公式との表面的な互換性を求めるなら、 SHAREDLIB を $(TARGET).$(SHREXT) に、 OPJ_CALLCONV を __stdcall に設定しなおしてください。
# OpenJPEG library : an open source JPEG 2000 codec # http://www.openjpeg.org/ # openjpeg_v1_3.tar.gz # license: openjpeg tar -zxf openjpeg_v1_3.tar.gz cd OpenJPEG_v1_3 patch -p1 << \EOF --- OpenJPEG_v1_3.orig/libopenjpeg/openjpeg.h +++ OpenJPEG_v1_3/libopenjpeg/openjpeg.h @@ -44,7 +44,7 @@ #define OPJ_API #define OPJ_CALLCONV #else -#define OPJ_CALLCONV __stdcall +#define OPJ_CALLCONV __declspec(dllexport) /* The following ifdef block is the standard way of creating macros which make exporting from a DLL simpler. All files within this DLL are compiled with the OPJ_EXPORTS EOF patch -p 1 << \EOF --- OpenJPEG_v1_3.orig/Makefile +++ OpenJPEG_v1_3/Makefile @@ -12,6 +12,7 @@ AR = ar PREFIX = /usr +INSTALL_BINDIR = $(PREFIX)/bin INSTALL_LIBDIR = $(PREFIX)/lib INSTALL_INCLUDE = $(PREFIX)/include @@ -25,9 +26,10 @@ CFLAGS = $(COMPILERFLAGS) $(INCLUDE) TARGET = openjpeg +SHREXT=dll STATICLIB = lib$(TARGET).a -SHAREDLIB = lib$(TARGET)-$(VER_MAJOR).$(VER_MINOR).so -LIBNAME = lib$(TARGET).so.$(VER_MAJOR) +SHAREDLIB = lib$(TARGET)-$(VER_MAJOR).$(SHREXT) +LIBNAME = lib$(TARGET).$(SHREXT).$(VER_MAJOR) @@ -54,16 +56,17 @@ $(AR) r $@ $(MODULES) $(SHAREDLIB): $(MODULES) - $(CC) -s -shared -Wl,-soname,$(LIBNAME) -o $@ $(MODULES) $(LIBRARIES) + $(CC) -s -shared -Wl,-soname,$(LIBNAME) -o $@ -Wl,--out-implib -Wl,lib$(TARGET).$(SHREXT).a $(MODULES) $(LIBRARIES) install: OpenJPEG - install -d '$(DESTDIR)$(INSTALL_LIBDIR)' '$(DESTDIR)$(INSTALL_INCLUDE)' - install -m 644 -o root -g root $(STATICLIB) '$(DESTDIR)$(INSTALL_LIBDIR)' + install -d '$(DESTDIR)$(INSTALL_BINDIR)' '$(DESTDIR)$(INSTALL_LIBDIR)' '$(DESTDIR)$(INSTALL_INCLUDE)' + install -m 644 $(STATICLIB) '$(DESTDIR)$(INSTALL_LIBDIR)' ranlib '$(DESTDIR)$(INSTALL_LIBDIR)/$(STATICLIB)' - install -m 755 -o root -g root $(SHAREDLIB) '$(DESTDIR)$(INSTALL_LIBDIR)' - ln -sf $(SHAREDLIB) '$(DESTDIR)$(INSTALL_LIBDIR)/$(LIBNAME)' - install -m 644 -o root -g root libopenjpeg/openjpeg.h '$(DESTDIR)$(INSTALL_INCLUDE)' - -ldconfig + install -m 644 lib$(TARGET).$(SHREXT).a '$(DESTDIR)$(INSTALL_LIBDIR)' + install -m 755 $(SHAREDLIB) '$(DESTDIR)$(INSTALL_BINDIR)' +# ln -sf $(SHAREDLIB) '$(DESTDIR)$(INSTALL_LIBDIR)/$(LIBNAME)' + install -m 644 libopenjpeg/openjpeg.h '$(DESTDIR)$(INSTALL_INCLUDE)' +# -ldconfig clean: rm -rf core dist/ u2dtmp* $(MODULES) $(STATICLIB) $(SHAREDLIB) $(LIBNAME) EOF ${XMINGW}/cross make COMPILERFLAGS="-O2 -mtune=pentium4 -msse -mno-sse2 -pipe -fomit-frame-pointer -ffast-math -Wall -std=c99 -DWIN32" > make.log 2>&1 mkdir target ${XMINGW}/cross make PREFIX="" DESTDIR="${PWD}/target" install > install.log 2>&1 cd target 7z a openjpeg-1.3-bin.7z bin/*.dll 7z a openjpeg-dev-1.3.7z include lib/*.a
dll 名は freetype6.dll になります。 libtool の soname_spec を書き換えています。通常は libfreetype-6.dll です。
# The FreeType Project # http://freetype.sourceforge.net/ # freetype-2.4.4.tar.bz2 # opt: zlib tar -jxf freetype-2.4.4.tar.bz2 cd freetype-2.4.4 # debian パッチを適用する場合。今回は必要ない。 # zcat ../freetype_2.4.2-2.diff.gz | patch -p 1 # for f in debian/patches-freetype/*.patch; do patch -i $f -p1; done mkdir target mkdir build cd build # make log を見ると build-cc に CFLAGS を渡してないが、念のため。 ${XMINGW}/cross-ppconfigure --prefix=${PWD}/../target CC="gcc -mtune=pentium4 -msse -mno-sse2" CC_BUILD=build-cc CFLAGS="-O2 -pipe -fomit-frame-pointer -ffast-math `${XMINGW}/cross --cflags`" LDFLAGS="-s `${XMINGW}/cross --ldflags`" # freetype6.dll の形にするため書き換える。 sed -i.orig -e 's#^soname_spec=.*#soname_spec="\\\`echo "\\\${libname}\\\${versuffix}" | \\\$SED -e "s/^lib//" -e "s/-//"\\\`\\\${shared_ext}"#' libtool ${XMINGW}/cross make > make.log 2>&1 ${XMINGW}/cross make install > install.log 2>&1 cd ../target/ sed -i.orig -e 's#^\(prefix=\).*#\1\`dirname \$0\`/..#' bin/freetype-config 7z a freetype-2.4.4-bin.7z bin/*.dll 7z a freetype-dev-2.4.4.7z bin/*-config include lib/*.a lib/pkgconfig share/aclocal
dll 名は libfontconfig-1.dll になります。
# fontconfig.org - FrontPage # http://www.fontconfig.org/wiki/ # fontconfig-2.8.0.tar.gz # license: fontconfig # deps: expat or libxml2 # opt: freetype, iconv tar -zxf fontconfig-2.8.0.tar.gz cd fontconfig-2.8.0 mkdir target mkdir build cd build # target が x86 で build が x86_64 のため CFLAGS の -mtune が引っかかる。 # そのため CC にアーキテクチャー系コンパイル オプションを入れている。 ${XMINGW}/cross-ppconfigure --prefix=${PWD}/../target --enable-libxml2 --with-arch=mingw32 CFLAGS="-O2 -pipe -fomit-frame-pointer -ffast-math `${XMINGW}/cross --cflags --ldflags`" CC="gcc -mtune=pentium4 -msse -mno-sse2" CC_FOR_BUILD="build-cc" ${XMINGW}/cross make > make.log 2>&1 ${XMINGW}/cross make install > install.log 2>&1 cd ../target 7z a fontconfig-2.8.0-bin.7z bin/*.dll etc 7z a fontconfig-2.8.0-tools.7z bin/*.exe share/man/man1 7z a fontconfig-dev-2.8.0.7z include lib/*.{a,def} lib/pkgconfig share/doc share/man/man{3,5}
etc/fonts/fonts.conf が設定ファイルです。フォントキャッシュは規定では次の場所を参照します。
<!-- Font cache directory list --> <cachedir>WINDOWSTEMPDIR_FONTCONFIG_CACHE</cachedir> <cachedir>~/.fontconfig</cachedir>
通常は %TEMP% に作られます。 WINDOWSTEMPDIR_FONTCONFIG_CACHE がその設定です。 WINDOWSTEMPDIR_FONTCONFIG_CACHE を削除すると %HOME%/.fontconfig に作成されます。
1.19 の例。 dll 名は liblcms-1.dll です。
# Little CMS ? Great color at small footprint # http://www.littlecms.com/ # lcms-1.19.tar.gz # license: Little CMS # deps: libjpeg, libtiff, zlib tar -zxf lcms-1.19.tar.gz cd lcms-1.19 mkdir target mkdir build cd build ${XMINGW}/cross-ppconfigure --prefix=${PWD}/../target CFLAGS="-O2 -mtune=pentium4 -msse -mno-sse2 -pipe -fomit-frame-pointer -ffast-math `${XMINGW}/cross --cflags`" LDFLAGS=" `${XMINGW}/cross --ldflags` -Wl,-s" # libtool を書き換える。 dll を作ってくれないので。 # allow_undefined_flag を supported に、 always_export_symbols を yes にする。 bash ${XMINGW}/replibtool.sh # 存在する場合。 mv ../include/icc34.h ../include/icc34.h.off ${XMINGW}/cross make install > install.log 2>&1 cd ../target 7z a lcms-1.19-bin.7z bin/*.dll 7z a lcms-1.19-tools.7z bin/*.exe share/man/man1 7z a lcms-dev-1.19.7z include lib/*.a lib/pkgconfig
2.0a の例。 dll 名は liblcms2-2.dll になります。
# Little CMS ? Great color at small footprint # http://www.littlecms.com/ # lcms2-2.0a.tar.gz # deps: libjpeg, libtiff, zlib tar -zxf lcms2-2.0a.tar.gz cd lcms-2.0 mkdir target mkdir build cd build ${XMINGW}/cross-ppconfigure --prefix=${PWD}/../target CFLAGS="-O2 -mtune=pentium4 -msse -mno-sse2 -pipe -fomit-frame-pointer -ffast-math `${XMINGW}/cross --cflags`" LDFLAGS=" `${XMINGW}/cross --ldflags` -Wl,-s" # libtool を書き換える。 dll を作ってくれないので。 # allow_undefined_flag を supported に、 always_export_symbols を yes にする。 ${XMINGW}/cross make install > install.log 2>&1 cd ../target 7z a lcms2-2.0a-bin.7z bin/*.dll 7z a lcms2-2.0a-tools.7z bin/*.exe share/man/man1 7z a lcms2-dev-2.0a.7z include lib/*.a lib/pkgconfig
# libgsf - Free Software Directory - Free Software Foundation # http://directory.fsf.org/project/libgsf/ # libgsf-1.14.18.tar.bz2 # license: GPL v2, LGPLv2.1 ( lib ) # opt: gettext, glib, libxml2, bzip2, zlib tar -jxf libgsf-1.14.18.tar.bz2 cd libgsf-1.14.18 mkdir target mkdir build cd build ${XMINGW}/cross-ppconfigure --prefix=${PWD}/../target --enable-shared --disable-static CFLAGS="-O2 -mtune=pentium4 -pipe -fomit-frame-pointer -ffast-math `${XMINGW}/cross --cflags --ldflags`" ${XMINGW}/cross make > make.log 2>&1 ${XMINGW}/cross make install > install.log 2>&1 cd ../target 7z a libgsf-1.14.18-bin.7z bin/*.dll 7z a libgsf-1.14.18-tools.7z bin/*.exe etc share/locale share/man 7z a libgsf-dev-1.14.18.7z include lib/*.a lib/pkgconfig share/gtk-doc
# Libcroco, the CSS C toolkit for GNOME # http://www.freespiders.org/projects/libcroco/ # libcroco-0.6.2.tar.bz2 # license: GPL v2, LGPL v2 # deps: glib2, libxml2 tar -jxf libcroco-0.6.2.tar.bz2 cd libcroco-0.6.2 mkdir target mkdir build cd build ${XMINGW}/cross-ppconfigure --prefix=${PWD}/../target --enable-shared --disable-static CFLAGS="-O2 -mtune=pentium4 -msse -mno-sse2 -pipe -fomit-frame-pointer -ffast-math `${XMINGW}/cross --cflags`" LDFLAGS="-s" ${XMINGW}/cross make > make.log 2>&1 ${XMINGW}/cross make install > install.log 2>&1 cd ../target 7z a libcroco-0.6.2-bin.7z bin/*.dll 7z a libcroco-0.6.2-tools.7z bin/*.exe 7z a libcroco-dev-0.6.2.7z bin/*-config include lib/*.a lib/pkgconfig
# The libexif C EXIF library # http://libexif.sourceforge.net/ # libexif-0.6.19.tar.bz2 # license: LGPL v2.1 tar -jxf libexif-0.6.19.tar.bz2 cd libexif-0.6.19 mkdir target mkdir build cd build ${XMINGW}/cross-ppconfigure --prefix=${PWD}/../target --enable-shared --disable-static CFLAGS="-O2 -mtune=pentium4 -msse -mno-sse2 -pipe -fomit-frame-pointer -ffast-math `${XMINGW}/cross --cflags --ldflags`" LDFLAGS="-s" ${XMINGW}/cross make > make.log 2>&1 ${XMINGW}/cross make install > install.log 2>&1 cd ../target 7z a libexif-0.6.19-bin.7z bin/*.dll 7z a libexif-dev-0.6.19-bin.7z include lib/*.a lib/pkgconfig share
# Scalable Vector Graphics - librsvg # http://librsvg.sourceforge.net/ # librsvg-2.31.0.tar.bz2 # license: GPL v2, LGPL v2 tar -jxf librsvg-2.31.0.tar.bz2 cd librsvg-2.31.0 mkdir target mkdir build cd build ${XMINGW}/cross-ppconfigure --prefix=${PWD}/../target --enable-shared --disable-static CFLAGS="-O2 -mtune=pentium4 -msse -mno-sse2 -pipe -fomit-frame-pointer -ffast-math `${XMINGW}/cross --cflags --ldflags`" LDFLAGS="-s" ${XMINGW}/cross make > make.log 2>&1 mkdir -p ../target/etc/gtk-2.0 ${XMINGW}/cross make install > install.log 2>&1 cd ../target 7z a librsvg-2.31.0-bin.7z bin/*.dll `find lib -name \*.dll` share/pixmaps share/themes 7z a librsvg-2.31.0-tools.7z bin/*.exe bin/rsvg share/man/man1 7z a librsvg-dev-2.31.0-bin.7z include `find lib -name \*.a` lib/pkgconfig
configure する場合。 unmaintained と注記されているのが気になる。
# libmng | Download libmng software for free at SourceForge.net # http://sourceforge.net/projects/libmng/ # libmng-1.0.10.tar.bz2 # license: libmng # deps: zlib, libjpeg, little cms tar -jxf libmng-1.0.10.tar.bz2 cd libmng-1.0.10 # configure を作成する。 ./unmaintained/autogen.sh mkdir target XLIBRARY_SET=${XLIBRARY}/gimp_build_set ${XMINGW}/cross-configure --prefix=${PWD}/target --enable-shared --disable-static CFLAGS="-O2 -mtune=pentium4 -msse -mno-sse2 -pipe -fomit-frame-pointer -ffast-math `${XMINGW}/cross --cflags --ldflags`" LDFLAGS="-s" # libtool を書き換える。 dll を作ってくれないので。 # allow_undefined_flag を supported に、 always_export_symbols を yes にする。 bash ${XMINGW}/replibtool.sh ${XMINGW}/cross make > make.log 2>&1 ${XMINGW}/cross make install > install.log 2>&1 cd target 7z a libmng-1.0.10-bin.7z bin/*.dll 7z a libmng-dev-1.0.10.7z include lib/*.a share/man/man{3,5}
dll 名は libXpm-noX4.dll です。
# Browse GTK+ and GIMP installers for Windows Files on SourceForge.net # http://sourceforge.net/projects/gimp-win/files/ # mingw32-xpm-nox-4.2.0-4.15.src.rpm # license: libxpm bsdtar -zxf mingw32-xpm-nox-4.2.0-4.15.src.rpm tar -jxf xpm-nox-4.2.0.tar.bz2 patch -i xpm-nox-4.2.0-mingw.patch -p 0 cd xpm-nox-4.2.0 ${XMINGW}/cross make CFLAGS="-O2 -mtune=pentium4 -msse -mno-sse2 -pipe -fomit-frame-pointer -ffast-math" LDFLAGS="-s" > make.log 2>&1 mkdir target ${XMINGW}/cross make install prefix="${PWD}/target/" > install.log 2>&1 cd target 7z a libxpm-nox-4.2.0-bin.7z bin/*.dll 7z a libxpm-nox-4.2.0-tools.7z bin/*.exe share/man/man1 7z a libxpm-nox-dev-4.2.0.7z include lib/*.a
dll 名は libwmf-0-2-7.dll, libwmflite-0-2-7.dll になります。
configure が依存ライブラリ libpng のチェックで -lpng 決め打ちしているのでごまかしています。 configure.ac を書き換えるのが正しい修正ですが、修正には当該箇所をどこかの configure.ac からパクってくればよいと考えて触ってません。
# http://www.ring.gr.jp/archives/linux/debian/debian/pool/main/libw/libwmf/ # libwmf_0.2.8.4.orig.tar.gz # libwmf_0.2.8.4-7.debian.tar.gz # license: GPL v2 # deps: freetype2, glib, libjpeg, libpng, zlib # opt: expat or libxml tar -zxf libwmf_0.2.8.4.orig.tar.gz cd libwmf-0.2.8.4 tar -zxf ../libwmf_0.2.8.4-7.debian.tar.gz for f in debian/patches/*.patch; do patch -i $f -p1; done mkdir target mkdir build cd build # configure が -lpng 決め打ちで依存チェックしているのでごまかす。 # 下は libpng14 を設定している。場所は ${XLIBRARY}/lib mkdir libpng ln -s ${XLIBRARY}/lib/include/libpng14 libpng/include mkdir libpng/lib ln -s ${XLIBRARY}/lib/lib/libpng14.dll.a libpng/lib/libpng.dll.a XLIBRARY_SET=${XLIBRARY}/gimp_build_set ${XMINGW}/cross-ppconfigure --prefix=${PWD}/../target --with-libxml2 --without-expat --with-png=${PWD}/libpng --without-x --without-sys-gd --disable-gd CPPFLAGS=" `${XMINGW}/cross --cflags --ldflags`" CFLAGS="-O2 -mtune=pentium4 -msse -mno-sse2 -pipe -fomit-frame-pointer -ffast-math" LDFLAGS="-s" ${XMINGW}/cross make install > make.log 2>&1 cd ../target 7z a libwmf-0.2.8.4-7-bin.7z bin/*.dll share/libwmf `find lib -name \*.dll` 7z a libwmf-0.2.8.4-7-tools.7z bin/*.exe bin/libwmf-fontmap 7z a libwmf-dev-0.2.8.4-7.7z bin/libwmf-config include `find lib -name \*.a`
configure の結果。なぜ gd が有効に...
Support for X: no Support for GD: sys Support for JPEG though GD: yes Support for XML: libxml2 Documentation directory: /usr/xmingw/xmingw32/local/src/libs/pic/libwmf-0.2.8.4/build/../target/share/doc/libwmf Font directory: /usr/xmingw/xmingw32/local/src/libs/pic/libwmf-0.2.8.4/build/../target/share/libwmf/fonts System XML fontmap file: /usr/share/fonts/fontmap Non-system XML fontmap file: /usr/xmingw/xmingw32/local/src/libs/pic/libwmf-0.2.8.4/build/../target/share/libwmf/fonts/fontmap ghostscript fontmap file: /var/lib/defoma/gs.d/dirs/fonts/Fontmap ghostscript font directory: /var/lib/defoma/gs.d/dirs/fonts building gdk-pixbuf plug-in? yes
dll 名は次のようになります。
- libpoppler-5.dll
- libpoppler-glib-4.dll
# http://www.ring.gr.jp/archives/linux/debian/debian/pool/main/p/poppler/ # poppler_0.12.4.orig.tar.gz # poppler_0.12.4-1.1.diff.gz # deps: fontconfig, freetype2 # opt: abiword, cairo, glib, # libjpeg, libpng, little cms, openjpeg # qt, splash, zlib tar -zxf poppler_0.12.4.orig.tar.gz cd poppler-0.12.4 zcat ../poppler_0.12.4-1.1.diff.gz | patch -p 1 for f in debian/patches/*.patch; do patch -i $f -p1; done mkdir target mkdir build cd build XLIBRARY_SET=${XLIBRARY}/gimp_build_set # configure が -lpng 決め打ちで依存チェックしているのでごまかす。 # 下は libpng14 を設定している。場所は ${XLIBRARY}/lib mkdir libpng ln -s ${XLIBRARY}/lib/include/libpng14 libpng/include mkdir libpng/lib ln -s ${XLIBRARY}/lib/lib/libpng14.dll.a libpng/lib/libpng.dll.a ${XMINGW}/cross-ppconfigure --prefix="${PWD}/../target" --without-x CPPFLAGS="-I${PWD}/libpng/include `${XMINGW}/cross --cflags`" CFLAGS="-O2 -mtune=pentium4 -msse -mno-sse2 -pipe -fomit-frame-pointer -ffast-math" LDFLAGS="-s -L${PWD}/libpng/lib `${XMINGW}/cross --ldflags`" ${XMINGW}/cross make > make.log 2>&1 ${XMINGW}/cross make install > install.log 2>&1 cd ../target 7z a poppler-0.12.4-1-bin.7z bin/*.dll 7z a poppler-0.12.4-1-tools.7z bin/*.exe share/man/man1 7z a poppler-dev-0.12.4-1.7z include lib/*.a lib/pkgconfig share/gtk-doc
configure の結果。 zlib を有効にするには --enable-zlib します。ただし Warning: Using zlib is not totally safe の警告が出ます。
Building poppler with support for: splash output: yes cairo output: yes abiword output: yes qt wrapper: no qt4 wrapper: no glib wrapper: yes use GDK: yes use gtk-doc: no use libjpeg: yes use libpng: yes use zlib: no use libopenjpeg: no use cms: yes command line utils: yes Warning: Using libopenjpeg is recommended
libpoppler-5.dll が libxml2 をリンクしているのはなぜだろう...
dll 名は次のようになります。
- libpoppler-7.dll
- libpoppler-cpp-0.dll
- libpoppler-glib-5.dll
# Poppler # http://poppler.freedesktop.org/ # poppler-0.14.4.tar.gz # license: GPL v2 or commercial license # deps: fontconfig, freetype2 # opt: abiword-output, cairo, glib, # libjpeg, libpng, little cms, openjpeg # qt, zlib tar -zxf poppler-0.14.4.tar.gz cd poppler-0.14.4 # strdup, stricmp は string.h で宣言されているのだけれど、 # g++ -ansi すると無効化されてしまう。 sed -i.orig -e 's/^\( CXXFLAGS="$CXXFLAGS\) -ansi"$/\1"/' configure patch -p 1 << \EOF --- poppler-0.14.4.orig/goo/JpegWriter.cc +++ poppler-0.14.4/goo/JpegWriter.cc @@ -10,12 +10,11 @@ // //======================================================================== +#include "poppler/Error.h" #include "JpegWriter.h" #ifdef ENABLE_LIBJPEG -#include "poppler/Error.h" - void outputMessage(j_common_ptr cinfo) { char buffer[JMSG_LENGTH_MAX]; EOF # Makefile.am を書き換えるべき... patch -p 1 << \EOF --- poppler-0.14.4.orig/splash/Makefile.in +++ poppler-0.14.4/splash/Makefile.in @@ -319,6 +319,7 @@ INCLUDES = \ -I$(top_srcdir) \ -I$(top_srcdir)/goo \ + $(LIBPNG_CFLAGS) \ $(FREETYPE_CFLAGS) noinst_LTLIBRARIES = libsplash.la --- poppler-0.14.4.orig/utils/Makefile.in +++ poppler-0.14.4/utils/Makefile.in @@ -390,6 +390,7 @@ -I$(top_srcdir)/utils \ -I$(top_srcdir)/poppler \ $(UTILS_CFLAGS) \ + $(LIBPNG_CFLAGS) \ $(FONTCONFIG_CFLAGS) \ $(ABIWORD_CFLAGS) EOF mkdir target mkdir build cd build XLIBRARY_SET=${XLIBRARY}/gimp_build_set _CFLAGS="-O2 -mtune=pentium4 -msse -mno-sse2 -pipe -fomit-frame-pointer -ffast-math" ${XMINGW}/cross-ppconfigure --prefix="${PWD}/../target" --without-x CPPFLAGS="`${XMINGW}/cross --cflags`" CFLAGS="${_CFLAGS}" CXXFLAGS="${_CFLAGS}" LDFLAGS="-s `${XMINGW}/cross --ldflags`" # あまり意味はない... sed -i.orig -e "s%\(^#define POPPLER_DATADIR \"\)${PWD}/../target\(.*\)\"%\1\2\"%" config.h ${XMINGW}/cross make > make.log 2>&1 ${XMINGW}/cross make install > install.log 2>&1 cd ../target 7z a poppler-0.14.4-bin.7z bin/*.dll 7z a poppler-0.14.4-tools.7z bin/*.exe share/man/man1 7z a poppler-dev-0.14.4.7z include lib/*.a lib/pkgconfig share/gtk-doc
configure の結果。
Building poppler with support for: font configuration: win32 splash output: yes cairo output: yes abiword output: yes qt wrapper: no qt4 wrapper: no glib wrapper: yes use GDK: yes cpp wrapper: yes use gtk-doc: no use libjpeg: yes use libpng: yes use zlib: no use libcurl: no use libopenjpeg: yes use cms: yes command line utils: yes
unit test 関係で pthread が必要。 tests は Makefile の SUBDIR からはずしてしまってもいい。
# ftp://ftp.gimp.org/pub/babl/0.1 # babl-0.1.4.tar.bz2 # license: LGPL v3 tar -jxf babl-0.1.4.tar.bz2 cd babl-0.1.4 mkdir target mkdir build cd build XLIBRARY_SET=${XLIBRARY}/gimp_build_set ${XMINGW}/cross-ppconfigure --prefix=${PWD}/../target --enable-shared --disable-static --enable-mmx --enable-sse CFLAGS="-O2 -mtune=pentium4 -mno-sse2 -pipe -fomit-frame-pointer -ffast-math" CPPFLAGS="`${XMINGW}/cross --cflags`" LDFLAGS="`${XMINGW}/cross --ldflags`" # tests/Makefile の -pthread を -lpthread に変更する。面倒なら SUBDIRS からはずす。 sed -i.orig -e 's/ -pthread/ -lpthread/' tests/Makefile # libtool を書き換える。 dll を作ってくれないので。 # allow_undefined_flag を supported に、 always_export_symbols を yes にする。 bash ${XMINGW}/replibtool.sh ${XMINGW}/cross make SHREXT=.dll install > make.log 2>&1 cd ../target 7z a babl-0.1.4-bin.7z bin/*.dll lib/babl-0.1/*.dll 7z a babl-dev-0.1.4.7z include lib/*.a lib/babl-0.1/*.a lib/pkgconfig
# ftp://ftp.gimp.org/pub/gegl/0.1 # gegl-0.1.6.tar.bz2 # license: GPL v3, LGPL v3 ( lib ) # deps: babl, gtk+, cairo, pango # : libintl, libjpeg, libpng tar -jxf gegl-0.1.6.tar.bz2 cd gegl-0.1.6 mkdir target mkdir build cd build XLIBRARY_SET=${XLIBRARY}/gimp_build_set # CPPFLAGS を設定しないと jpeglib.h を見つけてくれない。 ${XMINGW}/cross-ppconfigure --prefix=${PWD}/../target --enable-shared --disable-static --disable-largefile --disable-docs CFLAGS="-O2 -mtune=pentium4 -msse -mno-sse2 -pipe -fomit-frame-pointer -ffast-math" CPPFLAGS="`${XMINGW}/cross --cflags`" LDFLAGS="-s `${XMINGW}/cross --ldflags`" # libtool を書き換える。 shared でリンクしてくれないので。 # allow_undefined_flag を supported に、 always_export_symbols を yes にする。 bash ${XMINGW}/replibtool.sh ${XMINGW}/cross make SHREXT=".dll" libgegl="-L${PWD}/gegl/.libs -lgegl-0.1" install >make.log 2>&1 cd ../target 7z a gegl-0.1.6-bin.7z bin/*.dll lib/gegl-0.1/*.dll 7z a gegl-0.1.6-tools.7z bin/*.exe 7z a gegl-dev-0.1.6.7z include lib/*.a lib/gegl-0.1/*.a lib/pkgconfig
途中経過です。
fontconfig のキャッシュ ファイルの作成場所は etc/fonts/fonts.conf に記述されています。規定では WINDOWSTEMPDIR_FONTCONFIG_CACHE (%TEMP%) になっています。 portable にするには当該箇所を削除し、 gimp-2.6.exe の起動前に HOME 環境変数に保存フォルダーを設定します。こうすると保存フォルダーの下にキャッシュが作成されます。保存フォルダーは COMPUTERNAME 環境変数と USERNAME 環境変数を組み合わせれば、ただしそれらの環境変数がコンピューターごとに適切に設定されていて、なおかつ COMPUTERNAME と USERNAME が漏洩する心配がなければですが、 usb などに設定を保存していても問題はない(はず)です。
同様に Gimp の各種設定は GIMP2_DIRECTORY 環境変数にフォルダーを設定します。注意すべきは、既存の空のフォルダーを指定しないことです。古い Gimp では既存の空のフォルダーを指定すると設定ファイルをうまく作成してくれませんでした。次にくる問題はフォルダー名のつけ方です。フォルダー名の生成に COMPUTERNAME 環境変数と USERNAME 環境変数を参照するべきでしょうか? 僕はユーザーが選択可能にするべきと考えます。 todo
gtk+ bundle では etc/gtk-2.0 に gtkrc を欠いています。そのためコントローラー フェイスが gtk+ 標準になっています。昔は Windows 用の gtkrc が share/themes/MS-Windows/gtk-2.0 にあったのですが、今は存在しません( bundle の問題? bundle のパッケージング ミスだったようです )。当時のファイルの内容は次のようになっていました。
gtk-icon-sizes = "gtk-menu=13,13:gtk-small-toolbar=16,16:gtk-large-toolbar=24,24:gtk-dnd=32,32" gtk-toolbar-icon-size = small-toolbar # disable images in buttons. i've only seen ugly delphi apps use this feature. gtk-button-images = 0 # enable/disable images in menus. most "stock" microsoft apps don't use these, except sparingly. # the office apps use them heavily, though. gtk-menu-images = 1 # use the win32 button ordering instead of the GNOME HIG one, where applicable gtk-alternative-button-order = 1 # use the win32 sort indicators direction, as in Explorer gtk-alternative-sort-arrows = 1 # Windows users don't expect the PC Speaker beeping at them when they backspace in an empty textview and stuff like that gtk-error-bell = 0 style "msw-default" { GtkWidget::interior-focus = 1 GtkOptionMenu::indicator-size = { 9, 5 } GtkOptionMenu::indicator-spacing = { 7, 5, 2, 2 } GtkSpinButton::shadow-type = in # Owen and I disagree that these should be themable #GtkUIManager::add-tearoffs = 0 #GtkComboBox::add-tearoffs = 0 GtkComboBox::appears-as-list = 1 GtkComboBox::focus-on-click = 0 GOComboBox::add_tearoffs = 0 GtkTreeView::allow-rules = 0 GtkTreeView::expander-size = 12 GtkExpander::expander-size = 12 GtkScrolledWindow::scrollbar_spacing = 1 GtkSeparatorMenuItem::horizontal-padding = 2 engine "wimp" { } } class "*" style "msw-default" binding "ms-windows-tree-view" { bind "Right" { "expand-collapse-cursor-row" (1,1,0) } bind "Left" { "expand-collapse-cursor-row" (1,0,0) } } class "GtkTreeView" binding "ms-windows-tree-view" style "msw-combobox-thickness" = "msw-default" { xthickness = 0 ythickness = 0 } widget_class "*TreeView*ComboBox*" style "msw-combobox-thickness" widget_class "*ComboBox*GtkFrame*" style "msw-combobox-thickness"
%APPDATA%/gtk-2.0 が作成されます。 todo
memo
Running GTK+ Applications <http://library.gnome.org/devel/gtk/stable/gtk-runn...>
Using GTK+ on Windows <http://library.gnome.org/devel/gtk/stable/gtk-wind...>
# ftp://ftp.gimp.org/pub/gimp/2.6 # gimp-2.6.11.tar.bz2 # license: GPL v2 # deps: babl, glib, gtk+, cairo, pango, atk # libintl, gettext, gail # libjpeg, libpng, libtiff # fontconfig, freetype # zlib # todo # opt: libexif, libmng, libwmf, librsvg, libxpm-no X # libcroco, poppler, little cms, libgsf # libxml2 tar -jxf gimp-2.6.11.tar.bz2 cd gimp-2.6.11 mkdir target mkdir build cd build XLIBRARY_SET=${XLIBRARY}/gimp_build_set ${XMINGW}/cross-ppconfigure --prefix=${PWD}/../target --enable-shared --disable-static --disable-python --disable-largefile --without-x --without-gtk-doc CPPFLAGS="`${XMINGW}/cross --cflags --ldflags` -DXPM_NO_X -I${XLIBRARY}/gimp-dep/include/noX" LDFLAGS="`${XMINGW}/cross --ldflags`" ${XMINGW}/cross windres -I ../app -i ../app/gimp.rc -o gimp.rc.o # libtool を書き換える。 shared でリンクしてくれないので。 # allow_undefined_flag を supported に、 always_export_symbols を yes にする。 bash ${XMINGW}/replibtool.sh # libwmf が -lpng 決め打ちしているのでごまかす。 # 下は libpng14 を設定している。場所は ${XLIBRARY}/lib mkdir libpng ln -s ${XLIBRARY}/lib/include/libpng14 libpng/include mkdir libpng/lib ln -s ${XLIBRARY}/lib/lib/libpng14.dll.a libpng/lib/libpng.dll.a # little cms の問題で -Dcdecl=LCMSAPI している。 # mail プラグインを作成しようとするので抑止している。 ${XMINGW}/cross make CFLAGS="-O2 -mtune=pentium4 -msse -mno-sse2 -pipe -fomit-frame-pointer -ffast-math `${XMINGW}/cross --cflags` -Dcdecl=LCMSAPI" mwindows="-mwindows ${PWD}/gimp.rc.o" LDFLAGS="-lwsock32 -lole32 -Wl,-s `${XMINGW}/cross --ldflags` -L${PWD}/libpng/lib" MAIL="" install > make.log 2>&1 cd ../target rm bin/gimp.exe bin/gimp-console.exe 7z a gimp-2.6.11-bin.`date +%Y%m%d%H%M`.7z bin/*.{exe,dll} etc `find lib/gimp -xtype f -not -iname \*.a -and -not -iname \*.la` share/locale share/gimp [ACHILNR]* 7z a gimp-dev-2.6.11.`date +%Y%m%d%H%M`.7z bin/gimptool-2.0* include `find lib -xtype f -iname \*.a` lib/pkgconfig share/aclocal share/icons
configure の結果。
Building GIMP with prefix=/usr/xmingw/xmingw32/local/src/gimp/core/gimp-2.6.10/build/../target, datarootdir=${prefix}/share Desktop files install into ${datarootdir} Extra Binaries: gimp-console: yes gimp-remote: no (not enabled) Optional Features: D-Bus service: no Language selection: yes Optional Plug-Ins: Ascii Art: no (AA library not found) Help Browser: no (WebKit not found) LCMS: yes JPEG: yes MNG: yes PDF: yes PNG: yes Print: yes PSP: yes Python: no Script-Fu: yes SVG: yes TIFF: yes TWAIN (MacOS X): no TWAIN (Win32): no URI: yes (using GIO/GVfs) Windows ICO yes WMF: yes XJT: yes XPM: yes Plug-In Features: EXIF support: yes GNOME UI: no (libgnomeui-2.0 not found) GNOME keyring: no (gnome-keyring-1 not found) Optional Modules: ALSA (MIDI Input): no (libasound not found or unusable) Linux Input: no (linux input support disabled) (HAL support: no) DirectInput (Win32): no Color Correction: yes Soft Proof: yes
ビルドに Gtk+ 2.24.3 以上を要求するのですが、現時点(2011/4/24sun)では gnome や Ring Server Project で配布されている Windows Binary が 2.24.0-1 であるためそのままではビルドできません。 Gtk+ のヘッダーファイルと Gimp のソースを書き換えています。
# ftp://ftp.gimp.org/pub/gimp/2.7 # gimp-2.7.2.tar.bz2 # license: GPL v3 # deps: babl, glib, gtk+, cairo, pango, atk # libintl, gettext, gail # libjpeg, libpng, libtiff # fontconfig, freetype # zlib # todo # opt: libexif, libmng, libwmf, librsvg, libxpm-no X # libcroco, poppler, little cms, libgsf # libxml2 tar -jxf gimp-2.7.2.tar.bz2 cd gimp-2.7.2 mkdir target # build ディレクトリーが存在するので注意。 mybuild にしたほうがいいのかな。 mkdir build_ # パッケージング ミスなのだろうか... cp build/windows/wilber.ico build/windows/plug-ins.ico # build ディレクトリーを掘って作業する場合の不具合を修正する。 patch -i ../fix.gimp2.7.2.patch -p 1 cd build_ XLIBRARY_SET=${XLIBRARY}/gimp_build_set # gtk+ 2.24.3 以上を要求するが windows binary が 2.24.0-1 しか用意されてない # configure を書き換える。 # sed -i.orig ../configure -e "s/2\.24\.3/2.24.0/" # app/gui/gui.c のマクロを書き換える。 # sed -i.orig ../app/gui/gui.c -e "s/^\(#define GTK_REQUIRED_MICRO\) 3/\1 0/" # gtk+ のヘッダー ファイル gdkwin32.h を書き換える。 > #define gdk_win32_window_foreign_new_for_display gdk_window_foreign_new_for_display > #define gdk_win32_window_lookup_for_display gdk_window_lookup_for_display # --target=i386-pc-mingw32 しないと色々問題がでる模様。 ${XMINGW}/cross-ppconfigure --prefix=${PWD}/../target --enable-shared --disable-static --disable-python --disable-largefile --without-x CPPFLAGS="`${XMINGW}/cross --cflags --ldflags` -DXPM_NO_X -I${XLIBRARY}/gimp-dep/include/noX" LDFLAGS="`${XMINGW}/cross --ldflags`" --target=i386-pc-mingw32 # build ディレクトリーを掘って作業する場合の不具合を修正する。 # コマンド中に作業ディレクトリー名が含まれている。 ( cd .. && for f in `find -name \*.def`; do cp $f build_/$f ; done ) # libtool を書き換える。 shared でリンクしてくれないので。 # allow_undefined_flag を supported に、 always_export_symbols を yes にする。 bash ${XMINGW}/replibtool.sh # libwmf が -lpng 決め打ちしているのでごまかす。 # 下は libpng14 を設定している。場所は ${XLIBRARY}/lib mkdir libpng ln -s ${XLIBRARY}/lib/include/libpng14 libpng/include mkdir libpng/lib ln -s ${XLIBRARY}/lib/lib/libpng14.dll.a libpng/lib/libpng.dll.a # リソースファイルを make するためのサフィック スルールが # 機能してないのでパッチをあてる。 # Makefile.in を書き換えるよりは害が少ないのでこちらを書き換える。 for f in `find -name Makefile`; do sed -i.orig -e "s/^\.rc\(\.rc\.o:\)/%\1/" $f; done # little cms の問題で -Dcdecl=LCMSAPI している。 # 作成されないプラグイン(mail , file_xmc)を作成しようとするので抑止している。 ${XMINGW}/cross make CFLAGS="-O2 -mtune=pentium4 -msse -mno-sse2 -pipe -fomit-frame-pointer -ffast-math `${XMINGW}/cross --cflags` -Dcdecl=LCMSAPI" LDFLAGS="-lwsock32 -lole32 -Wl,-s `${XMINGW}/cross --ldflags` -L${PWD}/libpng/lib" MAIL="" FILE_XMC="" install > make.log 2>&1 cd ../target # 外観を windows 標準にする。 echo "gtk-theme-name = \"MS-Windows\"\n" > etc/gtk-2.0/gtkrc # side-by-side echo > bin/gimp-2.7.exe.local echo > bin/gimp-console-2.7.exe.local 7z a gimp-2.7.2-bin.7z bin/*.{exe,dll} etc `find lib/gimp -xtype f -not -iname \*.a -and -not -iname \*.la` share/{gimp,icons,locale} [ACHILNR]* 7z a gimp-dev-2.7.2.7z bin/gimptool-2.0* include `find lib -xtype f -iname \*.a -or -iname \*.def` lib/pkgconfig share/{aclocal,icons}
configure の結果。
Building GIMP with prefix=/usr/xmingw/xmingw32/local/src/gimp/core/gimp-2.7.2/build_/../target, datarootdir=${prefix}/share Desktop files install into ${datarootdir} Extra Binaries: gimp-console: yes gimp-remote: no (not enabled) Optional Features: D-Bus service: no Language selection: yes Optional Plug-Ins: Ascii Art: no (AA library not found) Help Browser: no (WebKit not found) LCMS: yes JPEG: yes JPEG 2000: no (JasPer library not found) MNG: yes PDF (import): yes PDF (export): yes PNG: yes Print: yes PSP: yes Python: no Script-Fu: yes SVG: yes TIFF: yes TWAIN (MacOS X): no TWAIN (Win32): no URI: yes (using GIO/GVfs) Webpage: no (WebKit not found) Windows ICO: yes WMF: yes XJT: yes X11 Mouse Cursor: yes XPM: yes Plug-In Features: EXIF support: yes Optional Modules: ALSA (MIDI Input): no (libasound not found or unusable) Linux Input: no (linux input support disabled) (HAL support: no) DirectInput (Win32): no Color Correction: yes Soft Proof: yes Tests: Use xvfb-run no (not found)
fix.gimp2.7.2.patch
--- gimp-2.7.2.orig/plug-ins/win-snap/Makefile.in +++ gimp-2.7.2/plug-ins/win-snap/Makefile.in @@ -766,8 +766,8 @@ tags uninstall uninstall-am uninstall-libexecPROGRAMS -winsnap-win32res.o: winsnap.rc select.cur small.ico winsnap.ico - $(WINDRES) winsnap.rc winsnap-win32res.o +winsnap-win32res.o: $(srcdir)/winsnap.rc $(srcdir)/select.cur $(srcdir)/small.ico $(srcdir)/winsnap.ico + $(WINDRES) $(srcdir)/winsnap.rc winsnap-win32res.o # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded.
Gimp の最小構成は次の5つのライブラリを用意すればビルドできます。
- gtk+ bundle
- babl
- gegl
- libjpeg
- libtiff
ビルドに使用した&有効になっていると思われるライブラリ。ちょっと古い。
- gimp 2.6.10
- gtk+ bundle 2.20.0-20100406 win32
- atk 1.30.0-1
- cairo 1.8.10-3
- expat 2.0.1-1
- fontconfig 2.8.0-2
- freetype 2.3.12-1
- glib 2.24.0-2
- gtk+ 2.20.0-1
- libpng 1.4.0-1
- pango 1.28.0-1
- babl 0.1.2
- gegl 0.1.2
追加予定のライブラリ。
- gtk+ bundle 2.20.1-20100912 win32
- bzip2 1.0.6
- little cms 1.19
- libgsf 1.14.18
- libxml2 2.7.7
- librsvg 2.31.0
- libexif 0.6.19
- libmng 1.0.10
- libxpm-noX 4.2.0-4.15
- libwmf 0.2.8.4-7
- gettext 0.18.1.1
- poppler 0.14.4
gimp-2.6.10 (simoncic) に含まれているがよくわからないもの。 webkit がらみで増えたのか...
- libbonobo
- libdbus
- libenchant
- libexslt
- libgailutil
- libgcc_s_sjlj
- libgcrypt
- libgeoclue
- libgnutls
- GNU Smalltalk
- libIDL
- libORBit
- libhunspell
- libjasper
- libpoppler
- libsoup
- libsqlite3
- libssp
- libstdc++
- libtasn
- libtermcap
- libwebkit
- libxslt
手順など。
# ftp://ftp.gimp.org/pub/gimp/2.6 # gimp-2.6.10.tar.bz2 # deps: babl, gtk+, cairo, pango # libintl, libjpeg, libpng # todo tar -jxf gimp-2.6.10.tar.bz2 cd gimp-2.6.10 mkdir target mkdir build cd build XLIBRARY_SET=${XLIBRARY}/gimp_build_set ${XMINGW}/cross-ppconfigure --prefix=${PWD}/../target --enable-shared --disable-static --disable-python --disable-largefile --without-x --without-gtk-doc CPPFLAGS="`${XMINGW}/cross --cflags --ldflags`" ${XMINGW}/cross windres -I ../app -i ../app/gimp.rc -o gimp.rc.o # libtool を書き換える。 shared でリンクしてくれないので。 # allow_undefined_flag を supported に、 always_export_symbols を yes にする。 bash ${XMINGW}/replibtool.sh # mail プラグインを作成しようとするので抑止する。 ${XMINGW}/cross make CFLAGS="-O2 -mtune=pentium4 -msse -mno-sse2 -pipe -fomit-frame-pointer -ffast-math `${XMINGW}/cross --cflags`" mwindows="-mwindows ${PWD}/gimp.rc.o" LDFLAGS="-lwsock32 -lole32 -Wl,-s `${XMINGW}/cross --ldflags`" MAIL="" install >make.log 2>&1 cd ../target 7z a gimp-2.6.10-bin.7z bin/*.{exe,dll} etc `find lib/gimp -xtype f -not -iname \*.a -and -not -iname \*.la` share/locale share/gimp [ACHILNR]* 7z a gimp-dev-2.6.10.7z bin/gimptool-2.0.exe include `find lib -xtype f -iname \*.a` lib/pkgconfig share/aclocal share/icons
configure の結果。
Building GIMP with prefix=/usr/xmingw/xmingw32/local/src/gimp/core/gimp-2.6.10/build/../target, datarootdir=${prefix}/share Desktop files install into ${datarootdir} Extra Binaries: gimp-console: yes gimp-remote: no (not enabled) Optional Features: D-Bus service: no Language selection: yes Optional Plug-Ins: Ascii Art: no (AA library not found) Help Browser: no (WebKit not found) LCMS: no (lcms not found or unusable) JPEG: yes MNG: no (MNG header file not found) PDF: Using PostScript plug-in (libpoppler not found) PNG: yes Print: yes PSP: yes Python: no Script-Fu: yes SVG: no (librsvg not found) TIFF: yes TWAIN (MacOS X): no TWAIN (Win32): no URI: yes (using GIO/GVfs) Windows ICO yes WMF: no (libwmf not found) XJT: yes XPM: no (XPM library not found) Plug-In Features: EXIF support: no (libexif not found or too old) GNOME UI: no (libgnomeui-2.0 not found) GNOME keyring: no (gnome-keyring-1 not found) Optional Modules: ALSA (MIDI Input): no (libasound not found or unusable) Linux Input: no (linux input support disabled) (HAL support: no) DirectInput (Win32): no Color Correction: no (lcms not found or unusable) Soft Proof: no (lcms not found or unusable)
今後の予定。
2011/5/4wed gimp 2.7.2 をすこし修正。
2011/4/25mon gimp 2.7.2 を追記。
2011/4/21thu libtiff を修正(まだ問題がありそうだけど調査不足...)。 freetype の dll 名を gtk+ bundles に合わせた。 babl 1.4, gegl 1.6 に置き換えた。 gegl の記述をもうすこし簡潔にした。
2010/12/10fri ページを分割しました。
2010/10/17sun Gimp に関するもろもろを追記。
2010/10/13wed poppler 0.14.4, gimp 2.6.11 を記述。libpng を修正。こまごまとした修正。
2010/10/6wed openjpeg を記述。 patch まわりを修正。
2010/9/27mon fftw3 を記述。 bzip2 1.0.6 を追記。
2010/9/24fri fontconfig, freetype, poppler を記述。
2010/9/23thu libwmf, gettext を記述。
2010/9/14tue libxpm no X を記述。
2010/9/13mon little cms 1.19, libmng を記述。 libpng, libxml2 を修正。
2010/9/10fri libpng に追記。 libexif, librsvg を記述。
2010/9/9thu libxml2, libcroco, libgsf を記述。
2010/9/7tue libiconv を記述。
2010/9/5sun bzip2, little cms を記述。
2010/9/4sat gegl, gimp を記述。
2010/9/1wed ぐだぐだな記述をやや修正。 babl を修正。
2010/8/30mon babl を記述。
タグ
コメントをかく