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