KyotoCabinet binding for Ruby にハマる

なんと長年使っているKyotoをFreeBSDにインストールしようとして,ハマった出来事.

エラーはこんな感じ.

compiling kyotocabinet.cc
kyotocabinet.cc: In member function 'virtual void db_close(VALUE)::FuncImpl::operate()':
kyotocabinet.cc:2184: error: 'class kyotocabinet::PolyDB' has no member named 'ruby_close'
kyotocabinet.cc: In function 'VALUE db_close(VALUE)':
kyotocabinet.cc:2194: error: 'class kyotocabinet::PolyDB' has no member named 'ruby_close'
*** [kyotocabinet.o] Error code 1

???
Linuxやと,yumだろうがソースだろうが何の問題も無く30秒くらいでインストールできたものを...

サボってportsで自動インストールすると,下記のエラーが.

root:/usr/ports/databases/ruby-kyotocabinet # make
===>  ruby19-kyotocabinet-1.24_1 is marked as broken: does not compile.
*** [all] Error code 1

Stop in /usr/ports/databases/ruby-kyotocabinet.

これはFreeBSDも認識しているらしい.

FreshPorts -- databases/ruby-kyotocabinet

/usr/portsでmakeしても同じようなエラーが出ます.

===>  Building for ruby19-kyotocabinet-1.24_1
compiling kyotocabinet.cc
kyotocabinet.cc: In member function 'virtual void db_close(VALUE)::FuncImpl::operate()':
kyotocabinet.cc:2020: error: 'class kyotocabinet::PolyDB' has no member named 'ruby_close'
kyotocabinet.cc: In function 'VALUE db_close(VALUE)':
kyotocabinet.cc:2030: error: 'class kyotocabinet::PolyDB' has no member named 'ruby_close'
*** [kyotocabinet.o] Error code 1
1 error
===> Compilation failed unexpectedly.

ちょっと追ってみれば分かることで,

emacs extconf.rb

$CFLAGS = "-I. #{kccflags} -Wall #{$CFLAGS} -O2"

$CFLAGS = "-I. #{kccflags} -Wall #{$CFLAGS} -O2 -DRUBY_DONT_SUBST"

余計なことをしないようにすればよろしい.

$ ruby extconf.rb
extconf.rb:18: Use RbConfig instead of obsolete and deprecated Config.
setting variables ...
  $CFLAGS = -I. -I/usr/local/include -Wall -I/usr/local/include -O2 -pipe  -fno-strict-aliasing -fPIC -O2 -DRUBY_DONT_SUBST
  $LDFLAGS = -L.  -Wl,-rpath=/usr/lib:/usr/local/lib -pthread -L/usr/local/lib -rdynamic -L. -L/usr/local/lib
  $libs =  -lkyotocabinet -llzma -llzo2 -lz -lstdc++ -lrt -lpthread -lm -lc
checking for kccommon.h... yes
creating Makefile

$ make

compiling kyotocabinet.cc
linking shared-object kyotocabinet.so

これで完成.
FreeBSDportsに反映させるにはどうすれば良いのだろう.