ruby-1.8.2-os2-emx private build

…んでまあ、ようやくためしに作ってみました。というかまあ、とりあえず作れることを確認するために作ったというような感じではありますが。
実行には emx のランタイムと iconv(110).dll が必要デス。たぶん(1.10 以外の iconv.dll でも使えるはずだが、はてさて…)

自力で再構築してみたい方は、ソースのパッチとかが doc/ruby-1.8.2/i386-os2-emx に入ってるので適当に元ソースにあてたのち confos2 で configure をかましてください。なんか適当ですが。

忘れないうちに自分用めも:

  • omf 化はあいかわらずメンドそう(1.6.2 時代に一度やったことがあるが、どうやったのか記憶がほとんど残っていない)。システム側のライブラリと ruby 側の拡張ライブラリでまったく同じライブラリ名が用いられるものがあり、その場合 link386 がシンボル解決に失敗する(socket, curses あたり。あと iconv もそうか…)。emx 準拠の gcc を用いる限り、トリッキーな解決法が要求される。
  • そういえば configure で -Zmts が強制的に指定されちゃう(emxlibc*.dll を使わない)のは何故なんだろうと思っていたが、libc をスタティックリンクしないで -Zcrtdll を使うと make test (ruby rubytest.rb) が通らないのでした。djgpp に倣って popen を使うと -Zcrtdll なバイナリでも通る。
  • とはいえシェルが cmd.exe のままだと test が(make そのものも)通らないので、
    1. 環境変数 RUBYSHELL が定義されているときは問答無用でその内容を EMXSHELL に叩き込む
    2. 環境変数 SHELL が定義され、EMXSHELL が未定義の場合その内容に EMXSHELL を設定
    とか起動時に設定して逃げてみた。
    (missing/os2.c 内の do_spawn はそもそも使われていないようだ)
  • openssl は一部のシンボルが未解決とか言われたので入れてない。 0.9.7a を使ったのですが、もしかして 0.9.8 以上じゃないとダメ?