ども、白山 / 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