Date: 2011-09-06
Tags: programming, windows, ruby

Rubyのrcov-0.9.8 for Windows のビルド

WindowsのRubyで rcov を使用するには一般的には http://rubyforge.org/frs/?group_id=1750&release_id=16551 にあるようなビルド済みバイナリを使用しますが、rcov-0.8.1.2以降はビルド済みのものが提供されていないので、自分でビルドする必要があります。Windowsではコンパイル環境があってもはまったので、バインディングビルド手順をメモしておきます(完成物はこちら: rcov-0.9.10-x86-mswin32-60.gem)。

ビルド手順

この記事で対象にしているバージョン

  • WindowsXP, 7 (95以降共通と思われる)

  • ActiveRuby-1.8.7-p300

  • rcov-0.9.10

  • VisualStudio 6

環境の用意

Windowsを用意します。そこにRuby-1.8.7(ActiveRuby), VisualStudio6 をインストールしておきます。

gemからコンパイル済みのgemパッケージを作るRubyGemsプラグイン gem-compile をインストールします:

C:\> gem install gem-compile

Rubyのext.hを書き換え

環境の問題かもしれませんが、VisualStudio6でrcovをビルドしようとすると、以下のようなエラーが発生します:

ライブラリ rcovrt-i386-mswin32.lib とオブジェクト rcovrt-i386-mswin32.exp を作成中
callsite.obj : error LNK2001: 外部シンボル "_ruby_frame" は未解決です
rcovrt.obj : error LNK2001: 外部シンボル "_ruby_frame" は未解決です
rcovrt.so : fatal error LNK1120: 外部参照 1 が未解決です。
NMAKE : fatal error U1077: 'cl' : リターンコード '0x2'
Stop.

そこで調べてみると RUBYFORGEのフォーラム で情報が見つかったので、Ruby本体の C:\ruby-1.8\lib\ruby\1.8\i386-mswin32\env.h を以下のように書き換えます:

- extern struct FRAME {
+ extern __declspec(dllimport) struct FRAME {

rcov-0.9.10.gem から rcov-0.9.10-x86-mswin32-60.gem を作成

http://rubygems.org/gems/rcov から rcov-0.9.10.gem を取得してコマンドラインで以下のように変換します:

C:\>gem compile rcov-0.9.10.gem
WARNING:  no rubyforge_project specified
  Successfully built RubyGem
  Name: rcov
  Version: 0.9.10
  File: rcov-0.9.10-x86-mswin32-60.gem

これで rcov-0.9.10-x86-mswin32-60.gem が作成出来ました。

完成物と変更を加えたファイルを公開しておきます。ライセンスなどは元のrcovのものに従います。