Mandriva Linux 2009.0のGImageViewがまともに動作しない件についてと回避方法(前半)
Mandriva Linux 2009.0で画像ビューアGImageViewのパッケージ「gimageview」をインストールしたのだが、画像が全然開けなかった。
プラグインの共有オブジェクトがない
ファイル一覧を見ると/usr/lib64/gimageview /usr/lib64/gimageview/archiver /usr/lib64/gimageview/archiver/libgimv_lha_extarc.a /usr/lib64/gimageview/archiver/libgimv_lha_extarc.la /usr/lib64/gimageview/archiver/libgimv_rar_extarc.a /usr/lib64/gimageview/archiver/libgimv_rar_extarc.la /usr/lib64/gimageview/archiver/libgimv_tar_extarc.a /usr/lib64/gimageview/archiver/libgimv_tar_extarc.la /usr/lib64/gimageview/archiver/libgimv_zip_extarc.a /usr/lib64/gimageview/archiver/libgimv_zip_extarc.la /usr/lib64/gimageview/image_loader /usr/lib64/gimageview/image_loader/libgimv_bmp_loader.a /usr/lib64/gimageview/image_loader/libgimv_bmp_loader.la (中略) /usr/lib64/gimageview/thumbnail_view /usr/lib64/gimageview/thumbnail_view/libgimv_thumbview_detail.a /usr/lib64/gimageview/thumbnail_view/libgimv_thumbview_detail.la
本来プラグインがあるべきところに静的リンクライブラリ(*.a)とlibtool向けライブラリ(*.la)だけが存在するという異常な事態になっていた。
ソースRPMからビルドを試すが...
ソースRPMを入手してビルドを試したがif gcc -DHAVE_CONFIG_H -I. -I. -I.. -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/gtk-2.0 -I/usr/lib64/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I../lib -I.. -I../libs -DLOCALEDIR=\""/usr/share/locale"\" -DDATADIR=\""/usr/share/gimageview"\" -DDOCDIR=\""/usr/share/doc/gimageview"\" -DICONDIR=\""/usr/share/gimageview/pixmaps"\" -DPLUGINDIR=\""/usr/lib64/gimageview"\" -DARCHIVER_PLUGIN_DIR=\""archiver"\" -DIMAGE_LOADER_PLUGIN_DIR=\""image_loader"\" -DIMAGE_SAVER_PLUGIN_DIR=\""image_saver"\" -DIMAGE_VIEW_PLUGIN_DIR=\""image_view"\" -DIO_STREAM_PLUGIN_DIR=\""io_stream"\" -DTHUMBNAIL_PLUGIN_DIR=\""thumbnail"\" -DIMAGE_VIEW_PLUGIN_DIR=\""image_view"\" -DTHUMBNAIL_VIEW_PLUGIN_DIR=\""thumbnail_view"\" -O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -Wall -MT gimv_cell_pixmap.o -MD -MP -MF ".deps/gimv_cell_pixmap.Tpo" -c -o gimv_cell_pixmap.o gimv_cell_pixmap.c; \ then mv -f ".deps/gimv_cell_pixmap.Tpo" ".deps/gimv_cell_pixmap.Po"; else rm -f ".deps/gimv_cell_pixmap.Tpo"; exit 1; fi In file included from gimv_cell_pixmap.c:32: gimv_cell_pixmap.h:79: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘gimv_cell_renderer_pixmap_get_type’ gimv_cell_pixmap.c:77: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘gimv_cell_renderer_pixmap_get_type’ gimv_cell_pixmap.c: In function ‘gimv_cell_renderer_pixmap_get_property’: gimv_cell_pixmap.c:183: warning: implicit declaration of function ‘GTK_CHECK_CAST’ gimv_cell_pixmap.c:183: warning: implicit declaration of function ‘gimv_cell_renderer_pixmap_get_type’ gimv_cell_pixmap.c:183: error: expected expression before ‘GimvCellRendererPixmap’ gimv_cell_pixmap.c:183: warning: initialization makes pointer from integer without a cast gimv_cell_pixmap.c: In function ‘gimv_cell_renderer_pixmap_set_property’: gimv_cell_pixmap.c:231: error: expected expression before ‘GimvCellRendererPixmap’ gimv_cell_pixmap.c:231: warning: initialization makes pointer from integer without a cast make[3]: *** [gimv_cell_pixmap.o] Error 1 make[3]: Leaving directory `/home/mandrake/rpm/BUILD/gimageview-0.2.27/src' make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory `/home/mandrake/rpm/BUILD/gimageview-0.2.27/src' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/home/mandrake/rpm/BUILD/gimageview-0.2.27' make: *** [all] Error 2 error: Bad exit status from /var/tmp/rpm-tmp.38181 (%build) RPM build errors: Bad exit status from /var/tmp/rpm-tmp.38181 (%build)
このようにエラーとなった。
色々調べた末、Debianのパッチにたどり着いた。
Debian sidのgimageview_0.2.27-2.diff.gzに含まれるパッチ群*1を適用したところ
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/gtk-2.0 -I/usr/lib64/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I../lib -I.. -I../libs -DLOCALEDIR=\""/usr/share/locale"\" -DDATADIR=\""/usr/share/gimageview"\" -DDOCDIR=\""/usr/share/doc/gimageview"\" -DICONDIR=\""/usr/share/gimageview/pixmaps"\" -DPLUGINDIR=\""/usr/lib64/gimageview"\" -DARCHIVER_PLUGIN_DIR=\""archiver"\" -DIMAGE_LOADER_PLUGIN_DIR=\""image_loader"\" -DIMAGE_SAVER_PLUGIN_DIR=\""image_saver"\" -DIMAGE_VIEW_PLUGIN_DIR=\""image_view"\" -DIO_STREAM_PLUGIN_DIR=\""io_stream"\" -DTHUMBNAIL_PLUGIN_DIR=\""thumbnail"\" -DIMAGE_VIEW_PLUGIN_DIR=\""image_view"\" -DTHUMBNAIL_VIEW_PLUGIN_DIR=\""thumbnail_view"\" -O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -Wall -MT auto_completion.o -MD -MP -MF ".deps/auto_completion.Tpo" -c -o auto_completion.o auto_completion.c; \ then mv -f ".deps/auto_completion.Tpo" ".deps/auto_completion.Po"; else rm -f ".deps/auto_completion.Tpo"; exit 1; fi In file included from /usr/include/gtk-2.0/gtk/gtk.h:222, from /usr/include/gtk-2.0/gtk/gtksignal.h:32, from /usr/include/gtk-2.0/gtk/gtkclist.h:34, from auto_completion.c:39: /usr/include/gtk-2.0/gtk/gtkctree.h:110: error: expected specifier-qualifier-list before ‘GtkCList’ /usr/include/gtk-2.0/gtk/gtkctree.h:127: error: expected specifier-qualifier-list before ‘GtkCListClass’ /usr/include/gtk-2.0/gtk/gtkctree.h:149: error: expected specifier-qualifier-list before ‘GtkCListRow’ /usr/include/gtk-2.0/gtk/gtkctree.h:342: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘gtk_ctree_node_get_cell_type’ make[3]: *** [auto_completion.o] Error 1 make[3]: Leaving directory `/home/mandrake/rpm/BUILD/gimageview-0.2.27/src' make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory `/home/mandrake/rpm/BUILD/gimageview-0.2.27/src' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/home/mandrake/rpm/BUILD/gimageview-0.2.27' make: *** [all] Error 2 error: Bad exit status from /var/tmp/rpm-tmp.98746 (%build) RPM build errors: Bad exit status from /var/tmp/rpm-tmp.98746 (%build)
上のエラーが出て、これに対するパッチは見付けられなかったが
[任意]ファイル名: gimageview-0.2.27-gtkclist.patch
--- gimageview-0.2.27.orig/auto_completion.c +++ gimageview-0.2.27/src/auto_completion.c @@ -36,7 +36,9 @@ #include <gdk/gdkkeysyms.h> #include <gtk/gtkentry.h> #include <gtk/gtkframe.h> +#ifndef ENABLE_TREEVIEW #include <gtk/gtkclist.h> +#endif #include <gtk/gtkmain.h> #include <gtk/gtkwindow.h> #include <gtk/gtkscrolledwindow.h>
のように、GTK+ 2でGtkCListの代わりにGtkTreeViewを使用する場合にgtk/gtkclist.hを参照しないようにすることでエラーは回避できた。
上記パッチ群と、Gentooのebuildで当てられているgimageview-0.2.27-gtk12_fix.diffとを適用するための.specファイルの修正は以下のようになる。
--- gimageview-0.2.27-3mdv2008.1.orig/SPECS/gimageview.spec.orig +++ gimageview-0.2.27-3mdv2008.1/SPECS/gimageview.spec @@ -6,6 +6,18 @@ Group: Graphics URL: http://www.homa.ne.jp/~ashie/gimageview/ Source0: %{name}-%{version}.tar.bz2 +Patch0: %{name}-%{version}-gtk12_fix.diff + # from Gentoo +Patch1: 01_previous_changes.dpatch + # from Debian(gimageview_0.2.27-2.diff.gz) +Patch10: 10_bts459288_edit-options_fix.dpatch +Patch20: 20_bts440648_sort_fix.dpatch +Patch30: 30_bts494304_relibtoolize.dpatch +Patch40: 40_bts389071_german_translation.dpatch +Patch50: 50_bts243584_returncode_on_exit.dpatch + # don't include gtk/gtkclist.h if using TreeView(GTK+ 2) +Patch99: %{name}-%{version}-gtkclist.patch + Suggests: mplayer Obsoletes: %{mklibname gimageview 0} <= %{version}-%{release} Obsoletes: %{mklibname gimageview 0 -d} <= %{version}-%{release} @@ -24,6 +36,14 @@ %prep rm -rf %{buildroot} %setup -q +%patch0 -p1 +%patch1 -p1 +%patch10 -p1 +%patch20 -p1 +%patch30 -p1 +%patch40 -p1 +%patch50 -p1 +%patch99 -p1 %build %configure2_5x --with-gtk2 --with-xine --enable-mplayer --disable-splash --disable-rpath
これでビルドが無事に通るようになり、RPMパッケージが作成されたのだが、更なる問題が...
使用したバージョン:
- GTK+ 2.14.3
- GImageView 0.2.27