筆者について
FreeBSDを通じてOSSにささかな貢献を。
- 日本xrdpユーザ会発起人
- xrdp developer
- FreeBSD developer
OSS活動をご支援いただける方を募集しています
2010-12-10 ruby19-iconv
■ lang/ruby19 と converters/ruby-iconv の関係
FreeBSDでTwiProwlなどのruby1.9を必要とするソフトウェアを実行しようとすると、以下のようなエラーが出る場合があります。
<internal:lib/rubygems/custom_require>:29:in `require': no such file to load -- iconv (LoadError) from <internal:lib/rubygems/custom_require>:29:in `require' from /usr/local/lib/ruby/1.9/json/common.rb:2:in `<top (required)>' from <internal:lib/rubygems/custom_require>:29:in `require' from <internal:lib/rubygems/custom_require>:29:in `require' from /usr/local/lib/ruby/1.9/json.rb:1:in `<top (required)>' from <internal:lib/rubygems/custom_require>:29:in `require' from <internal:lib/rubygems/custom_require>:29:in `require' from twiprowl:16:in `<main>'
見ての通りiconvのロードに失敗しているだけなので、本来はportsからconverters/ruby-iconvをインストールすればOKなはずです。しかし、単に
cd /usr/ports/converters/ruby-iconv && make install
としたのでは下記のようにruby1.8用のものがインストールされてしまいます。
$ sudo make install ===> License check disabled, port has not defined LICENSE ===> Extracting for ruby18-iconv-1.8.7.302,1 ===> ruby18-iconv-1.8.7.302,1 depends on file: /usr/local/bin/ruby18 - found /bin/mkdir -p /usr/ports/converters/ruby-iconv/work /bin/ln -sf /usr/ports/lang/ruby18/work/iconv /usr/ports/converters/ruby-iconv/work/ ===> Patching for ruby18-iconv-1.8.7.302,1
直接extconfなどを実行してruby1.9用のiconvをインストールしている記事もありますが、これは正攻法ではありません。RUBY_DEFAULT_VER環境変数をセットして以下のようにビルドするのが正解です。
cd /usr/ports/converters/ruby-iconv && make RUBY_DEFAULT_VER=1.9 install
とするとruby1.8用のiconvとruby1.9用のiconvを別々のパッケージとして共存させてインストールすることが可能です。
$ pkg_info| grep iconv | grep ruby ruby18-iconv-1.8.7.302,1 An iconv wrapper class for Ruby ruby19-iconv-1.9.2.0,1 An iconv wrapper class for Ruby
どうしてこうなるのかの秘密は、ruby-iconvのMakefileと8-12行目あたりと、/usr/ports/Mk/bsd.ruby.mkの139-142行目にあります。
これは他の多くの ruby-* というportに対しても有効です。