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

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

Mandriva Linux 2010.0におけるVala 0.9.2のビルドメモとRPMパッケージ作成について(2010/6/23現在)

2010年6月下旬の時点でMandriva Linuxの開発版ディストリ(Cooker)のValaのパッケージのバージョンが0.8系で、最新の0.9.2と比べると結構古くなっているため、そのソースRPMパッケージの.specファイルをもとにしてバージョン0.9.2のパッケージを作成しようとしたが、ビルド段階は正常に終了するものの、続くテスト(%check)の段階で

Making check in tests
make[2]: Entering directory `/home/mandrake/rpm/BUILD/vala-0.9.2/tests'
make  check-am
make[3]: Entering directory `/home/mandrake/rpm/BUILD/vala-0.9.2/tests'
make  check-TESTS
make[4]: Entering directory `/home/mandrake/rpm/BUILD/vala-0.9.2/tests'
TEST: Building...FAIL
/home/mandrake/rpm/BUILD/vala-0.9.2/tests/_test/main.c:1109: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘dbusbasic_typesclientTestProxy’
/home/mandrake/rpm/BUILD/vala-0.9.2/tests/_test/main.c:1110: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘dbusbasic_typesclientTestProxyClass’
/home/mandrake/rpm/BUILD/vala-0.9.2/tests/_test/main.c:1132: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘dbusarraysclientTestProxy’

(中略)

/home/mandrake/rpm/BUILD/vala-0.9.2/tests/_test/main.c:20267: error: too many arguments to function ‘dbus_bug602003_server_test_register_object’
/home/mandrake/rpm/BUILD/vala-0.9.2/tests/_test/main.c:20275: error: ‘dbus_bug602003_server_app’ undeclared (first use in this function)
/home/mandrake/rpm/BUILD/vala-0.9.2/tests/_test/main.c: In function ‘g_cclosure_user_marshal_STRING__STRING’:
/home/mandrake/rpm/BUILD/vala-0.9.2/tests/_test/main.c:20379: warning: passing argument 2 of ‘g_value_take_string’ discards qualifiers from pointer target type
/usr/include/glib-2.0/gobject/gvaluetypes.h:224: note: expected ‘gchar *’ but argument is of type ‘const char *’
error: cc exited with status 256
Compilation failed: 1 error(s), 0 warning(s)
make[4]: *** [check-TESTS] Error 1
make[4]: Leaving directory `/home/mandrake/rpm/BUILD/vala-0.9.2/tests'
make[3]: *** [check-am] Error 2
make[3]: Leaving directory `/home/mandrake/rpm/BUILD/vala-0.9.2/tests'
make[2]: *** [check] Error 2
make[2]: Leaving directory `/home/mandrake/rpm/BUILD/vala-0.9.2/tests'
make[1]: *** [check-recursive] Error 1
make[1]: Leaving directory `/home/mandrake/rpm/BUILD/vala-0.9.2'
make: *** [check] Error 2

のようになって失敗してしまった。最初のエラーの行(main.cの1109行目)は
[引用]ファイル名: vala-0.9.2/tests/_test/main.c より

typedef GDBusProxy dbusbasic_typesclientTestProxy;

となっており、どうやらGLib 2の一部のGIOライブラリにおける
developer.gnome.org/gio/stable/GDBusProxy.html
の機能をテストするための記述の部分で恐らくはGDBusProxyという型が未定義であることが原因で失敗しているようだった(「typedef」の後ろは(構造体定義の形の場合を除き)既知の型の名前でなければならない)。この機能は
wiki.gnome.org/Projects/Vala/Release
のバージョン0.9.2のところに「Initial support for GDBus-based clients and servers. 」とあるように最近追加されたものとなっている(実際、バージョン0.9.1では正常にパッケージ作成が完了する)が、GIOのリファレンスを見ると分かるようにバージョン2.26以上のGIOライブラリを要求している。Mandriva Linux 2010.0のGLib/GIOのバージョンは

$ pkg-config --modversion gio-2.0
2.22.2

このように足りておらず、近い内に出る2010.1でもバージョンは2.24.1となっている(2.26自体まだ存在せず開発版の2.25系があるのみ)ようで、更に後に続く2011.0辺り*1まではそのままではチェック段階を含めたビルド処理が正常に終了することはないと思われる。
というわけで、.specファイルの該当部分を
[一部]ファイル名: vala.spec

%if %mdkversion >= 201100
%check
make check
%endif

のようにして2010.1までのバージョンでテスト段階を回避するようにしつつ、加えて、不要となったパッチvala-0.7.7-format-security.patch(ビルドエラー対策)の適用処理を削除したパッケージを作成した。別館の配布ページで公開していた。
(2014/10/12)配布ページは削除済み。
なお、統合開発環境(IDE)のVal(a)ideはバージョンが0.7.0になっているが、GtkSourceViewライブラリの要求バージョン(2.10.0以上)が高く、Mandriva Linux 2010.0ではGtkSourceViewを(バージョン2.8.1から)新しくしないといけないので、2010.1(GtkSourceViewのバージョンは2.10.1)が出るまではビルドも公開もできない。試しに要求バージョンを下げて強引に進めようとしたが、バージョン2.10系の新機能を実際に用いているようで、ビルドエラーになってしまった。

*1:2011.0にGLib 2.26が入るかどうかは分からないが...