OS2/emx/openssl
OS/2 版:
Apache for OS/2→mos_ssl→ OpenSSL for OS/2
hobbes には 0.9.7a のランタイム(openssl.exe, crypto.dll, ssl.dll, ヘッダ、インポートライブラリ)がある。
0.9.8a for OS/2
emx+gcc でコンパイル
基本的には INSTALL.OS2 に書いてある方法で。 perl 必須(警告がうざいので一時的に set LANG=en_US しておくといいかも)。 あと OS2-EMX.cmd 内で grep、*.mak 中で若干のファイルユーティリティ(cp, rm...) が使われている。
若干の修正が必要。
- crypto/bn/bn_mul.c と crypto/bn/asm/bn_586.asm とで bn_sub_part_words が重複。 生成された makefile (os2-emx.mak, os2-emx-dll.mak) 中の CFLAGS に -DOPENSSL_BN_ASM_PART_WORDS を書き足し。 あるいはあらかじめ util/pl/OS2-EMX.pl のそれっぽいところに同等の指定を追加しておく。 (たしか最近の cvs で修正がはいってた気がする…)
-
pqueue_print 関数 (crypto/pqueue/pqueue.c) は OS/2 環境だと使われないにもかかわらず def ファイルの EXPORT エントリに記述されてしまい、結果として DLL 生成失敗。
どうしたもんですかね。ダミー関数を置いとくか def 中の pqueue_print を手動でコメントアウト?(コメントアウトすればひとまず通ることは確認した)
→とりあえずコメントアウトするスクリプトをもう一枚かませることで解決してみた(backward-*.def 生成時に微妙に警告が出るような…)
だいたい手順通りでコンパイルできるようにするパッチ: openssl-0.9.8a-os2-20051113.diff (一応これでいけるといいな、的な)
ためしにバイナリをこっちに捨てておいた。
http://ebisa.hp.infoseek.co.jp/os2/ruby.htm#openssl
もしかすると unix 系ツールをもすこし真面目につっこむと多少改善するのかもしれない、とか思ったがどうしたもんですかね。ux2bs でやるしかないのか?
既存ランタイムとの互換性
ライブラリ名が変更されている(crypto→cryptssl, ssl→open_ssl)。 既存ライブラリとの互換性のため(だと思う)、それぞれについて forwarding DLL が用意されている。というかコンフィグレーション時に勝手に作ってくれる。まあ親切。
しかしこの DLL、ぶっちゃけ ordinal の互換性あるのか激しく不安だ。というか序数については ICONV で絶望したのでぜんぜん信じてないのだった。
しかしおどろいたことに、ざっと見た感じ、序数の整合性は取れているような気配。といいつつ全比較はしてないんだけど。
(2005-11-13) 関数と序数の対応は util/libeay.num と util/ssleay.num にハードコーディングされている。 プラットフォーム毎のシンボル名の差異も考慮されているようにみえるが、どうも利いてないような気がしてならない。mkdef.pl をどうにかすべきなのかもしれないが、perl は見てもさっぱりわかんねえしなあ。
(2005-11-12 08:55) 一部エクスポートされない関数がある。 デフォルトの設定だと MDC2 と RC5 が無効なので Config の引数に enable-mdc2 enable-rc5 追加(Makefile と crypto/opensslconf.h はあらかじめ消しておかないとダメかも)。 それから EVP_*_cfb は微妙に名前が違っている。 あとは ERR_load_CRYPTOlib_strings。
-EVP_aes_128_cfb crypto 3222 ? +EVP_aes_128_cfb128 cryptssl 3222 ? -EVP_aes_192_cfb crypto 3225 ? +EVP_aes_192_cfb128 cryptssl 3225 ? -EVP_aes_256_cfb crypto 3223 ? +EVP_aes_256_cfb128 cryptssl 3223 ? -EVP_bf_cfb crypto 295 ? +EVP_bf_cfb64 cryptssl 295 ? -EVP_cast5_cfb crypto 984 ? +EVP_cast5_cfb64 cryptssl 984 ? -EVP_des_cfb crypto 300 ? +EVP_des_cfb64 cryptssl 300 ? -EVP_des_ede3_cfb crypto 305 ? +EVP_des_ede3_cfb64 cryptssl 305 ? -EVP_idea_cfb crypto 319 ? +EVP_idea_cfb64 cryptssl 319 ? -EVP_rc2_cfb crypto 326 ? +EVP_rc2_cfb64 cryptssl 326 ? -EVP_rc5_32_12_16_cfb crypto 1088 ? +EVP_rc5_32_12_16_cfb64 cryptssl 1088 ?
序数が同じ関数はインターフェースも完全に同一、ってことでいいんですかねえ。
(まあ noname なほうの forwarder なら少なくとも名前に気を病む必要はなくなるのですが)
未整理項目
- 0.9.8 における過去バージョンとの非互換性(ぶっちゃけ ruby の ext/openssl コンパイル時に発生する問題。ruby-1.8.3 以上の場合問題ない)
- _CONF_* がエクスポートされない。これは Win32 版の DLL と同様。
- ux2bs に入っているライブラリはスタティックリンクされるもののようだ。