読者です 読者をやめる 読者になる 読者になる

Windows で ruby 2.1.1 をビルドする

事情あってクリーンインストールしたので Windows 8.1ruby を入れ直そうと思ったが、 RubyInstaller に 2.1 が来ないのと、 Windows のことだしいつ RubyInstaller の更新止まってしまうか分からない。最低限のことはサードパーティに頼らず自分で出来た方が良いよなと思いやってみたら(ある程度は)できた。

Visual Studio 2013 Express for Desktop

入れる。

開発者コマンド プロンプト for VS2013

を立ち上げる。スタートメニューの "Visual Studio ツール" ってとこに入ってた。

実はこの "開発者コマンド プロンプト for VS2013" って

%comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\VsDevCmd.bat""

で、一緒に入ってる "VS2013 x86 Native Tools コマンド プロンプト" が

%comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"" x86

"VS2013 x64 Cross Tools コマンド プロンプト" が

%comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"" x86_amd64

なんですよね。良く「 nmake する前に vcvarsall.bat (またはその先で実行されている vsvars32.bat )実行しとけ」って言ってるの見るあれです。さっそく ConEmu の task に追加しておきました。

ソースダウンロードして展開

インストール先と同じドライブにしておいた方が良い気がする。パスに空白は含めない方が良い気がする。(根拠無し)

ビルド

C:\temp\ruby-2.1.1 ここにソースがあって、 C:\Ruby211 ここにインストール。

C:\temp\ruby-2.1.1>win32\configure --prefix=/Ruby211
C:\temp\ruby-2.1.1>nmake
C:\temp\ruby-2.1.1>nmake test
C:\temp\ruby-2.1.1>nmake install
C:\temp\ruby-2.1.1>cd \Ruby211
C:\Ruby211\bin>ruby -v
ruby 2.1.1p76 (2014-02-24 revision 45161) [i386-mswin32_120]

これで終わりです。 mswin32 かっけー!

終わりなわけあるか!

ext の中のものけっこう失敗してる。まず例えば zlib が無いので gem が使えない。

zlib

コンパイルログ無いかなあと探したら個別のは個別のディレクトリに入ってた。

C:\temp\ruby-2.1.1\ext\zlib\mkmf.log

見てみると z.lib と libz.lib と zlib1.lib が無いって言ってる。そりゃあございませんよ、持ってません。 zlib Home Site 行ったら compiled DLL ってのを配ってくれていたのでありがたくダウンロードして展開。

さらにご丁寧に USAGE.txt ってのが入ってて開くと、アーカイブに入ってた include ディレクトリの中身を %INCLUDE% のディレクトリに、 lib ディレクトリの中身を %LIB% のディレクトリに入れよと言うことですので、このアーカイブを展開したところをそれぞれ追加した。もちろん上の開発者コマンドプロンプトの状態で…

C:\temp\zlib128-dll>set include=%include%C:\temp\zlib128-dll\include
C:\temp\zlib128-dll>set lib=%lib%C:\temp\zlib128-dll\lib

として、ビルドのやり直し。

C:\temp\ruby-2.1.1>nmake clean
C:\temp\ruby-2.1.1>nmake

流れていくログを見てると zlib は行けた様子なので nmake install し、 gem update したら「 zlib1.dll 無いよ!」と言うエラー。わはは。当たり前だ…。アーカイブの中にちゃんと入ってたのにそのまんまにしてた。

C:\Windows\System32 に放り込んだら無反応だったのであっと思って C:\Windows\SysWOW64 に移動したら gem update 成功…。と思いきや、次は OpenSSL 無いよーってことです。明日やろう。

OpenSSL

OpenSSL 公式からリンクがあった Shining Light Productions - Win32 OpenSSL から、 "Win32 OpenSSL v1.0.1f" をいただいてインストール。 light の方はライブラリファイル付いてないです。

C:\temp\ruby-2.1.1>set include=%include%C:\OpenSSL-Win32\include
C:\temp\ruby-2.1.1>set lib=%lib%C:\OpenSSL-Win32\lib

同様にこうして、 nmake 。 DLL はインストーラがシステムディレクトリに入れてくれたはずだけどどこにあるんだろうか…。とりあえず gem update 出来るようになった。ここまで自分で出来ればある程度は大丈夫だ嬉しい。

ちなみにこれである程度の gem は入るけど当然そのままでは入らないものもたくさんあるのでプロダクションには RubyInstaller か MinGW 環境をお使い下さい。