画像ビューアGImageViewの開発のその後(2014年10月時点)とlibmngのテストプログラムの問題について
開発版ソースの新しいリポジトリについて
これまでSubversionを用いて管理されていたソースはその後
github.com/ashie/gimageview
で管理されており
sourceforge.net/p/gtkmmviewer/code/HEAD/tree/
の最終リビジョンであるr1215(2010年11月)より後の変更はここで適用されている。
リポジトリ移行後の修正点
PPAリポジトリ「ppa:kakurasan/unstable」で公開しているUbuntu向けの自作パッケージ(これまでの公開バージョンはr1215)で
- 内部アイコンファイルのインストールに関する記述の重複対策
- Ubuntu 13.04のときに発生したリンクエラー対策
として独自に作成して入れていたパッチと同様の修正がともに2014年9月に入っている。r1215から後にはこれ以外の修正点はない。
libmngの検出に失敗する件とその対処
MNG形式のアニメーション画像を扱える(GImageView内で表示できる)ようにするライブラリlibmngが(開発パッケージ含め)システムにインストールされていても検出に失敗することが分かった。
(configureスクリプトの出力) $ ./configure ... checking libmng.h usability... yes checking libmng.h presence... yes checking for libmng.h... yes checking for mng_initialize in -lmng... yes checking for libmng functions... configure: WARNING: *** MNG library (libmng) is found but it is too old *** no ... Configure Result : C Compiler : gcc ... MNG (libmng) : no ... (libmngのバージョンを確認) $ pkg-config --modversion libmng 2.0.2
[引用]ファイル名: config.log より
configure:16737: checking for libmng functions configure:16766: gcc -c -g -O2 conftest.c >&5 In file included from /usr/include/libmng_types.h:203:0, from /usr/include/libmng.h:386, from conftest.c:26: /usr/include/jpeglib.h:1000:30: error: unknown type name 'FILE' EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile)); ^ /usr/include/jpeglib.h:1001:29: error: unknown type name 'FILE' EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile)); ^ configure:16766: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "gimageview" | #define PACKAGE_TARNAME "gimageview" | #define PACKAGE_VERSION "0.3.0" | #define PACKAGE_STRING "gimageview 0.3.0" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define PACKAGE "gimageview" | #define VERSION "0.3.0" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define HAVE_DLFCN_H 1 | #define LT_OBJDIR ".libs/" | #define HAVE_PROGRESSIVE_JPEG 1 | #define ENABLE_JPEG 1 | #define ENABLE_EXIF 1 | /* end confdefs.h. */ | #include <libmng.h> | int | main () | { | mng_handle handle; | mng_version_text(); | handle = mng_initialize(NULL, NULL, NULL, MNG_NULL); | mng_setcb_errorproc(handle, NULL); | mng_setcb_openstream(handle, NULL); | mng_setcb_closestream(handle, NULL); | mng_setcb_readdata(handle, NULL); | mng_setcb_gettickcount(handle, NULL); | mng_setcb_settimer(handle, NULL); | mng_setcb_processheader(handle, NULL); | mng_setcb_getcanvasline(handle, NULL); | mng_setcb_refresh(handle, NULL); | mng_get_userdata(handle); | mng_set_canvasstyle(handle, MNG_CANVAS_RGB8); | mng_set_bgcolor(handle, 0, 0, 0); | mng_readdisplay(handle); | mng_readdisplay_resume(handle); | ; | return 0; | } configure:16773: WARNING: *** MNG library (libmng) is found but it is too old *** configure:16777: result: no
FILE型は標準Cライブラリを用いたファイル入出力で用いられるが、これを用いるにはヘッダファイルstdio.hを取り込めばよいため、同ファイルが先に取り込まれるようにすればよい。
実際としてはconfigure.acの
AC_TRY_COMPILE([ #include <libmng.h> ],
の行を
AC_TRY_COMPILE([ #include <stdio.h> #include <libmng.h> ],
とすることで
$ ./configure ... checking libmng.h usability... yes checking libmng.h presence... yes checking for libmng.h... yes checking for mng_initialize in -lmng... yes checking for libmng functions... yes ... Configure Result : C Compiler : gcc ... MNG (libmng) : yes ...
無事に検出され、ビルドした実行ファイルを用いて正常にMNGファイルが開けることも確認できた。
ただ、この件についてはメッセージの内容からも分かる通り、原因はlibmngもしくはlibjpegのヘッダファイルの側にあり
bugs.launchpad.net/ubuntu/+source/libmng/+bug/1342459
の件とも同じものと思われるため、GImageView側を修正するのが適切なのかどうかは分からない。ただ、configure.acを見るとlibjpegの(ヘッダファイルの)検出ではテストプログラムに「#include <stdio.h>」が入っているので、libmngのテストプログラムに入れても問題はないような気もする。
使用したバージョン:
- GImageView 2014/9/5版