libffiがLionで問題があるっぽいのでパッチをつくった
(11/15 追記。このパッチはマージされました。次の3.0.11には反映されている予定です)
http://d.hatena.ne.jp/kimuraw/20110927/p1 のつづき。もともとはruby-1.9.2のfiddle/dlで問題があるみたいってところから。
類似の問題がないか検索
なんとなくLionでだけlibffiが問題があるっぽい印象はあって、検索のワードは忘れてしまったんだけど、mozillaのチケットがひっかかった。
- https://bugzilla.mozilla.org/show_bug.cgi?id=682180
- https://hg.mozilla.org/mozilla-central/rev/def68a106743
1.11 case "$target" in 1.12 - *-apple-darwin10* | *-*-freebsd* | *-*-openbsd* | *-pc-solaris*) 1.13 + *-apple-darwin1* | *-*-freebsd* | *-*-openbsd* | *-pc-solaris*) 1.14
"darwin10"決め打ちだとうう!? 、、、そりゃないぜ。
あらためて調べてみると、finkも対応してるじゃん。
これはconfigureスクリプトの中で、FFI_MMAP_EXEC_WRITというマクロを定義するかどうかを判定してるとこなんだけど、ようするに
- 10.5以前 -> 定義しない
- 10.6 -> 定義する(darwin10)
- 10.7 -> 定義しない(darwin11)
という状況になってる。使用場所のひとつであるsrc/dlmalloc.cあたりがあやしげ。
ちなみにApple版のlibffiがどーなってるかというと、よくわかんないです。ソースファイル配置の構造がちがっててどのバージョンが元なのかもさっぱり。とりあえずFFI_MMAP_EXEC_WRITがコード中にないことだけは見た。
検証
configure直してFFI_MMAP_EXEC_WRITを定義するようにしたlibffiをインストールしたところ、ruby-1.9.2-p290|1.9.3-p0ともfiddleのテストが通るようになった。完全勝利!!