x64-mswin64版Ruby 2.0.0-preview1をVisual Studio 2012 for Desktopでビルドした
前回 x64-mswin64版Ruby 1.9.3をビルドした - 単なる日記@はてな に懲りず、今回もx64-mswin64版Rubyをビルドしましたのでメモします。記事の内容も前回に沿った形にします。今回はわりと楽でした。
環境はこんな感じ:
- Windows 7 SP1
- Visual Studio 2012 Express for Desktop
使用するソフトウェアはこんな感じ:
- libiconv-1.11 (artonさんのASRのページから入手)
- libxml2-2.9.0
- libxslt-1.1.26
- openssl-1.0.1c
- readline-4.3-2 (artonさんのASRのページから入手)
- yaml-0.1.4 (libyaml)
- zlib-1.2.5 (artonさんのASRのページから入手)
目標:
資料:
- artonさんのRuby環境構築講座Windows編(Ruby環境構築講座 Windows編 - 達人出版会で買えるよ)
- その他ググッた結果。
Visual Studio 2012 Express for Desktop
前回使用したVisual Studio 2010 Expressは64bitの開発環境を用意するのが大変でしたが、今回のVisual Studio 2012 Express for Desktopは噂によると最初から64bitの開発環境が用意されているらしく(かつWindows SDKなどを後から入れる必要もないらしい)、実際何もせずに済んだのでたいへん助かりました。
関連ライブラリのインストール
libiconv、readline、zlibはRuby環境構築講座Windows編の記述通りに進めました。
libyamlはプラットフォームにx64を加えてからビルドしました。SDKは勝手に最新のものを使うようになっていましたのでそのまま。
OpenSSLはVC-WIN64Aでビルドしましたが、nasmでのアセンブル中にエラーが出まくるため、Ruby環境構築講座Windows編の記述通りのms\do_nasm.batではなくms\do_win64a.batを使いました。
libxml2とlibxsltはのちほどNokogiriをインストールするために必要なもの。win32と同じビルド方法が使えましたが、libxml2はヘッダファイルのインストール先が微妙に変わったため、libxsltのビルド時にヘッダファイルの位置を指定しました。
Rubyのインストール
前もってよしだむさんがRedmineへ報告されたバグ報告からパッチをもらって当てます。よしだむさんに感謝。
- Bug #7332: mswin64でminiruby.exeがSEGV - Ruby trunk - Ruby Issue Tracking System
- Backport #7333: VS2012でリンクエラー - Backport193 - Ruby Issue Tracking System
前回同様、都合によりRuby環境構築講座Windows編での方法と異なりインストール先のbinをPATHに加えずに進めたため、configureに--with-opt-dirを指定して関連ライブラリの検出を行えるようにしました。ちなみに--prefixで指定するパスはバックスラッシュ(半角円マーク)区切りですが、--with-opt-dirで指定するパスはスラッシュ区切りにしないと上手くいかないことが過去にありましたので、前回に引き続き今回もそうしました。
もちろん --platform=x64-mswin64 を忘れずに。
ちなみに前回はコマンドプロンプトで手打ちしててよく間違えてましたけど、今回はビルド用バッチファイルを用意しました。
build.bat
@ECHO OFF CALL %~dp0build-env.bat SET LOGFILE=%~dp0build.log COPY NUL %LOGFILE% ECHO libiconv ECHO ***** libiconv ***** >>%LOGFILE% PUSHD libiconv-1.11.1 %NMAKE% -f makefile.msvc NO_NLS=1 DLL=1 MFLAGS=-MD >>%LOGFILE% 2>&1 %NMAKE% PREFIX=%RUBY_PREFIX% -f makefile.msvc NO_NLS=1 DLL=1 MFLAGS=-MD install 2>&1 >>%LOGFILE% 2>&1 POPD ECHO readline ECHO ***** readline ***** >>%LOGFILE% PUSHD readline-4.3-2\win32 %NMAKE% >>%LOGFILE% 2>&1 %NMAKE% prefix=%RUBY_PREFIX% install >>%LOGFILE% 2>&1 POPD ECHO zlib ECHO ***** zlib ***** >>%LOGFILE% PUSHD zlib-1.2.5 %NMAKE% -f win32\Makefile.msc >>%LOGFILE% 2>&1 COPY *.dll %RUBY_PREFIX%\bin >>%LOGFILE% 2>&1 COPY *.lib %RUBY_PREFIX%\lib >>%LOGFILE% 2>&1 COPY zlib.h %RUBY_PREFIX%\include 2>&1 >>%LOGFILE% 2>&1 COPY zconf.h %RUBY_PREFIX%\include 2>&1 >>%LOGFILE% 2>&1 POPD ECHO openssl ECHO ***** openssl ***** >>%LOGFILE% PUSHD openssl-1.0.1c perl Configure VC-WIN64A --prefix=%RUBY_PREFIX% >>%LOGFILE% 2>&1 CALL ms\do_win64a.bat >>%LOGFILE% 2>&1 %NMAKE% -f ms\ntdll.mak >>%LOGFILE% 2>&1 %NMAKE% -f ms\ntdll.mak install >>%LOGFILE% 2>&1 POPD ECHO libyaml ECHO ***** libyaml ***** >>%LOGFILE% PUSHD yaml-0.1.4 COPY win32\vs2008\x64\Release\yaml.dll %RUBY_PREFIX%\bin >>%LOGFILE% 2>&1 COPY win32\vs2008\x64\Release\yaml.lib %RUBY_PREFIX%\lib >>%LOGFILE% 2>&1 COPY include\yaml.h %RUBY_PREFIX%\include >>%LOGFILE% 2>&1 POPD ECHO libxml2 ECHO ***** libxml2 **** >>%LOGFILE% PUSHD libxml2-2.9.0\win32 cscript configure.js prefix=%RUBY_PREFIX% >>%LOGFILE% 2>&1 %NMAKE% -f Makefile.msvc >>%LOGFILE% 2>&1 %NMAKE% -f Makefile.msvc install >>%LOGFILE% 2>&1 POPD ECHO libxslt ECHO ***** libxslt **** >>%LOGFILE% PUSHD libxslt-1.1.27\win32 cscript configure.js prefix=%RUBY_PREFIX% include=%RUBY_PREFIX%\include\libxml2 >>%LOGFILE% 2>&1 %NMAKE% >>%LOGFILE% 2>&1 %NMAKE% install >>%LOGFILE% 2>&1 POPD ECHO ruby ECHO ***** ruby ***** >>%LOGFILE% PUSHD %RUBY_VER% PUSHD . CALL win32\configure.bat --prefix=%RUBY_PREFIX% --target=x64-mswin64 --disable-win95 --with-out-ext=tk --with-opt-dir=%RUBY_PREFIX_SLASH% >>%LOGFILE% 2>&1 POPD %NMAKE% >>%LOGFILE% 2>&1 %NMAKE% install >>%LOGFILE% 2>&1 POPD ECHO bat ECHO ***** bat ***** >>%LOGFILE% COPY ruby_console.bat %RUBY_PREFIX% >>%LOGFILE% 2>&1 PAUSE
build-env.bat
CALL "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" x86_amd64 REM SET RUBY_VER=ruby-1.9.3-p327 SET RUBY_VER=ruby-2.0.0-preview1 SET RUBY_PREFIX=D:\private\tools\%RUBY_VER% SET RUBY_PREFIX_SLASH=D:/private/tools/%RUBY_VER% SET NMAKE=nmake /nologo PATH %PATH%;%RUBY_PREFIX%\bin
ruby console的なものを用意する
前回はバッチファイルを2つ用意しましたが、よくよく考えるとバッチファイルは一つだけでも大丈夫でした。
@ECHO OFF SET PATH=%~dp0bin;%PATH% %ComSpec% /k "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" x86_amd64
Nokogiriのインストール
gem install nokogiri
でスムーズにインストールできました。楽ちんだわあ。