在 FreeBSD 安裝 rubygem-oniguruma

基本上 FreeBSD 的 ports tree 目前是沒有這種東西,
不過 ruby18 的 make config 選單裡可以勾出來;
但是它搭的 oniguruma.h 檔好像蠻舊了問題很多 (這個檔案會被裝到 /usr/local/lib/ruby/1.8/i386-freebsd7/ 下),
做 gem install 的時候如果需要編譯的話會 include 到它。
因為 CFLAGS 會自動被加上 -I/usr/local/lib/ruby/1.8/i386-freebsd7/ 這個參數,
並不會因為你裝了 devel/oniguruma5 而幫你優先使用 -I/usr/local/include。

總而言之直接打 gem install oniguruma 基本上就是爆炸,
解決方法就是把 gem 解開改一改再包回去:

  1. tar xfz /usr/local/lib/ruby/gems/1.8/cache/oniguruma-1.1.0.gem
  2. tar xfz data.tar.gz
  3. zcat metadata.gz | ruby -rrubygems -e 'puts Gem::Specification.from_yaml($stdin.read).to_ruby' > oniguruma.gemspec
  4. 編輯 ext/extconf.rb,替 CFLAGS 補上 -I/usr/local/include
  5. gem build oniguruma.gemspec
  6. gem install oniguruma-1.1.0.gem

有下過 gem install oniguruma 炸過一次的,
第一步驟裡的那個 gem 檔就會出現;
至於倒數第二步造出 gem 檔不用 rake gem 的原因是 Rackfile 裡的寫法太舊了,
打下去只會 error 而已。

裝這個要做什麼?
主要是如果想掛 Redmine 的 Ultraviolet Syntax Highlighting Engine 這個 plugin 時會用到,
下 gem install ultraviolet 時就會自動跑去裝跟它相依的 oniguruma。
不過裝完我發現它會讓 code review plugin 在 view source code 的時候沒辦法出現鉛筆符號,
就先暫時把它拿掉了,
畢竟這東西設計上也沒有支援到 wiki,
等我有空的時候再來改改看吧。