Windows環境用にrcovをビルドしなおす手順

[Windows][Jenkins][Ruby][備忘録]Windows環境用にrcovをビルドしなおす手順

あらすじ

Jenkinsでビルドしていくとともにカバレッジの調査もしたい。rcovというツールでカバレッジを出す事ができるらしい。

参考サイト

先に結論

Windows環境ではWindows用に自力でビルドしなければならない!

#if _MSC_VER != 1200
#error MSC version unmatch: _MSC_VER: 1200 is expected.
#endif
  • env.hのFRAMEを以下のように編集
extern struct FRAME {

extern __declspec(dllimport) struct FRAME {
  • gem install!!

以下は四苦八苦した記録の残骸。

手順(本当に順番をメモっているのでいらない操作が多い)

rcovインストール

BundlerでGemを管理するのでGemfileにrcovを追加。

gem 'rcov'

追加後、インストール……

$ bundle install

するとエラーが。

C:/rubies/Ruby/bin/ruby.exe extconf.rb
creating Makefile

nmake
'nmake' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。


Gem files will remain installed in C:/project/excel_for_ruby/vendor/bundle/ruby/1.8/gemsResults logged to C:/project/excel_for_ruby/vendor/bundle/ruby/1.8/gems/rcov-1.0.0/ext/rAn error occured while installing rcov (1.0.0), and Bundler cannot continue.
Make sure that `gem install rcov -v '1.0.0'` succeeds before bundling.

bundlingする前にgem install rcov -v ‘1.0.0’してくれと? Bundler管理下にはおけないのだろうか。

じゃあGemfileから記述を消して、ターミナルからgem installするか。

$ gem install rcov -v '1.0.0'

nmake
'nmake' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

結局nmakeがないといわれているので、まずnmakeを落とすか。

nmakeインストール

http://johnbokma.com/perl/make-for-windows.html:title のページにyou have to download NMake 1.5 from the Microsoft Knowledge Base, article 132084 page.と記載されているのでリンクをたどりnmakeをDLし、パスが通っているフォルダへ突っ込む。(デフォルトだとnmake15.exeのようにバージョンがファイル名にくっついているっぽいのでnmake.exeにリネームしておく)

再度。

$ gem install rcov -v '1.0.0'
Building native extensions.  This could take a while...
ERROR:  Error installing rcov:
        ERROR: Failed to build gem native extension.

C:/rubies/Ruby/bin/ruby.exe extconf.rb
creating Makefile

nmake

Microsoft (R) Program Maintenance Utility   Version 1.50
Copyright (c) Microsoft Corp 1988-94. All rights reserved.

        cl -nologo -I. -IC:/rubies/Ruby/lib/ruby/1.8/i386-mswin32 -IC:/rubies/Ru
by/lib/ruby/1.8/i386-mswin32 -I1.8/ -MD -Zi  -O2b2xg- -G6  -c -Tc1.8//callsite.c

'cl' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
NMAKE : fatal error U1077: 'C:\WINDOWS\system32\cmd.exe' : return code '0x1'
Stop.


Gem files will remain installed in C:/rubies/Ruby/lib/ruby/gems/1.8/gems/rcov-1.
0.0 for inspection.
Results logged to C:/rubies/Ruby/lib/ruby/gems/1.8/gems/rcov-1.0.0/ext/rcovrt/ge
m_make.out

まだ駄目? clとはC Compilerの事らしい。手に入れるには[http://www.microsoft.com/japan/msdn/vstudio/express/:title]からVisual C++ 2010 Express Editionをインストールするくらいしか方法がないみたい。

……インストール中…….3時間くらいかかった

で、インストールフォルダにcl.exeが作成されるので、これを実行!

$ cd C:\Program Files\Microsoft Visual Studio 10.0\VC\bin
$ cl

mspdb100.dllが見つからなかったため、このアプリケーションを開始できませんでした。

なん……だと……やはりコマンドラインから実行するのは無理?

とりあえずmspdb100.dllを探してみる…と、C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDEにあった。これをclと同じフォルダに持ってくると……。

$ cl
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

使い方: cl [ オプション... ] ファイル名... [ /link リンク オプション... ]

きたー! じゃあこのcl.exeとmspdb100.dllをパスの通ってる場所にコピーして……再度gem!

$ gem install rcov -v '1.0.0'
Building native extensions.  This could take a while...
ERROR:  Error installing rcov:
        ERROR: Failed to build gem native extension.

C:/rubies/Ruby/bin/ruby.exe extconf.rb
creating Makefile

nmake

Microsoft (R) Program Maintenance Utility   Version 1.50
Copyright (c) Microsoft Corp 1988-94. All rights reserved.

        cl -nologo -I. -IC:/rubies/Ruby/lib/ruby/1.8/i386-mswin32 -IC:/rubies/Ruby/lib/ruby/1.8/i386-mswin32 -I1.8/ -MD -Zi  -O2b2xg- -G6c -Tc1.8//callsite.c
fatal error C1510: Cannot load language resource clui.dll.
NMAKE : fatal error U1077: 'C:\WINDOWS\system32\cmd.exe' : return code '0x4'
Stop.


Gem files will remain installed in C:/rubies/Ruby/lib/ruby/gems/1.8/gems/rcov-1.0.0 for inspection.
Results logged to C:/rubies/Ruby/lib/ruby/gems/1.8/gems/rcov-1.0.0/ext/rcovrt/gem_make.ou

エラった! っけど一歩進んだ?clui.dllがないと。うーん。

ここで全てのプログラムにMicrosoft Visual Studio 2010 Express -> Visual Studio コマンド プロンプト (2010)というメニューが増えている事に気づく。きちんとVisual Studio用の設定がなされていなかったから失敗したんだ多分! 再度挑戦。

C:\rubies\Ruby\lib\ruby\gems\1.8\cache>gem install --local rcov-1.0.0.gem
Building native extensions.  This could take a while...
ERROR:  Error installing rcov-1.0.0.gem:
        ERROR: Failed to build gem native extension.

C:/rubies/Ruby/bin/ruby.exe extconf.rb
creating Makefile

nmake

Microsoft (R) Program Maintenance Utility   Version 1.50
Copyright (c) Microsoft Corp 1988-94. All rights reserved.

        cl -nologo -I. -IC:/rubies/Ruby/lib/ruby/1.8/i386-mswin32 -IC:/rubies/Ruby/lib/ruby/1.8/i386-mswin32 -I1.8/ -MD -Zi  -O2b2xg- -G6  -c -Tc1.8//callsite.c

cl : コマンド ライン warning D9035 : オプション 'Og-' の使用は現在推奨されていません。今後のバージョンからは削除されます。
cl : コマンド ライン warning D9002 : 不明なオプション '-G6' を無視します
callsite.c
c:\rubies\ruby\lib\ruby\1.8\i386-mswin32\config.h(2) : fatal error C1189: #error :  MSC version unmatch: _MSC_VER: 1200 is expected.
NMAKE : fatal error U1077: 'C:\WINDOWS\system32\cmd.exe' : return code '0x2'
Stop.


Gem files will remain installed in C:/rubies/Ruby/lib/ruby/gems/1.8/gems/rcov-1.0.0 for inspection.
Results logged to C:/rubies/Ruby/lib/ruby/gems/1.8/gems/rcov-1.0.0/ext/rcovrt/gem_make.out

お! ちょっと進んだ。MSC_VERがアンマッチになっているようなので、これをなおす。c:\rubies\ruby\lib\ruby\1.8\i386-mswin32\のconfig.hを開き編集。

#if _MSC_VER != 1200
#error MSC version unmatch: _MSC_VER: 1200 is expected.
#endif

これを一時的に退避させる。んで、再度。

        cl -nologo -LD -Fercovrt.so callsite.obj rcovrt.obj msvcrt-ruby18.lib  oldnames.lib user32.lib advapi32.lib shell32.lib ws2_32.lib   -link -incremental:no -debug -opt:ref -opt:icf -dll -libpath:"." -libpath:"C:/rubies/Ruby/lib"  -implib:rcovrt-i386-mswin32.lib -pdb:rcovrt-i386-mswin32.pdb -def:rcovrt-i386-mswin32.def
   ライブラリ rcovrt-i386-mswin32.lib とオブジェクト rcovrt-i386-mswin32.exp を作成中
callsite.obj : error LNK2001: 外部シンボル "_ruby_frame" は未解決です。
rcovrt.obj : error LNK2019: 未解決の外部シンボル _ruby_frame が関数 _coverage_in
crease_counter_uncached で参照されました。
rcovrt.so : fatal error LNK1120: 外部参照 1 が未解決です。
NMAKE : fatal error U1077: 'C:\WINDOWS\system32\cmd.exe' : return code '0x2'
Stop.


Gem files will remain installed in C:/rubies/Ruby/lib/ruby/gems/1.8/gems/rcov-1.0.0 for inspection.
Results logged to C:/rubies/Ruby/lib/ruby/gems/1.8/gems/rcov-1.0.0/ext/rcovrt/gem_make.out

おおおなんか見つからないって出てきた……。

[http://www.freia.jp/taka/blog/762/:title]という事らしいので、env.hを編集

extern struct FRAME {

extern __declspec(dllimport) struct FRAME {

に。いざ!

C:\rubies\Ruby\lib\ruby\gems\1.8\cache>gem install --local rcov-1.0.0.gem
Building native extensions.  This could take a while...
Successfully installed rcov-1.0.0
1 gem installed
Installing ri documentation for rcov-1.0.0...
Installing RDoc documentation for rcov-1.0.0...

きたーーー!

が、なんかカバレッジの表示のされかたがおかしい? メソッドの一行目しかグリーンにならないから網羅率が超低くなる。。オプションとかなのかなー。これは早々にRuby1.9でSimplecov使えという事なのだろうか。

関連記事(この記事の初版より古い記事はリンクがグレーで表示されます)

  1. 2012/03/27 [Windows] [Jenkins] [Ruby] simplecovとsimplecov-rcovを使ってJenkinsでカバレッジを確認
  2. 2012/10/01 [Ruby] [Bundle] [Windows] bundle execを省略したいのでバッチを作った(Windows版)
  3. 2012/07/17 [Ruby] [Windows] [Redmine] Windows版Redmineをサービスに登録してブート時に起動させる(宿題あり)
  4. 2012/05/28 [Ruby] [イベント] [Jenkins] [Redmine] Jenkins,Redmine使いこなし勉強会に参加しました と、ちょっとプラグイン作ってみた #jen_red
  5. 2012/04/20 [Ruby] [Windows] ZenTestで実行したRSpecの結果をGrowlで通知してくれるようにした
  6. 2012/02/29 [Ruby] [Rails] [Windows] Rails3レシピブックを読みながらRailsを学ぶ モデル、コントローラ、ビュー、Railsの規約など
  7. 2012/02/28 [Ruby] [Windows] [Rails] Rails3レシピブックを読みながらRailsを学ぶ
  8. 2012/02/20 [Ruby] [Windows] Rubyの実行ファイルを作成するExerbとOcraを試してみた
  9. 2011/09/30 [Java] [Windows] [Ruby] .msgファイルをパースして中から添付ファイルを抜き出す
  10. 2011/09/07 [Ruby] [Redmine] [SQLite3] [Windows] Redmineのプラグイン作成のための備忘録と、時々SQLite3
  11. 2011/08/23 [Ruby] [Windows] MicrosoftOutlookで消せなくなったフォルダをwin32ole経由でRubyから消してみる
  12. 2011/07/09 [Windows] [Ruby] MicrosoftOutlookのメールをRuby(win32ole)で操作する! その2
  13. 2011/05/17 [Ruby] [Windows] MicrosoftOutlookのメールをRubyで操作する!
  14. 2011/05/01 [Ruby] [Redmine] [Windows] Redmineインストール備忘録(Windows)
  15. 2012/12/25 [Ruby] メモ化を知った