win32/clipboard のインストールにてこずるの巻

ああもう、10分くらいで終わる見込みでやりかけた仕事が3時間もかかっちゃったじゃん!

(1) gemから直接インストール

以前はこれでOKだったのだけど・・・

gem install win32-clipboard

----
Building native extensions.  This could take a while...
ERROR:  Error installing win32-clipboard:
       ERROR: Failed to build gem native extension.

C:/Ruby/bin/ruby.exe extconf.rb install -r win32-clipboard
can't find header files for ruby.


Gem files will remain installed in
C:/Ruby/lib/ruby/gems/1.8/gems/win32-api-1.0.5 for inspection.
Results logged to C:/Ruby/lib/ruby/gems/1.8/gems/win32-api-1.0.5
/ext/gem_make.out
----

ビルド環境がないので、失敗する。なんでwin32前提なくせにバイナリ配布してないんだ・・・まあいいや、コンパイル済みのバイナリgemを取ってくりゃいいんだろ。

(2) sourceforgeから、win32-clipboardをインストール

http://rubyforge.org/frs/?group_id=85
http://rubyforge.org/frs/download.php/23224/win32-clipboard-0.4.3.gem

gem install win32-clipboard-0.4.3.gem
----
Successfully installed win32-api-1.0.5-unknown
Successfully installed windows-api-0.2.0
Successfully installed windows-pr-0.7.3
Successfully installed win32-clipboard-0.4.3
4 gems installed
Installing ri documentation for win32-api-1.0.5-unknown...
Installing ri documentation for windows-api-0.2.0...
Installing ri documentation for windows-pr-0.7.3...
Installing ri documentation for win32-clipboard-0.4.3...
Installing RDoc documentation for win32-api-1.0.5-unknown...
Installing RDoc documentation for windows-api-0.2.0...
Installing RDoc documentation for windows-pr-0.7.3...
Installing RDoc documentation for win32-clipboard-0.4.3...
----

ところが、依存関係から自動インストールされるwin32-apiがうまく読み込めない。

irb -r rubygems -r win32/clipboard
----
C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`gem_original_require': no such file to load -- win32/api (LoadError)
       from
C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
       from C:/Ruby/lib/ruby/gems/1.8/gems/windows-api-0.2.0
/lib/windows/api.rb:1
       from
C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`gem_original_require'
       from
C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
       from C:/Ruby/lib/ruby/gems/1.8/gems/windows-pr-0.7.3
/lib/windows/clipboard.rb:1
       from
C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`gem_original_require'
       from
C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
       from C:/Ruby/lib/ruby/gems/1.8/gems/win32-clipboard-0.4.3
/lib/win32/clipboard.rb:1
       from
C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:32:in
`gem_original_require'
       from
C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:32:in `require'
       from C:/Ruby/lib/ruby/1.8/irb/init.rb:252:in `load_modules'
       from C:/Ruby/lib/ruby/1.8/irb/init.rb:250:in `each'
       from C:/Ruby/lib/ruby/1.8/irb/init.rb:250:in `load_modules'
       from C:/Ruby/lib/ruby/1.8/irb/init.rb:21:in `setup'
       from C:/Ruby/lib/ruby/1.8/irb.rb:54:in `start'
       from C:/Ruby/bin/irb.bat:21
----

(3) win32-apiの手動インストール

何なんだ・・・調べてみるとgemがwin32/api.soを見つけられないらしい。フォルダ名が-unknownで終わってるのが気になるがよくわからないので、gems\win32-api-1.0.5-unknown\lib にある win32/api.so を site-ruby/1.8/i386-msvcrt にコピーする。

irb -r rubygems -r win32/clipboard
----
C:/Ruby/lib/ruby/gems/1.8/gems/win32-clipboard-0.4.3
/lib/win32/clipboard.rb:25:NameError: uninitialized constant
Win32::Clipboard::Win32API
----

お、いいところまでいった。あと、Win32APIが必要らしい。

irb -r rubygems -r Win32API -r win32/clipboard
----
irb(main):001:0>
----

やっと使えるようになった!

(4) 試行錯誤中にわかったこと

依存先のgemが壊れていた場合、依存もとのgemspecファイルを編集して、依存指定を外すとよい。

そもそもそういうgemを配布しないで欲しいわけだが・・・。