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

もっといい方法あったら誰か教えてください。