From: WATANABE Tetsuya Date: 2003-03-04T12:56:58+09:00 Subject: [ruby-dev:19722] Re: [1.8.0 preview2] HP-UX 11.11 渡辺哲也です。 In message "[ruby-dev:19718] Re: [1.8.0 preview2] HP-UX 11.11" on 03/03/04, WATANABE Hirofumi さん writes: |わたなべです。 | |WATANABE Tetsuya writes: | |> これ以外に inline の使いかたが HP-UX では対応してい |> ないものなので |> |> #define inline |> |> を追加しています。 | |missing/strftime.cで使っているinlineとruby.hで使われている |inlineと似ているんですが、どのあたりがまずいんでしょうか? inline については、全体にダメなんです。警告だけ なので、無視してもいいんですが。で、単純な対応が #define inline することなんですが... HP C Compiler は、inline をかなり制限した形でし か使えません。static 関数なら inline にできるの ですが、コンパイル時のオプションで指定するので す。で、予約語 inline を使っての記述ではないの で、警告がでてしまいます。 # 困った感じ... |HP-UXにstrftime(3)があるんならコンパイルできるようにするよりも、 |こちらを調査したほうがいいと思います。 |たとえばlinuxでは成功するんですが、config.logのその部分は |configure:10142: checking for strftime |configure:10186: gcc -o conftest -Os conftest.c -ldl -lcrypt -lm >&5 |configure:10189: $? = 0 |configure:10192: test -s conftest |configure:10195: $? = 0 |configure:10206: result: yes | |となってます。HP-UXではどうなってますか? configure:10173: checking for strftime configure:10223: cc -o conftest -O conftest.c -ldld -lcrypt -lm >&5 cc: "configure", line 10270: error 1584: Inconsistent type declaration: "strftime". cc: "configure", line 10277: warning 604: Pointers are not assignment-compatible. cc: "configure", line 10286: warning 605: Illegal pointer combination for !=. configure:10226: $? = 1 configure: failed program was: エラーになってますね。定義と型が違うためにエラー で止まっているようです。 HP C Compiler では、limits.h から strftime() の 型定義が行われていて、これが「char strftime();」 との型の違いでエラーになっているようです。 # めんどくさー テストコードの一部抜粋 ------------------------------ #ifdef __STDC__ # include #else # include #endif /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char strftime (); ------------------------------ |ということはLDFLAGSが今までは渡されてなかったってことですね。 |lib/mkmf.rbをちょっと見直す必要がありそうです。 そうみたいですね。以前の Makefile (1.7.3 の頃の コンパイル可能なもの) 中に LDFLAGS は同じ定義が ありました。 |ここはエラーになってもいいんですが、なんか変ですね。 |たとえば | |% /bin/sh -c 'ls hogehoge 2>&1 | grep hogehoge > /dev/null' | |と実行しても | |ls: hogehoge: No such file or directory | |のようなメッセージが出ますか? |#出るなら別な方法を考えないと。 でませんでした。 ------------------------------ $ /bin/sh -c 'ls hogehoge 2>&1 | grep hogehoge > /dev/null' $ ------------------------------ # ふぅ