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 に含めないことにしました。
________________________________________________________________
                                    笠原 基之(かさはら もとゆき)