===========================================================================
       Ruby 1.8.1 (公開版 + 独自パッチ) for OS/2 with EMX 0.9d FIX04       
===========================================================================

Ruby <http://www.ruby-lang.org/> の私家版バイナリパッケージです。

長い間、長沢研二氏提供の Ruby 1.6.4 バイナリには大変お世話になりました。
しかし、さすがに版が古くなって Ruby の最近の話題とのずれが目に見える
ようになってきた事と、試したい拡張ライブラリを使えない事が悩みでした。
これがバイナリパッケージ作成のきっかけでした。

OS/2 with EMX では未解決の問題が幾つか存在します。このパッケージは、
ベースのソースパッケージに、それらに対する独自改善を試みたものです。
Ruby 1.8.0 preview 以前からその時々の最新版を日常的に使っています。
既に Ruby 1.6.4 は使用していませんが、今のところほぼ問題ありません。
概ね Ruby 1.6.4 と同等以上に使えるものと思います。

とはいえ、全ての機能を使用しているわけではないので、完全に動作確認
されているわけではありません。特に拡張ライブラリは、正しく動作しない
ものがあるかもしれません。ですので、念のため人柱覚悟をお忘れなく。

発見された問題点や加えた変更は、基本的には Ruby の開発者 ML である
ruby-dev に報告してきました。しかし、検証できる人が少ないためか、
必ずしも報告したパッチの全てが取り込まれているわけではありません。
正式に OS/2 版メンテナとなりましたので、順次改善していくつもりです。

もし、問題に遭遇されたら、Ruby の ML か Siena. へご連絡ください。
一応、幾つかの WWW 上の BBS もたまに見ていますので、そちらでも結構です。
できる範囲は限られますが、問題改善の努力をしたいと思っています。
可能ならばパッチなど、解決方法も併せて教えていただけると助かります。


稼働環境
========

動作確認した OS のバージョンは OS/2 V4.51 (MCP1) 日本語版です。

EMX 0.9d FIX04 のランタイムライブラリと (少なくとも) 次のライブラリ
または互換のものが必要です。他バージョンでの動作は現時点では未確認です。
これら以外のライブラリでの動作実績がありましたら情報をお寄せください。

libiconv 1.4 <http://www.sra.co.jp/people/akira/os2/libiconv/index-j.html>
zlib 1.1.4   <http://hobbes.nmsu.edu/pub/os2/dev/unix/zlib114.zip>

各ライブラリの作者、ポーターの皆さまに感謝。


導入・廃棄
==========

前提となるライブラリを、予め導入済みであると仮定します。

後述の設定でビルド・導入したディレクトリ以下をまとめたものです。
JFS や HPFS のようなロングファイル名を使用可能なドライブの適当な
ディレクトリに展開し、環境変数を適宜変更してご利用ください。
それ以外に特別な設定は必要ありません。

  $ cd /usr/local                            # 導入先の親ディレクトリ
  $ tar -tzf ruby-*-i286-os2-emx.tgz | less  # ファイルリスト確認
  $ tar -xzf ruby-*-i286-os2-emx.tgz         # アーカイブの展開

尚、実行ファイルには、問題解決時の対策を取り易くするために、
gcc -g でコンパイルしてデバッグシンボルが埋め込まれています。
次のようにこれを取り除く事で、実行ファイルを小さくできます。
ディスク容量に余裕があれば、トラブル時にトレースできるように
デバッグシンボル付きの実行ファイルも残しておく事をお勧めします。
ちなみに、emxbind は emxrt.zip に含まれています。

  $ cd /usr/local/Ruby/bin
  $ cp -a ruby.exe ruby-g.exe
  $ emxbind -s ruby.exe

廃棄は、導入先ディレクトリ以下を全て削除して環境変数を元に戻すだけです。

  $ rm -rf /usr/local/Ruby                   # 全ファイル削除

以下では、本パッケージの導入先ディレクトリを $RUBYDIR と、ビルド時の
ソースディレクトリを $RUBYSRC と書きますので、適宜読み替えてください。
上記の操作例では、$RUBYDIR は /usr/local/Ruby になります。


環境変数
========

必須の環境変数の設定は PATH への追加だけです。
OS/2 版での独自の環境変数は追加されていません。
詳しくは、man ruby などを参照してください。

* PATH      : $RUBYDIR/bin を追加する
* MAMPATH   : $RUBYDIR/man を追加する
* RUBYLIB   : $RUBYDIR/lib/ruby 以外のライブラリディレクトリのリスト
* RUBYOPT   : ruby.exe 実行時のデフォルトオプション
* RUBYPATH  : Ruby スクリプト検索ディレクトリのリスト
* RUBYSHELL : システムシェル (未定義時は COMSPEC を使用)


ディレクトリ構成
================

ドキュメントは、Ruby の公式サイトから入手してください。
通常でインストールされるファイルの他に、次をコピーしてあります。

