Win32な環境でnokogiriを動かすのに手間取ったのでメモ

「ふぁぼられったー for Mac」をWindowsでも動かしてみるため、Windowsな環境にnokogiriをインストールしようとしたら、盛大にハマってしまった。
以下そのメモ

環境

  • WindowsXP SP3
  • ActiveScriptRuby 1.8.7 (patch level: 72)

な環境でnokogiri(1.3.2)を動かした記録

nokogiriのインストール

gem install nokogiri -r

でインストール。
一度、libxsltが無いと言われて cyg-apt で libxslt-devel をインストールしたが、うまくいかず、結局手作業でインストールしたらインストールできた。このあたりの手順は省略。別エントリとして起こすつもり。

<追記>
Cygwinでは、cyg-apt でのlixml2-develとlibxslt-develパッケージをインストールしておく必要があった。

$ cyg-apt install libxml2-devel
$ cyg-apt install libxslt-devel

インストールされたのはこのときの最新、1.3.2がインストールされた。

で、irbで確認しようとしたら以下のようなエラー

>require 'rubugems'
>require 'nokogiri'
Gem::LoadError: Could not find RubyGem racc (>= 0)

        from C:/PROGRA~1/ruby-1.8/lib/ruby/vendor_ruby/1.8/rubygems.rb:578:in `report_activate_error'
        from C:/PROGRA~1/ruby-1.8/lib/ruby/vendor_ruby/1.8/rubygems.rb:134:in `activate'
        from C:/PROGRA~1/ruby-1.8/lib/ruby/vendor_ruby/1.8/rubygems.rb:158:in `activate'
        from C:/PROGRA~1/ruby-1.8/lib/ruby/vendor_ruby/1.8/rubygems.rb:157:in `each'
        from C:/PROGRA~1/ruby-1.8/lib/ruby/vendor_ruby/1.8/rubygems.rb:157:in `activate'
        from C:/PROGRA~1/ruby-1.8/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:31:in `require'
        from (irb):3

raccのgemがインストールされていないっぽいのでraccをインストールすることにした

raccのインストール

raccのインストールでもエラー発生
どうも extconf.rbの中でプラットフォームを判断するために使用している`uname -p`というコマンドがWindowsに無いということで、例外が発生しているみたい。

raccのgemをローカルで修正/インストール

まず、以下のコマンドで racc のgemを取得する

gem fetch racc -r

次に、取得したgemを展開

gem unpack racc

カレントにracc-1.4.6というディレクトリが作成され、その中にraccのソースが展開される。
次に、racc-1.4.6 のディレクトリに降りて、以下のコマンドで gemspec を取得する。

gem spec racc -r > racc.gemspec

gemspecはextconf.rbを修正したのち、gemを再度生成するために必要。

extconf.rbの修正

ext/racc/cparse/extconf.rb をエディタで開き以下のように修正

# $Id$

#ENV["ARCHFLAGS"] = "-arch #{`uname -p` =~ /powerpc/ ? 'ppc' : 'i386'}"
ENV["ARCHFLAGS"] = "-arch i386}"

require 'mkmf'

create_makefile 'racc/cparse/cparse'

とりあえず、自分は'i386'な環境にインストールするとわかっているので、上記のように修正した。
ほんとは、例外とかひろって適切なプラットフォームを選択してくれる関数にしてあげたほうがいいんだろうなー。みんなどうやってるんだろ?

自家修正版gemの作成

extconf.rbを修正したら、それを元に修正版のgemファイルを生成する。

gem build racc.gemspec

すると、racc-1.4.6.gem が生成される。

ローカルのgemからインストール
gem install racc -l

でローカルのgemファイルからインストールされる。

そのたnokogiriが依存するgemのインストール

raccがインストールできればオKと思ってたがどうも他にも足りないgemがあるらしい。以下のコマンドで依存するgemを調べる。

gem dependency nokogiri

Gem nokogiri-1.3.2-x86-mswin32
  racc (>= 0, development)
  rexical (>= 0, development)
  rake-compiler (>= 0, development)
  hoe (>= 2.2.0, development)

ほんとはこのあと、hoeのインストールでまた問題があったんだけど、
...メモが途中で切れてしまった。orz あとで追記する。