ども、白山 / fortune.nest.or.jpです。

NeXTSTEP3.3J for Motorolra 上で ruby-1.0-970819.tar.gz の
コンパイルに成功したので、報告致します。

ほぼ configure ; make でOKだったのですが、

parse.y:2326: only 0 args to macro 'atof' (1 expected)
sprintf.c:565: only 0 args to macro 'atof' (1 expected)
string.c:1203: only 0 args to macro 'atof' (1 expected)
marshal.c:619: only 0 args to macro 'atof' (1 expected)

の4か所でエラーが出ました。

いづれも double atof();という宣言がひっかかってまして、
これは、stdlib.hにて
----------------------------------------------------------
#ifdef __STDC__
extern double atof(const char *nptr);
#define atof(nptr) strtod(nptr, (char **)NULL)
extern int atoi(const char *nptr);
----------------------------------------------------------

っと宣言されていて、 atof()という関数はあるのですが、
普通にincludeすると atofは strtod()を呼び出すマクロと
して扱われてしまうため、宣言をマクロとして展開しよう
として、引き数がない・・・っとエラーになっている
模様です。

なんでこう(atofがマクロに)なってるのか私には分からない
のですが(^^;)(他のOSでもこうなっているものあります?)、

1. 上記各所の double atof();という宣言をコメントアウトする。
2. 前記各所の直前で #undef atof を追加して マクロ atof()を
    消してしまう

のどっちかをすれば回避出来ます。

気になったので atof()関数を呼ぶ場合と、マクロatofが展開
されて strtod関数が呼ばれてくる場合を簡単なプログラムで
動作を比較してみたのですが、どっちも変わりないみたいです。

make testは無事とおりました、また dynamic loadもうまく
いってるもようです。


なので、近日中にruby-1.0-970820.tar.gz をひろってきて
NeXT用の Binary Package でも作ろうかと思います。

---
SHIROYAMA Takayuki