Ruby拡張の作成 using Autotools
extconf.rb(mkmf.rb)で作ったMakefileだとC++標準ライブラリのヘッダーがなぜか読めなくなったり、Autoconfと思いっきり内容がかぶるのでAutotoolsオンリーでRuby拡張を作ってみた。
基本的にはruby.hインクルードしてlibrubyにリンクするだけなのだが、Mac OSX環境だとちょっとした問題が生じたのでメモ。
libtool + autotoolsの環境では、デフォルトでdylibタイプの共有ライブラリが作成されてしまうので、LDFLAGS=-moduleを渡して、bundleタイプで作ってやる必要がある。しかし、出力ファイルがなぜか.soで出力されてしまい、これがOSX添付のRubyだと読み込んでくれない。
そこで、.bundle -> .soのシンボリックリンクを作り、一緒にインストールしてやるといい。
具体的には、こんなかんじ:
if BUILD_RUBYEXT_OSX # osx ruby somehow doesn't read libpolatsk_ruby.so # so we will create a symlink pointing to it # install-exec-local: (cd $(libdir); \ if test ! -L "libpolatsk_ruby.bundle"; then \ ln -s libpolatsk_ruby.so libpolatsk_ruby.bundle; \ fi) endif
もっといい方法あったら誰か教えてください。