Namazu-devel-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
libintl's stuff is harmful (Re: supplementary functions)
笠原です。
* From: Ryuji Abe <raeva@xxxxxxxxxxxx>
* Date: Wed, 23 Aug 2000 16:23:05 +0900
> > 要するに、strstr()がない環境だけsymbolをlibnmzに含める
> > ということですね。私も考えたことはあります。
> > #やはりこの方法が無難かなあ...
>
> libintlはどうしましょう? (^^;;;
これ、私も悩みましたけど、非常にいやらしい問題です。
configure --with-gettext としても、libintl.a はコンパイルされるだ
けで、インストールされないんですよね。
ライブラリ libnmz.a が gettext() を呼び出してるようなので、後で
libnmz.a をリンクするようなアプリケーションをインストールしようと
思ったら、結局 gettext を別途インストールしなければなりません。
あと頭が痛いのは、configure の --with-catgets です。gettext の代わ
りに catgets インターフェース下でも動くようにする、というものなん
ですが、これを実現するために gettext では、po/*.pot ファイルから生
成した po/cat-id-tbl.c というソースコードを使うするようにしています。
このソースでは、次のようにメッセージカタログに収録された文字列と整
数値の ID との対応表を用意しているのです。namazu に同梱されている l
ibintl.a をコンパイルする際に、一緒にこの po/cat-id-tbl.c もコンパ
イルされて libintl.a に含まれます。
| const struct _msg_ent _msg_tbl[] = {
| {"", 1},
| {"Fatal error occured!", 2},
| {"Too long query", 3},
| {"Invalid query", 4},
| {"Too many query tokens", 5},
| {"Too many words matched. Ignored", 6},
しかし、このように po/cat-id-tbl.o というどうにも汎用性のないもの
が libintl.a に含まれてしまいますから、でき上がったライブラリはイ
ンストールできる代物ではありません。
また、po/cat-id-tbl.c はテキストドメインを複数個使う場合のことを
考慮していません。libnmz.a でドメインを一個使うことになるので、
libnmz.a をリンクするアプリケーションが gettext を使おうと思っ
たら、テキストドメインをどうしてももう一個使うことになります。
しかし、そのアプリケーションが namazu と同じように automake,
gettext のドキュメントにしたがってソースコードを用意しようとした
ら、そのアプリケーションもまた po/cat-id-tbl.o を用意します (とい
うか自動生成されます)。結局、namazu とアプリケーションの双方で
--with-catgets が指定されると配列のシンボルが衝突してしまいます。
ちなみに、拙作の EB Library でも同じ問題に直面したので、無理矢理
automake 対応にして libintl をインストールするように改造しました。
それから、--with-catgets は使用不能ということにして、
po/cat-id-tbl.c は libintl.a に含めないことにしました。
________________________________________________________________
笠原 基之(かさはら もとゆき)