HP-UX 10.20 の話です。とりあえずお知らせだけ。

snprintf.c が簡単にはコンパイルが通りません。コマ
ンドラインで次のようにすること *と*

cc -O -Aa -D_INCLUDE_POSIX_SOURCE -D__hpux__ -c missing/snprintf.c

fpos_t の typedef を無効にするとコンパイル可能で
す。

別件のわたなべさんのパッチを含めるとこんな感じです。

------------------------------
$ diff -u snprintf.c.org snprintf.c
--- snprintf.c.org      Wed Aug 12 11:28:44 1998
+++ snprintf.c  Wed Aug 12 14:44:38 1998
@@ -62,6 +62,9 @@
 
 #if defined(__STDC__)
 # include <stdarg.h>
+# if !defined(__P)
+#  define __P(x) x
+# endif
 #else
 # undef  __P
 # define __P(x) ()
@@ -93,7 +96,9 @@
  * boundaries.  THIS IS A CROCK, but for now there is no way around it.
  */
 #if !defined(_ANSI_SOURCE) && !defined(__STRICT_ANSI__)
+#if !defined(__hpux__)
 typedef off_t fpos_t;
+#endif
 #else
 typedef struct __sfpos {
        char    _pos[8];
@@ -347,7 +352,9 @@
 #define u_int unsigned int
 
 #include <limits.h>
+#if !defined(__CYGWIN32__)
 #include <stdlib.h>
+#endif
 #include <string.h>
 
 #if defined(__STDC__)
------------------------------

cc のオプション -Aa は ANSI-C モードで、ヘッダと
か cpp のシンボルにも影響を与え、__hpux__ などの
設定が使えないので、-D__hpux__ を加えないとだめで
す。

この -Aa オプションでは UNIX 系の拡張部分なども使
えないので、Ruby 自身のコンパイルのは使えません。

コンパイルの手順は、make する前に、「手動で」 
snprintf.c を先にコンパイルして、make を実施しま
した。configure が生成した Makefile ではコンパイ
ルできません(gcc/HP C ともに)。

snprintf.c を一発でコンパイルできればいいのですが、
ヘッダ関係がかなり影響を与えているので、-Aa を外
すとうまく行きません(gcc はなおさらダメでした)。

ちょっとややこしい感じです。

Linux では snprintf.c のコンパイルは必要ありませ
んが確認してみました。glibc の環境はうまく行きま
したが、glibc 以外の環境だと gcc -c でコンパイル
がうまく行きません(手元のものは TurboLinux 1.4J)。
自宅の glibc 環境(TurboLinux 2.0J)ではそのままコ
ンパイルできたと思います。

ということで、引っかかりました。

--
WATANABE Tetsuya HP Japan
e-mail  tetsu / jpn.hp.com