From: WATANABE Tetsuya Date: 2000-04-27T16:33:02+09:00 Subject: [ruby-list:22154] Re: #define const 渡辺哲也です。 出遅れていますが。 時間的間隔が空いたので、たくさん引用して います。 また、対応も一時しのぎ的なものばかりです。 In message "[ruby-list:22093] Re: #define const" on 00/04/24, Katsuyuki Komatsu writes: |小松です。 | |In the message of [ruby-list:22084] Re: #define const | on 2000/4/24 14:18:20 matz@netlab.co.jp (Yukihiro Matsumoto) wrote: |||・コンパイラに ANSI対応オプションがあるならそれを ||| 使うようにすすめた方がよい。 |||・そうすると rb_mbclen2 がコンパイルエラーになる ||| ことがあるので unsigned int c; にした方がよい。 |||と思うのですがどうでしょうか。 || ||前者はどういう風にするのかちょっと決めかねるのですが、後者は ||簡単ですのでそのように対応することにします。 | |Ruby 1.4.0のsprintf.cで同様な問題があって、 | [ruby-list:16380] Re: ruby1.4.0 on BSD/OS 4.0 |で、 | static void fmt_setup _((char*,char,int,int,int)); |から、 | static void fmt_setup _((char*,int,int,int,int)); |にしてましたね。 | |昔のRubyのmakeのログを見てみると、HP-UX 10.20でPHSS_17507の |パッチをあてる前のcc、 | cc - HP92453-01 A.10.32.20 HP C Compiler | (PHSS_17507適用後はA.10.32.22) |で-Ae -Oだと、変更前のsprintf.cのoptimizeでコンパイラが |落ちてたとか書いてあるな。 | |# HP-UXマシンはなくなってしまったのでもう試せない…… あるんですが、なかなか。 HP-UX 10.20 $ what =cc /usr/bin/cc: LINT A.10.32.03 CXREF A.10.32.03 HP92453-01 A.10.32.03 HP C Compiler /usr/lib/libc: $Revision: 76.3 $ このシステムは、ほとんどパッチなしです。 確認したのは ruby-1.4.4 のソースコードで す。 CC='cc -Ae' CFLAGS='-O +Onolimit' ./configure 後に make しています。make に失敗するの は二つあります。 re.c missing/vsnprintf.c HP C Compiler で起きるものばかりで、GCC では、エラーにならない関係のものです。 cc: "re.c", line 185: error 1711: Inconsistent parameter list declaration for "rb_mbclen2". これは ANSI-C モードでコンパイルした場合 の cpp の動きのためと思います。 re.h の int rb_mbclen2 _((unsigned char, VALUE)); が、次のようになります。 int rb_mbclen2 (unsigned char, VALUE) ; まつもとさんが、対応いただけるようなので OK なのですが、いまのままの定義を対応す るためには、 re.c の rb_mbclen2 を ANSI-C 用にタイプ 宣言が必要です。ruby.h 関係もあって、 ANSI-C ではない K&R モードでは、うまくコ ンパイルできないようです。いまのまま回避 する場合は、ここだけプロトタイプ宣言を入 れてしまうと動きます。 ------------------------------ $ diff -u re.c.org re.c --- re.c.org Sun Jan 16 00:51:27 2000 +++ re.c Thu Apr 27 16:07:15 2000 @@ -183,9 +183,13 @@ } int +# ifdef __STDC__ +rb_mbclen2(unsigned char c, VALUE re) +#else rb_mbclen2(c, re) unsigned char c; VALUE re; +#endif { int len; ------------------------------ 私の確認している環境は、小松さんが書かれ ている HP-UX 用コンパイラパッチは実施し ていません。 この状態でコンパイラがエラーになるのは、 このほか missing/vsnprintf.c があります。 これは -Ae (ANSI-C モード)を外すとコンパ イルできてしまいます。 ANSI-C モードのときは、プロトタイプ宣言 の関係で、インクルードファイルをかなり呼 びだしていて stdio.h に行き着き、たくさ んのエラーをだしてしまいます。 make 一発でなくてすいませんが、とりあえ ず確認した情報です。 # 久しぶりに HP-UX 10.20 しました。 -- WATANABE Tetsuya e-mail: Tetsuya_WATANABE@hp.com tetsu@jpn.hp.com