Ruby Install Guide::EWS4800

インストール

拡張ライブラリを使用するには、configure のオプション --enable-shared と 環境変数 LD_RUN_PATH の設定が必要です。

$ gzip -dc ruby-X.Y.Z.tar.gz | tar xvf -
$ cd ruby-X.Y.Z
$ env CFLAGS="-g -Xa -Dconst=" ./configure --enable-shared
$ env LD_RUN_PATH=/usr/local/lib make
$ ./miniruby sample/test.rb
$ make install
補足
  • C コンパイラオプション -Xa (ANSI準拠モード) のあるなしによっ て、数学関数の挙動に違いが出ます。詳細は matherr(3) を参照してくだ さい。-Xa を指定することを推奨します。
  • configure 時に -Dconst= を指定しなければ ext/socket/getaddrinfo.c の コンパイル時に

    cfe: Error: getaddrinfo.c, line xxx: Qualifier(const or volatile) is Incompatible pointer type assignment.
                              if ((sp = getservbyname(servname, proto)) ==  0)
    
                              ------------------------^
      *** Error code 1 (bu21)
      make: fatal error.
    

    といったエラーになります(OS が UX/4800 の場合。EWS-UX/V では必要な かったはずです)。

  • make した ruby は、LD_RUN_PATH の指定により /usr/local/lib/libruby.so がリンクされます。make test で古いライブラリを使用してしまいますので、 (LD_LIBRARY_PATH の指定より優先するようです) これを避けるために miniruby を使って動作チェックをしています。

    環境変数 LD_LIBRARY_PATH, LD_RUN_PATH に関しては man page ld(1) も参照してください。

UX/4800 の make の問題

UX/4800 付属の make は VPATH の実装が非常にダサイ。VPATH 参照先の ソースをカレントに ln (あるいはコピー)してから make する(終ったら 消す)といった動作をする。一見問題ないようだが、以下のような場合に コンパイルに失敗する。

$ mkdir d
$ touch d/foo.h

$ cat > d/foo.c
#include "foo.h"
main(){}
^D

$ echo VPATH=./d > makefile

$ make foo

なぜ失敗するかというと #include "..." は、それを記述したソースがあ るディレクトリをヘッダの検索対象にするためだ。UX/4800 の make は C 言語のこの仕様がまったく考慮されてない。同様の理由で、ruby の make 時にソースとは別の場所で以下のように build を行うと拡張ライブラリ の make で失敗する。

$ tar xvzf ruby.tar.gz
$ mkdir build
$ cd build
$ ../ruby/configure && make

ちなみに、ruby では、make という名前以外の make コマンドを使用する 場合、拡張ライブラリの作成時に使用する make コマンドを明示的に指定 しなくてはならない。

例えば GNU make を gmake という名前でインストールしている場合は

$ ../ruby/configure --with-make-prog=gmake && gmake

とする必要がある。

バージョン依存の情報
  • ruby-1.6.3 はコンパイルエラーになります。詳細は[ruby-dev:12570], [ruby-dev:12605] を参照してください。この問題は ruby-1.6.4 で修 正されました.
  • Thread を使うと Ctrl-C が効かなくなる場合があります[ruby-dev:13207]
  • Thread と Socket を一緒に使用すると接続受付(accept)等で、 Segmentation Fault することがあります。 [ruby-dev:14468], [ruby-dev:14477]のパッ チが有効です(パッチは 1.7 用ですが,変更は少ないので適当に手 で修正してください)。
  • [ruby-dev:14571] の問題があることがわかっています。
rubicon 結果
備考

上記手順の確認は現在、OS UX/4800 R13.7 でしか行っていません。

$ uname -a
UNIX_SV xxxx 4.2MP 1.release.1218.07:36 R4000 r4000
$ uversion
Release13.7 Rev.B - EWS4800/410AD - WS

EWS-UX/V, UX/4800 の各OSでコンパイルした実績があります(おそらく UP-UX/V でも問題ないでしょう)。最も古いOSでの実績としては EWS-UX/V R7.1 でコンパイルしたことがあります(手順もそれほど変わらないはずです)

ただし、ABI モードのコンパイラ(/usr/abiccs/bin/cc)でしか確認していませ ん。

Ruby Install Guide::この項目のメンテナと最終更新日時

Koji Arai jca02266@nifty.ne.jp (19 Sep 2002)



The RWiki