試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

Mandriva Linux 2009.0のGImageViewがまともに動作しない件についてと回避方法(前半)

Mandriva Linux 2009.0で画像ビューアGImageViewのパッケージ「gimageview」をインストールしたのだが、画像が全然開けなかった。

  1. プラグインの共有オブジェクトがない
  2. ソースRPMからビルドを試すが...

プラグインの共有オブジェクトがない

ファイル一覧を見ると

/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を参照しないようにすることでエラーは回避できた。
上記パッチ群と、Gentooebuildで当てられている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

*1:01_previous_changes.dpatch,10_bts459288_edit-options_fix.dpatch,20_bts440648_sort_fix.dpatch,30_bts494304_relibtoolize.dpatch,40_bts389071_german_translation.dpatch,50_bts243584_returncode_on_exit.dpatchの6つ