From: WATANABE Tetsuya Date: 1999-05-13T12:37:06+09:00 Subject: [ruby-dev:6770] Re: Ruby 1.3.3-990507 渡辺哲也です。 HP-UX 10.20 と HP-UX 11 についてです。 すでに小松さんが HP-UX 10.20 で試されているようなの ですが、小松さんのパッチ以外でも引かかる部分があり ました。HP C Compiler は、けっこううるさいので、そ の関係と思います。 パッチファイルは、個別になっていて使いにくくなって しまいましたすいません。それと、配布時点のソースへ のパッチになっているのでそのままではパッチファイル として使えないと思います。ごめんなさい。 対象は、ext/socket と ext/pty です。 最初に ext/socket から。 addrinfo.h の __P ですが、K&R のときに、関数の「()」 がなくなってしまうための対応です。 socket.c では、マクロ (#ifdef) の「#」が行の先頭に ないための対応です。 ------------------------------ --- addrinfo.h.org Thu May 6 15:27:35 1999 +++ addrinfo.h Wed May 12 19:21:57 1999 @@ -66,10 +66,10 @@ #define freeaddrinfo freeaddrinfo__compat #ifndef __P -# ifdef HAVE_PROTOTYPES 1 +# ifdef HAVE_PROTOTYPES # define __P(args) args # else -# define __P(args) +# define __P(args) () # endif #endif @@ -134,12 +134,6 @@ char *ai_canonname; /* canonical name for hostname */ struct sockaddr *ai_addr; /* binary address */ struct addrinfo *ai_next; /* next structure in linked list */ -}; - -struct sockaddr_storage { - u_int8_t __ss_len; - u_int8_t __ss_family; - u_int8_t fill[126]; }; extern int getaddrinfo __P(( --- socket.c.org Fri May 7 17:24:36 1999 +++ socket.c Wed May 12 19:29:12 1999 @@ -1756,11 +1756,11 @@ if (strcmp(STR2CSTR(af), "AF_INET") == 0) { hints.ai_family = PF_INET; } - #ifdef INET6 +#ifdef INET6 else if (strcmp(STR2CSTR(af), "AF_INET6") == 0) { hints.ai_family = PF_INET6; } - #endif +#endif else { hints.ai_family = PF_UNSPEC; } ------------------------------ 次に ext/pty ですが、ANSI-C のプロトタイプが残って いました。ほかに HP-UX のためにマクロで「hpux」を指 定していたのですが、これは HP C Compiler により、動 くものと動かないものがあります。マニュアルには hpux と __hpux があるのですが... で、__hpux は、私が試し た範囲では使えていますので、修正しました。 ------------------------------ --- pty.c.org Wed May 5 22:46:51 1999 +++ pty.c Thu May 13 09:38:20 1999 @@ -22,7 +22,7 @@ #define DEVICELEN 16 #if !defined(HAVE_OPENPTY) -#ifdef hpux +#ifdef __hpux char *MasterDevice = "/dev/ptym/pty%s", *SlaveDevice = "/dev/pty/tty%s", *deviceNo[] = { @@ -108,9 +108,10 @@ }; static void -set_signal_action(RETSIGTYPE (*action)()) +set_signal_action(action) + RETSIGTYPE (*action)(); { -#ifdef hpux +#ifdef __hpux struct sigvec sv; /* * signal SIGCHLD should be delivered on stop of the child @@ -194,7 +195,9 @@ static void getDevice _((int*, int*)); static void -establishShell(char *shellname, struct pty_info *info) +establishShell(shellname, info) + char *shellname; + struct pty_info *info; { static int i,j,master,slave,currentPid; static char procName[32]; ------------------------------ 余談ですが HP-UX の configure の指定方法です。gcc は使わない前提です(ある方は gcc で普通にしてくださ い問題はないと思います)。 HP-UX 10.20 では、次のように指定します。 CC=cc CFLAGS='-O +Onoinline' ./configure gcc があっても gcc は、使わず HP C Compiler にしま す。それと、最適化のオプションは上記のようにしてく ださい。+Onoinline を外すと「node 0」エラーになりま す。 HP-UX 11 では、HP C Compiler のデフォルトが ANSI-C モードになっています。そのため次のように指定します。 CC='cc -Ac' CFLAGS='+O1' ./configure ここでは、最適化のオプションを +O1 にしています。こ れ以上では「node 0」エラーになってしまいます。 この「node 0」エラーは、HP C Compiler の最適化の問 題と思われます。 -- WATANABE Tetsuya e-mail: Tetsuya_WATANABE@hp.com tetsu@jpn.hp.com