きりかノート 3冊め

おあそびプログラミング

libffiがLionで問題があるっぽいのでパッチをつくった

(11/15 追記。このパッチはマージされました。次の3.0.11には反映されている予定です)

http://d.hatena.ne.jp/kimuraw/20110927/p1 のつづき。もともとはruby-1.9.2のfiddle/dlで問題があるみたいってところから。

類似の問題がないか検索

なんとなくLionでだけlibffiが問題があるっぽい印象はあって、検索のワードは忘れてしまったんだけど、mozillaのチケットがひっかかった。

   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のテストが通るようになった。完全勝利!!

修正

MacPortsのport:libffiはnomaintainerなので勝手に直した(r86662)。あ、コミットログのtypo見つけたけどもういいや。

で、本家のほうだけど、最新のリポジトリでも直ってないぽい。タイミング的に2011年8月リリースのlibffi-3.0.10で修正されてないのは仕方ないとしても、mozillafinkも認識してるんだからupstreamに連絡いってないのかねえ。状況がわからんので「重複してたらごめんね」の気持ちとともにgithubのlibffiにpull requestなげといた。

早くとりこまれますように。