Namazu-users-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: __APPLE_ (patch) Re: make error on Mac OS X



寺西です。

藤原 誠 / Makoto Fujiwara wrote:
> 
> 甲> その他に4変数を使っている箇所がないか調べた結果、該当するのは
> 甲> ご指摘の src/namazu-cmd.c の中の optind の1箇所のみでしたので、
> 甲> これを optind_t と変更してみたところ、make check 結果もすべて
> 甲> PASS となって問題が解決しました。make install も無事済んで、
> 甲> TerminalはもちろんCGIもちゃんと動いているようです。

この問題は、Namazu では getopt がシステムで用意されておれば、
それを使う。もし、システムで用意されていなければ、Namazu ローカル
な getopt を使うとなっています。しかし、MacOS X ではどうやら
システムの getopt を認識できない(または仕様にあわない)ため、
Namazu ローカルな getopt を使おうとするのだが、システムの
getopt が邪魔をしてしまっているというもののようです。
Namazu ローカルな getopt のグローバル関数、変数の名前がシステム
のものと同じためです。
という前置きをしておいて。

> という話があったのを思い出し、これが patch の形にはならない
> かなと思って、一応作って見ました。かなりいい加減で、もう少し
> ましな方法があるだろうと思いながら、
> ===================
> All 46 tests passed
> ===================
> になりましたので、一応ここにお送りしておきます。

このパッチは Mac (__APPLE__ が定義されている場合) は、強制的に
Namazu ローカルな getopt を使うというものですね。
問題ないと思います。

> __APPLE__ の定義の有無で、
>   getopt            __getopt
>   opterr            __opterr
>   optind OPTIND  -> __optind
>   optopt OPTOPT  -> __optopt
> のように置換えています。四つが同じ方式にしていないのに強い意味は
> ありません。

__APPLE__ の定義があれば
   getopt  -> __getopt
   opterr  -> __opterr
   OPTIND  -> __optind
   OPTOPT  -> __optopt
なければ
   getopt  -> そのまま (従来通り)
   opterr  -> そのまま (従来通り)
   OPTIND  -> optind (従来通り)
   OPTOPT  -> optopt (従来通り)
ですね?

この修正自体は問題ないと思いますが、どうせやるなら以下のように
してしまった方が良いのではないかと思います。
というのも、Namazu ローカルな getopt のグローバル関数、変数の名前が
システムのものと同じ名前というのは、紛らわしいためです。

MacOS X で問題になったので、lib/getopt* は他の場所に移動して、
グローバルな関数名、変数名には _nmz_ でも付けてしまうのが
すっきりして良いかもしれません。
そして nmz/support.h 辺りで、__APPLE_ 以外の場合は
   _nmz_getopt, _nmz_opterr, _nmz_optind, _nmz_optopt 等をシステムの
ものに置き換える。
src/* では、_nmz_* を使って呼び出すようにするというのが良いように
思いますが、いかがでしょう。
-- 
=====================================================================
寺西 忠勝(TADAMASA TERANISHI)  yw3t-trns@xxxxxxxxxxxxxxx
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint =  474E 4D93 8E97 11F6 662D  8A42 17F5 52F4 10E7 D14E