$RUBYSRC/{misc,sample,test}/  -> $RUBYDIR/share/ruby-1.8.1/
$RUBYSRC/{COPYING*,ChangeLog,*GPL,LEGAL,ToDo,README*}
                              -> $RUBYDIR/doc/ruby-1.8.1
$RUBYSRC/ext/Setup.emx        -> $RUBYDIR/doc/ruby-1.8.1/i386-os2-emx
*.diff (及び、その他変更記録) -> $RUBYDIR/doc/ruby-1.8.1/i386-os2-emx


ビルド条件
==========

詳しくは次のファイルを見てください。

* $RUBYDIR/lib/ruby/1.8/i386-os2-emx/rbconfig.rb : 基本設定
* $RUBYDIR/doc/ruby-1.8.1/i386-os2-emx/Setup.emx : 拡張ライブラリ
* $RUBYDIR/doc/ruby-1.8.1/i386-os2-emx/*.diff    : 差分パッチ

実用上の面から、本家に報告済みでも取り込まれていない、
あるいはまだ報告していないパッチを当ててビルドしています。
変更内容については、差分パッチを参照してください。

標準添付の拡張ライブラリのうち、可能なもの全部を静的リンクするよう
Setup.emx で指定しているため、バイナリは肥大化の一途を辿っています ^^;
また、標準添付の拡張ライブラリの他に uconv をリンクしています。
uconv には --enable-compat-win32api を指定しています。

但し、実体のライブラリがビルド環境にないものはリンクされていません。
make の表示によると、実際にリンクされている拡張ライブラリは次の通り。
dbm, gdbm, io/wait, syslog, tcltklib 等がリンクできていないようです。

EXTOBJS=ext/extinit.o ext/bigdecimal/bigdecimal.a ext/curses/curses.a
        ext/digest/digest.a ext/digest/md5/md5.a ext/digest/rmd160/rmd160.a
        ext/digest/sha1/sha1.a ext/digest/sha2/sha2.a
        ext/enumerator/enumerator.a ext/etc/etc.a ext/fcntl/fcntl.a
        ext/iconv/iconv.a ext/nkf/nkf.a ext/openssl/openssl.a
        ext/pty/pty.a ext/racc/cparse/cparse.a ext/readline/readline.a
        ext/sdbm/sdbm.a ext/socket/socket.a ext/stringio/stringio.a
        ext/strscan/strscan.a ext/syck/syck.a ext/tk/tkutil.a
        ext/uconv/uconv.a ext/zlib/zlib.a
EXTLIBS=-lm -lz -lsocket -lreadline -lncurses -lssl -lcrypto -liconv -ltermcap


ビルド手順
==========

参考までに、ビルドの手順の概略 (*) を示しておきます。
対話シェルは GNU bash 2.05 を使用しています。

(*) 作業記録から書き起こしているので間違いが混入しているかもしれません ^^;

## ソース取得 (gpatch は GNU patch)
export TMPDIR=F:/tmp RUBYDIR=F:/Usr/Prog/Ruby
cd $TMPDIR
wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.1-preview4.tar.gz
tar -xzf ruby-1.8.1-preview4.tar.gz
gpatch < *.diff

## 拡張ライブラリを静的リンクするよう設定
cd $TMPDIR/ruby/ext
wget http://www.yoshidam.net/uconv-0.4.11.tar.gz
tar -xzf uconv-0.4.11.tar.gz
mv Setup.emx Setup.emx.org
egrep -vi 'win|\<dl\>' Setup.emx.org | sed 's/# *//' > Setup.emx
echo uconv >> Setup.emx

## ビルド  (--enable-compat-win32api は uconv のため)
cd $TMPDIR/ruby
autoconf
./configure --prefix=$RUBYDIR --with-static-linked-ext=yes  \
            --disable-shared --enable-compat-win32api
make
make test

## 導入
make install
mkdir -p               $RUBYDIR/share/ruby-1.8.1
cp -a misc sample test $RUBYDIR/share/ruby-1.8.1/
rm -rf                 $RUBYDIR/share/ruby-1.8.1/{*,*/*,*/*/*}/CVS
mkdir -p               $RUBYDIR/doc/ruby-1.8.1
cp -a COPYING* ChangeLog *GPL LEGAL ToDo README* $RUBYDIR/doc/ruby-1.8.1
mkdir -p               $RUBYDIR/doc/ruby-1.8.1/i386-os2-emx
cp -a ext/Setup.emx    $RUBYDIR/doc/ruby-1.8.1/i386-os2-emx
cp -a ../*.diff        $RUBYDIR/doc/ruby-1.8.1/i386-os2-emx


連絡先
======

Ruby 公式 ML : ruby-{list,dev} <http://www.ruby-lang.org/ja/20020104.html>

OS/2 版メンテナ : Siena. <mailto: n.siena @ nifty . ne . jp>
# スパムまみれで頻繁には見ないアドレスなので、反応が遅くてもご容赦ください。
