デバッグモードで見てみたら、MD5の結果がFreeBSDのrubyとMac OS Xのrubyで違うのが原因だった。
ん? WORDS_BIGENDIAN無しでコンパイルされているのか?
rubyのソース持って来てgrep -R ENDIAN *してみると
ext/digest/md5/md5.c
ext/digest/rmd160/rmd160.c
ext/digest/sha2/sha2.c
pack.c
だけがifdefしている。
つまりENDIAN仮説が正しいとしたら、この4つだけが引っかかるんだな。configure時にENDIANを認識していないのか?
見てみるとマンマruby 1.6.7のソースだな。
もしかしてAppleはrubyのコンパイルしくじってる?
実際にmd5をMac OS XとFreeBSD i386で取って比べて見る:
test.rb
#!/usr/bin/env ruby
require 'digest/md5'
include Digest
p MD5.new("test")
で、Mac OS X(big endian)
[Mac OS X:~] % ./test.rb
e9c8a20ac38b2a94e25b7779a01ad35c
でFreeBSD/i386(little endian)
[FreeBSD:~] %./test.rb
098f6bcd4621d373cade4e832627b4f6
結果が違う。
sheepmanさんのコメントからリンク先。
finkからインストールすればOkだという話。
[ コメントする ]